FairRoot/PandaRoot
Functions
runLumiPixel0SimBox.C File Reference

Go to the source code of this file.

Functions

int runLumiPixel0SimBox (const int nEvents=10, const int startEv=0, TString storePath="tmpOutput", const int verboseLevel=0, const int particle=-2212, double mom=15, const int trkNum=1, const int seed=0, const double dP=0, TString geometryFile="")
 

Function Documentation

int runLumiPixel0SimBox ( const int  nEvents = 10,
const int  startEv = 0,
TString  storePath = "tmpOutput",
const int  verboseLevel = 0,
const int  particle = -2212,
double  mom = 15,
const int  trkNum = 1,
const int  seed = 0,
const double  dP = 0,
TString  geometryFile = "" 
)

Definition at line 4 of file runLumiPixel0SimBox.C.

References Bool_t, Cave, ctime, Dipole, Double_t, fBox, fField, fRun, gDebug, gGeoManager, i, kParameterMerged, Magnet, mom, nEvents, output, Par, parOutput, particle, Pipe, primGen, printf(), rtdb, rtime, seed, PndSdsDetector::SetExclusiveSensorType(), PndLmdDetector::SetMisalignmentMatrices(), PndMultiFieldPar::SetParameters(), PndSdsDetector::SetVerboseLevel(), simOutput, storePath, timer, TString, and verboseLevel.

6  {
7 
8  // ///PROOF lite
9  // TProof::Open("");
10 
11  if (geometryFile == "") {
12  geometryFile = "Luminosity-Detector.root";
13  }
14 
15  gRandom->SetSeed(seed);
16  //gRandom->SetSeed(0);
17  TStopwatch timer;
18  timer.Start();
19  gDebug = 0;
20  mom += dP;
21  cout << "We start run for beam Mom = " << mom << endl;
22  //output1
23  TString simOutput = storePath + "/Lumi_MC_";
24  simOutput += startEv;
25  simOutput += ".root";
26  TString parOutput = storePath + "/Lumi_Params_";
27  parOutput += startEv;
28  parOutput += ".root";
29 
30  // //Load basic libraries
31  // gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
32  // gSystem->Load("libSds");
33  // gSystem->Load("libLmd");
34  FairRunSim *fRun = new FairRunSim();
35  cout << "All libraries succsesfully loaded!" << endl;
36 
37  //set the MC version used
38  fRun->SetName("TGeant4");
39  //fRun->SetName("TGeant3"); //GEANE uses GEANT3!
40 
41  fRun->SetOutputFile(simOutput);
42 
43  //set material
44  fRun->SetMaterials("media_pnd.geo");
45 
46  //create and add detectors
47  FairModule *Cave = new PndCave("CAVE");
48  //Cave->SetGeometryFileName("../macro/lmd/pndcaveVAC.geo");
49  Cave->SetGeometryFileName("pndcave.geo");
50  fRun->AddModule(Cave);
51 
52  FairModule *Pipe = new PndPipe("PIPE");
53  // Pipe->SetGeometryFileName("../macro/lmd/geo/beampipe_201303.root");
54  Pipe->SetGeometryFileName("beampipe_201309.root");
55  fRun->AddModule(Pipe);
56 
57  FairModule *Magnet = new PndMagnet("MAGNET");
58  Magnet->SetGeometryFileName("FullSolenoid_V842.root");
59  fRun->AddModule(Magnet);
60 
61  FairModule *Dipole = new PndMagnet("MAGNET");
62  Dipole->SetGeometryFileName("dipole.geo");
63  fRun->AddModule(Dipole);
64 
65  PndLmdDetector *Lum = new PndLmdDetector("LUM", kTRUE);
66  Lum->SetExclusiveSensorType("LumActive"); //ignore MVD
67  // Lum->SetGeometryFileName("../macro/lmd/geo/Test-Dipol-Design.root"); //sensors with trap shape
68  // Lum->SetGeometryFileName("../macro/lmd/geo/HV_MAPS-Design-29052013.root"); // LMD including box etc
69  Lum->SetGeometryFileName(geometryFile);
70  //Lum->SetGeometryFileName("../macro/lmd/geo/HV_MAPS-Design-SensorsOnly.root"); // LMD, sensors only
72 
73  fRun->AddModule(Lum);
74 
75  //particle generator
76  FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
77 
78  fRun->SetGenerator(primGen);
79 
80  // Box Generator
81  FairBoxGenerator *fBox = new FairBoxGenerator(particle, trkNum);
82  fBox->SetPRange(mom, mom);
83  // fBox->SetThetaRange(0.52,0.63); // 9 ... 11 mrad
84  // fBox->SetThetaRange(0.12,0.7); // 2... 12 mrad
85  // fBox->SetThetaRange(1.3,1.4); // mrad outside of the detector geometry by purpose
86  fBox->SetThetaRange(0.13, 0.65); // 2... 11 mrad
87  //fBox->SetThetaRange(0.12,0.65); // 2... 11 mrad
88  //fBox->SetThetaRange(0.229183, 0.458366); //4 ... 8 mrad
89  //fBox->SetThetaRange(0.229183,0.31512);//4..5.5 mrad
90  //fBox->SetThetaRange(0.229,0.229);//4..mrad
91  //fBox->SetThetaRange(0.458366, 0.458366); //!!! 8 mrad
92  //fBox->SetThetaRange(0., 45.);//TEST
93  //fBox->SetPhiRange(90,90.);
94  fBox->SetPhiRange(0, 360.);
95  //fBox->SetPhiRange(0.5,359.5); //FOR missed track check
96  //fBox->SetPhiRange(0.,20.);//!!! TEST
97  //fBox->SetThetaRange(0.344,0.344); //!!! TEST ~ 6 mrad
98  //fBox->SetPhiRange(45,45);//TEST
99  primGen->AddGenerator(fBox);
100 
101  //reading the new field map in the old format
102  fRun->SetBeamMom(mom);
103 
104  PndMultiField *fField = new PndMultiField("AUTO");
105 
106  fRun->SetField(fField);
107 
108  if (nEvents < 101)
109  fRun->SetStoreTraj(kTRUE); // toggle this for use with EVE
110  else
111  fRun->SetStoreTraj(kFALSE);
112 
113  // misalign Geometery
114  bool misalignedGeometry = false;
115  if (misalignedGeometry) {
116 
117  string misMatricesFilePath = "misalignMatrices-SensorsOnly.root";
118 
119  // check if file exists, if true, try to read it
120  TFile *misalignmentMatrixRootfile = new TFile(misMatricesFilePath.c_str(), "READ");
121  if (misalignmentMatrixRootfile->IsOpen()) {
122 
123  printf("File opened successfully\n");
124  std::map < std::string, TGeoHMatrix > *matrices;
125 
126  gDirectory->GetObject("PndLmdMisalignMatrices", matrices);
127  misalignmentMatrixRootfile->Close();
128 
129  cout << matrices->size() << " matrices successfully read from file.";
130 
131  Lum->SetMisalignmentMatrices(*matrices);
132  cout << "matrix set!\n";
133 
134  if (true) {
135  // checking for good measure
136  for (auto &i : *matrices) {
137  cout << "\n---\n" << i.first << "\n";
138  i.second.Print();
139  }
140  }
141 
142  }
143 
144  // if not, fail violently
145  else {
146  cerr << "WARNING. I was instructed to use misaligned geometry,\n";
147  cerr << "but no misaligned matrices could be found in " << misMatricesFilePath << "\n";
148  return 1;
149  }
150 
151  }
152 
153  // fRun->SetStoreTraj(kTRUE);
154  fRun->Init();
155 
156  // Fill the Parameter containers for this run
157  //-------------------------------------------
158  FairRuntimeDb *rtdb = fRun->GetRuntimeDb();
159  Bool_t kParameterMerged = kTRUE;
160  FairParRootFileIo* output = new FairParRootFileIo(kParameterMerged);
161  output->open(parOutput.Data(), "RECREATE");
162  rtdb->setOutput(output);
163  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
164  if (fField) {
165  Par->SetParameters(fField);
166  }
167  Par->setInputVersion(fRun->GetRunId(), 1);
168  Par->setChanged();
169 
170  // Transport nEvents
171  // -----------------
172 
173  fRun->Run(nEvents);
174 
175  rtdb->saveOutput();
176  rtdb->print();
177 
178  timer.Stop();
179  Double_t rtime = timer.RealTime();
180  Double_t ctime = timer.CpuTime();
181  printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
182 
183  // temporary fix to avoid double frees at the destruction of te program for pandaroot/fairroot with root6
184  gGeoManager->GetListOfVolumes()->Delete();
185  gGeoManager->GetListOfShapes()->Delete();
186  delete gGeoManager;
187 
188  return 0;
189 }
void SetMisalignmentMatrices(const std::map< std::string, TGeoHMatrix > &alignmentMatrices)
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
Int_t i
Definition: run_full.C:25
void SetExclusiveSensorType(const TString sens)
void SetParameters(FairField *field)
TString storePath
Double_t mom
Definition: plot_dirc.C:14
TGeoManager * gGeoManager
FairBoxGenerator * fBox
FairParRootFileIo * output
Definition: sim_emc_apd.C:120
FairPrimaryGenerator * primGen
Definition: sim_emc_apd.C:81
const int particle
TString parOutput
FairRunAna * fRun
Definition: hit_dirc.C:58
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
unsigned int seed
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
PndMultiFieldPar * Par
Definition: sim_emc_apd.C:115
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
Definition: PndCave.h:8