1 | |
---|
2 | |
---|
3 | |
---|
4 | |
---|
5 | |
---|
6 | #ifndef detector_H |
---|
7 | #define detector_H 1 |
---|
8 | |
---|
9 | // %%%%%%%%%% |
---|
10 | // G4 headers |
---|
11 | // %%%%%%%%%% |
---|
12 | #include "G4Colour.hh" |
---|
13 | #include "G4FieldManager.hh" |
---|
14 | #include "G4LogicalVolume.hh" |
---|
15 | #include "G4Material.hh" |
---|
16 | #include "G4PVPlacement.hh" |
---|
17 | #include "G4ThreeVector.hh" |
---|
18 | #include "G4VisAttributes.hh" |
---|
19 | #include "G4VSensitiveDetector.hh" |
---|
20 | #include "G4VSolid.hh" |
---|
21 | |
---|
22 | // %%%%%%%%%%%%% |
---|
23 | // gemc headers |
---|
24 | // %%%%%%%%%%%%% |
---|
25 | #include "usage.h" |
---|
26 | #include "identifier.h" |
---|
27 | #include "run_conditions.h" |
---|
28 | |
---|
29 | |
---|
30 | class detector |
---|
31 | { |
---|
32 | |
---|
33 | public: |
---|
34 | detector(); |
---|
35 | ~detector(){}; |
---|
36 | |
---|
37 | string name; |
---|
38 | string mother; |
---|
39 | string description; |
---|
40 | |
---|
41 | G4ThreeVector pos; |
---|
42 | G4RotationMatrix rot; |
---|
43 | |
---|
44 | G4VisAttributes VAtts; |
---|
45 | |
---|
46 | string type; |
---|
47 | vector<double> dimensions; |
---|
48 | |
---|
49 | string material; |
---|
50 | string magfield; |
---|
51 | |
---|
52 | int ncopy; |
---|
53 | bool pMany; |
---|
54 | |
---|
55 | int exist; |
---|
56 | int visible; |
---|
57 | int style; |
---|
58 | |
---|
59 | string sensitivity; |
---|
60 | string hitType; |
---|
61 | vector<identifier> identity; |
---|
62 | |
---|
63 | int scanned; |
---|
64 | |
---|
65 | private: |
---|
66 | G4VSolid* SolidV; |
---|
67 | G4LogicalVolume* LogicV; |
---|
68 | G4VPhysicalVolume* PhysicalV; |
---|
69 | |
---|
70 | public: |
---|
71 | int create_solid(gemc_opts, map<string, detector>*); |
---|
72 | int create_logical_volume(map<string, G4Material*>*, gemc_opts); |
---|
73 | int create_physical_volumes(gemc_opts, G4LogicalVolume*); |
---|
74 | void setSensitivity(G4VSensitiveDetector *SD){LogicV->SetSensitiveDetector(SD);} |
---|
75 | |
---|
76 | G4VSolid *GetSolid() { return SolidV;} |
---|
77 | G4LogicalVolume *GetLogical() { return LogicV;} |
---|
78 | G4VPhysicalVolume *GetPhysical(){ return PhysicalV;} |
---|
79 | void SetLogical(G4LogicalVolume *LV){LogicV = LV;} |
---|
80 | void SetTranslation(G4ThreeVector TR){PhysicalV->SetTranslation(TR);} |
---|
81 | void RemoveDaughter(G4VPhysicalVolume* PV){LogicV->RemoveDaughter(PV);} |
---|
82 | void AssignMFM(G4FieldManager* MFM){LogicV->SetFieldManager(MFM, true);} |
---|
83 | |
---|
84 | void SetUserLimits(G4UserLimits* L) { LogicV->SetUserLimits(L);} |
---|
85 | |
---|
86 | friend ostream &operator<<(ostream &stream, detector); |
---|
87 | bool operator== (const detector& D) const; |
---|
88 | }; |
---|
89 | |
---|
90 | |
---|
91 | // All these functions defined here but maybe should be moved somewhere else for consistency. |
---|
92 | vector< vector<string> > dimensionstype(string); |
---|
93 | double get_number(string); |
---|
94 | string TrimSpaces(string in); |
---|
95 | map<string, detector> read_detector(gemc_opts, run_conditions); |
---|
96 | map<string, G4Material*> DefineMaterials(); |
---|
97 | vector<int> set_IDshifts(vector<int>); |
---|
98 | |
---|
99 | |
---|
100 | #endif |
---|
101 | |
---|