20 if (fff.IsZombie()) fileok=
false;
21 TTree *
t=(TTree*)fff.Get(
"pndsim");
22 if (t==0
x0) fileok=
false;
24 if (!fileok) cout <<
"Skipping broken file '"<<fn<<
"'"<<endl;
42 if (prefix.Contains(
"phi"))
45 anadecay =
"phi -> K+ K-; pbp -> phi phi";
46 anaparms =
"mwin=0.4:mwin(phi)=0.3:qarec:fit4c:pidk=Loose";
49 else if (prefix.Contains(
"Jee"))
52 anadecay =
"J/psi -> e+ e-; pbp -> J/psi pi+ pi-";
53 anaparms =
"mwin(J/psi)=2.6|3.3:qaevs:qarec:fit4c:pide=Loose";
56 else if (prefix.Contains(
"Jmm"))
59 anadecay =
"J/psi -> mu+ mu-; pbp -> J/psi pi+ pi-";
60 anaparms =
"mwin(J/psi)=2.6|3.3:qaevs:qarec:fit4c:pidmu=Loose";
63 else if (prefix.Contains(
"ppee"))
66 anadecay =
"pbp -> e+ e-";
67 anaparms =
"mwin(pbp)=1.5|2.5:qaevs:qarec:fit4c:pide=Loose";
70 else if (prefix.Contains(
"etac1"))
73 anadecay =
"pi0->gamma gamma; eta->gamma gamma; J/psi->e+ e-; chi_1c -> J/psi gamma; eta_c1 -> chi_1c pi0 pi0; pbp -> eta_c1 eta";
74 anaparms =
"mwin=0.8:mwin(pi0)=0.024:mwin(eta)=0.048:qaevs:qarec:fit4cbest<200:pide=Loose:!ntp0:!ntp1";
80 anadecay =
"pi0->gamma gamma";
81 anaparms =
"mwin(pi0)=0.06";
110 cout <<
"Example analysis macro using PndSimpleCombiner(Task). !! MODIFY for your purpose !!\n\n";
112 cout <<
"prod_ana.C( <pref>, <from>, <to>, [mode], [nevt] )\n\n";
113 cout <<
" <pref> : input/output file names prefix or full input file name\n";
114 cout <<
" <from> : first run number\n";
115 cout <<
" <to> : last run number\n";
116 cout <<
" [mode] : arbitrary mode number; default: 0\n";
117 cout <<
" [nevt] : number of events; default: 0 = all\n\n";
121 double mp = 0.938272;
128 double X = (Mom*Mom-2*mp*
mp)/(2*mp);
129 Mom =
sqrt(X*X-mp*mp);
133 Ecm =
sqrt(pow(
sqrt(Mom*Mom + mp*mp) + mp,2) - Mom*Mom);
137 cout <<
"------------------------------------------------\n";
138 cout <<
" Current analysis configuration\n";
139 cout <<
"------------------------------------------------\n";
140 printf(
" p_beam : %.3f GeV/c\n",Mom);
141 printf(
" E_cm : %.3f GeV\n",Ecm);
142 cout <<
" reco : "<<anadecay<<endl;
143 cout <<
" params : "<<anaparms<<endl;
144 cout <<
" softtrig : "<<(runST?
"yes":
"no")<<endl;
145 cout <<
"------------------------------------------------\n\n";
148 if (prefix==
"")
return 0;
151 TString suffix = fastsim ?
"fsim" :
"pid";
153 TString outFile = TString::Format(
"%s_ana_%d_%d.root",prefix.Data(), from, to);
155 TString firstFile = TString::Format(
"%s_%d_%s.root",prefix.Data(),from,suffix.Data());
158 if (prefix.EndsWith(
".root"))
162 outFile.ReplaceAll(
".root",
"_ana.root");
167 else if (from>=to) outFile = TString::Format(
"%s_%d_ana.root", prefix.Data(), from);
170 while (!
checkfile(firstFile) && ffidx<=to) {ffidx++; firstFile = TString::Format(
"%s_%d_%s.root",prefix.Data(),ffidx,suffix.Data());}
180 FairRunAna *
fRun =
new FairRunAna();
181 FairFileSource *fSrc =
new FairFileSource(firstFile);
184 for (
int i=ffidx+1;
i<=to;++
i)
186 TString fname = TString::Format(
"%s_%d_%s.root",prefix.Data(),
i,suffix.Data());
187 if (
checkfile(fname) ) fSrc->AddFile(fname);
190 fRun->SetSource(fSrc);
193 TString pidParFile =
TString(gSystem->Getenv(
"VMCWORKDIR"))+
"/macro/params/all.par";
196 FairLogger::GetLogger()->SetLogToFile(kFALSE);
216 fRun->SetOutputFile(outFile);
234 TString pidalgo =
"PidAlgoEmcBayes;PidAlgoDrc;PidAlgoDisc;PidAlgoStt;PidAlgoMdtHardCuts;PidAlgoSciT";
235 if (fastsim) pidalgo =
"PidChargedProbability";
238 anadecay.ReplaceAll(
"pbp",
"pbarpSystem");
239 anadecay.ReplaceAll(
"pbp0",
"pbarpSystem0");
240 anaparms.ReplaceAll(
"pbp",
"pbarpSystem");
241 anaparms.ReplaceAll(
"pbp0",
"pbarpSystem0");
245 TDatabasePDG::Instance()->AddParticle(
"pbarpSystem",
"pbarpSystem",3,kFALSE,0.1,0,
"",88888);
246 TDatabasePDG::Instance()->AddParticle(
"pbarpSystem0",
"pbarpSystem0",3,kFALSE,0.1,0,
"",88880);
247 TDatabasePDG::Instance()->AddParticle(
"eta_c1",
"eta_c1",4.3,kFALSE,0.02,0,
"",999441);
252 anaparms+=
":algo="+pidalgo;
256 fRun->AddTask(scTask);
270 bool partQA = (anaparms.Contains(
"qapart"));
271 bool mc = !(anaparms.Contains(
"!mc"));
272 bool neut = !(anaparms.Contains(
"!neut"));
273 bool chrg = !(anaparms.Contains(
"!chrg"));
279 TString fPidArrayNames =
"IdealPidProbability : DrcBarrelProbability : MvdPidProbability : SttPidProbability : ";
280 fPidArrayNames +=
"ScEmcPidBarrel1Probability;ScEmcPidBarrel2Probability;ScEmcPidFwCapProbability;ScEmcPidBwCapProbability";
283 fRun->AddTask(partQaTask);
299 TString triggercfg =
TString(gSystem->Getenv(
"VMCWORKDIR"))+
"/softrig/triggerlines.cfg";
300 if (fastsim) triggercfg =
TString(gSystem->Getenv(
"VMCWORKDIR"))+
"/softrig/triggerlines_fsim.cfg";
304 if (fastsim) stTask->SetFastSimDefaults();
305 else stTask->SetFullSimDefaults();
307 fRun->AddTask(stTask);
321 FairSystemInfo sysInfo;
322 Float_t maxMemory=sysInfo.GetMaxMemory();
326 Float_t cpuUsage=ctime/
rtime;
329 cout <<
"[INFO ] Macro call : prod_ana.C(\""<<prefix<<
"\", "<<from<<
", "<<to<<
", "<<
mode<<
", "<<nevts<<
")" <<endl;
330 cout <<
"[INFO ] Output file : " << outFile << endl;
331 cout <<
"[INFO ] Real time : " << rtime <<
" s, CPU time " << ctime <<
"s" << endl;
332 cout <<
"[INFO ] CPU usage : " << cpuUsage*100. <<
"%" << endl;
333 cout <<
"[INFO ] Max Memory : " << maxMemory <<
" MB" << endl;
334 cout <<
"[INFO ] Macro finished successfully." << endl<<endl;
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
friend F32vec4 sqrt(const F32vec4 &a)
void SetPidAlgo(TString algo)
int prod_ana(TString prefix="", int from=1, int to=1, int mode=0, int nevts=0)
bool checkfile(TString fn)
void SetPidArrayNames(TString names)