]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STRUCT/AliFRAMEv1.cxx
New classes added AliGenExtFile and AliGenScan.
[u/mrichter/AliRoot.git] / STRUCT / AliFRAMEv1.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Space frame class //
4// //
5//Begin_Html
6/*
7<img src="gif/AliFRAMEClass.gif">
8*/
9//End_Html
10// //
11///////////////////////////////////////////////////////////////////////////////
12
13#include "AliFRAMEv1.h"
14#include "AliRun.h"
fe4da5cc 15
16ClassImp(AliFRAMEv1)
17
18//_____________________________________________________________________________
b8032157 19AliFRAMEv1::AliFRAMEv1()
fe4da5cc 20{
21 //
22 // Default constructor for space frame
23 //
24}
25
26//_____________________________________________________________________________
27AliFRAMEv1::AliFRAMEv1(const char *name, const char *title)
28 : AliFRAME(name,title)
29{
30 //
31 // Standard constructor for space frame
32 //
33}
34
35//_____________________________________________________________________________
36void AliFRAMEv1::CreateGeometry()
37{
38 //
39 // Create space frame geometry
40 //
41 //Begin_Html
42 /*
43 <img src="gif/AliFRAME.gif">
44 */
45 //End_Html
46 //Begin_Html
47 /*
48 <img src="gif/AliFRAMETree.gif">
49 */
50 //End_Html
51 AliMC* pMC = AliMC::GetMC();
52
53 Int_t *idtmed = gAlice->Idtmed();
54
55 Float_t dphi, dz_small, zpos, ddphi;
56 Float_t tspar[5];
57 Float_t tsparl[5];
58 Float_t par[50], dz_long;
59
60 // R_IN : INNER RADIUS
61 // R_OU : OUTER RADIUS
62 // DR : WALL THICKNESS
63 // 2*Z_IN : FREE SPACE IN Z FOR PHOS
64 // 2*Z_RI : FREE SPACE IN Z FOR RICH
65 // 2*Z_OU : LENGTH
66 // 2*DZ : WIDTH OF FRAME ELEMENTS
67 Float_t r_in = 395;
68 Float_t r_ou = 420;
69 Float_t dr = 0.3;
70 Float_t z_in = 130;
71 Float_t z_ou = 350;
72 Float_t z_ri = 236.25;
73 Float_t dz = 8.75;
74
75
76 // Space Frame
77
78 par[0] = r_in;
79 par[1] = r_ou;
80 par[2] = z_ou;
81 pMC->Gsvolu("BFMO", "TUBE", idtmed[1214], par, 3);
82
83 // Rings perpendicular to the beam
84
85 // full rings at the ends
86
87 par[0] = r_in;
88 par[1] = r_ou;
89 par[2] = dz;
90 pMC->Gsvolu("BRO1", "TUBE", idtmed[1218], par, 3);
91 par[0] = r_in +dr;
92 par[1] = r_ou -dr;
93 par[2] = dz - dr;
94 pMC->Gsvolu("BRI1", "TUBE", idtmed[1214], par, 3);
95 pMC->Gspos("BRI1", 1, "BRO1", 0., 0., 0., 0, "ONLY");
96 zpos = z_ou - dz;
97 pMC->Gspos("BRO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
98 pMC->Gspos("BRO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
99
100 // space for the HMPID
101
102 tspar[0] = r_in;
103 tspar[1] = r_ou;
104 tspar[2] = dz;
105 tspar[3] = -240.;
106 tspar[4] = 60.;
107 pMC->Gsvolu("BRO2", "TUBS", idtmed[1218], tspar, 5);
108 tspar[0] = r_in + dr;
109 tspar[1] = r_ou - dr;
110 tspar[2] = dz - dr;
111 pMC->Gsvolu("BRI2", "TUBS", idtmed[1214], tspar, 5);
112 pMC->Gspos("BRI2", 1, "BRO2", 0., 0., 0., 0, "ONLY");
113 zpos = z_in + dz;
114 pMC->Gspos("BRO2", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
115 pMC->Gspos("BRO2", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
116
117
118
119 tspar[0] = r_in;
120 tspar[1] = r_ou;
121 tspar[2] = dz;
122 tspar[3] = 60.;
123 tspar[4] = 120.;
124 pMC->Gsvolu("BRO3", "TUBS", idtmed[1218], tspar, 5);
125 tspar[0] = r_in + dr;
126 tspar[1] = r_ou - dr;
127 tspar[2] = dz - dr;
128 pMC->Gsvolu("BRI3", "TUBS", idtmed[1214], tspar, 5);
129 pMC->Gspos("BRI3", 1, "BRO3", 0., 0., 0., 0, "ONLY");
130 zpos = 245.;
131 pMC->Gspos("BRO3", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
132 pMC->Gspos("BRO3", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
133
134 // longitudinal beams
135
136 // outside phi=60-120
137
138 // virtual elements
139
140 dz_small = (z_ou - z_in -4*dz)/2;
141 dz_long = z_in;
142 tsparl[0] = r_in;
143 tsparl[1] = r_ou;
144 tsparl[2] = dz_small;
145
146 // left and right
147
148 tsparl[3] = -240.;
149 tsparl[4] = 60.;
150 pMC->Gsvolu("BLO1", "TUBS", idtmed[1214], tsparl, 5);
151 pMC->Gsdvt("BLD1", "BLO1", 20., 2, idtmed[1214], 15);
152
153 // central, leaving space for rich and phos
154
155 tsparl[2] = dz_long;
156 tsparl[3] = -20.;
157 tsparl[4] = 60.;
158 pMC->Gsvolu("BLO2", "TUBS", idtmed[1214], tsparl, 5);
159 pMC->Gsdvt("BLD2", "BLO2", 20., 2, idtmed[1214], 5);
160 tsparl[3] = 120.;
161 tsparl[4] = 200.;
162 pMC->Gsvolu("BLO3", "TUBS", idtmed[1214], tsparl, 5);
163 pMC->Gsdvt("BLD3", "BLO3", 20., 2, idtmed[1214], 5);
164
165 // real elements
166
167 dphi = dz/(TMath::Pi()*(r_in + r_ou))*360;
168 ddphi = dphi * dr/dz;
169 tspar[0] = tsparl[0];
170 tspar[1] = tsparl[1];
171 tspar[2] = dz_small;
172 tspar[3] = 10. - dphi;
173 tspar[4] = 10.;
174 pMC->Gsvolu("BL01", "TUBS", idtmed[1218], tspar, 5);
175
176 tspar[0] = tsparl[0] + dr;
177 tspar[1] = tsparl[1] - dr;
178 tspar[3] = 10. - dphi + ddphi;
179 tspar[4] = 10. - ddphi;
180 pMC->Gsvolu("BL02", "TUBS", idtmed[1214], tspar, 5);
181 pMC->Gspos("BL02", 1, "BL01", 0., 0., 0., 0, "ONLY");
182
183
184 tspar[0] = tsparl[0];
185 tspar[1] = tsparl[1];
186 tspar[2] = dz_long;
187 tspar[3] = 10. - dphi;
188 tspar[4] = 10.;
189 pMC->Gsvolu("BL11", "TUBS", idtmed[1218], tspar, 5);
190
191 tspar[0] = tsparl[0] + dr;
192 tspar[1] = tsparl[1] - dr;
193 tspar[3] = 10. - dphi + ddphi;
194 tspar[4] = 10. - ddphi;
195 pMC->Gsvolu("BL12", "TUBS", idtmed[1214], tspar, 5);
196 pMC->Gspos("BL12", 1, "BL11", 0., 0., 0., 0, "ONLY");
197
198 pMC->Gspos("BL01", 1, "BLD1", 0., 0., 0., 0, "ONLY");
199 pMC->Gspos("BL11", 1, "BLD2", 0., 0., 0., 0, "ONLY");
200 pMC->Gspos("BL11", 2, "BLD3", 0., 0., 0., 0, "ONLY");
201
202 zpos = z_in +2*dz + dz_small;
203 pMC->Gspos("BLO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
204 pMC->Gspos("BLO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
205 pMC->Gspos("BLO2", 1, "BFMO", 0., 0., 0., 0, "ONLY");
206 pMC->Gspos("BLO3", 1, "BFMO", 0., 0., 0., 0, "ONLY");
207
208 // PHI=60-120 (RICH)
209
210 tsparl[0] = r_in;
211 tsparl[1] = r_ou;
212 tsparl[2] = (z_ou - z_ri -4*dz)/2;
213 tsparl[3] = 60.;
214 tsparl[4] = 120.;
215 pMC->Gsvolu("BLO4", "TUBS", idtmed[1214], tsparl, 5);
216 pMC->Gsdvt("BLD4", "BLO4", 20., 2, idtmed[1214], 3);
217 tspar[0] = tsparl[0];
218 tspar[1] = tsparl[1];
219 tspar[2] = tsparl[2];
220 tspar[3] = 10. - dphi;
221 tspar[4] = 10.;
222 pMC->Gsvolu("BL03", "TUBS", idtmed[1218], tspar, 5);
223
224 tspar[0] = tsparl[0] + dr;
225 tspar[1] = tsparl[1] - dr;
226 tspar[2] = tsparl[2];
227 tspar[3] = 10. - dphi + ddphi;
228 tspar[4] = 10. - ddphi;
229 pMC->Gsvolu("BL04", "TUBS", idtmed[1214], tspar, 5);
230 pMC->Gspos("BL04", 1, "BL03", 0., 0., 0., 0, "ONLY");
231
232 pMC->Gspos("BL03", 1, "BLD4", 0., 0., 0., 0, "ONLY");
233
234 pMC->Gspos("BLO4", 1, "BFMO", 0., 0., 293.125, 0, "ONLY");
235 pMC->Gspos("BLO4", 2, "BFMO", 0., 0.,-293.125, 0, "ONLY");
236
237 pMC->Gspos("BFMO", 1, "ALIC", 0., 0., 0., 0, "ONLY");
238 pMC->Gsatt("BFMO", "SEEN", 0);
239}
240
241//_____________________________________________________________________________
b8032157 242void AliFRAMEv1::DrawModule()
fe4da5cc 243{
244 //
245 // Draw a shaded view of the space frame
246 //
247
248 AliMC* pMC = AliMC::GetMC();
249
250 // Set everything unseen
251 pMC->Gsatt("*", "seen", -1);
252 //
253 // Set ALIC mother transparent
254 pMC->Gsatt("ALIC","SEEN",0);
255 //
256 // Set the volumes visible
257 pMC->Gsatt("BFMO","seen",0);
258 pMC->Gsatt("BRO1","seen",1);
259 pMC->Gsatt("BRI1","seen",0);
260 pMC->Gsatt("BRO2","seen",1);
261 pMC->Gsatt("BRI2","seen",0);
262 pMC->Gsatt("BRO3","seen",1);
263 pMC->Gsatt("BRI3","seen",0);
264 pMC->Gsatt("BLO1","seen",0);
265 pMC->Gsatt("BLD1","seen",0);
266 pMC->Gsatt("BLO2","seen",0);
267 pMC->Gsatt("BLD2","seen",0);
268 pMC->Gsatt("BLO3","seen",0);
269 pMC->Gsatt("BLD3","seen",0);
270 pMC->Gsatt("BL01","seen",1);
271 pMC->Gsatt("BL02","seen",1);
272 pMC->Gsatt("BL11","seen",1);
273 pMC->Gsatt("BL12","seen",1);
274 pMC->Gsatt("BLO4","seen",0);
275 pMC->Gsatt("BLD4","seen",0);
276 pMC->Gsatt("BL03","seen",1);
277 pMC->Gsatt("BL04","seen",1);
278 //
279 pMC->Gdopt("hide", "on");
280 pMC->Gdopt("shad", "on");
281 pMC->Gsatt("*", "fill", 7);
282 pMC->SetClipBox(".");
283 pMC->DefaultRange();
284 pMC->Gdraw("alic", 40, 30, 0, 10, 10, .015, .015);
285 pMC->Gdhead(1111, "Space Frame");
286 pMC->Gdman(18, 4, "MAN");
287}
288
289//_____________________________________________________________________________
290void AliFRAMEv1::CreateMaterials()
291{
292
293 //
294 // Create materials for the space frame
295 //
296
297 Int_t ISXFLD = gAlice->Field()->Integ();
298 Float_t SXMGMX = gAlice->Field()->Max();
299
300 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
301 Float_t zsteel[4] = { 26.,24.,28.,14. };
302 Float_t wsteel[4] = { .715,.18,.1,.005 };
303
304 Float_t epsil, stmin, deemax, tmaxfd, stemax;
305
306 // STEEL
307
308
309 // --- Define the various materials for GEANT ---
310 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
311 AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
312
313 // ****************
314 // Defines tracking media parameters.
315 // Les valeurs sont commentees pour laisser le defaut
316 // a GEANT (version 3-21, page CONS200), f.m.
317 epsil = .001; // Tracking precision,
318 stemax = -1.; // Maximum displacement for multiple scat
319 tmaxfd = -20.; // Maximum angle due to field deflection
320 deemax = -.3; // Maximum fractional energy loss, DLS
321 stmin = -.8;
322 // ***************
323 //ifield0 = 0; // Field off
324 //ifield1 = 2; // 1.0 T. FIELD (DIPOLE)
325 //ifield3 = 3;
326
327 // Air
328
329 // 0.2 T. FIELD (L3)
330 AliMedium(1215, "AIR_L3_US ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
331
332 // Steel
333
334 AliMedium(1219, "ST_L3_US ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
335}
336
337
338
339
340
341
342
343
344
345
346