BmnRoot
Loading...
Searching...
No Matches
BmnMwpc.cxx
Go to the documentation of this file.
1//------------------------------------------------------------------------------------------------------------------------
2// -------------------------------------------------------------------------
3// ----- BmnMWPC source file -----
4// -------------------------------------------------------------------------
5
6#include "TClonesArray.h"
7#include "TGeoManager.h"
8#include "TGeoMatrix.h"
9#include "TLorentzVector.h"
10#include "TParticle.h"
11#include "TVirtualMC.h"
12
13#include <iostream>
14
15// #include "FairDetectorList.h"
16#include "BmnMwpc.h"
17#include "BmnMwpcGeo.h"
18#include "BmnMwpcGeoPar.h"
19#include "BmnMwpcPoint.h"
20#include "CbmStack.h"
21#include "FairGeoInterface.h"
22#include "FairGeoLoader.h"
23#include "FairGeoMedia.h"
24#include "FairGeoNode.h"
25#include "FairGeoRootBuilder.h"
26#include "FairRootManager.h"
27#include "FairRun.h"
28#include "FairRuntimeDb.h"
29#include "FairVolume.h"
30#include "TFile.h"
31#include "TGDMLParse.h"
32#include "TMath.h"
33#include "TObjArray.h"
34#include "TParticlePDG.h"
35
36//------------------------------------------------------------------------------------------------------------------------
38 : FairDetector("MWPC", kTRUE)
39{
40 fPointCollection = new TClonesArray("BmnMwpcPoint");
41 fPosIndex = 0;
42 fVerboseLevel = 1;
43 ResetParameters();
44}
45//------------------------------------------------------------------------------------------------------------------------
46BmnMwpc::BmnMwpc(const char* name, Bool_t active)
47 : FairDetector(name, active)
48{
49 fPointCollection = new TClonesArray("BmnMwpcPoint");
50 fPosIndex = 0;
51 fVerboseLevel = 1;
52 ResetParameters();
53}
54//------------------------------------------------------------------------------------------------------------------------
56{
57 if (fPointCollection) {
58 fPointCollection->Delete();
59 delete fPointCollection;
60 }
61}
62//------------------------------------------------------------------------------------------------------------------------
63int BmnMwpc::DistAndPoints(TVector3 p3, TVector3 p4, TVector3& pa, TVector3& pb)
64{
65 pa = (p3 + p4) * 0.5;
66 pb = pa;
67
68 // pa=p3; //del
69 // pb=pa; //del
70 return 0;
71}
72//------------------------------------------------------------------------------------------------------------------------
73TVector3 BmnMwpc::GlobalToLocal(TVector3& global)
74{
75 Double_t globPos[3];
76 Double_t localPos[3];
77 global.GetXYZ(globPos);
78 gMC->Gmtod(globPos, localPos, 1);
79 return TVector3(localPos);
80}
81//------------------------------------------------------------------------------------------------------------------------
82TVector3 BmnMwpc::LocalToGlobal(TVector3& local)
83{
84 Double_t globPos[3];
85 Double_t localPos[3];
86 local.GetXYZ(localPos);
87 gMC->Gdtom(localPos, globPos, 1);
88 return TVector3(globPos);
89}
90//----------------------------------------------------------------------------------------------------------------------
91Bool_t BmnMwpc::ProcessHits(FairVolume* vol)
92{
93 // Set parameters at entrance of volume. Reset ELoss.
94 if (gMC->IsTrackEntering()) {
95
96 ResetParameters();
97 fELoss = 0.;
98 fTime = gMC->TrackTime() * 1.0e09;
99 fLength = gMC->TrackLength();
100 fIsPrimary = 0;
101 fCharge = -1;
102 fPdgId = 0;
103
104 TLorentzVector PosIn;
105 gMC->TrackPosition(PosIn);
106 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
107 gMC->TrackMomentum(fMom);
108 TParticle* part = 0;
109 part = gMC->GetStack()->GetCurrentTrack();
110 if (part) {
111 fIsPrimary = (Int_t)part->IsPrimary();
112 fCharge = (Int_t)part->GetPDG()->Charge();
113 fPdgId = (Int_t)part->GetPdgCode();
114 }
115
116 fVolumeID = vol->getMCid();
117
118 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
119 }
120
121 // Sum energy loss for all steps in the active volume
122 fELoss += gMC->Edep();
123
124 // Create BmnMwpcPoint at EXIT of active volume;
125 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && fELoss > 0) {
126 TLorentzVector PosOut;
127 gMC->TrackPosition(PosOut);
128 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
129
130 // Line defined in local coordinates
131 TVector3 p1(0, 0, 0); // 10 - arbitrary number...
132 TVector3 p2(10, 0, 0);
133
134 // Conversion to global coordinates
135 p1 = LocalToGlobal(p1);
136 p2 = LocalToGlobal(p2);
137 Double_t phi = TMath::ATan2(p2.Y() - p1.Y(), p2.X() - p1.X());
138
139 // "will-be-filled-out-soon" Points of closest approach
140 TVector3 trackPosition(0, 0, 0); // trackPosition => point on track, fPos => point on straw
141
142 // calculate points of closest approach between track and straw
143 // int result =
144 DistAndPoints(fPosIn, fPosOut, fPos, trackPosition);
145
146 BmnMwpcPoint* p =
147 AddHit(fTrackID, fVolumeID, fPos, fPos.Perp(), TVector3(fMom.Px(), fMom.Py(), fMom.Pz()), fTime,
148 (fLength + gMC->TrackLength()) / 2, fELoss, fIsPrimary, fCharge, fPdgId, trackPosition);
149 p->SetPhi(phi); // AZ
150
151 ((CbmStack*)gMC->GetStack())->AddPoint(kMWPC);
152 }
153
154 return kTRUE;
155}
156//------------------------------------------------------------------------------------------------------------------------
158{
159 if (fVerboseLevel)
160 Print("");
161 fPointCollection->Clear();
162 fPosIndex = 0;
163}
164//------------------------------------------------------------------------------------------------------------------------
166{
167 FairRootManager::Instance()->Register("MWPCPoint", "MWPC", fPointCollection, kTRUE);
168}
169//------------------------------------------------------------------------------------------------------------------------
170TClonesArray* BmnMwpc::GetCollection(Int_t iColl) const
171{
172 if (iColl == 0)
173 return fPointCollection;
174
175 return NULL;
176}
177//------------------------------------------------------------------------------------------------------------------------
178void BmnMwpc::Print(Option_t*) const
179{
180 Int_t nHits = fPointCollection->GetEntriesFast();
181 cout << "-I- BmnMwpc: " << nHits << " points registered in this event." << endl;
182
183 if (fVerboseLevel > 1)
184 for (Int_t i = 0; i < nHits; i++)
185 (*fPointCollection)[i]->Print();
186}
187//------------------------------------------------------------------------------------------------------------------------
189{
190 fPointCollection->Clear();
191 ResetParameters();
192}
193//------------------------------------------------------------------------------------------------------------------------
194void BmnMwpc::CopyClones(TClonesArray* cl1, TClonesArray* cl2, Int_t offset)
195{
196 Int_t nEntries = cl1->GetEntriesFast();
197 cout << "-I- BmnMwpc: " << nEntries << " entries to add." << endl;
198 TClonesArray& clref = *cl2;
199 BmnMwpcPoint* oldpoint = NULL;
200
201 for (Int_t i = 0; i < nEntries; i++) {
202 oldpoint = (BmnMwpcPoint*)cl1->At(i);
203 Int_t index = oldpoint->GetTrackID() + offset;
204 oldpoint->SetTrackID(index);
205 new (clref[fPosIndex]) BmnMwpcPoint(*oldpoint);
206 fPosIndex++;
207 }
208
209 cout << "-I- BmnMwpc: " << cl2->GetEntriesFast() << " merged entries." << endl;
210}
211//------------------------------------------------------------------------------------------------------------------------
213{
214 TString fileName = GetGeometryFileName();
215
216 if (fileName.EndsWith(".root")) {
217 LOG(info) << "Constructing MWPC geometry from ROOT file " << fileName.Data();
218 ConstructRootGeometry();
219 } else if (fileName.EndsWith(".geo")) {
220 LOG(info) << "Constructing MWPC geometry from ASCII file " << fileName.Data();
222 } else if (fileName.EndsWith(".gdml")) {
223 LOG(info) << "Constructing MWPC geometry from GDML file " << fileName.Data();
224 ConstructGDMLGeometry(nullptr);
225 } else {
226 LOG(fatal) << "Geometry format of MWPC file " << fileName.Data() << " not supported.";
227 }
228}
229
230// ----- ConstructAsciiGeometry -------------------------------------------
232{
233
234 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
235 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
236 BmnMwpcGeo* MWPCGeo = new BmnMwpcGeo();
237 MWPCGeo->setGeomFile(GetGeometryFileName());
238 geoFace->addGeoModule(MWPCGeo);
239
240 Bool_t rc = geoFace->readSet(MWPCGeo);
241 if (rc)
242 MWPCGeo->create(geoLoad->getGeoBuilder());
243 TList* volList = MWPCGeo->getListOfVolumes();
244 // store geo parameter
245 FairRun* fRun = FairRun::Instance();
246 FairRuntimeDb* rtdb = FairRun::Instance()->GetRuntimeDb();
247 BmnMwpcGeoPar* par = (BmnMwpcGeoPar*)(rtdb->getContainer("BmnMwpcGeoPar"));
248 TObjArray* fSensNodes = par->GetGeoSensitiveNodes();
249 TObjArray* fPassNodes = par->GetGeoPassiveNodes();
250
251 TListIter iter(volList);
252 FairGeoNode* node = NULL;
253 FairGeoVolume* aVol = NULL;
254
255 while ((node = (FairGeoNode*)iter.Next())) {
256 aVol = dynamic_cast<FairGeoVolume*>(node);
257 if (node->isSensitive()) {
258 fSensNodes->AddLast(aVol);
259 } else {
260 fPassNodes->AddLast(aVol);
261 }
262 }
263 par->setChanged();
264 par->setInputVersion(fRun->GetRunId(), 1);
265 ProcessNodes(volList);
266}
267// ----------------------------------------------------------------------------
268
269/*
270// ----- ConstructGDMLGeometry -------------------------------------------
271void BmnMwpc::ConstructGDMLGeometry()
272{
273 TGDMLParse parser;
274 TGeoVolume* v1 = parser.GDMLReadFile(GetGeometryFileName());
275
276 v1->Dump();
277
278 if (v1 == 0)
279 fLogger->Fatal(MESSAGE_ORIGIN, "\033[5m\033[31mFairModule::ConstructGDMLGeometry(): could construct geometry
280from GDML File!! \033[0m", GetGeometryFileName().Data());
281
282 TGeoNode* n = v1->GetNode(0);
283
284 n->Dump();
285
286 gGeoManager->cd();
287
288 // add gdml volume to the simulation TGeoManager
289 gGeoManager->AddVolume(v1);
290
291 // force rebuilding of voxels
292 TGeoVoxelFinder* voxels = v1->GetVoxels();
293 if (voxels)
294 voxels->SetNeedRebuild();
295
296 //To avoid having different names of the default matrices because we could have get the volume from another
297 //TGeoManager, we reset the default matrix name
298 //TGeoMatrix* M = n->GetMatrix();
299 //M->SetDefaultName();
300
301 //Now we can remove the matrix so that the new geomanager will rebuild it properly
302 //gGeoManager->GetListOfMatrices()->Remove(M);
303 //TGeoHMatrix* global = gGeoManager->GetHMatrix();
304 //gGeoManager->GetListOfMatrices()->Remove(global); //Remove the Identity matrix
305
306 //Now we can add the node to the existing cave
307 TGeoVolume* Cave = gGeoManager->GetTopVolume();
308 Cave->AddNode(v1, 0, 0);
309
310 // correction from O. Merle: in case of a TGeoVolume (v1) set the material properly
311 // Assign medium to the the volume v, this has to be done in all cases:
312 // case 1: For CAD converted volumes they have no mediums (only names)
313 // case 2: TGeoVolumes, we need to be sure that the material is defined in this session
314 FairGeoMedia* Media = FairGeoLoader::Instance()->getGeoInterface()->getMedia();
315 FairGeoBuilder* geobuild = FairGeoLoader::Instance()->getGeoBuilder();
316 TGeoMedium* med1 = v1->GetMedium();
317 med1->Dump();
318 if (med1)
319 {
320 TGeoMaterial* mat1 = v1->GetMaterial();
321 TGeoMaterial* newMat = gGeoManager->GetMaterial(mat1->GetName());
322 if (newMat == 0)
323 {
324 cout<<"The Material is not defined in the TGeoManager"<<endl;
325 // The Material is not defined in the TGeoManager, we try to create one if we have enough information about it
326 FairGeoMedium* FairMedium = Media->getMedium(mat1->GetName());
327 if (!FairMedium)
328 {
329 fLogger->Fatal(MESSAGE_ORIGIN,"Material %s is not defined in ASCII file nor in Root file we Stop creating
330geometry", mat1->GetName());
331 // FairMedium=new FairGeoMedium(mat1->GetName());
332 // Media->addMedium(FairMedium);
333 }
334
335 Int_t nmed = geobuild->createMedium(FairMedium);
336 v1->SetMedium(gGeoManager->GetMedium(nmed));
337 gGeoManager->SetAllIndex();
338 }
339 else
340 {
341 cout<<"Material is already available in the TGeoManager"<<endl;
342 // Material is already available in the TGeoManager and we can set it
343 TGeoMedium* med2 = gGeoManager->GetMedium(mat1->GetName());
344 v1->SetMedium(med2);
345 }
346 }
347 else
348 {
349 if (strcmp(v1->ClassName(),"TGeoVolumeAssembly") != 0)
350 {
351 //[R.K.-3.3.08] // When there is NO material defined, set it to avoid conflicts in Geant
352 fLogger->Fatal(MESSAGE_ORIGIN,"The volume %s Has no medium information and not an Assembly so we have to
353quit", v1->GetName());
354 }
355 }
356
357 // now go through the herachy and set the materials properly, this is important becase the CAD converter
358 // produce TGeoVolumes with materials that have only names and no properties
359 ExpandNode(gGeoManager->GetTopVolume()->GetNode(gGeoManager->GetTopVolume()->GetNdaughters()-1));
360
361
362 // Define output ROOT file with dch geometry
363 TFile* outfile = new TFile("dch.root", "RECREATE");
364 v1->Write();
365 outfile->Close();
366}
367// ----------------------------------------------------------------------------
368*/
369
370// ----- ConstructGDMLGeometry -------------------------------------------
372{
373 TFile* old = gFile;
374 TGDMLParse parser;
375 TGeoVolume* gdmlTop;
376
377 // Before importing GDML
378 Int_t maxInd = gGeoManager->GetListOfMedia()->GetEntries() - 1;
379
380 gdmlTop = parser.GDMLReadFile(GetGeometryFileName());
381
382 // Cheating - reassigning media indices after GDML import (need to fix this in TGDMLParse class!!!)
383 // for (Int_t i=0; i<gGeoManager->GetListOfMedia()->GetEntries(); i++)
384 // gGeoManager->GetListOfMedia()->At(i)->Dump();
385 // After importing GDML
386 Int_t j = gGeoManager->GetListOfMedia()->GetEntries() - 1;
387 Int_t curId;
388 TGeoMedium* m;
389 do {
390 m = (TGeoMedium*)gGeoManager->GetListOfMedia()->At(j);
391 curId = m->GetId();
392 m->SetId(curId + maxInd);
393 j--;
394 } while (curId > 1);
395 // LOG(debug) << "====================================================================";
396 // for (Int_t i=0; i<gGeoManager->GetListOfMedia()->GetEntries(); i++)
397 // gGeoManager->GetListOfMedia()->At(i)->Dump();
398
399 Int_t newMaxInd = gGeoManager->GetListOfMedia()->GetEntries() - 1;
400
401 gGeoManager->GetTopVolume()->AddNode(gdmlTop, 1, 0);
402 ExpandNodeForGdml(gGeoManager->GetTopVolume()->GetNode(gGeoManager->GetTopVolume()->GetNdaughters() - 1));
403
404 for (Int_t k = maxInd + 1; k < newMaxInd + 1; k++) {
405 TGeoMedium* medToDel = (TGeoMedium*)(gGeoManager->GetListOfMedia()->At(maxInd + 1));
406 LOG(debug) << " removing media " << medToDel->GetName() << " with id " << medToDel->GetId() << " (k=" << k
407 << ")";
408 gGeoManager->GetListOfMedia()->Remove(medToDel);
409 }
410 gGeoManager->SetAllIndex();
411
412 gFile = old;
413}
414
415void BmnMwpc::ExpandNodeForGdml(TGeoNode* node)
416{
417 LOG(debug) << "----------------------------------------- ExpandNodeForGdml for node " << node->GetName();
418
419 TGeoVolume* curVol = node->GetVolume();
420
421 LOG(debug) << " volume: " << curVol->GetName();
422
423 if (curVol->IsAssembly()) {
424 LOG(debug) << " skipping volume-assembly";
425 } else {
426 TGeoMedium* curMed = curVol->GetMedium();
427 TGeoMaterial* curMat = curVol->GetMaterial();
428 TGeoMedium* curMedInGeoManager = gGeoManager->GetMedium(curMed->GetName());
429 TGeoMaterial* curMatOfMedInGeoManager = curMedInGeoManager->GetMaterial();
430 TGeoMaterial* curMatInGeoManager = gGeoManager->GetMaterial(curMat->GetName());
431
432 // Current medium and material assigned to the volume from GDML
433 LOG(debug2) << " curMed\t\t\t\t" << curMed << "\t" << curMed->GetName() << "\t" << curMed->GetId();
434 LOG(debug2) << " curMat\t\t\t\t" << curMat << "\t" << curMat->GetName() << "\t" << curMat->GetIndex();
435
436 // Medium and material found in the gGeoManager - either the pre-loaded one or one from GDML
437 LOG(debug2) << " curMedInGeoManager\t\t" << curMedInGeoManager << "\t" << curMedInGeoManager->GetName()
438 << "\t" << curMedInGeoManager->GetId();
439 LOG(debug2) << " curMatOfMedInGeoManager\t\t" << curMatOfMedInGeoManager << "\t"
440 << curMatOfMedInGeoManager->GetName() << "\t" << curMatOfMedInGeoManager->GetIndex();
441 LOG(debug2) << " curMatInGeoManager\t\t" << curMatInGeoManager << "\t" << curMatInGeoManager->GetName()
442 << "\t" << curMatInGeoManager->GetIndex();
443
444 TString matName = curMat->GetName();
445 TString medName = curMed->GetName();
446
447 if (curMed->GetId() != curMedInGeoManager->GetId()) {
448 if (fFixedMedia.find(medName) == fFixedMedia.end()) {
449 LOG(debug) << " Medium needs to be fixed";
450 fFixedMedia[medName] = curMedInGeoManager;
451 Int_t ind = curMat->GetIndex();
452 gGeoManager->RemoveMaterial(ind);
453 LOG(debug) << " removing material " << curMat->GetName() << " with index " << ind;
454 for (Int_t i = ind; i < gGeoManager->GetListOfMaterials()->GetEntries(); i++) {
455 TGeoMaterial* m = (TGeoMaterial*)gGeoManager->GetListOfMaterials()->At(i);
456 m->SetIndex(m->GetIndex() - 1);
457 }
458
459 LOG(debug) << " Medium fixed";
460 } else {
461 LOG(debug) << " Already fixed medium found in the list ";
462 }
463 } else {
464 if (fFixedMedia.find(medName) == fFixedMedia.end()) {
465 LOG(debug) << " There is no correct medium in the memory yet";
466
467 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
468 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
469 FairGeoMedia* geoMediaBase = geoFace->getMedia();
470 FairGeoBuilder* geobuild = geoLoad->getGeoBuilder();
471
472 FairGeoMedium* curMedInGeo = geoMediaBase->getMedium(medName);
473 if (curMedInGeo == 0) {
474 LOG(fatal) << " Media not found in Geo file: " << medName;
478 } else {
479 LOG(debug) << " Found media in Geo file" << medName;
480 /*Int_t nmed = */ geobuild->createMedium(curMedInGeo);
481 fFixedMedia[medName] = (TGeoMedium*)gGeoManager->GetListOfMedia()->Last();
482 gGeoManager->RemoveMaterial(curMatOfMedInGeoManager->GetIndex());
483 LOG(debug) << " removing material " << curMatOfMedInGeoManager->GetName() << " with index "
484 << curMatOfMedInGeoManager->GetIndex();
485 for (Int_t i = curMatOfMedInGeoManager->GetIndex();
486 i < gGeoManager->GetListOfMaterials()->GetEntries(); i++)
487 {
488 TGeoMaterial* m = (TGeoMaterial*)gGeoManager->GetListOfMaterials()->At(i);
489 m->SetIndex(m->GetIndex() - 1);
490 }
491 }
492
493 if (curMedInGeo->getSensitivityFlag()) {
494 LOG(debug) << " Adding sensitive " << curVol->GetName();
495 AddSensitiveVolume(curVol);
496 }
497 } else {
498 LOG(debug) << " Already fixed medium found in the list";
499 LOG(debug) << "!!! Sensitivity: " << fFixedMedia[medName]->GetParam(0);
500 if (fFixedMedia[medName]->GetParam(0) == 1) {
501 LOG(debug) << " Adding sensitive " << curVol->GetName();
502 AddSensitiveVolume(curVol);
503 }
504 }
505 }
506
507 curVol->SetMedium(fFixedMedia[medName]);
508 gGeoManager->SetAllIndex();
509
510 // gGeoManager->GetListOfMaterials()->Print();
511 // gGeoManager->GetListOfMedia()->Print();
512 }
513
515 if (curVol->GetNdaughters() != 0) {
516 TObjArray* NodeChildList = curVol->GetNodes();
517 TGeoNode* curNodeChild;
518 for (Int_t j = 0; j < NodeChildList->GetEntriesFast(); j++) {
519 curNodeChild = (TGeoNode*)NodeChildList->At(j);
520 ExpandNodeForGdml(curNodeChild);
521 }
522 }
523}
524
525// Check if Sensitive-----------------------------------------------------------
526Bool_t BmnMwpc::CheckIfSensitive(std::string name)
527{
528 TString tsname = name;
529 if (tsname.Contains("Active")) {
530 return kTRUE;
531 }
532 return kFALSE;
533
534 // if(0 == TString(name).CompareTo("MWPCDetV")) {
535 // return kTRUE;
536 // }
537 // return kFALSE;
538}
539//---------------------------------------------------------
540
541//------------------------------------------------------------------------------------------------------------------------
542BmnMwpcPoint* BmnMwpc::AddHit(Int_t trackID,
543 Int_t detID,
544 TVector3 pos,
545 Double_t radius,
546 TVector3 mom,
547 Double_t time,
548 Double_t length,
549 Double_t eLoss,
550 Int_t isPrimary,
551 Double_t charge,
552 Int_t pdgId,
553 TVector3 trackPos)
554{
555 TClonesArray& clref = *fPointCollection;
556 Int_t size = clref.GetEntriesFast();
557 // std::cout << "ELoss: " << eLoss << "\n";
558 return new (clref[size])
559 BmnMwpcPoint(trackID, detID, pos, radius, mom, time, length, eLoss, isPrimary, charge, pdgId, trackPos);
560}
561//------------------------------------------------------------------------------------------------------------------------
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
@ kMWPC
TObjArray * GetGeoSensitiveNodes()
TObjArray * GetGeoPassiveNodes()
void SetPhi(Double_t phi)
virtual void CopyClones(TClonesArray *cl1, TClonesArray *cl2, Int_t offset)
Definition BmnMwpc.cxx:194
virtual void Register()
Definition BmnMwpc.cxx:165
virtual void ConstructGDMLGeometry(TGeoMatrix *)
Definition BmnMwpc.cxx:371
virtual void Reset()
Definition BmnMwpc.cxx:188
virtual TClonesArray * GetCollection(Int_t iColl) const
Definition BmnMwpc.cxx:170
virtual void Print(Option_t *) const
Definition BmnMwpc.cxx:178
BmnMwpc()
Definition BmnMwpc.cxx:37
virtual Bool_t ProcessHits(FairVolume *vol=0)
Definition BmnMwpc.cxx:91
virtual Bool_t CheckIfSensitive(std::string name)
Definition BmnMwpc.cxx:526
void ExpandNodeForGdml(TGeoNode *node)
Definition BmnMwpc.cxx:415
virtual void ConstructAsciiGeometry()
Definition BmnMwpc.cxx:231
virtual ~BmnMwpc()
Definition BmnMwpc.cxx:55
virtual void EndOfEvent()
Definition BmnMwpc.cxx:157
map< TString, TGeoMedium * > fFixedMedia
Definition BmnMwpc.h:67
virtual void ConstructGeometry()
Definition BmnMwpc.cxx:212