FairRoot/PandaRoot
runLumiPixel0SimBox.C
Go to the documentation of this file.
1 // Panda FullSim macro
2 
3 //void runLumi0SimBox(const int nEvents=10, const double mom=15, TString storePath="tmpOutput", const int verboseLevel=0, const int particle=-211)
4 int runLumiPixel0SimBox(const int nEvents = 100, const int startEv = 0, TString storePath = "tmpOutput",
5  const int verboseLevel = 0, const int particle = -2212, double mom = 15, const int trkNum = 1,
6  const int seed = 0, const double dP = 0, TString geometryFile = "") {
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) fRun->SetStoreTraj(kTRUE); // toggle this for use with EVE
109  else fRun->SetStoreTraj(kFALSE);
110 
111  bool misalignedGeometry = true;
112  if (misalignedGeometry) {
113  string misMatricesFilePath = "geo/misalignMatrices-SensorsOnly-100.root";
114  // check if file exists, if true, try to read it
115  TFile *misalignmentMatrixRootfile = new TFile(misMatricesFilePath.c_str(), "READ");
116  if (misalignmentMatrixRootfile->IsOpen()) {
117  printf("File opened successfully\n");
118  std::map < std::string, TGeoHMatrix > *matrices;
119  gDirectory->GetObject("PndLmdMisalignMatrices", matrices);
120  misalignmentMatrixRootfile->Close();
121  cout << matrices->size() << " matrices successfully read from file.";
122  Lum->SetMisalignmentMatrices(*matrices);
123  cout << "matrix set!\n";
124  }
125 
126  // if not, fail violently
127  else {
128  cerr << "WARNING. I was instructed to use misaligned geometry,\n";
129  cerr << "but no misaligned matrices could be found in " << misMatricesFilePath << "\n";
130  return 1;
131  }
132  }
133 
134  fRun->Init();
135 
136  // Fill the Parameter containers for this run
137  //-------------------------------------------
138  FairRuntimeDb *rtdb = fRun->GetRuntimeDb();
139  Bool_t kParameterMerged = kTRUE;
140  FairParRootFileIo* output = new FairParRootFileIo(kParameterMerged);
141  output->open(parOutput.Data(), "RECREATE");
142  rtdb->setOutput(output);
143  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
144  if (fField) {
145  Par->SetParameters(fField);
146  }
147  Par->setInputVersion(fRun->GetRunId(), 1);
148  Par->setChanged();
149 
150  // Transport nEvents
151  // -----------------
152 
153  fRun->Run(nEvents);
154 
155  rtdb->saveOutput();
156  rtdb->print();
157 
158  timer.Stop();
159  Double_t rtime = timer.RealTime();
160  Double_t ctime = timer.CpuTime();
161  printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
162 
163  FairLogger *logger = FairLogger::GetLogger();
164 
165  // log to screen and to file
166  logger->SetLogToScreen(kTRUE);
167  logger->SetLogToFile(kFALSE);
168 
169  logger->SetLogVerbosityLevel("LOW");
170 
171  // Set different levels of verbosity. In the example everything >=INFO goes to the
172  // file and everything >= ERROR is printed on the screen
173  // LogLevels are (FATAL, ERROR, WARNING, INFO, DEBUG, DEBUG1, DEBUG2, DEBUG3, DEBUG4)
174  logger->SetLogScreenLevel("INFO"); //Only FATAL and ERROR to screen
175 
176  // temporary fix to avoid double frees at the destruction of te program for pandaroot/fairroot with root6
177  gGeoManager->GetListOfVolumes()->Delete();
178  gGeoManager->GetListOfShapes()->Delete();
179  delete gGeoManager;
180 
181  return 0;
182 }
183 
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
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 runLumiPixel0SimBox(const int nEvents=100, 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="")
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