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)