StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
sim.C
1 //usr/bin/env root4star -l -b -q $0'("'${1:-sim.fzd}'",'${2:-2000}')'; exit $?
2 // that is a valid shebang to run script as executable, but with only one arg
3 
4 
5 // Run very fast fwd tracking
6 // generate some input data using genfzd
7 
8 TFile *output = 0;
9 
10 void sim( char *inFile = "sim.fzd",
11  int n = 100, // nEvents to run
12  bool useFstForSeedFinding = true, // use FTT (default) or FST for track finding
13  bool enableTrackRefit = true, // Enable track refit (default off)
14  bool realisticSim = true, // enables data-like mode, real track finding and fitting without MC seed
15  bool useZeroB = false
16  ) {
17  // report all of the parameters passed in
18  cout << "inFile = " << inFile << endl;
19  cout << "n = " << n << endl;
20  cout << "useFstForSeedFinding = " << useFstForSeedFinding << endl;
21  cout << "enableTrackRefit = " << enableTrackRefit << endl;
22  cout << "realisticSim = " << realisticSim << endl;
23  cout << "useZeroB = " << useZeroB << endl;
24  const char *geom = "y2024 agml usexgeom";
25  TString _geom = geom;
26 
27  // Switches for common options
28  bool SiIneff = false;
29  bool useConstBz = false;
30  bool useFCS = true;
31 
32  // use cached
33  _geom = "";
34 
35  // to use the geom cache (skip agml build which is faster)
36  // set the _geom string to "" and make sure the cache file ("fGeom.root") is present
37  // _geom = "";
38 
39  // Setup the chain for reading an FZD
40  TString _chain;
41  if ( useFCS )
42  _chain = Form("fzin %s sdt20211016 fstFastSim fcsSim fcsWFF fcsCluster fwdTrack MakeEvent StEvent McEvent ReverseField bigbig evout cmudst tree", _geom.Data() );
43  else
44  _chain = Form("fzin %s sdt20211016 MakeEvent StEvent ReverseField bigbig fstFastSim fcsSim fwdTrack evout cmudst tree", _geom.Data());
45 
46  gSystem->Load( "libStarRoot.so" );
47  gROOT->SetMacroPath(".:/star-sw/StRoot/macros/:./StRoot/macros:./StRoot/macros/graphics:./StRoot/macros/analysis:./StRoot/macros/test:./StRoot/macros/examples:./StRoot/macros/html:./StRoot/macros/qa:./StRoot/macros/calib:./StRoot/macros/mudst:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/graphics:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/analysis:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/test:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/examples:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/html:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/qa:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/calib:/afs/rhic.bnl.gov/star/packages/DEV/StRoot/macros/mudst:/afs/rhic.bnl.gov/star/ROOT/36/5.34.38/.sl73_x8664_gcc485/rootdeb/macros:/afs/rhic.bnl.gov/star/ROOT/36/5.34.38/.sl73_x8664_gcc485/rootdeb/tutorials");
48  gROOT->LoadMacro("bfc.C");
49  bfc(-1, _chain, inFile);
50 
51  if ( useConstBz )
52  StarMagField::setConstBz(true);
53 
54  gSystem->Load( "libStFttSimMaker" );
55  gSystem->Load( "libStFcsTrackMatchMaker" );
56 
57  gSystem->Load( "libMathMore.so" );
58  gSystem->Load( "libStarGeneratorUtil" );
59 
60  StFttFastSimMaker * fttSim = new StFttFastSimMaker();
61  fttSim->SetDebug();
62  chain->AddAfter("fcsSim", fttSim);
63 
64  // FCS setup, if included
65  if (useFCS) {
66 
67  StFcsDbMaker* fcsdbmkr = (StFcsDbMaker*) chain->GetMaker("fcsDbMkr");
68  cout << "fcsdbmkr="<<fcsdbmkr<<endl;
69  StFcsDb* fcsdb = (StFcsDb*) chain->GetDataSet("fcsDb");
70  fcsdb->forceFixGain();
71  fcsdb->forceFixGainCorrection();
72  cout << "fcsdb="<<fcsdb<<endl;
73  //fcsdbmkr->setDbAccess(1);
74 
75  // Configure FCS simulator
76  StFcsFastSimulatorMaker *fcssim = (StFcsFastSimulatorMaker*) chain->GetMaker("fcsSim");
77  fcssim->setDebug(1);
78  //fcssim->setLeakyHcal(0);
79 
80  StFcsWaveformFitMaker *fcsWFF= (StFcsWaveformFitMaker*) chain->GetMaker("StFcsWaveformFitMaker");
81  fcsWFF->setEnergySelect(0);
82 
83  StFcsClusterMaker *fcsclu = (StFcsClusterMaker*) chain->GetMaker("StFcsClusterMaker");
84  fcsclu->setDebug(1);
85  }
86 
87  // {
88  gSystem->Load("StFwdUtils.so");
89  // StFwdJPsiMaker *fwdJPsi = new StFwdJPsiMaker();
90  // fwdJPsi->SetDebug();
91  // chain->AddMaker(fwdJPsi);
92  // goto chain_loop;
93  // }
94 
95 
96  // Configure FST FastSim
97  TString qaoutname(gSystem->BaseName(inFile));
98  qaoutname.ReplaceAll(".fzd", ".FastSimu.QA.root");
99  StFstFastSimMaker *fstFastSim = (StFstFastSimMaker*) chain->GetMaker( "fstFastSim" );;
100 
101  if (SiIneff)
102  fstFastSim->SetInEfficiency(0.1); // inefficiency of Si
103 
104  fstFastSim->SetQAFileName(qaoutname);
105 
106  cout << "Adding StFstFastSimMaker to chain" << endl;
107  chain->AddAfter("fcsSim", fstFastSim);
108 
109 
110  // Configure the Forward Tracker
111  StFwdTrackMaker * fwdTrack = (StFwdTrackMaker*) chain->GetMaker( "fwdTrack" );
112 
113  if ( fwdTrack ){
114  fwdTrack->SetDebug(1);
115  // config file set here for ideal simulation
116  if (!realisticSim){
117  cout << "Configured for ideal simulation (MC finding + MC mom seed)" << endl;
118  fwdTrack->setConfigForIdealSim( );
119  } else {
120  cout << "Configured for realistic simulation" << endl;
121  fwdTrack->setConfigForRealisticSim( );
122  cout << "Configured for realistic simulation DONE" << endl;
123  }
124 
125  if ( _geom == "" ){
126  cout << "Using the Geometry cache: fGeom.root" << endl;
127  fwdTrack->setGeoCache( "fGeom.root" );
128  }
129 
130  // choose
131  if (useFstForSeedFinding)
132  fwdTrack->setSeedFindingWithFst();
133  else { // default for this true/false option
134  fwdTrack->setSeedFindingWithFtt();
135  }
136  // other options
137  // fwdTrack->setSeedFindingWithFtt();
138  // fwdTrack->setSeedFindingWithFstFttSequential();
139  // fwdTrack->setSeedFindingWithFstFttSimultaneous();
140 
141  fwdTrack->setTrackRefit( enableTrackRefit );
142  fwdTrack->setConstB( useConstBz );
143  fwdTrack->setOutputFilename( TString::Format( "%s.output.root", inFile ).Data() );
144  fwdTrack->SetVisualize( false );
145  fwdTrack->SetDebug();
146  fwdTrack->setIncludePrimaryVertexInFit( false );
147 
148  // fwdTrack->setTrackFittingOff();
149  // fwdTrack->setUseMcSeedForFit(true);
150  // fwdTrack->setConfigKeyValue("")
151  if ( useZeroB ){
152  cout << "Setting B = 0" << endl;
153  fwdTrack->setZeroB( true );
154  }
155  bool doFitQA = true;
156  if ( doFitQA ){
157  StFwdFitQAMaker *fwdFitQA = new StFwdFitQAMaker();
158  fwdFitQA->SetDebug();
159  TString fitqaoutname(gSystem->BaseName(inFile));
160  fitqaoutname.ReplaceAll(".fzd", ".FwdFitQA.root");
161  fwdFitQA->setOutputFilename( fitqaoutname );
162  chain->AddAfter("fwdTrack", fwdFitQA);
163  }
164  cout << "fwd tracker setup" << endl;
165  }
166 
167  bool doFwdAna = true;
168  if (!useFCS && doFwdAna ){
169  StFwdAnalysisMaker *fwdAna = new StFwdAnalysisMaker();
170  fwdAna->SetDebug();
171  chain->AddAfter("fwdTrack", fwdAna);
172  }
173 
174 
175  StMuDstMaker * muDstMaker = (StMuDstMaker*)chain->GetMaker( "MuDst" );
176  if (useFCS) {
177  // FwdTrack and FcsCluster assciation
178  gSystem->Load("StFcsTrackMatchMaker");
180  match->setMaxDistance(6,10);
181  match->setFileName("fcstrk.root");
182  match->SetDebug();
183  chain->AddMaker(match);
184 
185  if ( doFwdAna ){
186  StFwdAnalysisMaker *fwdAna = new StFwdAnalysisMaker();
187  fwdAna->SetDebug();
188  chain->AddAfter("FcsTrkMatch", fwdAna);
189  }
190 
191  // Produce MuDst output
192  if ( muDstMaker )
193  chain->AddAfter( "FcsTrkMatch", muDstMaker );
194  } else {
195  if ( muDstMaker )
196  chain->AddAfter( "fwdAna", muDstMaker );
197  }
198 
199  if (muDstMaker){
200  StFwdQAMaker *fwdQA = new StFwdQAMaker();
201  fwdQA->SetDebug(2);
202  TString fwdqaname(gSystem->BaseName(inFile));
203  fwdqaname.ReplaceAll(".fzd", ".FwdTree.root");
204  fwdQA->setTreeFilename(fwdqaname);
205  chain->AddAfter("MuDst", fwdQA);
206  }
207 
208  // The PicoDst
209  gSystem->Load("libStPicoEvent");
210  gSystem->Load("libStPicoDstMaker");
211  StPicoDstMaker *picoMk = new StPicoDstMaker(StPicoDstMaker::IoWrite);
212  cout << "picoMk = " << picoMk << endl;
213  picoMk->setVtxMode(StPicoDstMaker::Default);
214 
215 
216 chain_loop:
217  chain->Init();
218 
219  //_____________________________________________________________________________
220  //
221  // MAIN EVENT LOOP
222  //_____________________________________________________________________________
223  for (int i = 0; i < n; i++) {
224 
225  cout << "--------->START EVENT: " << i << endl;
226 
227  chain->Clear();
228  if (kStOK != chain->Make())
229  break;
230 
231 
232  // StMuDst * mds = muDstMaker->muDst();
233  // StMuFwdTrackCollection * ftc = mds->muFwdTrackCollection();
234  // cout << "Number of StMuFwdTracks: " << ftc->numberOfFwdTracks() << endl;
235  // for ( size_t iTrack = 0; iTrack < ftc->numberOfFwdTracks(); iTrack++ ){
236  // StMuFwdTrack * muFwdTrack = ftc->getFwdTrack( iTrack );
237  // cout << "muFwdTrack->mPt = " << muFwdTrack->momentum().Pt() << endl;
238 
239  // }
240  cout << "<---------- END EVENT" << endl;
241  } // event loop
242 }
Class that converts MuDst into PicoDst.
void setZeroB(bool zeroB=true)
Set B-field to zero (for zero field running)
void forceFixGainCorrection()
fixed default gain
Definition: StFcsDb.h:233
virtual void Clear(Option_t *option="")
User defined functions.
Definition: StChain.cxx:77
void setConstB(bool constB=true)
Set B-field to constant (even outside of TPC)
void setSeedFindingWithFtt()
Use Ftt hits in the Seed Finding.
void setVtxMode(const PicoVtxMode vtxMode)
Set vertex selection mode.
void setOutputFilename(std::string fn)
Set the filename for output ROOT file.
virtual Int_t Make()
Definition: StChain.cxx:110
Definition: Stypes.h:40
void setTrackRefit(bool refit=true)
Sets the tracking to refit This adds compatible hits from whichever detector was NOT used in seed fin...
void setGeoCache(TString gc)
Sets geometry cache filename.
void forceFixGain()
Gain mode switch.
Definition: StFcsDb.h:232
void setSeedFindingWithFst()
Use Fst hits in the Seed Finding.