]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // // | |
3 | // Transition Radiation Detector // | |
4 | // This class contains the basic functions for the Transition Radiation // | |
5 | // detector. Functions specific to one particular geometry are // | |
6 | // contained in the derived classes // | |
7 | // // | |
8 | //Begin_Html | |
9 | /* | |
10 | <img src="gif/AliTRDClass.gif"> | |
11 | */ | |
12 | //End_Html | |
13 | // // | |
14 | // // | |
15 | /////////////////////////////////////////////////////////////////////////////// | |
16 | ||
17 | #include <TMath.h> | |
18 | #include <TRandom.h> | |
19 | #include <TVector.h> | |
20 | #include <TGeometry.h> | |
21 | #include <TNode.h> | |
22 | #include <TObjectTable.h> | |
23 | #include <TBRIK.h> | |
24 | #include <TPGON.h> | |
25 | ||
26 | #include "GParticle.h" | |
27 | #include "AliTRD.h" | |
28 | #include "AliRun.h" | |
29 | #include <iostream.h> | |
30 | #include <fstream.h> | |
31 | ||
32 | #include "TGeant3.h" | |
33 | ||
34 | ClassImp(AliTRD) | |
35 | ||
36 | //_____________________________________________________________________________ | |
37 | AliTRD::AliTRD() | |
38 | { | |
39 | // | |
40 | // Default constructor | |
41 | // | |
42 | fIshunt = 0; | |
43 | } | |
44 | ||
45 | //_____________________________________________________________________________ | |
46 | AliTRD::AliTRD(const char *name, const char *title) | |
47 | : AliDetector(name,title) | |
48 | { | |
49 | // | |
50 | // Standard constructor for the TRD | |
51 | // | |
52 | ||
53 | // | |
54 | // Allocate the hit array | |
55 | ||
56 | fHits = new TClonesArray("AliTRDhit", 405); | |
57 | ||
58 | fIshunt = 0; | |
59 | ||
60 | SetMarkerColor(kWhite); | |
61 | } | |
62 | ||
63 | //_____________________________________________________________________________ | |
64 | void AliTRD::AddHit(Int_t track, Int_t *vol, Float_t *hits) | |
65 | { | |
66 | // | |
67 | // Add a hit for the TRD | |
68 | // | |
69 | TClonesArray &lhits = *fHits; | |
70 | new(lhits[fNhits++]) AliTRDhit(fIshunt,track,vol,hits); | |
71 | } | |
72 | ||
73 | //_____________________________________________________________________________ | |
74 | void AliTRD::BuildGeometry() | |
75 | { | |
76 | // | |
77 | // Create the ROOT TNode geometry for the TRD | |
78 | // | |
79 | TNode *Node, *Top; | |
80 | TPGON *pgon; | |
81 | const Int_t kColorTRD = 46; | |
82 | // | |
83 | // Find the top node alice | |
84 | Top=gAlice->GetGeometry()->GetNode("alice"); | |
85 | // | |
86 | pgon = new TPGON("S_TRD","TRD","void",0,360,18,2); | |
87 | pgon->DefineSection(0,-351.2,285.335,355.686); | |
88 | pgon->DefineSection(1, 351.2,285.335,355.686); | |
89 | Top->cd(); | |
90 | Node = new TNode("TRD","TRD","S_TRD",0,0,0,""); | |
91 | Node->SetLineColor(kColorTRD); | |
92 | fNodes->Add(Node); | |
93 | } | |
94 | ||
95 | //_____________________________________________________________________________ | |
96 | void AliTRD::CreateMaterials() | |
97 | { | |
98 | // | |
99 | // Create the materials for the TRD | |
100 | // Origin Y.Foka | |
101 | // | |
102 | ||
103 | AliMC* pMC = AliMC::GetMC(); | |
104 | ||
105 | Int_t ISXFLD = gAlice->Field()->Integ(); | |
106 | Float_t SXMGMX = gAlice->Field()->Max(); | |
107 | ||
108 | // --- For polyethilene (CH2) | |
109 | Float_t ape[2] = { 12.,1. }; | |
110 | Float_t zpe[2] = { 6.,1. }; | |
111 | Float_t wpe[2] = { .33,.67 }; | |
112 | Float_t dpe = .95; | |
113 | // --- For mylar (C5H4O2) | |
114 | Float_t amy[3] = { 12.,1.,16. }; | |
115 | Float_t zmy[3] = { 6.,1.,8. }; | |
116 | Float_t wmy[3] = { 5.,4.,2. }; | |
117 | Float_t dmy = 1.39; | |
118 | // --- For CO2 | |
119 | Float_t aco[2] = { 12.,16. }; | |
120 | Float_t zco[2] = { 6.,8. }; | |
121 | Float_t wco[2] = { 1.,2. }; | |
122 | Float_t dco = .001977; | |
123 | // --- For Xe/CO2-gas-mixture | |
124 | // --- Xe-content of the gas-mixture (90% / 10%) | |
125 | Float_t fxe = .9; | |
126 | Float_t dxe = .005858; | |
127 | ||
128 | // --- General tracking parameter | |
129 | Float_t tmaxfd = -10.; | |
130 | Float_t stemax = -1e10; | |
131 | Float_t deemax = -.1; | |
132 | Float_t epsil = 1e-4; | |
133 | Float_t stmin = -.001; | |
134 | ||
135 | Float_t absl, radl, d, buf[1]; | |
136 | Float_t agm[2], dgm, zgm[2], wgm[2]; | |
137 | Int_t nbuf; | |
138 | ||
139 | // Define Materials | |
140 | ||
141 | // *********************************************************************** | |
142 | AliMaterial(1, "Al $", 26.98, 13., 2.7, 8.9, 37.2); | |
143 | AliMaterial(2, "Air$", 14.61, 7.3, .001205, 30420., 67500); | |
144 | AliMaterial(4, "Xe $", 131.29, 54., dxe, 1447.59, 0); | |
145 | AliMaterial(5, "Cu $", 63.54, 29., 8.96, 1.43, 14.8); | |
146 | AliMaterial(6, "C $", 12.01, 6., 2.265, 18.8, 74.4); | |
147 | // --- Mixtures | |
148 | AliMixture(3, "Polyethilene$", ape, zpe, dpe, -2, wpe); | |
149 | AliMixture(7, "Mylar$", amy, zmy, dmy, -3, wmy); | |
150 | AliMixture(8, "CO2$", aco, zco, dco, -2, wco); | |
151 | char namate[21]; | |
152 | // --- Get properties of Xe | |
153 | pMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf); | |
154 | // --- Get properties of CO2 | |
155 | pMC->Gfmate((*fIdmate)[8], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf); | |
156 | // --- Create gas mixture | |
157 | wgm[0] = fxe; | |
158 | wgm[1] = 1. - fxe; | |
159 | dgm = wgm[0] * dxe + wgm[1] * dco; | |
160 | AliMixture(9, "Gas mixture$", agm, zgm, dgm, 2, wgm); | |
161 | // *********************************************************************** | |
162 | ||
163 | // Tracking Media Parameters | |
164 | ||
165 | // *********************************************************************** | |
166 | // --- Al Frame | |
167 | AliMedium(1301, "Al Frame$", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
168 | // --- Air | |
169 | AliMedium(1302, "Air$", 2, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
170 | // --- Polyethilene | |
171 | AliMedium(1303, "Radiator$", 3, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
172 | // --- Xe | |
173 | AliMedium(1304, "Xe$", 4, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
174 | // --- Cu pads | |
175 | AliMedium(1305, "Padplane$", 5, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
176 | // --- Fee + cables | |
177 | AliMedium(1306, "Readout$", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
178 | // --- C frame | |
179 | AliMedium(1307, "C Frame$", 6, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
180 | // --- Mylar foils | |
181 | AliMedium(1308, "Mylar$", 7, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
182 | // --- Gas-mixture | |
183 | AliMedium(1309, "Gas-mix$", 9, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
184 | // --- Nomex-honeycomb (use carbon for the time being) | |
185 | AliMedium(1310, "Nomex$", 6, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
186 | // --- Kapton foils (use Mylar for the time being) | |
187 | AliMedium(1311, "Kapton$", 7, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
188 | // --- Gas-filling of the radiator | |
189 | AliMedium(1312, "CO2$", 8, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin); | |
190 | } | |
191 | ||
192 | //_____________________________________________________________________________ | |
193 | Int_t AliTRD::DistancetoPrimitive(Int_t , Int_t ) | |
194 | { | |
195 | // | |
196 | // Distance between the mouse and the TRD detector on the screen | |
197 | // Dummy routine | |
198 | // | |
199 | return 9999; | |
200 | } | |
201 | ||
202 | //_____________________________________________________________________________ | |
203 | void AliTRD::Init() | |
204 | { | |
205 | // | |
206 | // Initialise the TRD detector after the geometry has been created | |
207 | // | |
208 | Int_t i; | |
209 | // | |
210 | printf("\n"); | |
211 | for(i=0;i<35;i++) printf("*"); | |
212 | printf(" TRD_INIT "); | |
213 | for(i=0;i<35;i++) printf("*"); | |
214 | printf("\n"); | |
215 | // | |
216 | // Here the TRD initialisation code (if any!) | |
217 | for(i=0;i<80;i++) printf("*"); | |
218 | printf("\n"); | |
219 | } | |
220 | ||
221 | ClassImp(AliTRDhit) | |
222 | ||
223 | //_____________________________________________________________________________ | |
224 | AliTRDhit::AliTRDhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits): | |
225 | AliHit(shunt, track) | |
226 | { | |
227 | // | |
228 | // Create a TRD hit | |
229 | // | |
230 | ||
231 | // | |
232 | // Store volume hierarchy | |
233 | fSector = vol[0]; | |
234 | fChamber = vol[1]; | |
235 | fPlane = vol[2]; | |
236 | // | |
237 | // Store position and charge | |
238 | fX = hits[0]; | |
239 | fY = hits[1]; | |
240 | fZ = hits[2]; | |
241 | fQ = hits[3]; | |
242 | } |