FairRoot/PandaRoot
emc_correction_QA_data_production.C
Go to the documentation of this file.
1 // Produce events to study corrections
2 // part = gamma/pi0
3 // TransportModel =TGeant3/TGeant4
4 // emcModule = "TS"(target spectrometer)/shashlyk
5 // energyRange = low/high/all
6 int emc_correction_QA_data_production(Int_t nEvents = 10, TString part="gamma", TString TransportModel = "TGeant3", TString emcModule="TS", TString energyRange="all", UInt_t seed=0)
7 {
8  gRandom->SetSeed(seed);
9  Double_t phi_min = 0; Double_t phi_max = 360;
10 
11  if (emcModule=="TS")
12  {
13  Double_t theta_min = 5; Double_t theta_max = 172;
14  }
15  else if (emcModule=="barrel")
16  {
17  Double_t theta_min = 22; Double_t theta_max = 140;
18  }
19  else if (emcModule=="fwd")
20  {
21  Double_t theta_min = 5.; Double_t theta_max = 22.;
22  }
23  else if (emcModule=="bwd")
24  {
25  Double_t theta_min = 147; Double_t theta_max = 172;
26  }
27  else if (emcModule=="shashlyk")
28  {
29  Double_t theta_min = 0; Double_t theta_max = 10;
30  } else if (emcModule=="all")
31  {
32  Double_t theta_min = 0; Double_t theta_max = 172;
33  }
34  else
35  {
36  std::cout<<"Incorrect emcModule parameter: "<<emcModule<<std::endl;
37  abort();
38  }
39 
40  // energyRange= "low", "high", "all"
41  if (energyRange=="low")
42  {
43  Double_t momentum_min = 0.0; Double_t momentum_max = 1.5;
44  } else if (energyRange=="high")
45  {
46  Double_t momentum_min = 1.0; Double_t momentum_max = 10.0;
47  } else if (energyRange=="all")
48  {
49  Double_t momentum_min = 0.0; Double_t momentum_max = 10.0;
50  } else if (energyRange=="1GeV")
51  {
52  Double_t momentum_min = 1.0; Double_t momentum_max = 1.0;
53  } else
54  {
55  std::cout<<"Incorrect parameter energyRange: "<<energyRange<<std::endl;
56  abort();
57  }
58 
59  TString s1; s1+=seed;
60 
61  TString OutputSimFile = "emc_complete";
62  OutputSimFile = OutputSimFile+"_"+part+"_"+energyRange+"_"+TransportModel+
63  "_"+emcModule+"_"+s1+"_QA.root";
64  TString OutputDatabaseFile = "simparams";
65  OutputDatabaseFile = OutputDatabaseFile+"_"+part+"_"energyRange+"_"+TransportModel+
66  "_"+emcModule+"_"+s1+"_QA.root";
67 
68  TStopwatch timer;
69  timer.Start();
70  gDebug=0;
71 
72  FairLogger::GetLogger()->SetLogToFile(kFALSE);
73  FairRunSim *fRun = new FairRunSim();
74 
75  TString digiFile = "emc.par";
76 
77  // set the MC version used
78  // ------------------------
79 
80  fRun->SetName(TransportModel);
81 
82 
83  fRun->SetOutputFile(OutputSimFile);
84 
85 
88  TString emcDigiFile = gSystem->Getenv("VMCWORKDIR");
89  emcDigiFile += "/macro/params/";
90  emcDigiFile += digiFile;
91 
93  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
94  FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
95  parIo1->open(emcDigiFile.Data(),"in");
96  rtdb->setFirstInput(parIo1);
98 
100  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
101  output->open(OutputDatabaseFile);
102  rtdb->setOutput(output);
103 
104 
105 
106  // Set Material file Name
107  //-----------------------
108  fRun->SetMaterials("media_pnd.geo");
109 
110  // Create and add detectors
111  //-------------------------
112  FairModule *Cave= new PndCave("CAVE");
113  Cave->SetGeometryFileName("pndcave.geo");
114  fRun->AddModule(Cave);
115 
116  PndEmc *Emc = new PndEmc("EMC",kTRUE);
117  Emc->SetGeometryVersion(1);
118  Emc->SetStorageOfData(kFALSE);
119  fRun->AddModule(Emc);
120 
121  FairModule *Magnet= new PndMagnet("MAGNET");
122  Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root");
123  fRun->AddModule(Magnet);
124 
125  FairModule *Dipole= new PndMagnet("MAGNET");
126  Dipole->SetGeometryFileName("dipole.geo");
127  fRun->AddModule(Dipole);
128 
129  FairModule *Pipe= new PndPipe("PIPE");
130  Pipe->SetGeometryFileName("beampipe_201309.root");
131  fRun->AddModule(Pipe);
132 
133  FairDetector *Stt= new PndStt("STT", kTRUE);
134  Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo");
135  fRun->AddModule(Stt);
136 
137  FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
138  Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root");
139  fRun->AddModule(Mvd);
140 
141  PndMdt *Muo = new PndMdt("MDT",kTRUE);
142  Muo->SetBarrel("fast");
143  Muo->SetEndcap("fast");
144  Muo->SetMuonFilter("fast");
145  Muo->SetForward("fast");
146  Muo->SetMdtMagnet(kTRUE);
147  Muo->SetMdtMFIron(kTRUE);
148  fRun->AddModule(Muo);
149 
150  FairDetector *Gem = new PndGemDetector("GEM", kTRUE);
151  Gem->SetGeometryFileName("gem_3Stations.root");
152  fRun->AddModule(Gem);
153  //------------------------- SCITIL -----------------
154  FairDetector *SciT = new PndSciT("SCIT",kTRUE);
155  SciT->SetGeometryFileName("barrel-SciTil_07022013.root");
156  fRun->AddModule(SciT);
157 
158  PndDsk* Dsk = new PndDsk("DSK", kTRUE);
159  Dsk->SetGeometryFileName("dsk.root");
160  Dsk->SetStoreCerenkovs(kFALSE);
161  Dsk->SetStoreTrackPoints(kFALSE);
162  fRun->AddModule(Dsk);
163 
164  //------------------------- DRC -----------------
165  PndDrc *Drc = new PndDrc("DIRC", kTRUE);
166  Drc->SetGeometryFileName("dirc_l0_p0_updated.root");
167  Drc->SetRunCherenkov(kFALSE);
168  fRun->AddModule(Drc);
169 
170  FairDetector *Fts= new PndFts("FTS", kTRUE);
171  Fts->SetGeometryFileName("fts.geo");
172  fRun->AddModule(Fts);
173 
174  // Create and Set Event Generator
175  //-------------------------------
176 
177  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
178  fRun->SetGenerator(primGen);
179 
180  TDatabasePDG *pdg = new TDatabasePDG();
181  Int_t part_pid = pdg->GetParticle(part)->PdgCode();
182 
183  // Box Generator:
184  FairBoxGenerator* boxGen = new FairBoxGenerator(part_pid, 1); // 13 = muon; 1 = multipl. // 211 = pi+
185  // first number: PDG particle code: 2nd number: particle multiplicity per event
186 
187  boxGen->SetPRange(momentum_min,momentum_max); // GeV/c
188  // boxGen->SetPtRange(1.,1.); // GeV/c
189  boxGen->SetPhiRange(phi_min, phi_max); // Azimuth angle range [degree]
190  boxGen->SetThetaRange(theta_min, theta_max); // Polar angle in lab system range [degree]
191  boxGen->SetXYZ(0., 0., 0.); // vertex coordinates [mm]
192  primGen->AddGenerator(boxGen);
193 
194  // fRun->SetStoreTraj(kTRUE); // to store particle trajectories
195  fRun->SetBeamMom(15);
196  //---------------------Create and Set the Field(s)----------
197  PndMultiField *fField= new PndMultiField("FULL");
198  fRun->SetField(fField);
199 
204  emcHitProd->SetStorageOfData(kFALSE);//FALSE);
205  fRun->AddTask(emcHitProd);
206 
209  emcHitsToWaveform->SetStorageOfData(kFALSE);
210  emcWaveformToDigi->SetStorageOfData(kTRUE);
211  fRun->AddTask(emcHitsToWaveform); // full digitization
212  fRun->AddTask(emcWaveformToDigi); // full digitization
213 
215  emcMakeCluster->SetStorageOfData(kTRUE);
216  fRun->AddTask(emcMakeCluster);
217 
219  fRun->AddTask(emcHdrFiller); // ECM header
220 
222  emcMakeBump->SetStorageOfData(kTRUE);
223  fRun->AddTask(emcMakeBump);
224 
226  fRun->Init();
228  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
229  if (fField) { Par->SetParameters(fField); }
230  Par->setInputVersion(fRun->GetRunId(),1);
231  Par->setChanged();
232 
234  rtdb->saveOutput();
235  // rtdb->print();
236 
237  fRun->Run(nEvents);
238  timer.Stop();
239 
240  Double_t rtime = timer.RealTime();
241  Double_t ctime = timer.CpuTime();
242  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
243 
244  return 0;
245 }
246 
PndDrc * Drc
Definition: sim_emc_apd.C:75
Takes list of PndEmcHits and creates PndEmcWaveform.
PndMultiField * fField
Definition: sim_emc_apd.C:97
void SetForward(TString name)
Definition: PndMdt.h:34
void SetStorageOfData(Bool_t val)
Method to specify whether clusters are stored or not.
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
PndEmcHitsToWaveform * emcHitsToWaveform
Definition: full_emc.C:60
Bool_t kParameterMerged
Definition: sim_emc_apd.C:113
void SetParameters(FairField *field)
creates PndEmcHits from PndEmcPoints
PndEmc * Emc
Definition: sim_emc_apd.C:55
TString digiFile
Definition: bump_emc.C:20
FairDetector * Mvd
Definition: sim_emc_apd.C:51
void SetMdtMFIron(bool opt=false)
Definition: PndMdt.h:29
void SetStorageOfData(Bool_t val)
Definition: PndEmc.cxx:941
PndEmcMakeBump * emcMakeBump
Definition: bump_emc.C:63
TString emcDigiFile
Definition: bump_emc.C:45
FairParRootFileIo * output
Definition: sim_emc_apd.C:120
PndMdt * Muo
Definition: sim_emc_apd.C:67
Simulation of EMC.
Definition: PndEmc.h:26
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
PndEmcHdrFiller * emcHdrFiller
Definition: full_emc.C:68
FairDetector * Dsk
Definition: run_DpmSim.C:66
FairRunAna * fRun
Definition: hit_dirc.C:58
FairDetector * Gem
Definition: runJohan.C:71
void SetStorageOfData(Bool_t val)
void SetMdtMagnet(bool opt=false)
Definition: PndMdt.h:27
void SetStorageOfData(Bool_t val)
void SetStoreTrackPoints(Bool_t storeTrackPoints)
Definition: PndDsk.h:148
int emc_correction_QA_data_production(Int_t nEvents=10, TString part="gamma", TString TransportModel="TGeant3", TString emcModule="TS", TString energyRange="all", UInt_t seed=0)
FairDetector * Stt
Definition: sim_emc_apd.C:47
void SetStoreCerenkovs(Bool_t storeCerenkovs)
Definition: PndDsk.h:146
Double_t
FairModule * Dipole
Definition: sim_emc_apd.C:40
FairModule * Cave
Definition: sim_emc_apd.C:32
PndEmcMakeCluster * emcMakeCluster
Definition: full_emc.C:65
Definition: PndDrc.h:31
Int_t nEvents
Definition: hit_dirc.C:11
unsigned int seed
TStopwatch timer
Definition: hit_dirc.C:51
virtual void SetGeometryVersion(const Int_t GeoNumber)
Definition: PndEmc.cxx:966
void SetBarrel(TString name)
Definition: PndMdt.h:31
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
gDebug
Definition: sim_emc_apd.C:6
void SetStorageOfData(Bool_t val)
PndEmcHitProducer * emcHitProd
void SetStorageOfData(Bool_t val)
Method to specify whether bumps are stored or not.
Takes clusters and slits them up into bumps.
Double_t ctime
Definition: hit_dirc.C:114
PndEmcWaveformToDigi * emcWaveformToDigi
Definition: full_emc.C:61
FairParAsciiFileIo * parIo1
Definition: bump_emc.C:53
FairBoxGenerator * boxGen
Definition: sim_emc_apd.C:85
Task to cluster PndEmcDigis.
void SetEndcap(TString name)
Definition: PndMdt.h:32
void SetMuonFilter(TString name)
Definition: PndMdt.h:33
void SetRunCherenkov(Bool_t ch)
Definition: PndDrc.h:222
PndMultiFieldPar * Par
Definition: sim_emc_apd.C:115
Definition: PndStt.h:34
Definition: PndMdt.h:20
Takes list of PndEmcWaveform and creates PndEmcDigi.
FairModule * Pipe
Definition: sim_emc_apd.C:44
Double_t rtime
Definition: hit_dirc.C:113
FairDetector * Fts
Definition: sim_ftof_stof.C:58
Definition: PndDsk.h:23
Task to create Emc header.
FairModule * Magnet
Definition: sim_emc_apd.C:36
Definition: PndFts.h:25
Definition: PndCave.h:8