FairRoot/PandaRoot
runLumiPixel0SimDPM.C
Go to the documentation of this file.
1 // Lmd DPM Sim macro
2 int runLumiPixel0SimDPM(const int nEvents = 10, const int startEvent = 0,
3  const double mom = 15, TString input = "input.root", TString storePath = "tmpOutputDPM",
4  const double beam_X0 = 0.0, const double beam_Y0 = 0.0,
5  const double target_Z0 = 0.0, const double beam_width_sigma_X = 0.0,
6  const double beam_width_sigma_Y = 0.0,
7  const double target_width_Z = 0.0, // beam offset and smearing parameters
8  const double beam_grad_X = 0.0, const double beam_grad_Y = 0.0,
9  const double beam_grad_sigma_X = 0.0, const double beam_grad_sigma_Y = 0.0, // beam gradient parameters
10  const TString lmd_geometry_filename = "Luminosity-Detector.root",
11  std::string misalignment_matrices_path = "",
12  bool use_point_transform_misalignment = false,
13  const int verboseLevel = 3) {
14  // gRandom->SetSeed(seed);
15  Int_t mode = 1;
16  TStopwatch timer;
17  timer.Start();
18  gDebug = 0;
19 
20  //output1
21  TString simOutput = storePath + "/Lumi_MC_";
22  simOutput += startEvent;
23  simOutput += ".root";
24  TString parOutput = storePath + "/Lumi_Params_";
25  parOutput += startEvent;
26  parOutput += ".root";
27  //Load basic libraries
28  //gSystem->Load("libSds");
29  //gSystem->Load("libLmd");
30 
31 
32  FairRunSim *fRun = new FairRunSim();
33 
34  //set the MC version used
35  fRun->SetName("TGeant4");
36 
37  fRun->SetOutputFile(simOutput);
38 
39  //set material
40  fRun->SetMaterials("media_pnd.geo");
41 
42  fRun->SetGenerateRunInfo(false);
43  fRun->SetUseFairLinks(true);
44  // //create and add detectors
45 // //------------------------- CAVE -----------------
46 
47  FairModule *Cave = new PndCave("CAVE");
48  Cave->SetGeometryFileName("pndcave.geo");
49  fRun->AddModule(Cave);
50  //------------------------- Magnet -----------------
51  // this part is commented because the solenoid magnet is contained in MDT geo
52  FairModule *Magnet = new PndMagnet("MAGNET");
53  Magnet->SetGeometryFileName("FullSuperconductingSolenoid_v831.root");
54  fRun->AddModule(Magnet);
55  //------------------------- MDT -----------------
56  /*PndMdt *Muo = new PndMdt("MDT",kTRUE);
57  Muo->SetBarrel("fast");
58  Muo->SetEndcap("fast");
59  Muo->SetMuonFilter("fast");
60  Muo->SetForward("fast");
61  Muo->SetMdtMagnet(kTRUE);
62  Muo->SetMdtCoil(kTRUE);
63  Muo->SetMdtMFIron(kTRUE);
64  fRun->AddModule(Muo);*/
65 
66  FairModule *Dipole = new PndMagnet("MAGNET");
67  Dipole->SetGeometryFileName("dipole.geo");
68  fRun->AddModule(Dipole);
69  //------------------------- Pipe -----------------
70  FairModule *Pipe = new PndPipe("PIPE");
71  Pipe->SetGeometryFileName("beampipe_201309.root");
72  fRun->AddModule(Pipe);
73 // //------------------------- STT -----------------
74 // FairDetector *Stt= new PndStt("STT", kTRUE);
75 // Stt->SetGeometryFileName("straws_skewed_blocks_35cm_pipe.geo");
76 // fRun->AddModule(Stt);
77 // //------------------------- MVD -----------------
78 // FairDetector *Mvd = new PndMvdDetector("MVD", kTRUE);
79 // Mvd->SetGeometryFileName("Mvd-2.1_FullVersion.root");
80 // Mvd->SetVerboseLevel(verboseLevel);
81 // fRun->AddModule(Mvd);
82 // //------------------------- GEM -----------------
83 // FairDetector *Gem = new PndGemDetector("GEM", kTRUE);
84 // Gem->SetGeometryFileName("gem_3Stations.root");
85 // fRun->AddModule(Gem);
86 // //------------------------- EMC -----------------
87 // PndEmc *Emc = new PndEmc("EMC",kTRUE);
88 // Emc->SetGeometryVersion(1);
89 // Emc->SetStorageOfData(kFALSE);
90 // fRun->AddModule(Emc);
91 // //------------------------- DRC -----------------
92 // PndDrc *Drc = new PndDrc("DIRC", kTRUE);
93 // Drc->SetGeometryFileName("dirc_l0_p0_updated.root");
94 // Drc->SetRunCherenkov(kFALSE);
95 // fRun->AddModule(Drc);
96 // //------------------------- DISC -----------------
97 // PndDsk* Dsk = new PndDsk("DSK", kTRUE);
98 // Dsk->SetStoreCerenkovs(kFALSE);
99 // Dsk->SetStoreTrackPoints(kFALSE);
100 // fRun->AddModule(Dsk);
101 // //------------------------- MDT -----------------
102 // PndMdt *Muo = new PndMdt("MDT",kTRUE);
103 // Muo->SetBarrel("fast");
104 // Muo->SetEndcap("fast");
105 // Muo->SetMuonFilter("fast");
106 // Muo->SetForward("fast");
107 // Muo->SetMdtMagnet(kTRUE);
108 // Muo->SetMdtMFIron(kTRUE);
109 // fRun->AddModule(Muo);
110 // //------------------------- FTS -----------------
111 // FairDetector *Fts= new PndFts("FTS", kTRUE);
112 // Fts->SetGeometryFileName("fts.geo");
113 // fRun->AddModule(Fts);
114 // //------------------------- FTOF -----------------
115 // FairDetector *FTof = new PndFtof("FTOF",kTRUE);
116 // FTof->SetGeometryFileName("ftofwall.root");
117 // fRun->AddModule(FTof);
118 // //------------------------- RICH ----------------
119 // FairDetector *Rich= new PndRich("RICH",kFALSE);
120 // Rich->SetGeometryFileName("rich_v2.geo");
121 // fRun->AddModule(Rich);
122 
123  PndLmdDetector *Lum = new PndLmdDetector("LUM", kTRUE);
124 // Lum->SetExclusiveSensorType("LumActive"); //ignore MVD
125  Lum->SetGeometryFileName(lmd_geometry_filename);
127  fRun->AddModule(Lum);
128 
129 
130  //particle generator
131  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
132  if (beam_X0 != 0.0 || beam_Y0 != 0.0 || beam_width_sigma_X > 0.0 || beam_width_sigma_Y > 0.0) {
133  primGen->SmearGausVertexXY(true);
134  primGen->SetBeam(beam_X0, beam_Y0, beam_width_sigma_X, beam_width_sigma_Y);
135  }
136  if(target_Z0 != 0.0 || target_width_Z > 0.0) {
137  primGen->SmearGausVertexZ(true);
138  primGen->SetTarget(target_Z0, target_width_Z);
139  }
140  if (beam_grad_X != 0.0 || beam_grad_Y != 0.0 || beam_grad_sigma_X > 0.0 || beam_grad_sigma_Y > 0.0) {
141  primGen->SetBeamAngle(beam_grad_X, beam_grad_Y, beam_grad_sigma_X,
142  beam_grad_sigma_Y);
143  }
144 
145  fRun->SetGenerator(primGen);
146 
147  // DPM Generator
148  PndDpmGenerator* dpmGen = new PndDpmGenerator(input);
149  primGen->AddGenerator(dpmGen);
150  // PndDpmDirect *dpmGen = new PndDpmDirect(mom, mode, gRandom->GetSeed(), 0.1);
151  // primGen->AddGenerator(dpmGen);
152 
153  //reading the new field map in the old format
154  fRun->SetBeamMom(mom);
155  PndMultiField *fField= new PndMultiField("AUTO");
156  fRun->SetField(fField);
157 
158  fRun->SetStoreTraj(false); // toggle this for use with EVE
159 
160 
161  // set misalignement matricies
162  if (misalignment_matrices_path != "" && !use_point_transform_misalignment) {
163  // check if file exists, if true, try to read it
164  TFile *misalignmentMatrixRootfile = new TFile(misalignment_matrices_path.c_str(), "READ");
165  if (misalignmentMatrixRootfile->IsOpen()) {
166  std::map < std::string, TGeoHMatrix > *matrices;
167 
168  gDirectory->GetObject("PndLmdMisalignMatrices", matrices);
169  misalignmentMatrixRootfile->Close();
170 
171  cout << matrices->size() << " matrices successfully read from file.";
172 
173  //this call has to be made before fRun->Init();
174  fRun->AddAlignmentMatrices(*matrices);
175  cout << "matrices set!\n";
176  }
177  }
178 
179  fRun->Init();
180  ((TGeant4*)gMC)->ProcessGeantCommand("/mcVerbose/eventAction 0");
181  ((TGeant4*)gMC)->ProcessGeantCommand("/mcTracking/loopVerbose 0");
182 
183  // // Fill the Parameter containers for this run
184  // //-------------------------------------------
185  FairRuntimeDb *rtdb = fRun->GetRuntimeDb();
186  Bool_t kParameterMerged = kTRUE;
187  FairParRootFileIo* output = new FairParRootFileIo(kParameterMerged);
188  output->open(parOutput.Data(), "RECREATE");
189  rtdb->setOutput(output);
190 
191  // Transport nEvents
192  // -----------------
193  fRun->Run(nEvents);
194 
195  rtdb->saveOutput();
196  rtdb->print();
197 
198  timer.Stop();
199  Double_t rtime = timer.RealTime();
200  Double_t ctime = timer.CpuTime();
201  printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
202  return 0;
203 }
PndMultiField * fField
Definition: sim_emc_apd.C:97
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
int verboseLevel
Definition: Lars/runMvdSim.C:7
Bool_t kParameterMerged
Definition: sim_emc_apd.C:113
PndDpmGenerator * dpmGen
Int_t startEvent
TString storePath
Double_t mom
Definition: plot_dirc.C:14
FairParRootFileIo * output
Definition: sim_emc_apd.C:120
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
TString parOutput
FairRunAna * fRun
Definition: hit_dirc.C:58
Int_t mode
Definition: autocutx.C:47
Double_t
FairModule * Dipole
Definition: sim_emc_apd.C:40
FairModule * Cave
Definition: sim_emc_apd.C:32
Int_t nEvents
Definition: hit_dirc.C:11
TStopwatch timer
Definition: hit_dirc.C:51
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
gDebug
Definition: sim_emc_apd.C:6
Double_t ctime
Definition: hit_dirc.C:114
TString simOutput
void SetVerboseLevel(Int_t level)
FairModule * Pipe
Definition: sim_emc_apd.C:44
Double_t rtime
Definition: hit_dirc.C:113
FairModule * Magnet
Definition: sim_emc_apd.C:36
int runLumiPixel0SimDPM(const int nEvents=10, const int startEvent=0, const double mom=15, TString input="input.root", TString storePath="tmpOutputDPM", const double beam_X0=0.0, const double beam_Y0=0.0, const double target_Z0=0.0, const double beam_width_sigma_X=0.0, const double beam_width_sigma_Y=0.0, const double target_width_Z=0.0, const double beam_grad_X=0.0, const double beam_grad_Y=0.0, const double beam_grad_sigma_X=0.0, const double beam_grad_sigma_Y=0.0, const TString lmd_geometry_filename="Luminosity-Detector.root", std::string misalignment_matrices_path="", bool use_point_transform_misalignment=false, const int verboseLevel=3)
Definition: PndCave.h:8