1 |
formato |
1.1 |
#ifndef PAMVMC_DET_GEOM_H |
2 |
|
|
#define PAMVMC_DET_GEOM_H |
3 |
|
|
#include <iostream> |
4 |
|
|
|
5 |
|
|
#include <TMap.h> |
6 |
|
|
#include <TObject.h> |
7 |
|
|
#include <TString.h> |
8 |
|
|
#include <TObjString.h> |
9 |
|
|
#include <TList.h> |
10 |
|
|
|
11 |
|
|
#include <Riostream.h> |
12 |
|
|
#include <TVirtualMC.h> |
13 |
|
|
#include <TGeoManager.h> |
14 |
|
|
#include <TGeoMatrix.h> |
15 |
|
|
|
16 |
|
|
#include "PamVMCMat.h" |
17 |
|
|
|
18 |
|
|
struct pMotherProp : public TObject{ |
19 |
|
|
|
20 |
|
|
TGeoVolume *fmother; |
21 |
|
|
Int_t fcopyNo; |
22 |
|
|
TGeoMatrix *fmothermatrix; |
23 |
|
|
|
24 |
|
|
|
25 |
|
|
pMotherProp():fmother(0),fcopyNo(-1),fmothermatrix(0){}; |
26 |
|
|
pMotherProp(TGeoVolume *mother, Int_t copyNo, TGeoMatrix *mothermatrix): |
27 |
|
|
fmother(mother),fcopyNo(copyNo),fmothermatrix(mothermatrix){}; |
28 |
|
|
|
29 |
|
|
}; |
30 |
|
|
|
31 |
|
|
|
32 |
|
|
class PamVMCDetGeom : public TObject { |
33 |
|
|
|
34 |
|
|
protected: |
35 |
|
|
|
36 |
|
|
enum kind {MAT,MED,VOL}; |
37 |
|
|
TString fdname; |
38 |
|
|
TMap fdrot; //Map of geometry transformations |
39 |
|
|
TObjArray fmotherprop; // Vector of mother volume to be passed as node of other mother volumes |
40 |
|
|
TMap fmat; //Map of Material |
41 |
|
|
TMap fmix; // Mixtures |
42 |
|
|
TMap fmed; // Mediums |
43 |
|
|
TMap fvol; // Volumes |
44 |
|
|
TGeoVolume *fmother; // Mother volume of the detector in case of any |
45 |
|
|
|
46 |
|
|
public: |
47 |
|
|
|
48 |
|
|
|
49 |
|
|
PamVMCDetGeom(const char *dname="NoDetGeom" ): |
50 |
|
|
fdname(dname), fmother(0) |
51 |
|
|
{ |
52 |
|
|
|
53 |
|
|
}; |
54 |
|
|
|
55 |
|
|
|
56 |
|
|
virtual ~PamVMCDetGeom() { |
57 |
|
|
fdrot.DeleteAll(); |
58 |
|
|
fmotherprop.Clear(); |
59 |
|
|
fmat.DeleteAll(); |
60 |
|
|
fmix.DeleteAll(); |
61 |
|
|
fmed.DeleteAll(); |
62 |
|
|
} |
63 |
|
|
|
64 |
|
|
|
65 |
|
|
|
66 |
|
|
|
67 |
|
|
TGeoRotation* GetRot(const char* rot){ |
68 |
|
|
return (TGeoRotation*)fdrot(rot); |
69 |
|
|
} |
70 |
|
|
|
71 |
|
|
Int_t GetMedID(const char *name){ return GetMed(name)->GetId(); } |
72 |
|
|
|
73 |
|
|
TGeoMaterial* GetMat(const char *name){ return (TGeoMaterial*)CheckDef(name,MAT); } |
74 |
|
|
|
75 |
|
|
TGeoMedium* GetMed(const char *name){ return (TGeoMedium*)CheckDef(name,MED); } |
76 |
|
|
|
77 |
|
|
TGeoVolume* GetVol(const char *name){ return (TGeoVolume*)CheckDef(name,VOL); } |
78 |
|
|
|
79 |
|
|
TObject* CheckDef(const char *name, kind k){ |
80 |
|
|
switch(k){ |
81 |
|
|
case MAT: |
82 |
|
|
return gGeoManager->GetMaterial(name); |
83 |
|
|
case MED: |
84 |
|
|
return gGeoManager->GetMedium(name); |
85 |
|
|
case VOL: |
86 |
|
|
return gGeoManager->GetVolume(name); |
87 |
|
|
default: |
88 |
|
|
return 0; |
89 |
|
|
} |
90 |
|
|
} |
91 |
|
|
|
92 |
|
|
|
93 |
|
|
void AddMotherProp(pMotherProp *mp) {SetMotherProp(mp);} |
94 |
|
|
|
95 |
|
|
void AddMotherProp(TObjArray *mp) {fmotherprop.AddAll(mp); } |
96 |
|
|
|
97 |
|
|
void SetMotherProp(pMotherProp *mp) { |
98 |
|
|
SetMotherProp(mp->fmother,mp->fcopyNo,mp->fmothermatrix); |
99 |
|
|
} |
100 |
|
|
|
101 |
|
|
void SetMotherProp(TGeoVolume *mv, Int_t cn, TGeoMatrix* mx){ |
102 |
|
|
|
103 |
|
|
fmotherprop.Add(new pMotherProp(mv,cn,mx) ); |
104 |
|
|
} |
105 |
|
|
|
106 |
|
|
void SetMotherVol(TGeoVolume *mv) { fmother=mv; } |
107 |
|
|
|
108 |
|
|
TObjArray* GetMotherProp(){ return &fmotherprop;} |
109 |
|
|
|
110 |
|
|
void RegisterNodes() { RegisterNodes(&fmotherprop); } |
111 |
|
|
|
112 |
|
|
void RegisterNodes( TObjArray * to ) { |
113 |
|
|
// Some exception or error printout |
114 |
|
|
// should be added to signal that fmother is empty |
115 |
|
|
if(fmother) { |
116 |
|
|
TIterator *p= (TIterator *)(*to).MakeIterator(); |
117 |
|
|
pMotherProp *k; |
118 |
|
|
while( (k=(pMotherProp *) p->Next())) { |
119 |
|
|
fmother->AddNode((*k).fmother,(*k).fcopyNo,(*k).fmothermatrix); |
120 |
|
|
} |
121 |
|
|
delete p; |
122 |
|
|
} |
123 |
|
|
} |
124 |
|
|
|
125 |
|
|
ClassDef(PamVMCDetGeom,1) |
126 |
|
|
}; |
127 |
|
|
|
128 |
|
|
|
129 |
|
|
#endif //PAMVMC_DET_GEOM_H |