18 #include <JANA/JApplication.h>
19 #include <JANA/JEventLoop.h>
47 pthread_mutex_init(&mutex, NULL);
48 pthread_mutex_init(&rt_mutex, NULL);
65 TDirectory *
dir = (TDirectory*)gROOT->FindObject(
"TRACKING");
66 if(!dir)dir =
new TDirectoryFile(
"TRACKING",
"TRACKING");
71 trkeff =
new TTree(
"trkeff",
"Tracking Efficiency");
72 trkeff->Branch(
"F",
"track",&trk_ptr);
111 vector<const DCDCTrackHit*> cdctrackhits;
112 vector<const DFDCPseudo*> fdcpseudos;
113 vector<const DTrackCandidate*> trackcandidates;
114 vector<const DTrackWireBased*> trackWBs;
115 vector<const DChargedTrack*> trackTBs;
116 vector<const DTrackTimeBased*> throwns;
117 vector<const DTrackTimeBased*> locAssociatedTrackTimeBasedVector;
118 vector<const DMCTrajectoryPoint*> mctraj;
120 loop->Get(cdctrackhits);
121 loop->Get(fdcpseudos);
122 loop->Get(trackcandidates);
125 loop->Get(throwns,
"THROWN");
136 for(
unsigned int i=0; i<trackcandidates.size(); i++)FillTrackInfo(trackcandidates[i], ti_can);
137 for(
unsigned int i=0; i<trackWBs.size(); i++)FillTrackInfo(trackWBs[i], ti_trkwb);
138 for(
unsigned int i=0; i<trackTBs.size(); i++){
139 auto locTrackTimeBased = trackTBs[i]->dChargedTrackHypotheses[0]->Get_TrackTimeBased();
140 FillTrackInfo(locTrackTimeBased, ti_trktb);
147 vector<TVector3> last_p(
MAX_TRACKS, TVector3(0.0, 0.0, 0.0));
149 for(
unsigned int i=0; i<mctraj.size(); i++){
150 int track = mctraj[i]->track;
151 int mech = mctraj[i]->mech;
152 double R =
sqrt(pow((
double)mctraj[i]->
x, 2.0) + pow((
double)mctraj[i]->
y, 2.0));
155 TVector3 p(mctraj[i]->px, mctraj[i]->
py, mctraj[i]->pz);
156 if(mech>mech_max[track]){
157 mech_max[track] = mech;
158 dtheta_mech[track] = p.Angle(last_p[track]);
159 dp_mech[track] = (p - last_p[track]).Mag();
165 japp->RootWriteLock();
168 for(
unsigned int i=0; i<throwns.size(); i++){
171 trk.pthrown.SetXYZ(thrown->
momentum().x(),
176 GetNhits(thrown, trk.Ncdc, trk.Nfdc, trk.track);
177 if(trk.track<=0 || trk.track>=
MAX_TRACKS)
continue;
180 trk.can = ti_can[trk.track];
181 trk.trkwb = ti_trkwb[trk.track];
182 trk.trktb = ti_trktb[trk.track];
185 trk.event = eventnumber;
186 trk.mech = mech_max[trk.track];
187 trk.dtheta_mech = dtheta_mech[trk.track];
188 trk.dp_mech = dp_mech[trk.track];
205 GetTrackInfo(kd, ti, track_no);
211 int Nwires_prev = vti[track_no].Ncdc + vti[track_no].Nfdc;
212 if(Nwires > Nwires_prev)vti[track_no] = ti;
221 GetNhits(kd, ti.
Ncdc, ti.
Nfdc, track_no);
231 }
else if(track!=NULL){
234 }
else if(part!=NULL){
248 vector<const DCDCTrackHit*> cdctrackhits;
249 vector<const DFDCPseudo*> fdcpseudos;
253 kd->Get(cdctrackhits);
262 for(
unsigned int i=0; i<cdctrackhits.size(); i++){
263 vector<const DMCTrackHit*> mctrackhits;
264 cdctrackhits[i]->Get(mctrackhits);
265 if(mctrackhits.size()==0)
continue;
266 if(!mctrackhits[0]->primary)
continue;
267 int track = mctrackhits[0]->track;
268 if(track>=0 && track<
MAX_TRACKS)cdc_track_no[track]++;
272 for(
unsigned int i=0; i<fdcpseudos.size(); i++){
273 vector<const DMCTrackHit*> mctrackhits;
274 fdcpseudos[i]->Get(mctrackhits);
275 if(mctrackhits.size()==0)
continue;
276 if(!mctrackhits[0]->primary)
continue;
277 int track = mctrackhits[0]->track;
278 if(track>=0 && track<
MAX_TRACKS)fdc_track_no[track]++;
282 int track_with_max_hits = 0;
283 int tot_hits_max = cdc_track_no[0] + fdc_track_no[0];
285 int tot_hits = cdc_track_no[i] + fdc_track_no[i];
286 if(tot_hits > tot_hits_max){
287 track_with_max_hits=i;
288 tot_hits_max = tot_hits;
292 Ncdc = cdc_track_no[track_with_max_hits];
293 Nfdc = fdc_track_no[track_with_max_hits];
297 track = tot_hits_max>0 ? track_with_max_hits:-1;
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
Invoked via DEventProcessor virtual method.
float chisq
Chi-squared for the track (not chisq/dof!)
float chisq
Chi-squared for the track (not chisq/dof!)
jerror_t init(void)
Invoked via DEventProcessor virtual method.
~DEventProcessor_trackeff_hists()
void FillTrackInfo(const DKinematicData *kd, vector< track_info > &vti)
jerror_t brun(JEventLoop *loop, int32_t runnumber)
jerror_t erun(void)
Invoked via DEventProcessor virtual method.
void GetTrackInfo(const DKinematicData *kd, track_info &ti, int &track_no)
int Ndof
Number of degrees of freedom in the fit.
<A href="index.html#legend"> <IMG src="CORE.png" width="100"> </A>
int Ndof
Number of degrees of freedom in the fit.
float chisq
Chi-squared for the track (not chisq/dof!)
const DVector3 & momentum(void) const
void GetNhits(const DKinematicData *kd, int &Ncdc, int &Nfdc, int &track)
int Ndof
Number of degrees of freedom in the fit.
DEventProcessor_trackeff_hists()
jerror_t fini(void)
Invoked via DEventProcessor virtual method.