FairRoot/PandaRoot
Functions
emc_correction_data_production.C File Reference

Go to the source code of this file.

Functions

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)
 

Function Documentation

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 
)

Set the digitization parameters

Get the run time data base for this session and set the needed input

Parameters created for this simulation goes to the out put

Add Hit producer task to the simulation

Initialize the session

After initialization now we can save the field parameters

All parameters are initialized and ready to be saved

Definition at line 6 of file emc_correction_data_production.C.

References Bool_t, boxGen, Cave, ctime, digiFile, Dipole, Double_t, Drc, Dsk, Emc, emcDigiFile, emcHdrFiller, emcHitProd, emcHitsToWaveform, emcMakeBump, emcMakeCluster, emcWaveformToDigi, fField, fRun, Fts, gDebug, Gem, kParameterMerged, Magnet, Muo, Mvd, nEvents, output, Par, parIo1, Pipe, primGen, printf(), rtdb, rtime, seed, PndMdt::SetBarrel(), PndMdt::SetEndcap(), PndMdt::SetForward(), PndEmc::SetGeometryVersion(), PndMdt::SetMdtMagnet(), PndMdt::SetMdtMFIron(), PndMdt::SetMuonFilter(), PndMultiFieldPar::SetParameters(), PndDrc::SetRunCherenkov(), PndEmcMakeCluster::SetStorageOfData(), PndEmcMakeBump::SetStorageOfData(), PndEmcHitsToWaveform::SetStorageOfData(), PndEmcWaveformToDigi::SetStorageOfData(), PndEmcHitProducer::SetStorageOfData(), PndEmc::SetStorageOfData(), PndDsk::SetStoreCerenkovs(), PndDsk::SetStoreTrackPoints(), Stt, timer, and TString.

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 }
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
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