FairRoot/PandaRoot
emc_correction_data_production.C
Go to the documentation of this file.
1 // Macro produces data for energy-position correction of EMC
2 // Data should be produced once for each particle type (gamma, electron)
3 // transport model (TGeant3, TGeant4)
4 // Full Panda geometry or EMC only useFullPandaGeometry=true/false
5 // emcModule = TS/shashlyk
6 int emc_correction_data_production(Int_t nEvents = 10, TString part="gamma", TString TransportModel = "TGeant3", Bool_t useFullPandaGeometry=true, 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  } else if (emcModule=="shashlyk")
15  {
16  Double_t theta_min = 0; Double_t theta_max = 10;
17  } else
18  {
19  std::cout<<"Incorrect emcModule parameter: "<<emcModule<<std::endl;
20  abort();
21  }
22 
23  // energyRange= "low", "high", "all"
24  if (energyRange=="low")
25  {
26  Double_t momentum_min = 0.0; Double_t momentum_max = 1.5;
27  } else if (energyRange=="high")
28  {
29  Double_t momentum_min = 1.0; Double_t momentum_max = 10.0;
30  } else if (energyRange=="all")
31  {
32  Double_t momentum_min = 0.0; Double_t momentum_max = 10.0;
33  } else
34  {
35  std::cout<<"Incorrect parameter energyRange: "<<energyRange<<std::endl;
36  abort();
37  }
38 
39  TString pandaGeometry;
40  if (useFullPandaGeometry==0)
41  pandaGeometry="emc";
42  else
43  pandaGeometry="full";
44 
45  TString s1; s1+=seed;
46 
47  TString OutputSimFile = "emc_complete";
48  OutputSimFile = OutputSimFile+"_"+part+"_"+TransportModel+
49  "_"+pandaGeometry+"_"+emcModule+"_"+s1+".root";
50  TString OutputDatabaseFile = "simparams";
51  OutputDatabaseFile = OutputDatabaseFile+"_"+part+"_"+TransportModel+
52  "_"+pandaGeometry+"_"+emcModule+"_"+s1+".root";
53 
54  TStopwatch timer;
55  timer.Start();
56  gDebug=0;
57 
58  FairLogger::GetLogger()->SetLogToFile(kFALSE);
59  FairRunSim *fRun = new FairRunSim();
60 
61  TString digiFile = "emc.par";
62 
63  // set the MC version used
64  // ------------------------
65 
66  fRun->SetName(TransportModel);
67 
68 
69  fRun->SetOutputFile(OutputSimFile);
70 
71 
74  TString emcDigiFile = gSystem->Getenv("VMCWORKDIR");
75  emcDigiFile += "/macro/params/";
76  emcDigiFile += digiFile;
77 
79  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
80  FairParAsciiFileIo* parIo1 = new FairParAsciiFileIo();
81  parIo1->open(emcDigiFile.Data(),"in");
82  rtdb->setFirstInput(parIo1);
84 
86  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
87  output->open(OutputDatabaseFile);
88  rtdb->setOutput(output);
89 
90 
91 
92  // Set Material file Name
93  //-----------------------
94  fRun->SetMaterials("media_pnd.geo");
95 
96  // Create and add detectors
97  //-------------------------
98  FairModule *Cave= new PndCave("CAVE");
99  Cave->SetGeometryFileName("pndcave.geo");
100  fRun->AddModule(Cave);
101 
102  PndEmc *Emc = new PndEmc("EMC",kTRUE);
103  Emc->SetGeometryVersion(1);
104  Emc->SetStorageOfData(kFALSE);
105  fRun->AddModule(Emc);
106 
107  if (useFullPandaGeometry)
108  {
109  FairModule *Magnet= new PndMagnet("MAGNET");
110  Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root");
111  fRun->AddModule(Magnet);
112 
113  FairModule *Dipole= new PndMagnet("MAGNET");
114  Dipole->SetGeometryFileName("dipole.geo");
115  fRun->AddModule(Dipole);
116 
117  FairModule *Pipe= new PndPipe("PIPE");
118  Pipe->SetGeometryFileName("beampipe_201309.root");
119  fRun->AddModule(Pipe);
120 
121  FairDetector *Stt= new PndStt("STT", kTRUE);
122  Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo");
123  fRun->AddModule(Stt);
124 
125  FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
126  Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root");
127  fRun->AddModule(Mvd);
128 
129  //------------------------- MDT -----------------
130  PndMdt *Muo = new PndMdt("MDT",kTRUE);
131  Muo->SetBarrel("fast");
132  Muo->SetEndcap("fast");
133  Muo->SetMuonFilter("fast");
134  Muo->SetForward("fast");
135  Muo->SetMdtMagnet(kTRUE);
136  Muo->SetMdtMFIron(kTRUE);
137  fRun->AddModule(Muo);
138 
139  FairDetector *Gem = new PndGemDetector("GEM", kTRUE);
140  Gem->SetGeometryFileName("gem_3Stations.root");
141  fRun->AddModule(Gem);
142  //------------------------- SCITIL -----------------
143  FairDetector *SciT = new PndSciT("SCIT",kTRUE);
144  SciT->SetGeometryFileName("barrel-SciTil_07022013.root");
145  fRun->AddModule(SciT);
146  //------------------------- DRC -----------------
147  PndDrc *Drc = new PndDrc("DIRC", kTRUE);
148  Drc->SetGeometryFileName("dirc_l0_p0_updated.root");
149  Drc->SetRunCherenkov(kFALSE);
150  fRun->AddModule(Drc);
151 
152  PndDsk* Dsk = new PndDsk("DSK", kTRUE);
153  Dsk->SetGeometryFileName("dsk.root");
154  Dsk->SetStoreCerenkovs(kFALSE);
155  Dsk->SetStoreTrackPoints(kFALSE);
156  fRun->AddModule(Dsk);
157 
158  FairDetector *Fts= new PndFts("FTS", kTRUE);
159  Fts->SetGeometryFileName("fts.geo");
160  fRun->AddModule(Fts);
161  }
162 
163  // Create and Set Event Generator
164  //-------------------------------
165 
166  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
167  fRun->SetGenerator(primGen);
168 
169  TDatabasePDG *pdg = new TDatabasePDG();
170  Int_t part_pid = pdg->GetParticle(part)->PdgCode();
171 
172  // Box Generator:
173  FairBoxGenerator* boxGen = new FairBoxGenerator(part_pid, 1); // 13 = muon; 1 = multipl. // 211 = pi+
174  // first number: PDG particle code: 2nd number: particle multiplicity per event
175 
176  boxGen->SetPRange(momentum_min,momentum_max); // GeV/c
177  // boxGen->SetPtRange(1.,1.); // GeV/c
178  boxGen->SetPhiRange(phi_min, phi_max); // Azimuth angle range [degree]
179  boxGen->SetThetaRange(theta_min, theta_max); // Polar angle in lab system range [degree]
180  boxGen->SetXYZ(0., 0., 0.); // vertex coordinates [mm]
181  primGen->AddGenerator(boxGen);
182 
183  // fRun->SetStoreTraj(kTRUE); // to store particle trajectories
184  fRun->SetBeamMom(15);
185  //---------------------Create and Set the Field(s)----------
186  PndMultiField *fField= new PndMultiField("FULL");
187  fRun->SetField(fField);
188 
193  emcHitProd->SetStorageOfData(kFALSE);//FALSE);
194  fRun->AddTask(emcHitProd);
195 
198  emcHitsToWaveform->SetStorageOfData(kFALSE);
199  emcWaveformToDigi->SetStorageOfData(kTRUE);
200  fRun->AddTask(emcHitsToWaveform); // full digitization
201  fRun->AddTask(emcWaveformToDigi); // full digitization
202 
204  emcMakeCluster->SetStorageOfData(kTRUE);
205  fRun->AddTask(emcMakeCluster);
206 
208  fRun->AddTask(emcHdrFiller); // ECM header
209 
211  emcMakeBump->SetStorageOfData(kTRUE);
212  fRun->AddTask(emcMakeBump);
213 
215  fRun->Init();
217  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
218  if (fField) { Par->SetParameters(fField); }
219  Par->setInputVersion(fRun->GetRunId(),1);
220  Par->setChanged();
221 
223  rtdb->saveOutput();
224  // rtdb->print();
225 
226  fRun->Run(nEvents);
227  timer.Stop();
228 
229  Double_t rtime = timer.RealTime();
230  Double_t ctime = timer.CpuTime();
231  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
232 
233  return 0;
234 }
235 
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
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
int emc_correction_data_production(Int_t nEvents=10, TString part="gamma", TString TransportModel="TGeant3", Bool_t useFullPandaGeometry=true, TString emcModule="TS", TString energyRange="all", UInt_t seed=0)
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