4c039060 |
1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
3 | * * |
4 | * Author: The ALICE Off-line Project. * |
5 | * Contributors are mentioned in the code where appropriate. * |
6 | * * |
7 | * Permission to use, copy, modify and distribute this software and its * |
8 | * documentation strictly for non-commercial purposes is hereby granted * |
9 | * without fee, provided that the above copyright notice appears in all * |
10 | * copies and that both the copyright notice and this permission notice * |
11 | * appear in the supporting documentation. The authors make no claims * |
12 | * about the suitability of this software for any purpose. It is * |
13 | * provided "as is" without express or implied warranty. * |
14 | **************************************************************************/ |
15 | |
16 | /* |
17 | $Log$ |
1cedd08a |
18 | Revision 1.6 1999/09/29 09:24:35 fca |
19 | Introduction of the Copyright and cvs Log |
20 | |
4c039060 |
21 | */ |
22 | |
fe4da5cc |
23 | /////////////////////////////////////////////////////////////////////////////// |
24 | // // |
25 | // Zero Degree Calorimeter // |
26 | // This class contains the basic functions for the Time Of Flight // |
27 | // detector. Functions specific to one particular geometry are // |
28 | // contained in the derived classes // |
29 | // // |
30 | //Begin_Html |
31 | /* |
1439f98e |
32 | <img src="picts/AliZDCClass.gif"> |
fe4da5cc |
33 | </pre> |
34 | <br clear=left> |
35 | <font size=+2 color=red> |
36 | <p>The responsible person for this module is |
37 | <a href="mailto:Eugenio.Scomparin@cern.ch">Eugenio Scomparin</a>. |
38 | </font> |
39 | <pre> |
40 | */ |
41 | //End_Html |
42 | // // |
43 | // // |
44 | /////////////////////////////////////////////////////////////////////////////// |
45 | |
46 | #include <TBRIK.h> |
47 | #include <TNode.h> |
48 | |
49 | #include "AliZDC.h" |
50 | #include "AliRun.h" |
51 | #include "AliCallf77.h" |
52 | #include "AliConst.h" |
53 | #include "AliMC.h" |
54 | |
55 | #ifndef WIN32 |
56 | # define zdc_init zdc_init_ |
57 | # define zdc_step zdc_step_ |
58 | # define zdc_setbeam zdc_setbeam_ |
59 | # define zdc_sethijing zdc_sethijing_ |
60 | # define zdc_setvenus zdc_setvenus_ |
61 | # define zdc_setkine zdc_setkine_ |
62 | #else |
63 | # define zdc_step ZDC_STEP |
64 | # define zdc_setbeam ZDC_SETBEAM |
65 | # define zdc_sethijing ZDC_SETHIJING |
66 | # define zdc_setvenus ZDC_SETVENUS |
67 | # define zdc_setkine ZDC_SETKINE |
68 | #endif |
69 | |
70 | extern "C" void type_of_call zdc_init(); |
71 | extern "C" void type_of_call zdc_step(); |
72 | extern "C" void type_of_call zdc_setbeam(Int_t beam, Float_t fx, Float_t fy, |
73 | Float_t sx, Float_t sy, Float_t div, |
74 | Float_t angle, Int_t cross); |
75 | extern "C" void type_of_call zdc_sethijing(Int_t hij, Int_t hijf, Int_t hijsp, |
76 | DEFCHARD DEFCHARL); |
77 | extern "C" void type_of_call zdc_setvenus(Int_t hiv, Int_t hivf, Int_t hivsp, |
78 | DEFCHARD DEFCHARL); |
79 | extern "C" void type_of_call zdc_setkine(Int_t code, Float_t pmom, Float_t cx, |
80 | Float_t cy, Float_t cz, Int_t type, |
81 | Int_t fermi); |
82 | |
83 | ClassImp(AliZDC) |
84 | |
85 | //_____________________________________________________________________________ |
86 | AliZDC::AliZDC() |
87 | { |
88 | // |
89 | // Default constructor for the Zero Degree Calorimeter base class |
90 | // |
91 | fIshunt = 0; |
92 | } |
93 | |
94 | //_____________________________________________________________________________ |
95 | AliZDC::AliZDC(const char *name, const char *title) |
96 | : AliDetector(name,title) |
97 | { |
98 | // |
99 | // Standard constructor for the Zero Degree Calorimeter base class |
100 | // |
101 | |
102 | // |
103 | // Allocate the array of hits |
104 | fHits = new TClonesArray("AliZDChit", 405); |
1cedd08a |
105 | gAlice->AddHitList(fHits); |
fe4da5cc |
106 | |
107 | fIshunt = 1; |
108 | } |
109 | |
110 | //_____________________________________________________________________________ |
111 | void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits) |
112 | { |
113 | // |
114 | // Add a Zero Degree Calorimeter hit |
115 | // |
116 | TClonesArray &lhits = *fHits; |
117 | new(lhits[fNhits++]) AliZDChit(fIshunt,track,vol,hits); |
118 | } |
119 | |
120 | //_____________________________________________________________________________ |
121 | void AliZDC::BuildGeometry() |
122 | { |
123 | // |
124 | // Build the ROOT TNode geometry for event display |
125 | // in the Zero Degree Calorimeter |
126 | // This routine is dummy for the moment |
127 | // |
128 | |
129 | // TNode *Node, *Top; |
130 | // TBRIK *brik; |
131 | // const int kColorZDC = kRed; |
132 | |
133 | // |
134 | // Top=gAlice->GetGeometry()->GetNode("alice"); |
135 | |
136 | // ZDC |
137 | /* |
138 | brik = new TBRIK("S_ZDC","ZDC box","void",300,300,5); |
139 | Top->cd(); |
140 | Node = new TNode("ZDC","ZDC","S_ZDC",0,0,600,""); |
141 | Node->SetLineColor(kColorZDC); |
142 | fNodes->Add(Node); |
143 | */ |
144 | } |
145 | |
146 | //_____________________________________________________________________________ |
147 | Int_t AliZDC::DistancetoPrimitive(Int_t , Int_t ) |
148 | { |
149 | // |
150 | // Distance from the mouse to the Zero Degree Calorimeter |
151 | // Dummy routine |
152 | // |
153 | return 9999; |
154 | } |
155 | |
156 | //_____________________________________________________________________________ |
157 | void AliZDC::SetBeam(Int_t beam, Float_t fx, Float_t fy, Float_t sx, |
158 | Float_t sy, Float_t div, Float_t angle, Int_t cross) |
159 | { |
160 | // |
161 | // Set beam characteristic |
162 | // This routine has to be revised as it is disconnected from the |
163 | // actual generation in this version of AliRoot |
164 | // |
165 | |
166 | // beam : 1 = gaussian beam |
167 | // : 2 = uniform beam |
168 | // fx : x-coordinate of beam offset |
169 | // fy : y-coordinate of beam offset |
170 | // sx : sigma-x of the beam (gaussian or uniform) |
171 | // sy : sigma-y of the beam (gaussian or uniform) |
172 | // div : divergency of the beam (32*10**-6 rad for LHC) |
173 | // angle : beam crossing angle (100*10**-6 rad for LHC) |
174 | // cross : 1 = horizontal beam crossing |
175 | // : 2 = vertical beam crossing |
176 | zdc_setbeam(beam,fx,fy,sx,sy,div,angle,cross); |
177 | } |
178 | |
179 | //_____________________________________________________________________________ |
180 | void AliZDC::SetHijing(Int_t hij, Int_t hijf, Int_t hijsp, const char *file) |
181 | { |
182 | // |
183 | // Set the parameter for the HIJING generation |
184 | // This routine has to be revised as it is disconnected from the |
185 | // actual generation in this version of AliRoot |
186 | // |
187 | |
188 | // HIJ : 1 = read HIJING event file |
189 | // : 2 = " " " " + debug |
190 | // HIJF : event number of the first event to be read from file |
191 | // HIJSP: 0 = read all particles |
192 | // : 1 = remove spectator nucleons |
193 | zdc_sethijing(hij,hijf,hijsp, PASSCHARD(file) PASSCHARL(file)); |
194 | } |
195 | |
196 | //_____________________________________________________________________________ |
197 | void AliZDC::SetVenus(Int_t hiv, Int_t hivf, Int_t hivsp, const char *file) |
198 | { |
199 | // |
200 | // Set the parameter for the VENUS generation |
201 | // This routine has to be revised as it is disconnected from the |
202 | // actual generation in this version of AliRoot |
203 | // |
204 | |
205 | // HIV : 1 = read VENUS event file |
206 | // : 2 = " " " " + debug |
207 | // HIVF : event number of the first event to be read from file |
208 | // HIVSP: 0 = read all particles |
209 | // : 1 = remove spectator nucleons |
210 | zdc_setvenus(hiv,hivf,hivsp, PASSCHARD(file) PASSCHARL(file)); |
211 | } |
212 | |
213 | //_____________________________________________________________________________ |
214 | void AliZDC::SetKine(Int_t code, Float_t pmom, Float_t cx, Float_t cy, |
215 | Float_t cz, Int_t type, Int_t fermi) |
216 | { |
217 | // |
218 | // Set the parameter for the event generation |
219 | // This routine has to be revised as it is disconnected from the |
220 | // actual generation in this version of AliRoot |
221 | // |
222 | |
223 | // code : GEANT code of the test particle |
224 | // pmom : absolute value of particle momentum |
225 | // cx,cy,cz : director cosines of the track (if type) |
226 | // type : 0 = take director cosines from cx,cy,cz |
227 | // : <>0 = pseudorapidity of the test particle |
228 | // fermi : 0 = no Fermi motion for the spectator nucleons |
229 | // : 1 = Fermi motion for the spectator nucleons |
230 | zdc_setkine(code,pmom,cx,cy,cz,type,fermi); |
231 | } |
232 | |
233 | //_____________________________________________________________________________ |
234 | void AliZDC::StepManager() |
235 | { |
236 | // |
237 | // Routine called at every step in the Zero Degree Calorimeter |
238 | // This is a simple interface to the FORTRAN routine |
239 | // A step manager should be written |
240 | // |
241 | zdc_step(); |
242 | } |
243 | |
244 | |
245 | ClassImp(AliZDCv1) |
246 | |
247 | |
248 | /////////////////////////////////////////////////////////////////////////////// |
249 | // // |
250 | // Zero Degree Calorimeter version 1 // |
251 | // // |
252 | //Begin_Html |
253 | /* |
1439f98e |
254 | <img src="picts/AliZDCv1Class.gif"> |
fe4da5cc |
255 | */ |
256 | //End_Html |
257 | // // |
258 | // // |
259 | /////////////////////////////////////////////////////////////////////////////// |
260 | |
261 | //_____________________________________________________________________________ |
262 | AliZDCv1::AliZDCv1() : AliZDC() |
263 | { |
264 | // |
265 | // Default constructor for Zero Degree Calorimeter |
266 | // |
267 | } |
268 | |
269 | //_____________________________________________________________________________ |
270 | AliZDCv1::AliZDCv1(const char *name, const char *title) |
271 | : AliZDC(name,title) |
272 | { |
273 | // |
274 | // Standard constructor for Zero Degree Calorimeter |
275 | // |
276 | } |
277 | |
278 | //_____________________________________________________________________________ |
279 | void AliZDCv1::CreateGeometry() |
280 | { |
281 | // |
282 | // Create the geometry for the Zero Degree Calorimeter version 1 |
283 | // -- Author : E Scomparin |
284 | // |
285 | //Begin_Html |
286 | /* |
1439f98e |
287 | <img src="picts/AliZDCv1.gif"> |
fe4da5cc |
288 | */ |
289 | //End_Html |
290 | //Begin_Html |
291 | /* |
1439f98e |
292 | <img src="picts/AliZDCv1Tree.gif"> |
fe4da5cc |
293 | */ |
294 | //End_Html |
295 | |
296 | // The following variables were illegaly initialized in zdc_init. |
297 | // These variables should become data members of this class |
298 | // once zdc_init has been converted |
299 | //* Initialize COMMON block ZDC_CGEOM |
300 | //* |
301 | |
fe4da5cc |
302 | const Int_t NZPTX=4; |
303 | const Int_t NZPTY=1; |
304 | const Int_t NZNTX=2; |
305 | const Int_t NZNTY=2; |
306 | |
307 | Float_t HDZN[3] = {4.0,4.0,50.0}; |
308 | Float_t HDZP[3] = {10.0,6.0,75.0}; |
309 | // Coordinates of the center of the ZDC front face in the MRS |
310 | Float_t ZNPOS[3] = {-0.5,0.,11613.}; |
311 | Float_t ZPPOS[3] = {-21.0,0.,11563.}; |
312 | Float_t FIZN[3] = {0.,0.01825,50.0}; |
313 | Float_t FIZP[3] = {0.,0.01825,75.0}; |
314 | Float_t GRZN[3] = {0.025,0.025,50.0}; |
315 | Float_t GRZP[3] = {0.040,0.040,75.0}; |
316 | Int_t NCEN[3] = {11,11,0}; |
317 | Int_t NCEP[3] = {10,10,0}; |
318 | |
319 | Float_t angle; |
320 | Float_t zq, conpar[9], tubpar[3]; |
321 | Int_t im1, im2; |
322 | Float_t zd1, zd2; |
323 | |
324 | |
ad51aeb0 |
325 | Int_t *idtmed = fIdtmed->GetArray()-799; |
fe4da5cc |
326 | |
327 | // -- Mother of the ZDC |
328 | conpar[0] = 0.; |
329 | conpar[1] = 360.; |
330 | conpar[2] = 2.; |
331 | conpar[3] = 1920.; |
332 | conpar[4] = 0.; |
333 | conpar[5] = 55.; |
334 | conpar[6] = 13060.; |
335 | conpar[7] = 0.; |
336 | conpar[8] = 55.; |
cfce8870 |
337 | gMC->Gsvolu("ZDC ", "PCON", idtmed[891], conpar, 9); |
338 | gMC->Gspos("ZDC ", 1, "ALIC", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
339 | // -- FIRST SECTION OF THE BEAM PIPE (from compensator dipole to |
340 | // beginning of D1) |
341 | |
342 | zd1 = 1920.; |
343 | |
344 | tubpar[0] = 2.3; |
345 | tubpar[1] = 2.5; |
346 | tubpar[2] = 1961.75; |
cfce8870 |
347 | gMC->Gsvolu("P001", "TUBE", idtmed[851], tubpar, 3); |
348 | gMC->Gspos("P001", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
349 | |
350 | //-- SECOND SECTION OF THE BEAM PIPE (FROM THE END OF D1 TO THE BEGINNING OF |
351 | // D2) |
352 | |
353 | zd1 = 6316.+472.5; |
354 | |
355 | tubpar[0] = 7.3/2.; |
356 | tubpar[1] = 7.7/2.; |
357 | tubpar[2] = 90.*0.5; |
cfce8870 |
358 | gMC->Gsvolu("P002", "TUBE", idtmed[851], tubpar, 3); |
359 | gMC->Gspos("P002", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
360 | |
361 | zd1 += tubpar[2] * 2.; |
362 | |
363 | tubpar[0] = 7.3/2.; |
364 | tubpar[1] = 7.7/2.; |
365 | tubpar[2] = 10.*0.5; |
cfce8870 |
366 | gMC->Gsvolu("P003", "TUBE", idtmed[851], tubpar, 3); |
367 | gMC->Gspos("P003", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
368 | |
369 | zd1 += tubpar[2] * 2.; |
370 | |
371 | conpar[0] = 3.16/2.; |
372 | conpar[1] = 7.3/2.; |
373 | conpar[2] = 7.7/2.; |
374 | conpar[3] = 9.8/2.; |
375 | conpar[4] = 10.0/2.; |
cfce8870 |
376 | gMC->Gsvolu("P004", "CONE", idtmed[851], conpar, 5); |
377 | gMC->Gspos("P004", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
378 | |
379 | zd1 += conpar[0] * 2.; |
380 | |
381 | tubpar[0] = 9.8/2.; |
382 | tubpar[1] = 10.0/2; |
383 | tubpar[2] = 490./2.; |
cfce8870 |
384 | gMC->Gsvolu("P005", "TUBE", idtmed[851], tubpar, 3); |
385 | gMC->Gspos("P005", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
386 | |
387 | zd1 += tubpar[2] * 2.; |
388 | |
389 | conpar[0] = 30./2.; |
390 | conpar[1] = 9.8/2.; |
391 | conpar[2] = 10.0/2.; |
392 | conpar[3] = 20.4/2.; |
393 | conpar[4] = 20.6/2.; |
cfce8870 |
394 | gMC->Gsvolu("P006", "CONE", idtmed[851], conpar, 5); |
395 | gMC->Gspos("P006", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
396 | |
397 | zd1 += conpar[0] * 2.; |
398 | |
399 | tubpar[0] = 20.4/2.; |
400 | tubpar[1] = 20.6/2.; |
401 | tubpar[2] = 150./2.; |
cfce8870 |
402 | gMC->Gsvolu("P007", "TUBE", idtmed[851], tubpar, 3); |
403 | gMC->Gspos("P007", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
404 | |
405 | zd1 += tubpar[2] * 2.; |
406 | |
407 | conpar[0] = 13.6/2.; |
408 | conpar[1] = 20.4/2.; |
409 | conpar[2] = 20.6/2.; |
410 | conpar[3] = 25.2/2.; |
411 | conpar[4] = 25.4/2.; |
cfce8870 |
412 | gMC->Gsvolu("P008", "CONE", idtmed[851], conpar, 5); |
413 | gMC->Gspos("P008", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
414 | |
415 | zd1 += conpar[0] * 2.; |
416 | |
417 | tubpar[0] = 25.2/2.; |
418 | tubpar[1] = 25.4/2.; |
419 | tubpar[2] = 205.8/2.; |
cfce8870 |
420 | gMC->Gsvolu("P009", "TUBE", idtmed[851], tubpar, 3); |
421 | gMC->Gspos("P009", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
422 | |
423 | zd1 += tubpar[2] * 2.; |
424 | |
425 | tubpar[0] = 43.8/2.; |
426 | tubpar[1] = 44.0/2.; |
427 | tubpar[2] = 500./2.; |
cfce8870 |
428 | gMC->Gsvolu("P010", "TUBE", idtmed[851], tubpar, 3); |
429 | gMC->Gspos("P010", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
430 | |
431 | zd1 += tubpar[2] * 2.; |
432 | |
433 | tubpar[0] = 31.8/2.; |
434 | tubpar[1] = 32.0/2.; |
435 | tubpar[2] = 757.5/2.; |
cfce8870 |
436 | gMC->Gsvolu("P011", "TUBE", idtmed[851], tubpar, 3); |
437 | gMC->Gspos("P011", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
438 | |
439 | zd1 += tubpar[2] * 2.; |
440 | |
441 | conpar[0] = 22.7/2.; |
442 | conpar[1] = 31.8/2.; |
443 | conpar[2] = 32.0/2.; |
444 | conpar[3] = 39.8/2.; |
445 | conpar[4] = 40.0/2.; |
cfce8870 |
446 | gMC->Gsvolu("P012", "CONE", idtmed[851], conpar, 5); |
447 | gMC->Gspos("P012", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
448 | |
449 | zd1 += conpar[0] * 2.; |
450 | |
451 | tubpar[0] = 39.8/2.; |
452 | tubpar[1] = 40.0/2.; |
453 | tubpar[2] = 100./2.; |
cfce8870 |
454 | gMC->Gsvolu("P013", "TUBE", idtmed[851], tubpar, 3); |
455 | gMC->Gspos("P013", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
456 | |
457 | zd1 += tubpar[2] * 2.; |
458 | |
459 | tubpar[0] = 39.8/2.; |
460 | tubpar[1] = 40.0/2.; |
461 | tubpar[2] = 600./2.; |
cfce8870 |
462 | gMC->Gsvolu("P014", "TUBE", idtmed[851], tubpar, 3); |
463 | gMC->Gspos("P014", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
464 | |
465 | zd1 += tubpar[2] * 2.; |
466 | |
467 | conpar[0] = 28.4/2.; |
468 | conpar[1] = 39.8/2.; |
469 | conpar[2] = 40.0/2.; |
470 | conpar[3] = 49.8/2.; |
471 | conpar[4] = 50.0/2.; |
cfce8870 |
472 | gMC->Gsvolu("P015", "CONE", idtmed[851], conpar, 5); |
473 | gMC->Gspos("P015", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
474 | |
475 | zd1 += conpar[0] * 2.; |
476 | |
477 | tubpar[0] = 49.8/2.; |
478 | tubpar[1] = 50.0/2.; |
479 | tubpar[2] = 100./2.; |
cfce8870 |
480 | gMC->Gsvolu("P016", "TUBE", idtmed[851], tubpar, 3); |
481 | gMC->Gspos("P016", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
482 | |
483 | zd1 += tubpar[2] * 2.; |
484 | |
485 | tubpar[0] = 49.8/2.; |
486 | tubpar[1] = 50.0/2.; |
487 | tubpar[2] = 600./2.; |
cfce8870 |
488 | gMC->Gsvolu("P017", "TUBE", idtmed[851], tubpar, 3); |
489 | gMC->Gspos("P017", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
490 | |
491 | zd1 += tubpar[2] * 2.; |
492 | |
493 | conpar[0] = 28.4/2.; |
494 | conpar[1] = 49.8/2.; |
495 | conpar[2] = 50.0/2.; |
496 | conpar[3] = 59.8/2.; |
497 | conpar[4] = 60.0/2.; |
cfce8870 |
498 | gMC->Gsvolu("P018", "CONE", idtmed[851], conpar, 5); |
499 | gMC->Gspos("P018", 1, "ZDC ", 0., 0., conpar[0] + zd1, 0, "ONLY"); |
fe4da5cc |
500 | |
501 | zd1 += conpar[0] * 2.; |
502 | |
503 | tubpar[0] = 59.8/2.; |
504 | tubpar[1] = 60.0/2.; |
505 | tubpar[2] = 50./2.; |
cfce8870 |
506 | gMC->Gsvolu("P019", "TUBE", idtmed[851], tubpar, 3); |
507 | gMC->Gspos("P019", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
508 | |
509 | zd1 += tubpar[2] * 2.; |
510 | |
511 | tubpar[0] = 59.8/2.; |
512 | tubpar[1] = 60.0/2.; |
513 | tubpar[2] = 800./2.; |
cfce8870 |
514 | gMC->Gsvolu("P020", "TUBE", idtmed[851], tubpar, 3); |
515 | gMC->Gspos("P020", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
516 | |
517 | zd1 += tubpar[2] * 2.; |
518 | |
519 | tubpar[0] = 0.; |
520 | tubpar[1] = 60.0/2.; |
521 | tubpar[2] = 0.2/2.; |
cfce8870 |
522 | gMC->Gsvolu("P021", "TUBE", idtmed[851], tubpar, 3); |
523 | gMC->Gspos("P021", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
fe4da5cc |
524 | |
525 | zd1 += tubpar[2] * 2.; |
526 | |
527 | tubpar[0] = 0.; |
528 | tubpar[1] = 4.4/2.; |
529 | tubpar[2] = 0.2/2.; |
cfce8870 |
530 | gMC->Gsvolu("Q021", "TUBE", idtmed[889], tubpar, 3); |
fe4da5cc |
531 | tubpar[0] = 0.; |
532 | tubpar[1] = 7.0/2.; |
533 | tubpar[2] = 0.2/2.; |
cfce8870 |
534 | gMC->Gsvolu("R021", "TUBE", idtmed[889], tubpar, 3); |
fe4da5cc |
535 | // -- POSITION Q021 INSIDE P021 |
cfce8870 |
536 | gMC->Gspos("Q021", 1, "P021", -7.7, 0., 0., 0, "ONLY"); |
fe4da5cc |
537 | // -- POSITION R020 INSIDE P020 |
cfce8870 |
538 | gMC->Gspos("R021", 1, "P021", 7.7, 0., 0., 0, "ONLY"); |
fe4da5cc |
539 | |
540 | // -- BEAM PIPES BETWEEN END OF CONICAL PIPE AND BEGINNING OF D2 |
541 | tubpar[0] = 4.0/2.; |
542 | tubpar[1] = 4.4/2.; |
543 | tubpar[2] = 645.*0.5; |
cfce8870 |
544 | gMC->Gsvolu("P022", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
545 | tubpar[0] = 7.0/2.; |
546 | tubpar[1] = 7.4/2.; |
547 | tubpar[2] = 645.*0.5; |
cfce8870 |
548 | gMC->Gsvolu("P023", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
549 | |
550 | // -- ROTATE PIPES |
551 | AliMatrix(im1, 90.-0.071, 0., 90., 90., .071, 180.); |
552 | angle = .071*kDegrad; |
cfce8870 |
553 | gMC->Gspos("P022", 1, "ZDC ", TMath::Sin(angle) * 322.5 - 9.7 + |
fe4da5cc |
554 | TMath::Sin(angle) * 472.5, 0., tubpar[2] + zd1, im1, "ONLY"); |
555 | AliMatrix(im2, 90.+0.071, 0., 90., 90., .071, 0.); |
cfce8870 |
556 | gMC->Gspos("P023", 1, "ZDC ", 9.7 - TMath::Sin(angle) * 322.5, 0., |
fe4da5cc |
557 | tubpar[2] + zd1, im2, "ONLY"); |
558 | |
559 | // -- END OF BEAM PIPE VOLUME DEFINITION. MAGNET DEFINITION FOLLOWS |
560 | // (LHC OPTICS 6) |
561 | |
562 | // -- COMPENSATOR DIPOLE (MCBWA) |
563 | // GAP (VACUUM WITH MAGNETIC FIELD) |
564 | |
565 | tubpar[0] = 0.; |
566 | tubpar[1] = 4.5; |
567 | tubpar[2] = 190./2.; |
cfce8870 |
568 | gMC->Gsvolu("MCBW", "TUBE", idtmed[890], tubpar, 3); |
569 | gMC->Gspos("MCBW", 1, "ZDC ", 0., 0., tubpar[2] + 1920., 0, "ONLY"); |
fe4da5cc |
570 | |
571 | // -- YOKE (IRON WITHOUT MAGNETIC FIELD) |
572 | |
573 | tubpar[0] = 4.5; |
574 | tubpar[1] = 55.; |
575 | tubpar[2] = 190./2.; |
cfce8870 |
576 | gMC->Gsvolu("YMCB", "TUBE", idtmed[851], tubpar, 3); |
577 | gMC->Gspos("YMCB", 1, "ZDC ", 0., 0., tubpar[2] + 1920., 0, "ONLY"); |
fe4da5cc |
578 | |
579 | // -- INNER TRIPLET |
580 | |
581 | zq = 2300.; |
582 | |
583 | // -- DEFINE MQXL AND MQX QUADRUPOLE ELEMENT |
584 | |
585 | // MQXL |
586 | // -- GAP (VACUUM WITH MAGNETIC FIELD) |
587 | |
588 | tubpar[0] = 0.; |
589 | tubpar[1] = 3.5; |
590 | tubpar[2] = 630./2.; |
cfce8870 |
591 | gMC->Gsvolu("MQXL", "TUBE", idtmed[890], tubpar, 3); |
fe4da5cc |
592 | |
593 | // -- YOKE |
594 | |
595 | tubpar[0] = 3.5; |
596 | tubpar[1] = 22.; |
597 | tubpar[2] = 630./2.; |
cfce8870 |
598 | gMC->Gsvolu("YMQL", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
599 | |
cfce8870 |
600 | gMC->Gspos("MQXL", 1, "ZDC ", 0., 0., tubpar[2] + zq, 0, "ONLY"); |
601 | gMC->Gspos("YMQL", 1, "ZDC ", 0., 0., tubpar[2] + zq, 0, "ONLY"); |
fe4da5cc |
602 | |
cfce8870 |
603 | gMC->Gspos("MQXL", 2, "ZDC ", 0., 0., tubpar[2] + zq + 2430., 0, "ONLY"); |
604 | gMC->Gspos("YMQL", 2, "ZDC ", 0., 0., tubpar[2] + zq + 2430., 0, "ONLY"); |
fe4da5cc |
605 | |
606 | // -- MQX |
607 | // -- GAP (VACUUM WITH MAGNETIC FIELD) |
608 | |
609 | tubpar[0] = 0.; |
610 | tubpar[1] = 3.5; |
611 | tubpar[2] = 550./2.; |
cfce8870 |
612 | gMC->Gsvolu("MQX ", "TUBE", idtmed[890], tubpar, 3); |
fe4da5cc |
613 | |
614 | // -- YOKE |
615 | |
616 | tubpar[0] = 3.5; |
617 | tubpar[1] = 22.; |
618 | tubpar[2] = 550./2.; |
cfce8870 |
619 | gMC->Gsvolu("YMQ ", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
620 | |
cfce8870 |
621 | gMC->Gspos("MQX ", 1, "ZDC ", 0., 0., tubpar[2] + zq + 880., 0, "ONLY"); |
622 | gMC->Gspos("YMQ ", 1, "ZDC ", 0., 0., tubpar[2] + zq + 880., 0, "ONLY"); |
fe4da5cc |
623 | |
cfce8870 |
624 | gMC->Gspos("MQX ", 2, "ZDC ", 0., 0., tubpar[2] + zq + 1530., 0, "ONLY"); |
625 | gMC->Gspos("YMQ ", 2, "ZDC ", 0., 0., tubpar[2] + zq + 1530., 0, "ONLY"); |
fe4da5cc |
626 | |
627 | // -- SEPARATOR DIPOLE D1 |
628 | |
629 | zd1 = 5843.5; |
630 | |
631 | // -- GAP (VACUUM WITH MAGNETIC FIELD) |
632 | |
633 | tubpar[0] = 0.; |
634 | tubpar[1] = 4.5; |
635 | tubpar[2] = 945/2.; |
cfce8870 |
636 | gMC->Gsvolu("D1 ", "TUBE", idtmed[890], tubpar, 3); |
fe4da5cc |
637 | |
638 | // -- YOKE |
639 | |
640 | tubpar[0] = 0.; |
641 | tubpar[1] = 55.; |
642 | tubpar[2] = 945/2.; |
cfce8870 |
643 | gMC->Gsvolu("YD1 ", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
644 | |
cfce8870 |
645 | gMC->Gspos("YD1 ", 1, "ZDC ", 0., 0., tubpar[2] + zd1, 0, "ONLY"); |
646 | gMC->Gspos("D1 ", 1, "YD1 ", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
647 | |
648 | // -- DIPOLE D2 |
649 | |
650 | zd2 = 12113.2; |
651 | |
652 | // -- GAP (VACUUM WITH MAGNETIC FIELD) |
653 | |
654 | tubpar[0] = 0.; |
655 | tubpar[1] = 4.5; |
656 | tubpar[2] = 945./2.; |
cfce8870 |
657 | gMC->Gsvolu("D2 ", "TUBE", idtmed[890], tubpar, 3); |
fe4da5cc |
658 | |
659 | // -- YOKE |
660 | |
661 | tubpar[0] = 0.; |
662 | tubpar[1] = 55.; |
663 | tubpar[2] = 945./2.; |
cfce8870 |
664 | gMC->Gsvolu("YD2 ", "TUBE", idtmed[851], tubpar, 3); |
fe4da5cc |
665 | |
cfce8870 |
666 | gMC->Gspos("YD2 ", 1, "ZDC ", 0., 0., tubpar[2] + zd2, 0, "ONLY"); |
fe4da5cc |
667 | |
cfce8870 |
668 | gMC->Gspos("D2 ", 1, "YD2 ", -9.7, 0., 0., 0, "ONLY"); |
669 | gMC->Gspos("D2 ", 2, "YD2 ", 9.7, 0., 0., 0, "ONLY"); |
fe4da5cc |
670 | |
671 | // -- END OF MAGNET DEFINITION |
672 | |
673 | // ----------------- Hadronic calorimeters -------------------- * |
674 | |
675 | // Neutron calorimeter |
676 | |
cfce8870 |
677 | gMC->Gsvolu("ZNEU", "BOX ", idtmed[800], HDZN, 3); // Passive material |
678 | gMC->Gsvolu("ZNFI", "TUBE", idtmed[802], FIZN, 3); // Active material |
679 | gMC->Gsvolu("ZNGR", "BOX ", idtmed[889], GRZN, 3); // Empty grooves |
fe4da5cc |
680 | |
681 | // Divide ZNEU in towers |
682 | // (for hits purposes) |
683 | |
cfce8870 |
684 | gMC->Gsdvn("ZNTX", "ZNEU", NZNTX, 1); // x-tower |
685 | gMC->Gsdvn("ZN1 ", "ZNTX", NZNTY, 2); // y-tower |
fe4da5cc |
686 | |
687 | // Divide ZNEU in minitowers |
688 | // (NCEN(1)= NUMBER OF FIBERS PER TOWER ALONG X-AXIS, |
689 | // NCEN(2)= NUMBER OF FIBERS PER TOWER ALONG Y-AXIS) |
690 | // (one fiber per minitower) |
691 | |
cfce8870 |
692 | gMC->Gsdvn("ZNSL", "ZN1 ", NCEN[1], 2); // Slices |
693 | gMC->Gsdvn("ZNST", "ZNSL", NCEN[0], 1); // Sticks |
fe4da5cc |
694 | |
695 | // --- Position the empty grooves in the sticks |
cfce8870 |
696 | gMC->Gspos("ZNGR", 1, "ZNST", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
697 | // --- Position the fibers in the grooves |
cfce8870 |
698 | gMC->Gspos("ZNFI", 1, "ZNGR", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
699 | // --- Position the neutron calorimeter in ZDC |
cfce8870 |
700 | gMC->Gspos("ZNEU", 1, "ZDC ", ZNPOS[0], ZNPOS[1], ZNPOS[2] + HDZN[2], 0, "ONLY"); |
fe4da5cc |
701 | |
702 | // Proton calorimeter |
703 | |
cfce8870 |
704 | gMC->Gsvolu("ZPRO", "BOX ", idtmed[801], HDZP, 3); // Passive material |
705 | gMC->Gsvolu("ZPFI", "TUBE", idtmed[802], FIZP, 3); // Active material |
706 | gMC->Gsvolu("ZPGR", "BOX ", idtmed[889], GRZP, 3); // Empty grooves |
fe4da5cc |
707 | |
708 | // Divide ZPRO in towers |
709 | // (for hits purposes) |
710 | |
cfce8870 |
711 | gMC->Gsdvn("ZPTX", "ZPRO", NZPTX, 1); // x-tower |
712 | gMC->Gsdvn("ZP1 ", "ZPTX", NZPTY, 2); // y-tower |
fe4da5cc |
713 | |
714 | |
715 | // Divide ZPRO in minitowers |
716 | // (NCEP[0]= NUMBER OF FIBERS ALONG X-AXIS PER MINITOWER, |
717 | // NCEP[1]= NUMBER OF FIBERS ALONG Y-AXIS PER MINITOWER) |
718 | // (one fiber per minitower) |
719 | |
cfce8870 |
720 | gMC->Gsdvn("ZPSL", "ZP1 ", NCEP[1], 2); // Slices |
721 | gMC->Gsdvn("ZPST", "ZPSL", NCEP[0], 1); // Sticks |
fe4da5cc |
722 | |
723 | // --- Position the empty grooves in the sticks |
cfce8870 |
724 | gMC->Gspos("ZPGR", 1, "ZPST", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
725 | // --- Position the fibers in the grooves |
cfce8870 |
726 | gMC->Gspos("ZPFI", 1, "ZPGR", 0., 0., 0., 0, "ONLY"); |
fe4da5cc |
727 | // --- Position the proton calorimeter in ZDC |
cfce8870 |
728 | gMC->Gspos("ZPRO", 1, "ZDC ", ZPPOS[0], ZPPOS[1], ZPPOS[2] + HDZP[2], 0, "ONLY"); |
fe4da5cc |
729 | |
730 | } |
731 | |
732 | //_____________________________________________________________________________ |
1a6536da |
733 | void AliZDCv1::DrawModule() |
fe4da5cc |
734 | { |
735 | // |
736 | // Draw a shaded view of the Zero Degree Calorimeter version 1 |
737 | // |
738 | |
fe4da5cc |
739 | // Set everything unseen |
cfce8870 |
740 | gMC->Gsatt("*", "seen", -1); |
fe4da5cc |
741 | // |
742 | // Set ALIC mother transparent |
cfce8870 |
743 | gMC->Gsatt("ALIC","SEEN",0); |
fe4da5cc |
744 | // |
745 | // Set the volumes visible |
cfce8870 |
746 | gMC->Gsatt("ZDC","SEEN",0); |
747 | gMC->Gsatt("P001","SEEN",1); |
748 | gMC->Gsatt("P002","SEEN",1); |
749 | gMC->Gsatt("P003","SEEN",1); |
750 | gMC->Gsatt("P004","SEEN",1); |
751 | gMC->Gsatt("P005","SEEN",1); |
752 | gMC->Gsatt("P006","SEEN",1); |
753 | gMC->Gsatt("P007","SEEN",1); |
754 | gMC->Gsatt("P008","SEEN",1); |
755 | gMC->Gsatt("P009","SEEN",1); |
756 | gMC->Gsatt("P010","SEEN",1); |
757 | gMC->Gsatt("P011","SEEN",1); |
758 | gMC->Gsatt("P012","SEEN",1); |
759 | gMC->Gsatt("P013","SEEN",1); |
760 | gMC->Gsatt("P014","SEEN",1); |
761 | gMC->Gsatt("P015","SEEN",1); |
762 | gMC->Gsatt("P016","SEEN",1); |
763 | gMC->Gsatt("P017","SEEN",1); |
764 | gMC->Gsatt("P018","SEEN",1); |
765 | gMC->Gsatt("P019","SEEN",1); |
766 | gMC->Gsatt("P020","SEEN",1); |
767 | gMC->Gsatt("P021","SEEN",1); |
768 | gMC->Gsatt("Q021","SEEN",1); |
769 | gMC->Gsatt("R021","SEEN",1); |
770 | gMC->Gsatt("P022","SEEN",1); |
771 | gMC->Gsatt("P023","SEEN",1); |
772 | gMC->Gsatt("D1 ","SEEN",1); |
773 | gMC->Gsatt("YD1 ","SEEN",1); |
774 | gMC->Gsatt("D2 ","SEEN",1); |
775 | gMC->Gsatt("YD2 ","SEEN",1); |
776 | gMC->Gsatt("MCBW","SEEN",1); |
777 | gMC->Gsatt("YMCB","SEEN",1); |
778 | gMC->Gsatt("MQXL","SEEN",1); |
779 | gMC->Gsatt("YMQL","SEEN",1); |
780 | gMC->Gsatt("MQX","SEEN",1); |
781 | gMC->Gsatt("YMQ","SEEN",1); |
782 | gMC->Gsatt("D1","SEEN",1); |
783 | gMC->Gsatt("YD1","SEEN",1); |
784 | gMC->Gsatt("D2","SEEN",1); |
785 | gMC->Gsatt("YD2","SEEN",1); |
786 | gMC->Gsatt("ZNEU","SEEN",0); |
787 | gMC->Gsatt("ZNFI","SEEN",0); |
788 | gMC->Gsatt("ZNGR","SEEN",0); |
789 | gMC->Gsatt("ZNTX","SEEN",0); |
790 | gMC->Gsatt("ZN1 ","COLO",2); |
791 | gMC->Gsatt("ZN1 ","SEEN",1); |
792 | gMC->Gsatt("ZNSL","SEEN",0); |
793 | gMC->Gsatt("ZNST","SEEN",0); |
794 | gMC->Gsatt("ZPRO","SEEN",0); |
795 | gMC->Gsatt("ZPFI","SEEN",0); |
796 | gMC->Gsatt("ZPGR","SEEN",0); |
797 | gMC->Gsatt("ZPTX","SEEN",0); |
798 | gMC->Gsatt("ZP1 ","SEEN",1); |
799 | gMC->Gsatt("ZPSL","SEEN",0); |
800 | gMC->Gsatt("ZPST","SEEN",0); |
801 | |
802 | // |
803 | gMC->Gdopt("hide", "on"); |
804 | gMC->Gdopt("shad", "on"); |
805 | gMC->Gsatt("*", "fill", 7); |
806 | gMC->SetClipBox("."); |
807 | gMC->SetClipBox("*", 0, 100, -100, 100, 12000, 16000); |
808 | gMC->DefaultRange(); |
809 | gMC->Gdraw("alic", 40, 30, 0, 488, 220, .07, .07); |
810 | gMC->Gdhead(1111, "Zero Degree Calorimeter Version 1"); |
811 | gMC->Gdman(18, 4, "MAN"); |
fe4da5cc |
812 | } |
813 | |
814 | //_____________________________________________________________________________ |
815 | void AliZDCv1::CreateMaterials() |
816 | { |
817 | // |
818 | // Create Materials for the Zero Degree Calorimeter |
819 | // |
820 | // Origin : E. Scomparin |
821 | |
ad51aeb0 |
822 | Int_t *idtmed = fIdtmed->GetArray()-799; |
fe4da5cc |
823 | |
824 | Float_t dens, ubuf[1], wmat[2]; |
825 | Int_t isvol_active; |
826 | Float_t a[2]; |
827 | Int_t i; |
828 | Float_t z[2], epsil=0.001, stmin=0.01; |
829 | Int_t isvol; |
830 | Float_t fieldm = gAlice->Field()->Max(); |
831 | Int_t inofld; |
832 | Float_t deemax=-1; |
833 | Float_t tmaxfd=gAlice->Field()->Max(); |
834 | Int_t isxfld = gAlice->Field()->Integ(); |
835 | Float_t stemax; |
836 | |
837 | // --- Store in UBUF r0 for nuclear radius calculation R=r0*A**1/3 |
838 | |
839 | // --- Tungsten |
840 | ubuf[0] = 1.11; |
841 | AliMaterial(1, "TUNG", 183.85, 74., 19.3, .35, 10.3, ubuf, 1); |
842 | |
843 | // --- Brass (CuZn) |
844 | dens = 8.48; |
845 | a[0] = 63.546; |
846 | a[1] = 65.39; |
847 | z[0] = 29.; |
848 | z[1] = 30.; |
849 | wmat[0] = .63; |
850 | wmat[1] = .37; |
851 | AliMixture(2, "BRASS ", a, z, dens, 2, wmat); |
852 | |
853 | // --- SiO2 |
854 | dens = 2.64; |
855 | a[0] = 28.086; |
856 | a[1] = 15.9994; |
857 | z[0] = 14.; |
858 | z[1] = 8.; |
859 | wmat[0] = 1.; |
860 | wmat[1] = 2.; |
861 | AliMixture(3, "SIO2 ", a, z, dens, -2, wmat); |
862 | |
863 | // --- Lead |
864 | ubuf[0] = 1.12; |
865 | AliMaterial(4, "LEAD", 207.19, 82., 11.35, .56, 18.5, ubuf, 1); |
866 | |
867 | // --- Copper |
868 | ubuf[0] = 1.1; |
869 | AliMaterial(5, "COPP", 63.54, 29., 8.96, 1.4, 0., ubuf, 1); |
870 | |
871 | // --- Tantalum |
872 | ubuf[0] = 1.1; |
873 | AliMaterial(6, "TANT", 180.95, 73., 16.65, .4, 11.9, ubuf, 1); |
874 | |
875 | // Steel still to be added |
876 | |
877 | // --- Iron |
878 | ubuf[0] = 1.1; |
879 | AliMaterial(52, "IRON", 55.85, 26., 7.87, 1.76, 0., ubuf, 1); |
880 | |
881 | // --- Vacuum (no magnetic field) |
882 | AliMaterial(90, "VOID", 1e-16, 1e-16, 1e-16, 1e16, 1e16, ubuf,0); |
883 | |
884 | // --- Vacuum (magnetic field) |
885 | AliMaterial(91, "VOIM", 1e-16, 1e-16, 1e-16, 1e16, 1e16, ubuf,0); |
886 | |
887 | // --- Air non magnetic |
888 | AliMaterial(92, "Air $", 14.61, 7.3, .001205, 30420., 67500., ubuf, 0); |
889 | |
890 | // --- Definition of tracking media: |
891 | |
892 | // --- Tungsten = 801 ; |
893 | // --- Brass = 802 ; |
894 | // --- Fibers (SiO2) = 803 ; |
895 | // --- Lead = 804 ; |
896 | // --- Copper = 805 ; |
897 | // --- Tantalum = 806 ; |
898 | // --- Steel = 851 ; |
899 | // --- Iron = 852 ; |
900 | // --- Vacuum (no field) = 890 |
901 | // --- Vacuum (with field) = 891 |
902 | // --- Air (no field) = 892 |
903 | |
904 | |
905 | // --- Tracking media parameters |
906 | epsil = .01; |
907 | stemax = 1.; |
908 | isvol = 0; |
909 | isvol_active = 1; |
910 | inofld = 0; |
911 | fieldm = 0.; |
912 | |
ad51aeb0 |
913 | AliMedium(1, "ZW", 1, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
914 | AliMedium(2, "ZBRASS", 2, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
915 | AliMedium(3, "ZSIO2", 3, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
916 | AliMedium(4, "ZLEAD", 4, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
917 | AliMedium(5, "ZCOPP", 5, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
918 | AliMedium(6, "ZTANT", 6, isvol_active, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
919 | AliMedium(52, "ZIRON", 52, isvol, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
920 | AliMedium(90, "ZVOID", 90, isvol, inofld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
921 | AliMedium(92, "Air", 92, 0, inofld, fieldm, tmaxfd, stemax,deemax, epsil, stmin); |
fe4da5cc |
922 | |
923 | fieldm = 45.; |
ad51aeb0 |
924 | // AliMedium(91, "ZVOIM", 91, isvol, isxfld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
925 | AliMedium(91, "ZVOIM", 91, isvol, isxfld, fieldm, tmaxfd, stemax, deemax, epsil, stmin); |
fe4da5cc |
926 | |
927 | // Thresholds for showering in the ZDCs |
928 | |
929 | i = 801; |
cfce8870 |
930 | gMC->Gstpar(idtmed[i-1], "CUTGAM", .01); |
931 | gMC->Gstpar(idtmed[i-1], "CUTELE", .01); |
932 | gMC->Gstpar(idtmed[i-1], "CUTNEU", .1); |
933 | gMC->Gstpar(idtmed[i-1], "CUTHAD", .1); |
fe4da5cc |
934 | i = 802; |
cfce8870 |
935 | gMC->Gstpar(idtmed[i-1], "CUTGAM", .01); |
936 | gMC->Gstpar(idtmed[i-1], "CUTELE", .01); |
937 | gMC->Gstpar(idtmed[i-1], "CUTNEU", .1); |
938 | gMC->Gstpar(idtmed[i-1], "CUTHAD", .1); |
fe4da5cc |
939 | |
940 | // Avoid too detailed showering along the beam line |
941 | |
942 | i = 852; |
cfce8870 |
943 | gMC->Gstpar(idtmed[i-1], "CUTGAM", .1); |
944 | gMC->Gstpar(idtmed[i-1], "CUTELE", .1); |
945 | gMC->Gstpar(idtmed[i-1], "CUTNEU", 1.); |
946 | gMC->Gstpar(idtmed[i-1], "CUTHAD", 1.); |
fe4da5cc |
947 | |
948 | // Avoid interaction in fibers (only energy loss allowed) |
949 | i = 803; |
cfce8870 |
950 | gMC->Gstpar(idtmed[i-1], "DCAY", 0.); |
951 | gMC->Gstpar(idtmed[i-1], "MULS", 0.); |
952 | gMC->Gstpar(idtmed[i-1], "PFIS", 0.); |
953 | gMC->Gstpar(idtmed[i-1], "MUNU", 0.); |
954 | gMC->Gstpar(idtmed[i-1], "LOSS", 1.); |
955 | gMC->Gstpar(idtmed[i-1], "PHOT", 0.); |
956 | gMC->Gstpar(idtmed[i-1], "COMP", 0.); |
957 | gMC->Gstpar(idtmed[i-1], "PAIR", 0.); |
958 | gMC->Gstpar(idtmed[i-1], "BREM", 0.); |
959 | gMC->Gstpar(idtmed[i-1], "DRAY", 0.); |
960 | gMC->Gstpar(idtmed[i-1], "ANNI", 0.); |
961 | gMC->Gstpar(idtmed[i-1], "HADR", 0.); |
fe4da5cc |
962 | } |
963 | |
964 | ClassImp(AliZDChit) |
965 | |
966 | //_____________________________________________________________________________ |
967 | AliZDChit::AliZDChit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits): |
968 | AliHit(shunt, track) |
969 | { |
970 | // |
971 | // Add a Zero Degree Calorimeter hit |
972 | // |
973 | Int_t i; |
974 | for (i=0;i<4;i++) fVolume[i] = vol[i]; |
975 | fX=hits[0]; |
976 | fY=hits[1]; |
977 | fZ=hits[2]; |
978 | fEnergy=hits[3]; |
979 | } |