In this section I give a brief example (of anal1, anal2, anal3 routines) of how kwfit is used, from initialization to fitting, for building D0 --> K pi combinations. All calls to kwfit routines are hyperlinked to the documentation for those routines.
subroutine anal1 * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Called at beginning of job * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> c Initialization of kwfit call kset_init return end
subroutine anal2 * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Called once per run * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implicit none #include "seq/clinc/anclev.inc" integer I logical ltesla double precision beam_pos(3), beam_sig(3) double precision bfield, bdir(3) real bscale data bdir/0., 0., 1./ * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> c Set beam position & width c You need to do this in case you make vertices weighted by the c beam spot c All quantities must be double precision do I=1,3 beam_pos(I) = dble(bmpos(I,1)) !dble function actually not needed beam_sig(I) = dble(bmpos(I,2)) enddo call kset_beam_position(beam_pos, beam_sig) c Set B field (including bfudge correction) and direction c Remember that bfie is in kGauss & set ltesla accordingly call bfudge(runn, bscale) bfield = dble(bfie * bscale) !dble function actually not needed ltesla = .FALSE. call kset_bfield(bfield, bdir, ltesla) return end
subroutine anal3 * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Called once per event * >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implicit none #include "seq/clinc/anclev.inc" c Externals double precision kget_track_mass external kget_track_mass c Local variables integer I, type, error, update, list_d0(2), option_d0(2) integer ipi, iK, npi, nK, list_pi(100), list_K(100) logical lcovar, ldedx, lvtx double precision w_K(10), w_pi(10), w_d0(10), chisq double precision chisq_d0, chisq_mass, mass_d0 double precision vtx(3), Vvtx(3,3) c Clear the kwfit track list every event call kset_clear c Get CD tracks call getcd c Make list of pions and kaons from CD tracks. We want c the covariance matrix built but no dE/dx correction is c necessary because the tracks have already been Kalman fit. c The list of kwfit tracks is returned in list_pi and list_K lcovar = .TRUE. ldedx = .FALSE. type = 3 call kfil_track_cd_all(type, ldedx, lcovar, npi, list_pi, error) type = 4 call kfil_track_cd_all(typr, lcovar, lcovar, nK, list_K, error) c Now loop over K, pi lists and build D0's do iK=1,nK call kget_track_param(list_K(iK), w_K) do ipi=1,npi call kget_track_param(list_pi(ipi), w_pi) mass_d0 = kutl_mass2(w_k, w_pi) c Find the vertex of the K-pi pair. Do not update the tracks at this time. update = 0 list_d0(1) = list_K(iK) list_d0(2) = list_pi(ipi) lvtx = .FALSE. call kvtx_unknown(2, list_d0, update, lvtx, vtx, Vvtx, chisq, error) c If the chisq is OK, update the input tracks. The update will cause the c track parameters to be adjusted in such a way as to make them pass through c the new vertex point (However, the (x, y, z) location of the tracks c will not necessarily be at the vertex point. To make that happen, you c must call ktrk_move_point_bend to move the tracks and covariance matrices c to the new vertex point). The covariance matrices of the tracks are not c changed. if(chisq .lt. 10.) call kfit_update_tracks(1) c Alternatively, you can build a D0 particle with a vertex constraint c (to a previously unknown position). The chisq_d0 is from the vertex c constraint. The D0 track parameters and covariance matrix are evaluated c at the vertex point. option_d0(1) = 2 option_d0(2) = 2 update = 0 lvtx = .FALSE. c First create a new track entry then fill it with the virtual particle call kfil_track_create(kd0) call kvir_vertex_unknown(2, list_d0, option_d0, update, lvtx, vtx, * chisq_d0, kd0, error) c Check the Kpi mass. If OK, apply a mass constraint forcing the D0 to c have the correct mass. The idea is to improve the D0 track parameters c so that the D0 can be used in subsequent fits. mass_d0 = kget_track_mass(kd0) if(abs(mass_d0 - 1.8654) .lt. 0.010) then update = 2 call kfit_mass(kd0, update, 1.865, chisq_mass, error) endif enddo enddo return end