]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | ///////////////////////////////////////////////////////// |
2 | // Manager and hits classes for set:PHOS version 1 // | |
3 | ///////////////////////////////////////////////////////// | |
4 | ||
5 | // --- ROOT system --- | |
6 | #include "TH1.h" | |
7 | #include "TRandom.h" | |
8 | #include "TFile.h" | |
9 | #include "TTree.h" | |
bc9ab547 | 10 | #include "TMath.h" |
fe4da5cc | 11 | |
12 | // --- galice header files --- | |
13 | #include "AliPHOSv1.h" | |
14 | #include "AliRun.h" | |
fe4da5cc | 15 | |
16 | ClassImp(AliPHOSv1) | |
17 | ||
18 | //______________________________________________________________________________ | |
19 | ||
20 | ||
8c933dd7 | 21 | AliPHOSv1::AliPHOSv1() |
fe4da5cc | 22 | { |
23 | } | |
24 | ||
25 | //______________________________________________________________________________ | |
26 | ||
27 | AliPHOSv1::AliPHOSv1(const char *name, const char *title) | |
28 | : AliPHOS(name, title) | |
29 | { | |
30 | } | |
31 | ||
32 | //___________________________________________ | |
33 | void AliPHOSv1::CreateGeometry() | |
34 | { | |
35 | ||
6435828c | 36 | AliPHOS *PHOS_tmp = (AliPHOS*)gAlice->GetModule("PHOS"); |
fe4da5cc | 37 | if( NULL==PHOS_tmp ) |
38 | { | |
39 | printf("There isn't PHOS detector!\n"); | |
40 | return; | |
41 | } | |
42 | // AliPHOS &PHOS = *PHOS_tmp; | |
43 | ||
44 | ////////////////////////////////////////////////////////////////////////////// | |
45 | ||
46 | Int_t rotation_matrix_number=0; | |
47 | Float_t par[11], | |
48 | x,y,z; | |
49 | ||
50 | const float cell_length = GetCrystalLength()+GetAirThickness()+GetWrapThickness()+GetPIN_Length(), | |
51 | cell_side_size = GetCrystalSideSize()+2*GetAirThickness()+2*GetWrapThickness(), | |
7f8f914c | 52 | cradle_thikness = cell_length; |
fe4da5cc | 53 | |
54 | ////////////////////////////////////////////////////////////////////////////// | |
55 | // CELL volume and subvolumes creation | |
56 | ////////////////////////////////////////////////////////////////////////////// | |
57 | ||
58 | par[0] = GetCrystalSideSize()/2 + GetWrapThickness(); | |
59 | par[1] = GetCrystalSideSize()/2 + GetWrapThickness(); | |
60 | par[2] = GetCrystalLength() /2 + GetWrapThickness()/2; | |
cfce8870 | 61 | gMC->Gsvolu("WRAP","BOX ",GetPHOS_IDTMED_Tyvek(),par,3); |
fe4da5cc | 62 | |
63 | par[0] = GetCrystalSideSize()/2; | |
64 | par[1] = GetCrystalSideSize()/2; | |
65 | par[2] = GetCrystalLength()/2; | |
cfce8870 | 66 | gMC->Gsvolu("CRST","BOX ",GetPHOS_IDTMED_PbWO4(),par,3); |
fe4da5cc | 67 | |
68 | // PIN | |
69 | par[0] = GetPIN_SideSize()/2; | |
70 | par[1] = GetPIN_SideSize()/2; | |
71 | par[2] = GetPIN_Length()/2; | |
cfce8870 | 72 | gMC->Gsvolu("PIN ","BOX ",GetPHOS_IDTMED_PIN(),par,3); |
fe4da5cc | 73 | |
74 | ////////////////////////////////////////////////////////////////////////////// | |
7f8f914c | 75 | // CRADLE creation. |
fe4da5cc | 76 | ////////////////////////////////////////////////////////////////////////////// |
77 | ||
78 | par[0] = cell_side_size/2 * GetNz(); | |
79 | par[1] = cell_side_size/2 * GetNphi(); | |
80 | par[2] = cradle_thikness/2; | |
cfce8870 | 81 | gMC->Gsvolu("PHOS","BOX ",GetPHOS_IDTMED_AIR(),par,3); |
fe4da5cc | 82 | |
fe4da5cc | 83 | |
84 | par[0] = cell_side_size/2 * GetNz(); | |
85 | par[1] = cell_side_size/2 * GetNphi(); | |
86 | par[2] = cell_length/2; | |
cfce8870 | 87 | gMC->Gsvolu("CRS0","BOX ",GetPHOS_IDTMED_AIR(),par,3); |
fe4da5cc | 88 | |
89 | x = 0; | |
90 | y = 0; | |
91 | z = -(cradle_thikness-cell_length)/2; | |
cfce8870 | 92 | gMC->Gspos("CRS0",1,"PHOS",x,y,z,0,"ONLY"); |
fe4da5cc | 93 | |
cfce8870 | 94 | gMC->Gsdvn("CRS1","CRS0",GetNphi(),2); |
95 | gMC->Gsdvn("CELL","CRS1",GetNz() ,1); | |
fe4da5cc | 96 | |
97 | ////////////////////////////////////////////////////////////////////////////// | |
98 | // CELL creation | |
99 | ////////////////////////////////////////////////////////////////////////////// | |
100 | ||
101 | x = 0; | |
102 | y = 0; | |
103 | z = -GetWrapThickness()/2; | |
cfce8870 | 104 | gMC->Gspos("CRST",1,"WRAP",x,y,z,0,"ONLY"); |
fe4da5cc | 105 | |
106 | x = 0; | |
107 | y = 0; | |
108 | z = GetPIN_Length()/2; | |
cfce8870 | 109 | gMC->Gspos("WRAP",1,"CELL",x,y,z,0,"ONLY"); |
fe4da5cc | 110 | |
111 | x = 0; | |
112 | y = 0; | |
113 | z = -GetCrystalLength()/2-GetWrapThickness()/2; | |
cfce8870 | 114 | gMC->Gspos("PIN ",1,"CELL",x,y,z,0,"ONLY"); |
fe4da5cc | 115 | |
116 | ////////////////////////////////////////////////////////////////////////////// | |
117 | // CELL has been created. | |
118 | ////////////////////////////////////////////////////////////////////////////// | |
119 | ||
fe4da5cc | 120 | |
121 | ////////////////////////////////////////////////////////////////////////////// | |
122 | // End of CRADLE creation. | |
123 | ////////////////////////////////////////////////////////////////////////////// | |
124 | ||
125 | ||
126 | ////////////////////////////////////////////////////////////////////////////// | |
127 | // PHOS creation | |
128 | ////////////////////////////////////////////////////////////////////////////// | |
129 | ||
130 | for( int i=0; i<GetCradlesAmount(); i++ ) | |
131 | { | |
7f8f914c | 132 | Float_t cradle_angle = 27., |
133 | cradle_angle_pos = -90+(i-(GetCradlesAmount()-1)/2.) * | |
134 | (cradle_angle+GetAngleBetweenCradles()); | |
fe4da5cc | 135 | // Cradles are numerated in clock reversed order. (general way of angle increment) |
136 | ||
7f8f914c | 137 | Float_t r = GetRadius() + cradle_thikness/2; |
bc9ab547 | 138 | x = r*cos(cradle_angle_pos*kPI/180); |
139 | y = r*sin(cradle_angle_pos*kPI/180); | |
fe4da5cc | 140 | z = 0; |
141 | AliMatrix(rotation_matrix_number, 0,0 , 90,90+cradle_angle_pos , 90,180+cradle_angle_pos); | |
cfce8870 | 142 | gMC->Gspos("PHOS",i+1,"ALIC",x,y,z,rotation_matrix_number,"ONLY"); |
fe4da5cc | 143 | |
144 | GetCradleAngle(i) = cradle_angle_pos; | |
fe4da5cc | 145 | } |
146 | AddPHOSCradles(); | |
147 | ||
148 | ////////////////////////////////////////////////////////////////////////////// | |
149 | // All is done. | |
150 | // Print some information. | |
151 | ////////////////////////////////////////////////////////////////////////////// | |
152 | } | |
153 | ||
154 | void AliPHOSv1::StepManager() | |
155 | { | |
156 | static Bool_t inwold=0; // Status of previous ctrak->inwvol | |
fe4da5cc | 157 | Int_t copy; |
158 | ||
fe4da5cc | 159 | int cradle_number, cell_Z, cell_Phi; // Variables that describe cell position. |
160 | ||
0a6d8768 | 161 | if( gMC->GetMedium() == GetPHOS_IDTMED_PIN() && (gMC->IsTrackInside() || gMC->IsTrackExiting()==2) && inwold && gMC->TrackCharge()!=0 ) |
fe4da5cc | 162 | { |
163 | // GEANT particle just have entered into PIN diode. | |
164 | ||
6435828c | 165 | AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS"); |
fe4da5cc | 166 | |
0a6d8768 | 167 | gMC->CurrentVolOffID(4,copy); |
fe4da5cc | 168 | cradle_number = copy-1; |
0a6d8768 | 169 | gMC->CurrentVolOffID(1,copy); |
fe4da5cc | 170 | cell_Z = copy-1; |
0a6d8768 | 171 | gMC->CurrentVolOffID(2,copy); |
fe4da5cc | 172 | cell_Phi = copy-1; |
173 | /* | |
174 | cradle_number = cvolu->number[cvolu->nlevel-5]-1; | |
175 | cell_Z = cvolu->number[cvolu->nlevel-2]-1; | |
176 | cell_Phi = cvolu->number[cvolu->nlevel-3]-1; | |
177 | */ | |
178 | ||
179 | TH2S &h = PHOS.GetCradle(cradle_number).fChargedTracksInPIN; | |
180 | h.AddBinContent(h.GetBin(cell_Z,cell_Phi)); | |
181 | } | |
182 | ||
183 | ////////////////////////////////////////////////////////////////////////////// | |
184 | ||
cfce8870 | 185 | if( gMC->GetMedium() == GetPHOS_IDTMED_PbWO4() ) |
fe4da5cc | 186 | { |
187 | // GEANT particle into crystal. | |
188 | ||
6435828c | 189 | AliPHOS &PHOS = *(AliPHOS*)gAlice->GetModule("PHOS"); |
fe4da5cc | 190 | |
0a6d8768 | 191 | gMC->CurrentVolOffID(5,copy); |
fe4da5cc | 192 | cradle_number = copy-1; |
0a6d8768 | 193 | gMC->CurrentVolOffID(2,copy); |
fe4da5cc | 194 | cell_Z = copy-1; |
0a6d8768 | 195 | gMC->CurrentVolOffID(3,copy); |
fe4da5cc | 196 | cell_Phi = copy-1; |
197 | /* | |
198 | cradle_number = cvolu->number[cvolu->nlevel-6]-1; | |
199 | cell_Z = cvolu->number[cvolu->nlevel-3]-1; | |
200 | cell_Phi = cvolu->number[cvolu->nlevel-4]-1; | |
201 | */ | |
202 | TH2F &h = PHOS.GetCradle(cradle_number).fCellEnergy; | |
cfce8870 | 203 | h.AddBinContent(h.GetBin(cell_Z,cell_Phi),gMC->Edep()); |
fe4da5cc | 204 | } |
205 | ||
206 | ////////////////////////////////////////////////////////////////////////////// | |
207 | ||
fe4da5cc | 208 | |
0a6d8768 | 209 | inwold=gMC->IsTrackEntering(); // Save current status of GEANT variable. |
fe4da5cc | 210 | } |
211 |