FairRoot/PandaRoot
emc.C
Go to the documentation of this file.
1 void emc(Int_t nEvents = 10, Char_t part[]="e-", Double_t momentum_min = 1.0, Double_t momentum_max = 1.0, Double_t theta_min = 0, Double_t theta_max = 180, Double_t phi_min = 0, Double_t phi_max = 360, Char_t OutputSimFile[] = "sim_emc.root", Char_t OutputDatabaseFile[] = "simparams.root", Char_t TransportModel[] = "TGeant3", UInt_t seed=0, Bool_t savepoints=kFALSE, Bool_t savehits=kFALSE, Bool_t savewaves=kFALSE, Bool_t savedigis=kFALSE, Bool_t saveclusters=kTRUE, Bool_t savebumps=kTRUE)
2 {
3  gRandom->SetSeed(seed);
4  TStopwatch timer;
5  timer.Start();
6  gDebug=0;
7  // Load basic libraries
8  // If it does not work, please check the path of the libs and put it by hands
9 
10  //gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C");
11  //basiclibs();
12 
13  // Load this example libraries
14  //gSystem->Load("libGeoBase");
15  //gSystem->Load("libParBase");
16  //gSystem->Load("libBase");
17  //gSystem->Load("libPndData");
18  //gSystem->Load("libField");
19  //gSystem->Load("libPassive"); // add other detector's lib if you need them
20  //gSystem->Load("libEmc");
21  //gSystem->Load("libGen");
22 
23  FairRunSim *fRun = new FairRunSim();
24 
25  // Set the number of events
26  // Int_t nEvents = 10000;
27 
28  // set the MC version used
29  // ------------------------
30 
31  fRun->SetName(TransportModel);
32 
33  fRun->SetOutputFile(OutputSimFile);
34 
35  // Set Material file Name
36  //-----------------------
37 
38  fRun->SetMaterials("media_pnd.geo");
39 
40  // Create and add detectors
41  //-------------------------
42 
43  FairModule *Cave= new PndCave("CAVE");
44  Cave->SetGeometryFileName("pndcave.geo");
45  fRun->AddModule(Cave);
46 
47  //FairModule *Magnet= new CbmMagnet("MAGNET");
48  //Magnet->SetGeometryFileName("magnet.geo");
49  //fRun->AddModule(Magnet);
50 
51  PndEmc *Emc = new PndEmc("EMC",kTRUE);
52  Emc->SetGeometryVersion(15);
53  Emc->SetStorageOfData(savepoints);
54  fRun->AddModule(Emc);
55 
56  // Create and Set Event Generator
57  //-------------------------------
58 
59  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
60  fRun->SetGenerator(primGen);
61 
62  // Box Generator:
63 
64  TDatabasePDG *pdg = new TDatabasePDG();
65  Int_t pid = pdg->GetParticle(part)->PdgCode();
66 
67  FairBoxGenerator* boxGen = new FairBoxGenerator(pid, 1);
68  // first number: PDG particle code: 2nd number: particle multiplicity per event
69 
70  boxGen->SetPRange(momentum_min,momentum_max); // GeV/c
71  boxGen->SetPhiRange(phi_min, phi_max); // Azimuth angle range [degree]
72  boxGen->SetThetaRange(theta_min, theta_max); // Polar angle in lab system range [degree]
73  boxGen->SetXYZ(0., 0., 0.); // vertex coordinates [mm]
74  primGen->AddGenerator(boxGen);
75 
76  fRun->SetStoreTraj(kFALSE); // to store particle trajectories
77 
79 
80  PndTransMap *map= new PndTransMap("TransMap", "R");
81  PndDipoleMap *map1= new PndDipoleMap("DipoleMap", "R");
82  PndSolenoidMap *map2= new PndSolenoidMap("SolenoidMap", "R");
83  fField->AddField(map);
84  fField->AddField(map1);
85  fField->AddField(map2);
86 
87  fRun->SetField(fField);
88 
89  // -------- Analysis part ------------------------
90 
92  emcHitProd->SetStorageOfData(savehits);
93  fRun->AddTask(emcHitProd);
94 
97  emcHitsToWaveform->SetStorageOfData(savewaves);
98  emcWaveformToDigi->SetStorageOfData(savedigis);
99  fRun->AddTask(emcHitsToWaveform); // full digitization
100  fRun->AddTask(emcWaveformToDigi); // full digitization
101 
103  emcMakeCluster->SetStorageOfData(saveclusters);
104  fRun->AddTask(emcMakeCluster);
105 
107  fRun->AddTask(emcHdrFiller); // ECM header
108 
110  emcMakeBump->SetStorageOfData(savebumps);
111  fRun->AddTask(emcMakeBump);
112 
113  // -------------------------------------------------
114 
115  // ----- Parameter database --------------------------------------------
116  TString emcDigiFile = gSystem->Getenv("VMCWORKDIR");
117 
118  TString digiFile = "emc.par";
119  emcDigiFile += "/macro/params/";
120  emcDigiFile += digiFile;
121 
122  TString parFile = OutputDatabaseFile;
123 
124  FairRuntimeDb* rtdb = fRun->GetRuntimeDb();
125  Bool_t kParameterMerged = kTRUE;
126  FairParRootFileIo* parOutput = new FairParRootFileIo(kParameterMerged);
127  parOutput->open(parFile.Data());
128 
129  FairParAsciiFileIo* parIo = new FairParAsciiFileIo();
130  parIo->open(emcDigiFile.Data(),"in");
131 
132  rtdb->setOutput(parOutput);
133  rtdb->setFirstInput(parIo);
134  // ----------------------------------------------------------
135 
136  fRun->Init();
137 
138  // Fill the Parameter containers for this run
139  //-------------------------------------------
140 
141  FairRuntimeDb *rtdb=fRun->GetRuntimeDb();
142  Bool_t kParameterMerged=kTRUE;
143 
144  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
145  if (fField) { Par->SetParameters(fField); }
146  Par->setInputVersion(fRun->GetRunId(),1);
147  Par->setChanged();
148 
149  FairParRootFileIo* output=new FairParRootFileIo(kParameterMerged);
150  output->open("simparams.root");
151 
152  rtdb->setOutput(output);
153  rtdb->saveOutput();
154  rtdb->print();
155 
156  // Transport nEvents
157  // -----------------
158 
159  fRun->Run(nEvents);
160 
161  timer.Stop();
162 
163  Double_t rtime = timer.RealTime();
164  Double_t ctime = timer.CpuTime();
165  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
166 }
167 
Takes list of PndEmcHits and creates PndEmcWaveform.
PndMultiField * fField
Definition: sim_emc_apd.C:97
void SetStorageOfData(Bool_t val)
Method to specify whether clusters are stored or not.
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
PndSolenoidMap * map2
Definition: sim_emc_apd.C:101
PndEmcHitsToWaveform * emcHitsToWaveform
Definition: full_emc.C:60
Bool_t kParameterMerged
Definition: sim_emc_apd.C:113
void emc(Int_t nEvents=10, Char_t part[]="e-", Double_t momentum_min=1.0, Double_t momentum_max=1.0, Double_t theta_min=0, Double_t theta_max=180, Double_t phi_min=0, Double_t phi_max=360, Char_t OutputSimFile[]="sim_emc.root", Char_t OutputDatabaseFile[]="simparams.root", Char_t TransportModel[]="TGeant3", UInt_t seed=0, Bool_t savepoints=kFALSE, Bool_t savehits=kFALSE, Bool_t savewaves=kFALSE, Bool_t savedigis=kFALSE, Bool_t saveclusters=kTRUE, Bool_t savebumps=kTRUE)
Definition: emc.C:1
void SetParameters(FairField *field)
PndTransMap * map
Definition: sim_emc_apd.C:99
creates PndEmcHits from PndEmcPoints
PndEmc * Emc
Definition: sim_emc_apd.C:55
int pid()
TString digiFile
Definition: bump_emc.C:20
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
Simulation of EMC.
Definition: PndEmc.h:26
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
PndEmcHdrFiller * emcHdrFiller
Definition: full_emc.C:68
TString parOutput
FairRunAna * fRun
Definition: hit_dirc.C:58
void SetStorageOfData(Bool_t val)
void SetStorageOfData(Bool_t val)
Double_t
TString parFile
Definition: hit_dirc.C:14
FairModule * Cave
Definition: sim_emc_apd.C:32
PndEmcMakeCluster * emcMakeCluster
Definition: full_emc.C:65
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
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
FairBoxGenerator * boxGen
Definition: sim_emc_apd.C:85
Task to cluster PndEmcDigis.
PndDipoleMap * map1
Definition: sim_emc_apd.C:100
PndMultiFieldPar * Par
Definition: sim_emc_apd.C:115
void AddField(FairField *field)
Takes list of PndEmcWaveform and creates PndEmcDigi.
Double_t rtime
Definition: hit_dirc.C:113
Task to create Emc header.
Definition: PndCave.h:8