Project
Loading...
Searching...
No Matches
FairModule.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// ----- FairModule source file -----
11// ----- Created 06/01/04 by M. Al-Turany -----
12// -------------------------------------------------------------------------
13/* Generated by Together */
14#include "FairModule.h"
15
16#include "FairGeoBuilder.h" // for FairGeoBuilder
17#include "FairGeoInterface.h" // for FairGeoInterface
18#include "FairGeoLoader.h" // for FairGeoLoader
19#include "FairGeoMedia.h" // for FairGeoMedia
20#include "FairGeoNode.h" // for FairGeoNode
21#include "FairMCApplication.h"
22#include "FairRun.h" // for FairRun
23#include "FairVolume.h" // for FairVolume
24#include "FairVolumeList.h" // for FairVolumeList
25
26#include <TBuffer.h> // for TBuffer, operator<<, etc
27#include <TCollection.h> // for TIter
28#include <TFile.h> // for TFile
29#include <TGeoManager.h> // for TGeoManager, gGeoManager
30#include <TGeoMaterial.h> // for TGeoMaterial
31#include <TGeoMatrix.h> // for TGeoMatrix, TGeoHMatrix
32#include <TGeoMedium.h> // for TGeoMedium
33#include <TGeoNode.h> // for TGeoNode
34#include <TGeoVolume.h> // for TGeoVolume
35#include <TGeoVoxelFinder.h> // for TGeoVoxelFinder
36#include <TKey.h> // for TKey
37#include <TList.h> // for TList, TListIter
38#include <TObjArray.h> // for TObjArray
39#include <TObject.h> // for TObject
40#include <TRefArray.h> // for TRefArray
41#include <TSystem.h> // for TSystem, gSystem
42#include <TVirtualMC.h>
43
44#ifdef ROOT_HAS_GDML
45#include <TGDMLParse.h>
46#endif
47
48#include <map>
49#include <stdlib.h> // for getenv
50#include <string.h> // for strcmp, strlen
51
53
54thread_local TArrayI* FairModule::volNumber = 0;
55thread_local Int_t FairModule::fNbOfVolumes = 0;
56thread_local FairVolumeList* FairModule::vList = 0;
57thread_local TRefArray* FairModule::svList = 0;
58
60{
61 LOG(warn)
62 << "The method ConstructGeometry has to be implemented in the detector class which inherits from FairModule";
63}
64
66{
67 LOG(debug2)
68 << "The method ConstructOpGeometry has to be implemented in the detector class which inherits from FairModule";
69}
70
72
73FairModule::FairModule(const char* Name, const char* title, Bool_t Active)
74 : TNamed(Name, title)
75 , fMotherVolumeName("")
76 , fgeoVer("Not defined")
77 , fgeoName("Not defined")
78 , fModId(-1)
79 , fActive(Active)
80 , fNbOfSensitiveVol(0)
81 , fVerboseLevel(0)
82 , flGeoPar(nullptr)
83 , fGeoSaved(kFALSE)
84 , fMC(nullptr)
85{
86 if (!svList) {
87 svList = new TRefArray();
88 }
89 if (!vList) {
90 vList = new FairVolumeList();
91 }
92}
93
95 : TNamed(rhs)
96 , fMotherVolumeName(rhs.fMotherVolumeName)
97 , fgeoVer(rhs.fgeoVer)
98 , fgeoName(rhs.fgeoName)
99 , fModId(rhs.fModId)
100 , fActive(rhs.fActive)
101 , fNbOfSensitiveVol(rhs.fNbOfSensitiveVol)
102 , fVerboseLevel(rhs.fVerboseLevel)
103 , flGeoPar(nullptr)
104 , fGeoSaved(rhs.fGeoSaved)
105 , fMC(nullptr)
106{
107 if (!svList) {
108 svList = new TRefArray();
109 for (Int_t i = 0; i < rhs.svList->GetEntries(); i++) {
110 svList->Add(rhs.svList->At(i));
111 }
112 }
113
114 if (!vList) {
115 vList = new FairVolumeList();
116 for (Int_t i = 0; i < rhs.vList->getEntries(); i++) {
117 vList->addVolume(rhs.vList->At(i));
118 }
119 }
120
121 // Initialize cached pointer to MC (on worker)
122 fMC = TVirtualMC::GetMC();
123
124 // TO DO - add when we know what type is the elements of flGeoPar
125 // flGeoPar=new TObjArray();
126 // TIter it = rhs.flGeoPar->MakeIterator();
127 // Copy parameters
128 // TObject* obj;
129 // while((obj=it->Next())) {
130 // flGeoPar->Add(...);
131 //}
132}
133
135 : TNamed()
136 , fMotherVolumeName("")
137 , fgeoVer("Not defined")
138 , fgeoName("Not defined")
139 , fModId(-1)
140 , fActive(kFALSE)
141 , fNbOfSensitiveVol(0)
142 , fVerboseLevel(0)
143 , flGeoPar(nullptr)
144 , fGeoSaved(kFALSE)
145 , fMC(nullptr)
146{}
147
149{
150 // check assignment to self
151 if (this == &rhs)
152 return *this;
153
154 // base class assignment
155 TNamed::operator=(rhs);
156
157 // assignment operator
158 fMotherVolumeName = rhs.fMotherVolumeName;
159 fgeoVer = rhs.fgeoVer;
160 fgeoName = rhs.fgeoName;
161 fModId = rhs.fModId;
162 fActive = rhs.fActive;
163 fNbOfSensitiveVol = rhs.fNbOfSensitiveVol;
164 fVerboseLevel = rhs.fVerboseLevel;
165 flGeoPar = nullptr;
166 fGeoSaved = rhs.fGeoSaved;
167 fMC = TVirtualMC::GetMC();
168
169 // TO DO - add when we know what type is the elements of flGeoPar
170 // flGeoPar=new TObjArray();
171 // TIter it = rhs.flGeoPar->MakeIterator();
172 // copy parameters
173 // TObject* obj;
174 // while((obj=it->Next())) {
175 // flGeoPar->Add(...);
176 //}
177
178 return *this;
179}
180
181void FairModule::Streamer(TBuffer& b)
182{
183 TNamed::Streamer(b);
184
185 if (b.IsReading()) {
186 fgeoVer.Streamer(b);
187 fgeoName.Streamer(b);
188 b >> fActive;
189 b >> fModId;
190 } else {
191 fgeoVer.Streamer(b);
192 fgeoName.Streamer(b);
193 b << fActive;
194 b << fModId;
195 }
196}
197
198void FairModule::SetGeometryFileName(TString fname, TString)
199{
200
201 // If absolute path is given as argument, try to find it there.
202 // If the file don't exist break. Don't look anywhere else.
203 if (fname.BeginsWith("/")) {
204 if (gSystem->AccessPathName(fname.Data())) {
205 LOG(fatal) << fName << ": geometry file " << fname << " not found in absolut path!";
206 fgeoName = "";
207 } // file not found
208 fgeoName = fname;
209 LOG(debug) << fName << ": using geometry file " << fgeoName;
210 return;
211 }
212
213 // If GEOMPATH is set, try to find the file there.
214 // If there is no such file go on to look in the default location.
215 TString userPath = getenv("GEOMPATH");
216 userPath.ReplaceAll("//", "/");
217 if (!userPath.IsNull()) {
218 if (!userPath.EndsWith("/")) {
219 userPath += "/";
220 }
221 fgeoName = userPath + fname;
222 if (!gSystem->AccessPathName(fgeoName.Data())) {
223 LOG(debug) << fName << ": using geometry file " << fgeoName;
224 return;
225 }
226 LOG(debug) << fName << ": geometry file " << fname << " not found in GEOMPATH " << userPath;
227 }
228
229 // Look in the standard path
230 fgeoName = getenv("VMCWORKDIR");
231 fgeoName += "/geometry/" + fname;
232 if (!gSystem->AccessPathName(fgeoName.Data())) {
233 LOG(debug) << fName << ": using geometry file " << fgeoName;
234 return;
235 }
236
237 // File not found
238 LOG(fatal) << fName << ": geometry file " << fname << " not found in standard path ";
239 fgeoName = "";
240 return;
241}
242
243// FairModule::ProcessNodes() removed: it imported ASCII-geometry nodes into the
244// FairRuntimeDb 'FairGeoParSet' container. O2 builds geometry natively with TGeo
245// and the runtime database is gone.
247{
248
249 LOG(debug2) << "AddSensitiveVolume " << v->GetName();
250
251 // Only register volumes which are not already registered
252 // Otherwise the stepping will be slowed down
253 if (!vList->findObject(v->GetName())) {
254 FairVolume* volume = nullptr;
255 volume = new FairVolume(v->GetName(), fNbOfVolumes++);
256 vList->addVolume(volume);
257 volume->setModId(fModId);
258 volume->SetModule(this);
259 svList->Add(volume);
261 }
262}
263
265{
266 FairVolume* fv;
267 FairVolume* fvol = 0;
268 for (Int_t i = 0; i < vList->getEntries(); i++) {
269 fv = vList->At(i);
270 if ((fv->getGeoNode()) == fN) {
271 fvol = fv;
272 return fvol;
273 break;
274 }
275 }
276 return fvol;
277}
278
279void FairModule::ConstructRootGeometry(TGeoMatrix* shiftM)
280{
289 TGeoManager* OldGeo = gGeoManager;
290 TGeoManager* NewGeo = 0;
291 TGeoVolume* volume = 0;
292 ;
293 TFile* f = TFile::Open(GetGeometryFileName().Data());
294 TList* l = f->GetListOfKeys();
295 TKey* key;
296 TIter next(l);
297 TGeoNode* n = 0;
298 TGeoVolume* v1 = 0;
299 while ((key = static_cast<TKey*>(next()))) {
303 if (strcmp(key->GetClassName(), "TGeoManager") != 0) {
304 continue;
305 }
306 gGeoManager = 0;
307 NewGeo = static_cast<TGeoManager*>(key->ReadObj());
308 break;
309 }
310 if (NewGeo != 0) {
314 NewGeo->cd();
315 volume = static_cast<TGeoVolume*>(NewGeo->GetNode(0)->GetDaughter(0)->GetVolume());
316 v1 = volume->MakeCopyVolume(volume->GetShape());
317 // n=NewGeo->GetTopNode();
318 n = v1->GetNode(0);
319 // NewGeo=0;
320 // delete NewGeo; //move it to the end of the method
321
322 } else {
327 key = static_cast<TKey*>(l->At(0)); // Get the first key in the list
328 volume = dynamic_cast<TGeoVolume*>(key->ReadObj());
329 if (volume != 0) {
330 n = volume->GetNode(0);
331 }
332 if (n != 0) {
333 v1 = n->GetVolume();
334 }
335 }
336
337 if (v1 == 0) {
338 LOG(fatal) << "Could not find any geometry in file " << GetGeometryFileName().Data();
339 } else {
340 gGeoManager = OldGeo;
341 gGeoManager->cd();
342 // If AddToVolume is empty add the volume to the top volume Cave
343 // If it is defined check i´f the volume exists and if it exists add the volume from the root file
344 // to the already existing volume
345 TGeoVolume* Cave = nullptr;
346 if (0 == fMotherVolumeName.Length()) {
347 Cave = gGeoManager->GetTopVolume();
348 } else {
349 Cave = gGeoManager->GetVolume(fMotherVolumeName);
350 }
351 if (Cave != nullptr) {
353 gGeoManager->AddVolume(v1);
355 TGeoVoxelFinder* voxels = v1->GetVoxels();
356 if (voxels) {
357 voxels->SetNeedRebuild();
358 }
359
360 // else { fLogger->Fatal(MESSAGE_ORIGIN, "\033[5m\033[31mFairModule::ConstructRootGeometry(): could not find
361 // voxels \033[0m"); }
362
367 TGeoMatrix* M = n->GetMatrix();
368
369 // very nasty!
370 TGeoHMatrix* M2 = new TGeoHMatrix(*M);
371
372 // For debugging
373 // M2->Dump();
374 // const Double_t* transl1 = M2->GetTranslation();
375 // std::cout << transl1[0] << "\t" << transl1[1] << "\t" << transl1[2] << std::endl;
376 // if (shiftM) {
377 // shiftM->Dump();
378 // const Double_t* transl2 = shiftM->GetTranslation();
379 // std::cout << transl2[0] << "\t" << transl2[1] << "\t" << transl2[2] << std::endl;
380 //}
381
382 if (shiftM) {
383 M2->Multiply(shiftM); // HACK!
384 }
385
386 SetDefaultMatrixName(M2);
387
388 // TODO
389 // I don't really understand this juggling with the matices,
390 // so, please, take care of how it works with my changes.
391 // Egor.
392
394 gGeoManager->GetListOfMatrices()->Remove(M2);
395 TGeoHMatrix* global = gGeoManager->GetHMatrix();
396 gGeoManager->GetListOfMatrices()->Remove(global); // Remove the Identity matrix
399 Cave->AddNode(v1, 0, M2);
402 AssignMediumAtImport(v1);
406 ExpandNode(n);
407 delete NewGeo;
408 delete f;
409 } else {
410 LOG(fatal) << "Could not find the given mother volume " << fMotherVolumeName.Data()
411 << " where the geomanger should be added.";
412 }
413 }
414}
415
416#ifdef ROOT_HAS_GDML
417
418void FairModule::ConstructGDMLGeometry(__attribute__((unused)) TGeoMatrix* posrot)
419{
420 // Parse the GDML file
421 TFile* old = gFile;
422 TGDMLParse parser;
423 TGeoVolume* gdmlTop;
424 gdmlTop = parser.GDMLReadFile(GetGeometryFileName());
425
426 // Change ID of media. TGDMLParse starts allways from 0. Need to shift.
427 ReAssignMediaId();
428
429 // Add volume to the cave and go through it recursively
430 gGeoManager->GetTopVolume()->AddNode(gdmlTop, 1, posrot);
431 ExpandNodeForGDML(gGeoManager->GetTopVolume()->GetNode(gGeoManager->GetTopVolume()->GetNdaughters() - 1));
432 gFile = old;
433}
434
435void FairModule::ExpandNodeForGDML(TGeoNode* curNode)
436{
437 // Get pointer to volume and assign medium
438 TGeoVolume* curVol = curNode->GetVolume();
439 AssignMediumAtImport(curVol);
440
441 // Check if the volume is sensitive
442 if ((this->InheritsFrom("FairDetector")) && IsSensitive(curVol->GetName())) {
443 LOG(debug2) << "Sensitive Volume " << curVol->GetName();
444 AddSensitiveVolume(curVol);
445 }
446
448 if (curVol->GetNdaughters() != 0) {
449 TObjArray* NodeChildList = curVol->GetNodes();
450 TGeoNode* curNodeChild;
451 for (Int_t j = 0; j < NodeChildList->GetEntriesFast(); j++) {
452 curNodeChild = static_cast<TGeoNode*>(NodeChildList->At(j));
453 ExpandNodeForGDML(curNodeChild);
454 }
455 }
456}
457
458#else
459
460void FairModule::ConstructGDMLGeometry(__attribute__((unused)) TGeoMatrix* posrot)
461{
462 LOG(error) << "Could not construct magnet geometry from gdml file.";
463 LOG(error) << "The used ROOT version does not support gdml.";
464 LOG(error) << "Please recompile ROOT with gdml support.";
465 LOG(fatal) << "Stop execution at this point.";
466}
467
468void FairModule::ExpandNodeForGDML(__attribute__((unused)) TGeoNode* curNode) {}
469
470#endif
471
472void FairModule::ReAssignMediaId()
473{
475 LOG(fatal) << "FairModule: no FairGeoLoader, the ASCII/ROOT geometry import of FairRoot is not set up in O2";
476 }
477 // Initialise pointer to GeoBuilder
479 // Get list of TGeo media
480 TList* media = gGeoManager->GetListOfMedia();
481 // Loop over new media which are not in GeoBase and shift the ID
482 TGeoMedium* med;
483 // TGeoMedium* med2;
484 for (Int_t i = geoBuilder->GetNMedia(); i < media->GetEntries(); i++) {
485 med = static_cast<TGeoMedium*>(media->At(i));
486 med->SetId(i + 1);
487 }
488 // Change GeoBase medium index
489 geoBuilder->SetNMedia(media->GetEntries());
490
491 // Revove dublicated materials
492 TList* materials = gGeoManager->GetListOfMaterials();
493 TIter next1(materials);
494 // map for existing materials
495 std::map<TString, Bool_t> mapMatName;
496 TGeoMaterial* mat;
497 while ((mat = static_cast<TGeoMaterial*>(next1()))) {
498 // If material exist - delete dublicated. If not - set the flag
499 if (mapMatName[mat->GetName()]) {
500 materials->Remove(mat);
501 } else {
502 mapMatName[mat->GetName()] = kTRUE;
503 }
504 }
505}
506
508{
509 LOG(warn) << "The method ConstructASCIIGeometry has to be implemented in the detector class which inherits from "
510 "FairModule";
511}
512
513//__________________________________________________________________________
514Bool_t FairModule::IsSensitive(const std::string& name)
515{
516 // LOG(warn) << "Implement IsSensitive in the detector class which inherits from FairModule";
517 // LOG(warn) << "For now calling the obsolete function CheckIfSensitive";
518#pragma GCC diagnostic push
519#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
520 return CheckIfSensitive(name);
521#pragma GCC diagnostic pop
522}
523
524void FairModule::ExpandNode(TGeoNode* fN)
525{
526 // FairGeoLoader* geoLoad = FairGeoLoader::Instance();
527 // FairGeoInterface* geoFace = geoLoad->getGeoInterface();
528 // FairGeoMedia* Media = geoFace->getMedia();
529 // FairGeoBuilder* geobuild=geoLoad->getGeoBuilder();
530 TGeoMatrix* Matrix = fN->GetMatrix();
531 if (gGeoManager->GetListOfMatrices()->FindObject(Matrix)) {
532 gGeoManager->GetListOfMatrices()->Remove(Matrix);
533 }
534 TGeoVolume* v1 = fN->GetVolume();
535 TObjArray* NodeList = v1->GetNodes();
536 for (Int_t Nod = 0; Nod < NodeList->GetEntriesFast(); Nod++) {
537 TGeoNode* fNode = static_cast<TGeoNode*>(NodeList->At(Nod));
538 TGeoMatrix* M = fNode->GetMatrix();
539 // M->SetDefaultName();
540 SetDefaultMatrixName(M);
541 if (fNode->GetNdaughters() > 0) {
542 ExpandNode(fNode);
543 }
544 TGeoVolume* v = fNode->GetVolume();
545 AssignMediumAtImport(v);
546 if (!gGeoManager->FindVolumeFast(v->GetName())) {
547 LOG(debug2) << "Register Volume " << v->GetName();
548 v->RegisterYourself();
549 }
550 if ((this->InheritsFrom("FairDetector")) && IsSensitive(v->GetName())) {
551 LOG(debug2) << "Sensitive Volume " << v->GetName();
553 }
554 v->GetShape()->AfterStreamer();
555 }
556}
557
558void FairModule::SetDefaultMatrixName(TGeoMatrix* matrix)
559{
560 // Copied from root TGeoMatrix::SetDefaultName() and modified (memory leak)
561 // If no name was supplied in the ctor, the type of transformation is checked.
562 // A letter will be prepended to the name :
563 // t - translation
564 // r - rotation
565 // s - scale
566 // c - combi (translation + rotation)
567 // g - general (tr+rot+scale)
568 // The index of the transformation in gGeoManager list of transformations will
569 // be appended.
570 if (!gGeoManager) {
571 return;
572 }
573 if (strlen(matrix->GetName())) {
574 return;
575 }
576 char type = 'n';
577 if (matrix->IsTranslation()) {
578 type = 't';
579 }
580 if (matrix->IsRotation()) {
581 type = 'r';
582 }
583 if (matrix->IsScale()) {
584 type = 's';
585 }
586 if (matrix->IsCombi()) {
587 type = 'c';
588 }
589 if (matrix->IsGeneral()) {
590 type = 'g';
591 }
592 TObjArray* matrices = gGeoManager->GetListOfMatrices();
593 Int_t index = 0;
594 if (matrices) {
595 index = matrices->GetEntriesFast() - 1;
596 }
597 matrix->SetName(Form("%c%i", type, index));
598}
599
600void FairModule::AssignMediumAtImport(TGeoVolume* v)
601{
602
609 LOG(fatal) << "FairModule: no FairGeoLoader, the ASCII/ROOT geometry import of FairRoot is not set up in O2";
610 }
613
614 TGeoMedium* med1 = v->GetMedium();
615
616 if (med1) {
617 // In newer ROOT version also a TGeoVolumeAssembly has a material and medium.
618 // This medium is called dummy and is automatically set when the geometry is constructed.
619 // Since this material and medium is neither in the TGeoManager (at this point) nor in our
620 // ASCII file we have to create it the same way it is done in TGeoVolume::CreateDummyMedium()
621 // In the end the new medium and material has to be added to the TGeomanager, because this is
622 // not done automatically when using the default constructor. For all other constructors the
623 // newly created medium or material is added to the TGeomanger.
624 // Create the medium and material only the first time.
625 TString medName = static_cast<TString>(med1->GetName());
626 if (medName.EqualTo("dummy") && nullptr == gGeoManager->GetMedium(medName)) {
627
628 TGeoMaterial* dummyMaterial = new TGeoMaterial();
629 dummyMaterial->SetName("dummy");
630
631 TGeoMedium* dummyMedium = new TGeoMedium();
632 dummyMedium->SetName("dummy");
633 dummyMedium->SetMaterial(dummyMaterial);
634
635 gGeoManager->GetListOfMedia()->Add(dummyMedium);
636 gGeoManager->AddMaterial(dummyMaterial);
637 }
638
639 TGeoMaterial* mat1 = v->GetMaterial();
640 TGeoMaterial* newMat = gGeoManager->GetMaterial(mat1->GetName());
641 if (newMat == 0) {
644 FairGeoMedium* FairMedium = Media->getMedium(mat1->GetName());
645 if (!FairMedium) {
646 LOG(fatal) << "Material " << mat1->GetName() << "is not defined in ASCII file nor in Root file.";
647 // FairMedium=new FairGeoMedium(mat1->GetName());
648 // Media->addMedium(FairMedium);
649 } else {
650
651 Int_t nmed = geobuild->createMedium(FairMedium);
652 v->SetMedium(gGeoManager->GetMedium(nmed));
653 gGeoManager->SetAllIndex();
654 }
655 } else {
657 TGeoMedium* med2 = gGeoManager->GetMedium(mat1->GetName());
658 v->SetMedium(med2);
659 }
660 } else {
661 if (strcmp(v->ClassName(), "TGeoVolumeAssembly") != 0) {
662 //[R.K.-3.3.08] // When there is NO material defined, set it to avoid conflicts in Geant
663 LOG(fatal) << "The volume " << v->GetName()
664 << "has no medium information and not an Assembly so we have to quit";
665 }
666 }
667}
668
670{
671 Fatal("CloneModule", "Has to be overriden in multi-threading applications.");
672 return 0;
673}
674
std::ostringstream debug
ClassImp(FairModule)
int32_t i
char error[CURL_ERROR_SIZE]
uint32_t j
Definition RawData.h:0
StringRef key
void SetNMedia(const Int_t &nmed)
virtual Int_t createMedium(FairGeoMedium *)=0
const Int_t & GetNMedia() const
FairGeoMedia * getMedia()
FairGeoInterface * getGeoInterface()
static FairGeoLoader * Instance()
FairGeoBuilder * getGeoBuilder()
FairGeoMedium * getMedium(const char *)
Int_t fNbOfSensitiveVol
Definition FairModule.h:156
FairModule & operator=(const FairModule &)
Int_t fVerboseLevel
Definition FairModule.h:157
virtual void ExpandNodeForGDML(__attribute__((unused)) TGeoNode *curNode)
Bool_t fGeoSaved
list of Detector Geometry parameters
Definition FairModule.h:159
TString fMotherVolumeName
Definition FairModule.h:136
static thread_local Int_t fNbOfVolumes
Definition FairModule.h:131
void AddSensitiveVolume(TGeoVolume *v)
virtual void ConstructOpGeometry()
TList * flGeoPar
Definition FairModule.h:158
virtual void ExpandNode(TGeoNode *Node)
virtual void ConstructRootGeometry(TGeoMatrix *shiftM=nullptr)
virtual void ConstructGDMLGeometry(__attribute__((unused)) TGeoMatrix *posrot)
Int_t fModId
Definition FairModule.h:154
virtual void ConstructASCIIGeometry()
FairVolume * getFairVolume(FairGeoNode *fNode)
Bool_t fActive
Definition FairModule.h:155
virtual TString GetGeometryFileName()
Definition FairModule.h:60
virtual void SetGeometryFileName(TString fname, TString geoVer="0")
TVirtualMC * fMC
flag for initialisation
Definition FairModule.h:160
static thread_local TArrayI * volNumber
Definition FairModule.h:135
virtual ~FairModule()
virtual FairModule * CloneModule() const
static thread_local FairVolumeList * vList
Definition FairModule.h:129
TString fgeoVer
Definition FairModule.h:152
virtual void ConstructGeometry()
TString fgeoName
Definition FairModule.h:153
virtual Bool_t CheckIfSensitive(__attribute__((unused)) std::string name) __attribute__((deprecated("The method CheckIfSensitive is deprecated. Implement IsSensitive in the detector classes.")))
Definition FairModule.h:96
virtual Bool_t IsSensitive(const std::string &name)
static thread_local TRefArray * svList
Definition FairModule.h:133
void addVolume(FairVolume *elem)
FairVolume * At(Int_t pos)
FairVolume * findObject(TString name)
void setModId(Int_t id)
Definition FairVolume.h:40
void SetModule(FairModule *mod)
Definition FairVolume.h:49
FairGeoNode * getGeoNode()
Definition FairVolume.h:60
GLdouble n
Definition glcorearb.h:1982
const GLdouble * v
Definition glcorearb.h:832
GLuint const GLchar * name
Definition glcorearb.h:781
GLdouble f
Definition glcorearb.h:310
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLfloat GLfloat v1
Definition glcorearb.h:812
const std::unordered_map< MaterialID, MaterialProperties > materials
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"