30 if (Prefix==
"" || Decfile==
"" || Mom==0.)
33 cout <<
"prod_fsim.C+( <pref>, <decfile>, <mom>, [nevt], [res], [mode], [run], [full] )\n\n";
34 cout <<
" <pref> : output file names prefix\n";
35 cout <<
" <decfile> : decfile; 'DPM'/'FTF' uses DPM/FTF generator instead\n";
36 cout <<
" <mom> : pbar momentum; negative values are interpreted as -E_cm\n";
37 cout <<
" [nevt] : number of events; default = 1000\n";
38 cout <<
" [res] : resonance (ignored when running DPM); default = 'pbarpSystem0'\n";
39 cout <<
" [mode] : mode code; default = 900 (->DPM code)\n";
40 cout <<
" [run] : run number; should be set if mergeing output files from same mode; default = -1\n";
41 cout <<
" [full] : apply full selection, defined in config file 'softrig/selection_fsim.cfg'; default = 0\n\n";
51 double X = (Mom*Mom-2*mp*
mp)/(2*mp);
52 Mom =
sqrt(X*X-mp*mp);
57 if (Resonance==
"pbp") Resonance =
"pbarpSystem";
58 if (Resonance==
"pbp0") Resonance =
"pbarpSystem0";
61 TLorentzVector
fIni(0,0,Mom,0.938272+
sqrt(Mom*Mom+0.938272*0.938272));
62 TDatabasePDG::Instance()->AddParticle(
"pbarpSystem",
"pbarpSystem",fIni.M(),kFALSE,0.1,0,
"",88888);
63 TDatabasePDG::Instance()->AddParticle(
"pbarpSystem0",
"pbarpSystem0",fIni.M(),kFALSE,0.1,0,
"",88880);
64 TDatabasePDG::Instance()->AddParticle(
"Z(3900)+",
"Z+",3.900,kFALSE,0.03,0,
"",90000);
65 TDatabasePDG::Instance()->AddParticle(
"Z(3900)-",
"Z-",3.900,kFALSE,0.03,0,
"",-90000);
72 bool SwFwdSpec =
true;
82 Bool_t enableSplitoff =
true;
83 Bool_t mergeNeutrals =
true;
84 Bool_t electronBrems =
true;
85 Bool_t useEventFilter =
false;
86 Bool_t usePndEventFilter =
false;
92 TString BaseDir = gSystem->Getenv(
"VMCWORKDIR");
93 TString splitpars = BaseDir+
"/fsim/splitpars.dat";
97 TString OutputFile = Prefix+
"_fsim.root";
101 Bool_t UseEvtGenDirect = kTRUE;
104 Bool_t UseBoxGenerator = kFALSE;
107 if (Decfile.BeginsWith(
"DPM"))
109 UseEvtGenDirect = kFALSE;
114 if (Decfile.BeginsWith(
"FTF"))
116 UseEvtGenDirect = kFALSE;
123 UseEvtGenDirect = kFALSE;
124 UseBoxGenerator = kTRUE;
127 usePndEventFilter=UseDpm;
138 FairRunSim *
fRun =
new FairRunSim();
139 fRun->SetOutputFile(OutputFile.Data());
140 fRun->SetGenerateRunInfo(kFALSE);
141 fRun->SetUserConfig(BaseDir+
"/macro/softrig/g3ConfigNoMC.C");
143 FairLogger::GetLogger()->SetLogToFile(kFALSE);
150 fRun->SetGenerator(primGen);
151 fRun->SetName(
"TGeant3");
155 FairBoxGenerator*
boxGen =
new FairBoxGenerator(Pdgcode, 1);
156 boxGen->SetPRange(MomMin,MomMax);
157 boxGen->SetPhiRange(0., 360.);
158 boxGen->SetThetaRange(0., 180.);
159 boxGen->SetXYZ(0., 0., 0.);
160 primGen->AddGenerator(boxGen);
165 if (Decfile==
"DPM1") dpmmode = 1;
166 if (Decfile==
"DPM2") dpmmode = 2;
176 primGen->AddGenerator(Dpm);
180 bool noelastic =
true;
181 if (Decfile==
"FTF1") noelastic=
false;
183 primGen->AddGenerator(Ftf);
189 primGen->AddGenerator(EvtGen);
193 primGen->DoTracking(kFALSE);
197 fRun->SetField(fField);
212 if (
mode==900) usePndEventFilter=
true;
213 if (usePndEventFilter)
286 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");
287 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");
288 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");
289 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");
294 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");
295 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");
296 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");
301 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");
309 fastSim->
AddDetector(
"ScVtxMvd",
"thtMin=5. thtMax=145. ptmin=0.1 vtxRes=0.005 efficiency=1.");
310 fastSim->
AddDetector(
"ScVtxNoMvd",
"thtMin=0. thtMax=5. ptmin=0.0 vtxRes=0.05 efficiency=1.");
314 fastSim->
AddDetector(
"ScVtxNoMvd",
"thtMin=0. thtMax=160. ptmin=0.1 vtxRes=0.1 efficiency=1.");
321 fastSim->
AddDetector(
"EmcFwCap",
"thtMin=10.0 thtMax=22.0 Emin=0.01 dist=2.5");
322 fastSim->
AddDetector(
"EmcBwCap",
"thtMin=142.0 thtMax=160.0 Emin=0.01 dist=0.7");
328 fastSim->
AddDetector(
"EmcBarrel",
"thtMin=22.0 thtMax=142.0 Emin=0.01 barrelRadius=0.5");
333 fastSim->
AddDetector(
"EmcFS",
"thtMin=0.05 thtMax=10.0 aPar=0.013 bPar=0.0283 Emin=0.01 dist=8.2");
342 fastSim->
AddDetector(
"SttPid",
"thtMin=7.8 thtMax=159.5 ptmin=0.1 dEdxRes=0.15 efficiency=1.");
343 fastSim->
AddDetector(
"ScMdtPidBarrel",
"thtMin=10.0 thtMax=130.0 pmin=0.5 efficiency=0.95 misId=0.01");
344 fastSim->
AddDetector(
"ScEmcPidFwCap",
"thtMin=10.0 thtMax=22.0 ptmin=0.0 pmin=0.0 efficiency=1.0");
345 fastSim->
AddDetector(
"ScEmcPidBwCap",
"thtMin=142.0 thtMax=160.0 ptmin=0.0 pmin=0.0 efficiency=1.0");
350 fastSim->
AddDetector(
"MvdPid",
"thtMin=5. thtMax=133.6 ptmin=0.1 dEdxResMulti=1. efficiency=1.");
355 fastSim->
AddDetector(
"ScEmcPidBarrel",
"thtMin=22.0 thtMax=142.0 ptmin=0.2 pmin=0.0 efficiency=1.0");
360 fastSim->
AddDetector(
"DrcBarrel",
"thtMin=22.0 thtMax=140.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
365 fastSim->
AddDetector(
"DrcDisc",
"thtMin=5.0 thtMax=22.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
370 fastSim->
AddDetector(
"ScEmcPidFS",
"thtMin=0.5 thtMax=10.0 ptmin=0.0 pmin=0.5 efficiency=1.0");
371 fastSim->
AddDetector(
"Rich",
"angleXMax=5.0 angleYMax=10.0 dthtc=0.01 nPhotMin=5 effNPhotons=0.075");
372 fastSim->
AddDetector(
"ScMdtPidForward",
"thtMin=0.0 thtMax=10.0 pmin=0.5 efficiency=0.95 misId=0.01");
376 fRun->AddTask(fastSim);
385 int modeshort =
mode;
386 if (modeshort>1000000) modeshort /= 1000;
387 if (modeshort>1000) modeshort %= 1000;
389 cout <<
" ****** mode:"<<
mode<<
" modeshort:"<<modeshort<<endl;
406 if (applyfull) stTask->
SetQAAll(
false);
410 fRun->AddTask(stTask);
429 printf(
"RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
Bool_t AndMaxPdgCodes(Int_t max, std::vector< Int_t > &pdgCodes)
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
void SetQAEvent(bool qa=true)
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...
void SetFastSimDefaults()
bool AddDetector(std::string name, std::string params="")
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 SetUseFlatCov(bool v=true)
FairPrimaryGenerator * primGen
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)
int prod_fsim(TString prefix="", Int_t nEvents=100, TString inputGen="", Float_t pbeam=0., TString simopt="")
void EnableElectronBremsstrahlung(bool brems=true)
void SetQAMctOnly(bool qa=true)
bool EnableSplitoffs(std::string fname="splitpars.dat")
void SetQAMode(int mode, bool qa=true)
FairBoxGenerator * boxGen
void SetQAAll(bool qa=true)
void SetVerbosity(int vb)
void ApplyFullSelection(int selmode=1)