Project
Loading...
Searching...
No Matches
FairRunSim.cxx
Go to the documentation of this file.
1/********************************************************************************
2 * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3 * *
4 * This software is distributed under the terms of the *
5 * GNU Lesser General Public Licence (LGPL) version 3, *
6 * copied verbatim in the file "LICENSE" *
7 ********************************************************************************/
8// Modified for ALICE O2 in 2026: parts not used by O2 were removed (see README.md in this directory).
9
10// ----- FairRunSim source file -----
11// ----- Created 06/01/04 by M. Al-Turany -----
12
13#include "FairRunSim.h"
14
15#include "FairField.h" // for FairField
16#include "FairFileHeader.h" // for FairFileHeader
17#include "FairGenericVMCConfig.h" // for FairGenericVMCConfig
18#include "FairGeoInterface.h" // for FairGeoInterface
19#include "FairGeoLoader.h" // for FairGeoLoader
20#include "FairLogger.h" // for FairLogger, MESSAGE_ORIGIN
21#include "FairMCEventHeader.h" // for FairMCEventHeader
22#include "FairMesh.h" // for FairMesh
23#include "FairModule.h" // for FairModule
24#include "FairPrimaryGenerator.h" // for FairPrimaryGenerator
25#include "FairRootManager.h" // for FairRootManager
26#include "FairRunIdGenerator.h" // for FairRunIdGenerator
27#include "FairTask.h" // for FairTask
28#include "FairTrajFilter.h" // for FairTrajFilter
29
30#include <TCollection.h> // for TIter
31#include <TGeoManager.h> // for gGeoManager
32#include <TList.h> // for TList
33#include <TObjString.h> // for TObjString
34#include <TObject.h> // for TObject
35#include <TRandom.h> // for gRandom
36#include <TSystem.h> // for TSystem, gSystem
37#include <iostream> // for cout, endl, ostream
38#include <stdlib.h> // for getenv, nullptr
39#include <string.h> // for strcmp, strncmp
40
41using std::cout;
42using std::endl;
43
45
46FairRunSim::FairRunSim(Bool_t isMaster)
47 : FairRun(isMaster)
48 , count(0)
49 , fApp(nullptr)
50 , fBeamMom(0)
51 , fUseBeamMom(kFALSE)
52 , fGen(nullptr)
53 , fMCEvHead(nullptr)
54 , fField(nullptr)
55 , fMapName("")
56 , fIons(new TObjArray())
57 , fParticles(new TObjArray())
58 , ListOfModules(new TObjArray())
59 , MatFname("")
60 , fStoreTraj(kFALSE)
61 , fLoaderName(new TString("TGeo"))
62 , fPythiaDecayer(kFALSE)
63 , fPythiaDecayerConfig("")
64 , fUserDecay(kFALSE)
65 , fUserDecayConfig("")
66 , fRadLength(kFALSE)
67 , fRadMap(kFALSE)
68 , fRadGrid(kFALSE)
69 , fMeshList(new TObjArray())
70 , fUserConfig("")
71 , fUserCuts("SetCuts.C")
72 , fIsMT(kFALSE)
73 , fImportTGeoToVMC(kTRUE)
74 , fSimulationConfig(nullptr)
75
76{
77 if (fginstance) {
78 Fatal("FairRun", "Singleton instance already exists.");
79 return;
80 }
81 fginstance = this;
82 fRunId = 0;
83 fAna = kFALSE;
84}
85
87{
88 LOG(debug) << "Enter Destructor of FairRunSim ";
89
90 // delete fApp;
91
96 LOG(debug) << "Start deleting all registered modules";
97 ListOfModules->Delete();
98 delete ListOfModules;
99 LOG(debug) << "Finish deleting all registered modules";
100
101 fIons->Delete();
102 delete fIons;
103 fParticles->Delete();
104 delete fParticles;
105
106 delete fApp;
107 // delete fField;
108 // Not owner of the field
109 delete fGen;
110 delete fMCEvHead;
111}
112
114
116{
117 ListOfModules->Add(Mod);
118 Mod->SetModId(count++);
119}
120
122{
123 Mesh->print();
124 Mesh->calculate();
125 fMeshList->Add(Mesh);
126}
127
129{
131 return fIons;
132}
133
135{
137 return fParticles;
138}
139
141{
144
145 CheckFlukaExec();
146
147 // fOutFile=fRootManager->OpenOutFile(fOutname);
148 LOG(info) << "============== FairRunSim: Initialising simulation run ==============";
149
150 FairGeoLoader* loader = new FairGeoLoader(fLoaderName->Data(), "Geo Loader");
151 FairGeoInterface* GeoInterFace = loader->getGeoInterface();
152 GeoInterFace->SetNoOfSets(ListOfModules->GetEntries());
153 GeoInterFace->setMediaFile(MatFname.Data());
154 GeoInterFace->readMedia();
155
156 // gSystem->cd(flout.Data());
157
158 fApp = new FairMCApplication("Fair", "The Fair VMC App", ListOfModules, MatFname);
160
161 // Add a Generated run ID to the FairRunTimeDb
162 if (fRunId == 0) {
163 FairRunIdGenerator genid;
164 fRunId = genid.generateId();
165 }
169 // The FairBaseParSet / FairGeoParSet runtime-database containers were filled
170 // here but never written out nor read back; the database has been removed.
171
172 // Set global Parameter Info
173
174 if (fPythiaDecayer) {
178 }
179 }
180 if (fUserDecay) {
182 if (fUserDecayConfig) {
184 }
185 }
186 // on/off visualisation
187 if (fStoreTraj) {
188 LOG(info) << "Create visualisation manager ";
189 new FairTrajFilter();
190 }
191 if (fRadLength) {
193 }
194 if (fRadMap) {
196 }
197 if (fRadGrid) {
199 }
200
201 if (fField) {
202 fField->Init();
203 }
205
207 SetMCConfig();
209}
210
211
212void FairRunSim::CheckFlukaExec()
213{
215 TString work = getenv("VMCWORKDIR");
216 TString work_config = work + "/gconfig/";
217 work_config.ReplaceAll("//", "/");
218
219 TString config_dir = getenv("CONFIG_DIR");
220 config_dir.ReplaceAll("//", "/");
221 if (!config_dir.EndsWith("/")) {
222 config_dir += "/";
223 }
224
225 TString flout;
226 if (strcmp(GetName(), "TFluka") == 0) {
227 TString flexec = "run_fluka.sh";
228 if (TString(gSystem->FindFile(config_dir.Data(), flexec)) != TString("")) {
229 LOG(info) << "---User path for Configuration is used: " << config_dir.Data();
230 } else {
231 flexec = work_config + "run_fluka.sh";
232 }
233 gSystem->Exec(flexec.Data());
234 // More generic for different macro
235 // dir layout <D.B>
236 TString macrodir = getenv("PWD");
237 // cout << macrodir << endl;
238 flout = macrodir + "/fluka_out";
239 flout.ReplaceAll("//", "/");
240 gSystem->cd(flout.Data());
241 }
242}
243
244void FairRunSim::SetMCConfig()
245{
246 // Either setup the simulation with the provided user hook
248 fSimSetup();
249 } else {
250 if (fSimulationConfig == nullptr) // RKRKRK COMMENT
252 fSimulationConfig->Setup(GetName());
253 }
254
255 fApp->InitMC("foo", "bar");
256}
257
258void FairRunSim::Run(Int_t NEvents, Int_t) { fApp->RunMC(NEvents); }
259
260void FairRunSim::SetField(FairField* field) { fField = field; }
261
263
264void FairRunSim::SetMaterials(const char* MatFileName)
265{
266 TString Mat = "";
267 TString work = getenv("GEOMPATH");
268 work.ReplaceAll("//", "/");
269 if (work.IsNull()) {
270 work = getenv("VMCWORKDIR");
271 Mat = work + "/geometry/";
272 Mat.ReplaceAll("//", "/");
273 } else {
274 Mat = work;
275 if (!Mat.EndsWith("/")) {
276 Mat += "/";
277 }
278 }
279 MatFname = Mat + MatFileName;
280 LOG(info) << "Media file used: " << MatFname.Data();
281}
282
284{
285 if (strncmp(fName, "TGeant3", 7) == 0) {
286 delete fLoaderName;
287 fLoaderName = new TString(name);
288 LOG(info) << "FairRun::SetGeoModel(): G3 native geometry model used ";
289 } else {
290 LOG(info) << "FairRun::SetGeoModel(): Geant3 MC engine only !";
291 LOG(info) << "FairRun::SetGeoModel(): Method skipped ... ";
292 }
293}
294
295void FairRunSim::SetPythiaDecayer(const TString& Config)
296{
298 fPythiaDecayerConfig = Config;
299 fPythiaDecayer = kTRUE;
300}
301
302void FairRunSim::SetUserDecay(const TString& Config)
303{
305 fUserDecayConfig = Config;
306 fUserDecay = kTRUE;
307}
308
310{
311 if (nullptr == fMCEvHead) {
313 }
314 return fMCEvHead;
315}
316
317TMCThreadLocal FairRunSim* FairRunSim::fginstance = 0;
std::ostringstream debug
ClassImp(FairRunSim)
virtual void Init()
Definition FairField.h:54
void SetRunId(UInt_t runid)
virtual void Setup(const char *mcEngine)
void setMediaFile(const char *file)
void SetNoOfSets(Int_t n)
FairGeoInterface * getGeoInterface()
void InitMC(const char *setup, const char *cuts)
void SetRadiationMapReg(Bool_t RadMap)
void SetPythiaDecayer(Bool_t decayer)
void AddMeshList(TObjArray *meshList)
void AddTask(TTask *fTask)
void SetField(FairField *field)
void SetGenerator(FairPrimaryGenerator *fxGenerator)
void RunMC(Int_t nofEvents)
void SetUserDecayConfig(const TString decayerConf)
void SetRadiationLengthReg(Bool_t RadLen)
void SetPythiaDecayerConfig(const TString decayerConf)
void SetUserDecay(Bool_t decay)
void calculate()
Definition FairMesh.cxx:62
void print()
Definition FairMesh.cxx:92
void SetModId(Int_t id)
Definition FairModule.h:114
void WriteFileHeader(FairFileHeader *f)
unsigned int generateId(void)
TObjArray * GetUserDefIons()
void SetGeoModel(char *name)
TObjArray * fParticles
/‍** Array of user defined ions *‍/
Definition FairRunSim.h:204
TString MatFname
/‍** Array of used modules *‍/
Definition FairRunSim.h:206
FairMCEventHeader * fMCEvHead
/‍** Primary Event Generator *‍/
Definition FairRunSim.h:199
virtual ~FairRunSim()
void SetPythiaDecayer(Bool_t decayer)
Definition FairRunSim.h:125
bool fUseSimSetupFunction
Definition FairRunSim.h:223
FairMCEventHeader * GetMCEventHeader()
virtual void Run(Int_t NEvents=0, Int_t NotUsed=0)
void SetMaterials(const char *MatFileName)
std::function< void()> fSimSetup
/‍** Allow importing TGeometry to VMC *‍/
Definition FairRunSim.h:221
void SetUserDecay(const TString &Config)
void AddModule(FairModule *Mod)
TObjArray * fMeshList
Definition FairRunSim.h:216
TString fPythiaDecayerConfig
/‍** flag for using Pythia decayer*‍/
Definition FairRunSim.h:210
static FairRunSim * Instance()
void SetField(FairField *field)
FairField * fField
/‍** Singleton Instance *‍/
Definition FairRunSim.h:201
FairPrimaryGenerator * fGen
/‍** flag for use Beam Energy *‍/
Definition FairRunSim.h:198
Bool_t fRadLength
/‍** Macro for decay configuration*‍/
Definition FairRunSim.h:213
void AddMesh(FairMesh *Mesh)
TObjArray * GetUserDefParticles()
FairGenericVMCConfig * fSimulationConfig
Definition FairRunSim.h:224
TString fUserDecayConfig
Definition FairRunSim.h:212
TObjArray * fIons
/‍** Input file name map*‍/
Definition FairRunSim.h:203
Bool_t fStoreTraj
/‍** Material file name *‍/
Definition FairRunSim.h:207
FairRunSim(Bool_t isMaster=kTRUE)
TString * fLoaderName
/‍** Trajectory store flags *‍/
Definition FairRunSim.h:208
Bool_t fUserDecay
/‍** Macro for Pythia decay configuration*‍/
Definition FairRunSim.h:211
Bool_t fRadMap
/‍** flag for registring radiation length*‍/
Definition FairRunSim.h:214
Bool_t fRadGrid
/‍** flag for RadiationMapManager
Definition FairRunSim.h:215
virtual void Init()
static TMCThreadLocal FairRunSim * fginstance
/‍** MC Event Header *‍/
Definition FairRunSim.h:200
TObjArray * ListOfModules
/‍** Array of user defined particles*‍/
Definition FairRunSim.h:205
void SetGenerator(FairPrimaryGenerator *Gen)
Bool_t fPythiaDecayer
/‍** Geometry Model (TGeo or G3)*‍/
Definition FairRunSim.h:209
FairMCApplication * fApp
/‍** Internal counter*‍/
Definition FairRunSim.h:195
FairRootManager * fRootManager
Definition FairRun.h:191
Bool_t fAna
Definition FairRun.h:201
FairTask * fTask
Definition FairRun.h:189
UInt_t fRunId
Definition FairRun.h:199
friend class FairMCApplication
Definition FairRun.h:39
FairFileHeader * fFileHeader
Definition FairRun.h:205
GLint GLsizei count
Definition glcorearb.h:399
GLuint const GLchar * name
Definition glcorearb.h:781
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"