18 #include <TDirectoryFile.h>
19 #include <TLorentzVector.h>
24 #include <JANA/JApplication.h>
25 #include <JANA/JEventLoop.h>
76 ROOTFile =
new TFile(
"trackanal.root",
"recreate");
79 TrackTree =
new TTree(
"TrackTree",
"Track raw data");
81 TrackTree->Branch(
"EventNum", &EventNum,
"EventNum/I");
82 TrackTree->Branch(
"MaxT", &MaxT,
"MaxT/I");
83 TrackTree->Branch(
"MaxC", &MaxC,
"MaxC/I");
84 TrackTree->Branch(
"MaxF", &MaxF,
"MaxF/I");
86 TrackTree->Branch(
"NTrThrown", &NTrThrown,
"NTrThrown/I");
87 TrackTree->Branch(
"ThrownPType", ThrownPType,
"ThrownPType[NTrThrown]/I");
88 TrackTree->Branch(
"ThrownPp", ThrownPp,
"ThrownPp[NTrThrown]/F");
89 TrackTree->Branch(
"ThrownQ", ThrownQ,
"ThrownQ[NTrThrown]/F");
91 TrackTree->Branch(
"NTrCand", &NTrCand,
"NTrCand/I");
92 TrackTree->Branch(
"TrCandQ", TrCandQ,
"TrCandQ[NTrCand]/F");
93 TrackTree->Branch(
"TrCandP", TrCandP,
"TrCandP[NTrCand]/F");
94 TrackTree->Branch(
"TrCandN", TrCandN,
"TrCandN[NTrCand]/F");
95 TrackTree->Branch(
"TrCandM", TrCandM,
"TrCandM[NTrCand]/F");
103 TrackTree->Branch(
"NTrFit", &NTrFit,
"NTrFit/I");
104 TrackTree->Branch(
"trlistcand", trlistcand,
"trlistcand[NTrFit]/I");
105 TrackTree->Branch(
"trlistPtype", trlistPtype,
"trlistPtype[NTrFit]/I");
106 TrackTree->Branch(
"trlistFOM", trlistFOM,
"trlistFOM[NTrFit]/F");
107 TrackTree->Branch(
"trlistPp", trlistPp,
"trlistPp[NTrFit]/F");
108 TrackTree->Branch(
"trlistchisq", trlistchisq,
"trlistchisq[NTrFit]/F");
111 TrackTree->Branch(
"NTrCandHits", &NTrCandHits,
"NTrCandHits/I");
112 TrackTree->Branch(
"nh", nh,
"nh[NTrCandHits]/F");
113 TrackTree->Branch(
"ptypes", ptypes,
"ptypes[NTrCandHits]/F");
119 Int_t MaxArray = MaxF*MaxF;
136 for (Int_t i=0;i<MaxArray;i++){
141 pthread_mutex_init(&mutex, NULL);
162 vector<const DMCThrown*> trThrown;
165 vector<const DTrackCandidate*> trCand;
168 vector<const DTrackTimeBased*> trFit;
171 int ntr = trFit.size();
173 pthread_mutex_lock(&mutex);
180 for (
int i=0;i<NTrFit;i++){
181 int cid = trFit[i]->candidateid;
184 trlistFOM[i] = trFit[i]->FOM;
185 trlistchisq[i] = trFit[i]->chisq;
186 trlistPp[i] = trFit[i]->pmag();
188 float mass = (float)trFit[i]->mass();
192 if (trFit[i]->charge() < 0){
201 EventNum = eventnumber;
202 NTrThrown = trThrown.size();
204 for (
int i=0;i<NTrThrown;i++){
205 ThrownPType[i] = trThrown[i]->type;
206 ThrownPp[i] = trThrown[i]->pmag();
207 ThrownQ[i] = trThrown[i]->charge();
223 for (
int j=0;j<MaxF;j++){
224 for (
int i=0;i<MaxF;i++){
225 ptypes[j*MaxF+i] = 0.0 ;
231 for (
int k=0;k<NTrCand;k++) {
237 TrCandQ[k] = trCand[k]->charge();
238 TrCandP[k] = trCand[k]->pmag();
242 vector<const DFDCPseudo*> fdcPHits;
243 trCand[k]->Get(fdcPHits);
244 int npfdc = fdcPHits.size();
245 TrCandN[k] += (Float_t)npfdc;
248 for (
int j=0;j<npfdc;j++){
251 vector<const DMCTrackHit*> mcTrackHits;
252 fdcPHits[j]->Get(mcTrackHits);
253 Int_t asize = mcTrackHits.size();
255 for (
int i=0;i<asize;i++) {
256 int tr = mcTrackHits[i]->track;
263 nh[k*MaxF + tr] += 1.0;
265 int pt = mcTrackHits[i]->ptype;
269 ptypes[k*MaxF + pt] += 1.0;
271 TrCandM[k] += (Float_t) asize;
275 vector<const DCDCTrackHit*> cdcTrackHits;
276 trCand[k]->Get(cdcTrackHits);
277 int nhitscdc = cdcTrackHits.size();
278 TrCandN[k] += (Float_t)nhitscdc;
281 for (
int j=0;j<nhitscdc;j++){
284 vector<const DMCTrackHit*> cdcHits;
285 cdcTrackHits[j]->Get(cdcHits);
287 Int_t asize = cdcHits.size();
289 for (
int n=0;n<asize;n++) {
290 int tr = cdcHits[n]->track;
295 nh[k*MaxF + tr] += 1.;
297 int pt = cdcHits[n]->ptype;
301 ptypes[k*MaxF + pt] += 1.;
304 TrCandM[k] += (Float_t)asize;
310 cout<<EventNum <<
" " << NTrThrown <<
" " << NTrCand <<
" " << NTrFit
311 <<
" " << NTrCandHits << endl;
316 pthread_mutex_unlock(&mutex);
337 pthread_mutex_lock(&mutex);
343 cout<<endl<<
"Close ROOT file"<<endl;
345 pthread_mutex_unlock(&mutex);
DEventProcessor_trackanal()
~DEventProcessor_trackanal()
jerror_t brun(jana::JEventLoop *eventLoop, int32_t runnumber)
jerror_t evnt(jana::JEventLoop *eventLoop, uint64_t eventnumber)