25         if (Prefix==
"" || Decfile==
"" || Mom==0. ) 
 
   28                 cout << 
"quickfsimana.C( <pref>, <decfile>, <mom>, <decay>, [nevt], [parms], [runST], [runnum], [mode] )\n\n";
 
   29                 cout << 
"   <pref>     : output file names prefix\n";
 
   30                 cout << 
"   <decfile>  : EvtGen decfile 'xxx.dec' or 'xxx.dec:iniRes'; DPM/FTF/BOX uses DPM/FTF generator or BOX generator instead\n";
 
   31                 cout << 
"                DPM settings: DPM = inelastic only, DPM1 = inel. + elastic, DPM2 = elastic only\n";
 
   32                 cout << 
"                FTF settings: FTF = inelastic only, FTF1 = inel. + elastic\n";
 
   33                 cout << 
"                BOX settings: optional ranges 'p/tht/phi[min,max]' separated with colon; single number = fixed value; example: 'BOX:p[1,5]:tht[45]:phi[90,210]'\n";
 
   34                 cout << 
"   <mom>      : EvtGen, DPM, FTF: pbar momentum (negative values are interpreted as -E_cm); BOX generator w/o special settings: maximum particle momentum\n";
 
   35                 cout << 
"   [decay]    : the decay pattern to be reconstructed, e.g. 'phi -> K+ K-; D_s+ -> phi pi+'; '': only fast sim w/o reco will be run\n";
 
   36                 cout << 
"   [nevt]     : number of events; default = 1000\n";
 
   38                 cout << 
"   [parms]    : parameters for the analysis, e.g. 'mwin=0.4:mwin(phi)=0.1:emin=0.1:pmin=0.1:qamc'; 'qapart' runs PndParticleQATask: 'persist' saves PndPidCandidates\n";
 
   39                 cout << 
"   [runST]    : if 'true' runs Software Trigger (default: false)\n";
 
   40                 cout << 
"   [runnum]   : integer run number (default: 0)\n";
 
   41                 cout << 
"   [mode]     : arbitrary mode number (default: 0)\n\n";
 
   42                 cout << 
"Example 1 - Do reco for EvtGen events : root -l -b -q 'quickfsimana.C(\"jpsi2pi\", \"pp_jpsi2pi_jpsi_mumu.dec\", 6.23, \"J/psi -> mu+ mu-; pbp -> J/psi pi+ pi-\", 1000, \"fit4c:mwin=0.6\")'\n";
 
   43                 cout << 
"Example 2 - Particle QA for BOX gen   : root -l -b -q 'quickfsimana.C(\"single_kplus\", \"BOX:type(321,1)\", 8.0, \"\", 1000, \"qapart\")'\n"; 
 
   44                 cout << 
"Example 3 - Run fast sim only for DPM : root -l -b -q 'quickfsimana.C(\"bkg\", \"DPM\", 6.23, \"\", 1000)'\n\n";       
 
   49         bool persist = (anadecay == 
"" && anaparms == 
"") || anaparms.Contains(
"persist");
 
   52         bool doreco  = (anadecay != 
"" || anaparms.Contains(
"nevt"));
 
   55         bool partQA  = (anaparms.Contains(
"qapart"));
 
   56         bool mc      = !(anaparms.Contains(
"!mc")) && !(anaparms.Contains(
"qamc"));
 
   57         bool neut    = !(anaparms.Contains(
"!neut"));
 
   58         bool chrg    = !(anaparms.Contains(
"!chrg"));
 
   61         anadecay.ReplaceAll(
"§",
" ");
 
   67                 double X = (Mom*Mom-2*mp*
mp)/(2*mp);
 
   68                 Mom = 
sqrt(X*X-mp*mp);
 
   72         anadecay.ReplaceAll(
"pbp", 
"pbarpSystem");
 
   75         TLorentzVector 
fIni(0,0,Mom,mp+
sqrt(Mom*Mom+mp*mp));
 
   76         TDatabasePDG *pdg=TDatabasePDG::Instance();
 
   77         pdg->AddParticle(
"pbarpSystem",
"pbarpSystem",fIni.M(),kFALSE,0.1,0, 
"",88888,0);
 
   78         pdg->AddParticle(
"pbarpSystem0",
"pbarpSystem0",fIni.M(),kFALSE,0.1,0, 
"",88880,0);
 
   85         bool SwFwdSpec = 
true;  
 
   88         Bool_t enableSplitoff    = 
true;   
 
   89         Bool_t mergeNeutrals     = 
true;   
 
   90         Bool_t electronBrems     = 
true;   
 
   91         Bool_t useEventFilter    = 
false;  
 
   92         Bool_t usePndEventFilter = 
false;  
 
   95         TString BaseDir =  gSystem->Getenv(
"VMCWORKDIR");
 
   96         TString splitpars = BaseDir+
"/fsim/splitpars.dat";
 
  100         TString  OutputFile     = TString::Format(
"%s_%d_ana.root",Prefix.Data(), 
run);
 
  101         if (persist) OutputFile = TString::Format(
"%s_%d_fsim.root",Prefix.Data(), 
run);
 
  106         Bool_t UseEvtGenDirect  = kTRUE;
 
  109         Bool_t UseBoxGenerator  = kFALSE;
 
  112         if (Decfile.BeginsWith(
"DPM") && !Decfile.EndsWith(
".dec"))
 
  114                 UseEvtGenDirect = kFALSE;
 
  119         if (Decfile.BeginsWith(
"FTF") && !Decfile.EndsWith(
".dec"))
 
  121                 UseEvtGenDirect = kFALSE;
 
  138         if (Decfile.BeginsWith(
"BOX") && !Decfile.EndsWith(
".dec"))
 
  140                 UseEvtGenDirect = kFALSE;
 
  141                 UseBoxGenerator = kTRUE;
 
  146                         Decfile.ReplaceAll(
"box",
"");
 
  147                         Decfile.ReplaceAll(
" ",
"");
 
  150                         while (Decfile.Contains(
":"))
 
  152                                 TString curpar = Decfile(0,Decfile.Index(
":"));
 
  153                                 Decfile = Decfile(Decfile.Index(
":")+1,1000);
 
  154                                 curpar.ReplaceAll(
"[",
"("); curpar.ReplaceAll(
"]",
")"); 
 
  156                                 if (curpar.BeginsWith(
"type(")) {
getRange(curpar,type,
mult); BoxType = (Int_t)type; BoxMult = (Int_t)
mult; }
 
  157                                 if (curpar.BeginsWith(
"p("))     
getRange(curpar,BoxMomMin,BoxMomMax);
 
  158                                 if (curpar.BeginsWith(
"tht("))   
getRange(curpar,BoxThtMin,BoxThtMax);
 
  159                                 if (curpar.BeginsWith(
"ctht(")) {
getRange(curpar,BoxThtMin,BoxThtMax); BoxCosTht=
true;}
 
  160                                 if (curpar.BeginsWith(
"phi("))   
getRange(curpar,BoxPhiMin,BoxPhiMax);
 
  164                 cout <<
"BOX generator range: type["<<BoxType<<
","<<BoxMult<<
"]  p["<<BoxMomMin<<
","<<BoxMomMax<<
"]  tht["<<BoxThtMin<<
","<<BoxThtMax<<
"]"<<(BoxCosTht?
"*":
"")<<
"  phi["<<BoxPhiMin<<
","<<BoxPhiMax<<
"]"<<endl;
 
  174         FairRunSim *
fRun = 
new FairRunSim();
 
  175         fRun->SetOutputFile(OutputFile.Data());
 
  176         fRun->SetGenerateRunInfo(kFALSE);
 
  177         if (!persist) fRun->SetUserConfig(BaseDir+
"/tutorials/analysis/g3ConfigNoMC.C");
 
  179         FairLogger::GetLogger()->SetLogToFile(kFALSE);
 
  185         if (!usePndEventFilter) primGen->
SetVerbose(0);
 
  187         fRun->SetGenerator(primGen);
 
  188         fRun->SetName(
"TGeant3");
 
  202                 boxGen->
SetXYZ(0., 0., 0.); 
 
  203                 primGen->AddGenerator(boxGen);
 
  210                 if (Decfile==
"DPM1") mode = 1;
 
  211                 if (Decfile==
"DPM2") mode = 2;
 
  225                 primGen->AddGenerator(Dpm);
 
  231                 bool noelastic = 
true;
 
  232                 if (Decfile==
"FTF1") noelastic=
false;
 
  234                 primGen->AddGenerator(Ftf);
 
  241                 Resonance.ReplaceAll(
"pbp",
"pbarpSystem");
 
  245                 primGen->AddGenerator(EvtGen);
 
  249         primGen->DoTracking(kFALSE);
 
  253         fRun->SetField(fField);
 
  264         if (usePndEventFilter)
 
  266                 cout <<
"Using FairEventFilter"<<endl;
 
  349                 fastSim->
AddDetector(
"ScSttAlone",  
"thtMin=145.  thtMax=159.5 ptmin=0.1 pmin=0.0 pRes=0.04 thtRes=0.006 phiRes=0.007 efficiency=0.25");
 
  350                 fastSim->
AddDetector(
"ScSttMvd",    
"thtMin=20.9  thtMax=145.  ptmin=0.1 pmin=0.0 pRes=0.02 thtRes=0.001 phiRes=0.001 efficiency=0.85");
 
  351                 fastSim->
AddDetector(
"ScSttMvdGem", 
"thtMin=7.8   thtMax=20.9  ptmin=0.1 pmin=0.0 pRes=0.02 thtRes=0.001 phiRes=0.001 efficiency=0.85");
 
  352                 fastSim->
AddDetector(
"ScMvdGem",    
"thtMin=5.    thtMax=7.8   ptmin=0.1 pmin=0.0 pRes=0.03 thtRes=0.001 phiRes=0.001 efficiency=0.60");
 
  357                 fastSim->
AddDetector(
"ScSttAlone",  
"thtMin=133.6 thtMax=159.5 ptmin=0.1 pmin=0.0 pRes=0.04 thtRes=0.006 phiRes=0.007 efficiency=0.25");
 
  358                 fastSim->
AddDetector(
"ScSttAlone2", 
"thtMin=20.9  thtMax=133.6 ptmin=0.1 pmin=0.0 pRes=0.04 thtRes=0.006 phiRes=0.007 efficiency=0.80");
 
  359                 fastSim->
AddDetector(
"ScSttAlone3", 
"thtMin=7.8   thtMax=20.9  ptmin=0.1 pmin=0.0 pRes=0.04 thtRes=0.006 phiRes=0.007 efficiency=0.25");
 
  364                 fastSim->
AddDetector(
"ScFts",       
"thtMin=0.    thtMax=5.    ptmin=0.0 pmin=0.5 pRes=0.05  thtRes=0.002 phiRes=0.002 efficiency=0.80");
 
  372                 fastSim->
AddDetector(
"ScVtxMvd",   
"thtMin=5. thtMax=145. ptmin=0.1 vtxRes=0.005 efficiency=1."); 
 
  373                 fastSim->
AddDetector(
"ScVtxNoMvd", 
"thtMin=0. thtMax=5.   ptmin=0.0 vtxRes=0.05  efficiency=1."); 
 
  377                 fastSim->
AddDetector(
"ScVtxNoMvd", 
"thtMin=0. thtMax=160. ptmin=0.1 vtxRes=0.1 efficiency=1."); 
 
  384         fastSim->
AddDetector(
"EmcFwCap", 
"thtMin=10.0 thtMax=22.0 Emin=0.01 dist=2.5");
 
  385         fastSim->
AddDetector(
"EmcBwCap", 
"thtMin=142.0 thtMax=160.0 Emin=0.01 dist=0.7");
 
  391                 fastSim->
AddDetector(
"EmcBarrel",
"thtMin=22.0 thtMax=142.0 Emin=0.01 barrelRadius=0.5");
 
  396                 fastSim->
AddDetector(
"EmcFS",    
"thtMin=0.05 thtMax=10.0 aPar=0.013 bPar=0.0283 Emin=0.01 dist=8.2");
 
  405         fastSim->
AddDetector(
"SttPid",
"thtMin=7.8 thtMax=159.5 ptmin=0.1 dEdxRes=0.15 efficiency=1.");
 
  406         fastSim->
AddDetector(
"ScMdtPidBarrel", 
"thtMin=10.0 thtMax=130.0 pmin=0.5 efficiency=0.95 misId=0.01");
 
  407         fastSim->
AddDetector(
"ScEmcPidFwCap",  
"thtMin=10.0  thtMax=22.0  ptmin=0.0 pmin=0.0 efficiency=1.0");
 
  408         fastSim->
AddDetector(
"ScEmcPidBwCap",  
"thtMin=142.0 thtMax=160.0  ptmin=0.0 pmin=0.0 efficiency=1.0");
 
  413                 fastSim->
AddDetector(
"MvdPid",
"thtMin=5.  thtMax=133.6 ptmin=0.1  dEdxResMulti=1. efficiency=1.");
 
  418                 fastSim->
AddDetector(
"ScEmcPidBarrel", 
"thtMin=22.0  thtMax=142.0 ptmin=0.2 pmin=0.0 efficiency=1.0");
 
  423                 fastSim->
AddDetector(
"DrcBarrel",
"thtMin=22.0 thtMax=140.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
 
  428                 fastSim->
AddDetector(
"DrcDisc",
"thtMin=5.0 thtMax=22.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
 
  433                 fastSim->
AddDetector(
"ScEmcPidFS",     
"thtMin=0.5   thtMax=10.0  ptmin=0.0 pmin=0.5 efficiency=1.0");
 
  434                 fastSim->
AddDetector(
"Rich",
"angleXMax=5.0 angleYMax=10.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
 
  435                 fastSim->
AddDetector(
"ScMdtPidForward",
"thtMin=0.0  thtMax=10.0  pmin=0.5 efficiency=0.95 misId=0.01");
 
  439         fRun->AddTask(fastSim);
 
  449                 TString triggercfg   = 
TString(gSystem->Getenv(
"VMCWORKDIR"))+
"/softrig/triggerlines_fsim.cfg";
 
  452                 stTask->SetFastSimDefaults();
 
  453                 stTask->SetQAEvent();
 
  454                 fRun->AddTask(stTask);
 
  471                 fRun->AddTask(scTask);
 
  487                 fRun->AddTask(partQaTask);
 
  508         printf(
"RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
 
  513         par.ReplaceAll(
" ",
"");
 
  514         par = 
par(par.Index(
"(")+1, par.Length()-par.Index(
"(")-2);
 
  518         if (par.Contains(
",")) 
 
  520                 smin = 
par(0,par.Index(
","));
 
  521                 smax = 
par(par.Index(
",")+1,1000);
 
  535   if (fEvtGenFile.Contains(
":")) 
 
  537     IniRes = fEvtGenFile(fEvtGenFile.Index(
":")+1,1000);
 
  538     fEvtGenFile = fEvtGenFile(0,fEvtGenFile.Index(
":"));
 
  543     std::ifstream fs(fEvtGenFile.Data());       
 
  548       fs.getline(line,249);
 
  550       s.ReplaceAll(
"\r",
"");
 
  551       if (IniRes==
"" && s.Contains(
"Decay "))
 
  553         if (s.Contains(
"#")) s=
s(0,s.Index(
"#"));
 
  554         s.ReplaceAll(
"Decay ",
"");
 
  555         s.ReplaceAll(
" ",
"");
 
Bool_t SetMinMaxCounts(Int_t min, Int_t max)
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
void SetThetaRange(Double32_t thetamin=0, Double32_t thetamax=90)
void WriteEvtFilterStatsToRootFile(TFile *outputFile=NULL)
Writes all relevant event filter information to the output root file. 
friend F32vec4 sqrt(const F32vec4 &a)
void AndFilter(FairEvtFilter *filter)
Register a non-veto event filter using a logical AND to connect with previously defined non-veto even...
bool AddDetector(std::string name, std::string params="")
void SetXYZ(Double32_t x=0, Double32_t y=0, Double32_t z=0)
void SetPidAlgo(TString algo)
void SetFilterMaxTries(Int_t maxTries=99999)
Define the maximum number of times that this object should try to find an event which suits all event...
void quickfsimana(TString Prefix="", TString Decfile="", Float_t Mom=0., TString anadecay="", Int_t nEvents=1000, TString anaparms="", bool runST=false, int run=0, int runmode=0)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
void SetUseFlatCov(bool v=true)
FairPrimaryGenerator * primGen
Bool_t SetMinMaxInvMass(Double_t min, Double_t max)
void SetUnstable(int pdg)
Primary generator with added event filtering capabilities. 
bool MergeNeutralClusters(bool merge=true, double par=0.389)
void SetInvMassFilter(TString filter, double min, double max, int mult=1)
void SetStoreTree(Bool_t store=true)
void EnableElectronBremsstrahlung(bool brems=true)
void getRange(TString par, double &min, double &max)
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
void SetDebug(Bool_t debug=0)
bool EnableSplitoffs(std::string fname="splitpars.dat")
FairBoxGenerator * boxGen
TString getInitialResonance(TString &fEvtGenFile)
void SetVerbosity(int vb)
Bool_t SetPdgCodesToCombine(Int_t pdgCode1, Int_t pdgCode2, Int_t pdgCode3=kInvalidPdgCode, Int_t pdgCode4=kInvalidPdgCode, Int_t pdgCode5=kInvalidPdgCode)
void SetPRange(Double32_t pmin=0, Double32_t pmax=10)
void SetPhiRange(Double32_t phimin=0, Double32_t phimax=360)
void SetVerbose(Int_t verbose=12)
Set the level of commenting output.