]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ZDC/AliZDCv3.cxx
Changes needed to pass the failover tests (F. Prino)
[u/mrichter/AliRoot.git] / ZDC / AliZDCv3.cxx
CommitLineData
8d433671 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///////////////////////////////////////////////////////////////////////
18// //
19// AliZDCv3 --- new ZDC geometry //
20// with the both ZDC set geometry implemented //
21// //
22///////////////////////////////////////////////////////////////////////
23
24// --- Standard libraries
25#include "stdio.h"
26
27// --- ROOT system
28#include <TBRIK.h>
8d433671 29#include <TMath.h>
30#include <TNode.h>
31#include <TRandom.h>
32#include <TSystem.h>
33#include <TTree.h>
34#include <TVirtualMC.h>
35#include <TGeoManager.h>
36
8d433671 37// --- AliRoot classes
38#include "AliConst.h"
39#include "AliMagF.h"
8d433671 40#include "AliRun.h"
41#include "AliZDCv3.h"
42#include "AliMC.h"
43
44class AliZDCHit;
45class AliPDG;
46class AliDetector;
47
48
49ClassImp(AliZDCv3)
50
51//_____________________________________________________________________________
f853b9aa 52AliZDCv3::AliZDCv3() :
53 AliZDC(),
54 fMedSensF1(0),
55 fMedSensF2(0),
56 fMedSensZP(0),
57 fMedSensZN(0),
58 fMedSensZEM(0),
59 fMedSensGR(0),
60 fMedSensPI(0),
29c8f0dc 61 fMedSensTDI(0),
f853b9aa 62 fNalfan(0),
63 fNalfap(0),
64 fNben(0),
65 fNbep(0),
66 fZEMLength(0),
67 fpLostITC(0),
68 fpLostD1C(0),
69 fpDetectedC(0),
70 fnDetectedC(0),
71 fpLostITA(0),
72 fpLostD1A(0),
73 fpLostTDI(0),
74 fpDetectedA(0),
75 fnDetectedA(0)
8d433671 76{
77 //
78 // Default constructor for Zero Degree Calorimeter
79 //
80
8d433671 81}
82
83//_____________________________________________________________________________
a718c993 84AliZDCv3::AliZDCv3(const char *name, const char *title) :
f853b9aa 85 AliZDC(name,title),
86 fMedSensF1(0),
87 fMedSensF2(0),
88 fMedSensZP(0),
89 fMedSensZN(0),
90 fMedSensZEM(0),
91 fMedSensGR(0),
92 fMedSensPI(0),
29c8f0dc 93 fMedSensTDI(0),
f853b9aa 94 fNalfan(90),
95 fNalfap(90),
96 fNben(18),
97 fNbep(28),
64d8b611 98 fZEMLength(0),
f853b9aa 99 fpLostITC(0),
100 fpLostD1C(0),
101 fpDetectedC(0),
102 fnDetectedC(0),
103 fpLostITA(0),
104 fpLostD1A(0),
105 fpLostTDI(0),
106 fpDetectedA(0),
a718c993 107 fnDetectedA(0)
8d433671 108{
109 //
110 // Standard constructor for Zero Degree Calorimeter
111 //
112 //
113 // Check that DIPO, ABSO, DIPO and SHIL is there (otherwise tracking is wrong!!!)
114
115 AliModule* pipe=gAlice->GetModule("PIPE");
116 AliModule* abso=gAlice->GetModule("ABSO");
117 AliModule* dipo=gAlice->GetModule("DIPO");
118 AliModule* shil=gAlice->GetModule("SHIL");
119 if((!pipe) || (!abso) || (!dipo) || (!shil)) {
120 Error("Constructor","ZDC needs PIPE, ABSO, DIPO and SHIL!!!\n");
121 exit(1);
122 }
f853b9aa 123 //
8d433671 124 Int_t ip,jp,kp;
125 for(ip=0; ip<4; ip++){
126 for(kp=0; kp<fNalfap; kp++){
127 for(jp=0; jp<fNbep; jp++){
128 fTablep[ip][kp][jp] = 0;
129 }
130 }
131 }
132 Int_t in,jn,kn;
133 for(in=0; in<4; in++){
134 for(kn=0; kn<fNalfan; kn++){
135 for(jn=0; jn<fNben; jn++){
136 fTablen[in][kn][jn] = 0;
137 }
138 }
139 }
f853b9aa 140 //
8d433671 141 // Parameters for hadronic calorimeters geometry
142 fDimZN[0] = 3.52;
143 fDimZN[1] = 3.52;
144 fDimZN[2] = 50.;
145 fDimZP[0] = 11.2;
146 fDimZP[1] = 6.;
147 fDimZP[2] = 75.;
f853b9aa 148 fPosZNC[0] = 0.;
149 fPosZNC[1] = 1.2;
150 fPosZNC[2] = -11650.;
151 fPosZPC[0] = 23.9;
152 fPosZPA[1] = 0.;
153 fPosZPA[2] = -11600.;
154 fPosZNA[0] = 0.;
155 fPosZNA[1] = 1.2;
156 fPosZNA[2] = 11620.;
157 fPosZPC[0] = 24.;
158 fPosZPC[1] = 0.;
159 fPosZPC[2] = 11620.;
8d433671 160 fFibZN[0] = 0.;
161 fFibZN[1] = 0.01825;
162 fFibZN[2] = 50.;
163 fFibZP[0] = 0.;
164 fFibZP[1] = 0.0275;
165 fFibZP[2] = 75.;
8d433671 166 // Parameters for EM calorimeter geometry
167 fPosZEM[0] = 8.5;
168 fPosZEM[1] = 0.;
169 fPosZEM[2] = 735.;
8d433671 170 Float_t kDimZEMPb = 0.15*(TMath::Sqrt(2.)); // z-dimension of the Pb slice
171 Float_t kDimZEMAir = 0.001; // scotch
172 Float_t kFibRadZEM = 0.0315; // External fiber radius (including cladding)
173 Int_t kDivZEM[3] = {92, 0, 20}; // Divisions for EM detector
174 Float_t kDimZEM0 = 2*kDivZEM[2]*(kDimZEMPb+kDimZEMAir+kFibRadZEM*(TMath::Sqrt(2.)));
175 fZEMLength = kDimZEM0;
176
177}
178
179//_____________________________________________________________________________
180void AliZDCv3::CreateGeometry()
181{
182 //
183 // Create the geometry for the Zero Degree Calorimeter version 2
184 //* Initialize COMMON block ZDC_CGEOM
185 //*
186
187 CreateBeamLine();
188 CreateZDC();
189}
190
191//_____________________________________________________________________________
192void AliZDCv3::CreateBeamLine()
193{
194 //
195 // Create the beam line elements
196 //
197
198 Float_t zc, zq, zd1, zd2, zql, zd2l;
199 Float_t conpar[9], tubpar[3], tubspar[5], boxpar[3];
200 Int_t im1, im2;
f853b9aa 201 //
8d433671 202 Int_t *idtmed = fIdtmed->GetArray();
203
204 ////////////////////////////////////////////////////////////////
205 // //
206 // SIDE C - RB26 (dimuon side) //
207 // //
208 ///////////////////////////////////////////////////////////////
209
210
211 // -- Mother of the ZDCs (Vacuum PCON)
212 zd1 = 1921.6;
213
214 conpar[0] = 0.;
215 conpar[1] = 360.;
216 conpar[2] = 2.;
217 conpar[3] = -13500.;
218 conpar[4] = 0.;
219 conpar[5] = 55.;
220 conpar[6] = -zd1;
221 conpar[7] = 0.;
222 conpar[8] = 55.;
f853b9aa 223 gMC->Gsvolu("ZDCC", "PCON", idtmed[11], conpar, 9);
224 gMC->Gspos("ZDCC", 1, "ALIC", 0., 0., 0., 0, "ONLY");
8d433671 225
226
227 // -- FIRST SECTION OF THE BEAM PIPE (from compensator dipole to
228 // the beginning of D1)
229 tubpar[0] = 6.3/2.;
230 tubpar[1] = 6.7/2.;
231 // From beginning of ZDC volumes to beginning of D1
232 tubpar[2] = (5838.3-zd1)/2.;
233 gMC->Gsvolu("QT01", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 234 gMC->Gspos("QT01", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 235 // Ch.debug
236 //printf("\n QT01 TUBE pipe from z = %f to z= %f (D1 beg.)\n",-zd1,-2*tubpar[2]-zd1);
237
238 //-- SECOND SECTION OF THE BEAM PIPE (from the end of D1 to the
239 // beginning of D2)
240
241 //-- FROM MAGNETIC BEGINNING OF D1 TO MAGNETIC END OF D1 + 13.5 cm
242 //-- Cylindrical pipe (r = 3.47) + conical flare
243
244 // -> Beginning of D1
245 zd1 += 2.*tubpar[2];
246
247 tubpar[0] = 3.47;
248 tubpar[1] = 3.47+0.2;
249 tubpar[2] = 958.5/2.;
250 gMC->Gsvolu("QT02", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 251 gMC->Gspos("QT02", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 252 // Ch.debug
253 //printf("\n QT02 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
254
255 zd1 += 2.*tubpar[2];
256
257 conpar[0] = 25./2.;
258 conpar[1] = 10./2.;
259 conpar[2] = 10.4/2.;
260 conpar[3] = 6.44/2.;
261 conpar[4] = 6.84/2.;
262 gMC->Gsvolu("QC01", "CONE", idtmed[7], conpar, 5);
f853b9aa 263 gMC->Gspos("QC01", 1, "ZDCC", 0., 0., -conpar[0]-zd1, 0, "ONLY");
8d433671 264 // Ch.debug
265 //printf("\n QC01 CONE pipe from z = %f to z= %f\n",-zd1,-2*conpar[0]-zd1);
266
267 zd1 += 2.*conpar[0];
268
269 tubpar[0] = 10./2.;
270 tubpar[1] = 10.4/2.;
271 tubpar[2] = 50./2.;
272 gMC->Gsvolu("QT03", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 273 gMC->Gspos("QT03", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 274 // Ch.debug
275 //printf("\n QT03 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
276
277 zd1 += tubpar[2]*2.;
278
279 tubpar[0] = 10./2.;
280 tubpar[1] = 10.4/2.;
281 tubpar[2] = 10./2.;
282 gMC->Gsvolu("QT04", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 283 gMC->Gspos("QT04", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 284 // Ch.debug
285 //printf("\n QT04 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
286
287 zd1 += tubpar[2] * 2.;
288
289 tubpar[0] = 10./2.;
290 tubpar[1] = 10.4/2.;
291 tubpar[2] = 3.16/2.;
292 gMC->Gsvolu("QT05", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 293 gMC->Gspos("QT05", 1, "ZDCC", 0., 0., -tubpar[0]-zd1, 0, "ONLY");
8d433671 294 // Ch.debug
295 //printf("\n QT05 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
296
297 zd1 += tubpar[2] * 2.;
298
299 tubpar[0] = 10.0/2.;
300 tubpar[1] = 10.4/2;
301 tubpar[2] = 190./2.;
302 gMC->Gsvolu("QT06", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 303 gMC->Gspos("QT06", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 304 // Ch.debug
305 //printf("\n QT06 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
306
307 zd1 += tubpar[2] * 2.;
308
309 conpar[0] = 30./2.;
310 conpar[1] = 20.6/2.;
311 conpar[2] = 21./2.;
312 conpar[3] = 10./2.;
313 conpar[4] = 10.4/2.;
314 gMC->Gsvolu("QC02", "CONE", idtmed[7], conpar, 5);
f853b9aa 315 gMC->Gspos("QC02", 1, "ZDCC", 0., 0., -conpar[0]-zd1, 0, "ONLY");
8d433671 316 // Ch.debug
317 //printf("\n QC02 CONE pipe from z = %f to z= %f\n",-zd1,-2*conpar[0]-zd1);
318
319 zd1 += conpar[0] * 2.;
320
321 tubpar[0] = 20.6/2.;
322 tubpar[1] = 21./2.;
323 tubpar[2] = 450./2.;
324 gMC->Gsvolu("QT07", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 325 gMC->Gspos("QT07", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 326 // Ch.debug
327 //printf("\n QT07 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
328
329 zd1 += tubpar[2] * 2.;
330
331 conpar[0] = 13.6/2.;
332 conpar[1] = 25.4/2.;
333 conpar[2] = 25.8/2.;
334 conpar[3] = 20.6/2.;
335 conpar[4] = 21./2.;
336 gMC->Gsvolu("QC03", "CONE", idtmed[7], conpar, 5);
f853b9aa 337 gMC->Gspos("QC03", 1, "ZDCC", 0., 0., -conpar[0]-zd1, 0, "ONLY");
8d433671 338 // Ch.debug
339 //printf("\n QC03 CONE pipe from z = %f to z= %f\n",-zd1,-2*conpar[0]-zd1);
340
341 zd1 += conpar[0] * 2.;
342
343 tubpar[0] = 25.4/2.;
344 tubpar[1] = 25.8/2.;
345 tubpar[2] = 205.8/2.;
346 gMC->Gsvolu("QT08", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 347 gMC->Gspos("QT08", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 348 // Ch.debug
349 //printf("\n QT08 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
350
351 zd1 += tubpar[2] * 2.;
352
353 tubpar[0] = 50./2.;
354 tubpar[1] = 50.4/2.;
355 // QT09 is 10 cm longer to accomodate TDI
356 tubpar[2] = 515.4/2.;
357 gMC->Gsvolu("QT09", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 358 gMC->Gspos("QT09", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 359 // Ch.debug
360 //printf("\n QT09 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
361
8d433671 362 zd1 += tubpar[2] * 2.;
363
364 tubpar[0] = 50./2.;
365 tubpar[1] = 50.4/2.;
366 // QT10 is 10 cm shorter
367 tubpar[2] = 690./2.;
368 gMC->Gsvolu("QT10", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 369 gMC->Gspos("QT10", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 370 // Ch.debug
371 //printf("\n QT10 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
372
373 zd1 += tubpar[2] * 2.;
374
375 tubpar[0] = 50./2.;
376 tubpar[1] = 50.4/2.;
377 tubpar[2] = 778.5/2.;
378 gMC->Gsvolu("QT11", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 379 gMC->Gspos("QT11", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 380 // Ch.debug
381 //printf("\n QT11 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
382
383 zd1 += tubpar[2] * 2.;
384
385 conpar[0] = 14.18/2.;
386 conpar[1] = 55./2.;
387 conpar[2] = 55.4/2.;
388 conpar[3] = 50./2.;
389 conpar[4] = 50.4/2.;
390 gMC->Gsvolu("QC04", "CONE", idtmed[7], conpar, 5);
f853b9aa 391 gMC->Gspos("QC04", 1, "ZDCC", 0., 0., -conpar[0]-zd1, 0, "ONLY");
8d433671 392 // Ch.debug
393 //printf("\n QC04 CONE pipe from z = %f to z= %f\n",-zd1,-2*conpar[0]-zd1);
394
395 zd1 += conpar[0] * 2.;
396
397 tubpar[0] = 55./2.;
398 tubpar[1] = 55.4/2.;
399 tubpar[2] = 730./2.;
400 gMC->Gsvolu("QT12", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 401 gMC->Gspos("QT12", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 402 // Ch.debug
403 //printf("\n QT12 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
404
405 zd1 += tubpar[2] * 2.;
406
407 conpar[0] = 36.86/2.;
408 conpar[1] = 68./2.;
409 conpar[2] = 68.4/2.;
410 conpar[3] = 55./2.;
411 conpar[4] = 55.4/2.;
412 gMC->Gsvolu("QC05", "CONE", idtmed[7], conpar, 5);
f853b9aa 413 gMC->Gspos("QC05", 1, "ZDCC", 0., 0., -conpar[0]-zd1, 0, "ONLY");
8d433671 414 // Ch.debug
415 //printf("\n QC05 CONE pipe from z = %f to z= %f\n",-zd1,-2*conpar[0]-zd1);
416
417 zd1 += conpar[0] * 2.;
418
419 tubpar[0] = 68./2.;
420 tubpar[1] = 68.4/2.;
421 tubpar[2] = 927.3/2.;
422 gMC->Gsvolu("QT13", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 423 gMC->Gspos("QT13", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 424 // Ch.debug
425 //printf("\n QT13 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
426
427 zd1 += tubpar[2] * 2.;
428
429 tubpar[0] = 0./2.;
430 tubpar[1] = 68.4/2.;
431 tubpar[2] = 0.2/2.;
432 gMC->Gsvolu("QT14", "TUBE", idtmed[8], tubpar, 3);
f853b9aa 433 gMC->Gspos("QT14", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 434 // Ch.debug
435 //printf("\n QT14 TUBE pipe from z = %f to z= %f\n",-zd1,-2*tubpar[2]-zd1);
436
437 zd1 += tubpar[2] * 2.;
438
439 tubpar[0] = 0./2.;
440 tubpar[1] = 6.4/2.;
441 tubpar[2] = 0.2/2.;
442 gMC->Gsvolu("QT15", "TUBE", idtmed[11], tubpar, 3);
443 //-- Position QT15 inside QT14
444 gMC->Gspos("QT15", 1, "QT14", -7.7, 0., 0., 0, "ONLY");
445
446 gMC->Gsvolu("QT16", "TUBE", idtmed[11], tubpar, 3);
447 //-- Position QT16 inside QT14
448 gMC->Gspos("QT16", 1, "QT14", 7.7, 0., 0., 0, "ONLY");
449
450
451 //-- BEAM PIPE BETWEEN END OF CONICAL PIPE AND BEGINNING OF D2
452
453 tubpar[0] = 6.4/2.;
454 tubpar[1] = 6.8/2.;
455 tubpar[2] = 680.8/2.;
456 gMC->Gsvolu("QT17", "TUBE", idtmed[7], tubpar, 3);
457
458 tubpar[0] = 6.4/2.;
459 tubpar[1] = 6.8/2.;
460 tubpar[2] = 680.8/2.;
461 gMC->Gsvolu("QT18", "TUBE", idtmed[7], tubpar, 3);
462
463 // -- ROTATE PIPES
464 Float_t angle = 0.143*kDegrad; // Rotation angle
465
466 //AliMatrix(im1, 90.+0.143, 0., 90., 90., 0.143, 0.); // x<0
467 gMC->Matrix(im1, 90.+0.143, 0., 90., 90., 0.143, 0.); // x<0
f853b9aa 468 gMC->Gspos("QT17", 1, "ZDCC", TMath::Sin(angle) * 680.8/ 2. - 9.4,
8d433671 469 0., -tubpar[2]-zd1, im1, "ONLY");
470
471 //AliMatrix(im2, 90.-0.143, 0., 90., 90., 0.143, 180.); // x>0 (ZP)
472 gMC->Matrix(im2, 90.-0.143, 0., 90., 90., 0.143, 180.); // x>0 (ZP)
f853b9aa 473 gMC->Gspos("QT18", 1, "ZDCC", 9.7 - TMath::Sin(angle) * 680.8 / 2.,
8d433671 474 0., -tubpar[2]-zd1, im2, "ONLY");
475
476 // -- END OF BEAM PIPE VOLUME DEFINITION FOR SIDE C (RB26 SIDE)
477 // ----------------------------------------------------------------
478
479 ////////////////////////////////////////////////////////////////
480 // //
481 // SIDE A - RB24 //
482 // //
483 ///////////////////////////////////////////////////////////////
484
485 // Rotation Matrices definition
486 Int_t irotpipe2, irotpipe1,irotpipe5, irotpipe6, irotpipe7, irotpipe8;
487 //-- rotation matrices for the tilted tube before and after the TDI
488 gMC->Matrix(irotpipe2,90.+6.3025,0.,90.,90.,6.3025,0.);
489 //-- rotation matrices for the tilted cone after the TDI to recenter vacuum chamber
490 gMC->Matrix(irotpipe1,90.-2.2918,0.,90.,90.,2.2918,180.);
491 //-- rotation matrices for the legs
492 gMC->Matrix(irotpipe5,90.-5.0109,0.,90.,90.,5.0109,180.);
493 gMC->Matrix(irotpipe6,90.+5.0109,0.,90.,90.,5.0109,0.);
494 gMC->Matrix(irotpipe7,90.-1.0027,0.,90.,90.,1.0027,180.);
495 gMC->Matrix(irotpipe8,90.+1.0027,0.,90.,90.,1.0027,0.);
496
497 // -- Mother of the ZDCs (Vacuum PCON)
498 zd2 = 1910.;// zd2 initial value
499
500 conpar[0] = 0.;
501 conpar[1] = 360.;
502 conpar[2] = 2.;
503 conpar[3] = zd2;
504 conpar[4] = 0.;
505 conpar[5] = 55.;
506 conpar[6] = 13500.;
507 conpar[7] = 0.;
508 conpar[8] = 55.;
f853b9aa 509 gMC->Gsvolu("ZDCA", "PCON", idtmed[10], conpar, 9);
510 gMC->Gspos("ZDCA", 1, "ALIC", 0., 0., 0., 0, "ONLY");
8d433671 511
f853b9aa 512 // BEAM PIPE from 19.10 m to inner triplet beginning (22.965 m)
8d433671 513 tubpar[0] = 6.0/2.;
514 tubpar[1] = 6.4/2.;
515 tubpar[2] = 386.5/2.;
516 gMC->Gsvolu("QA01", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 517 gMC->Gspos("QA01", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 518 // Ch.debug
f853b9aa 519 //printf("\n QA01 TUBE from z = %f to z= %f (Inner triplet beg.)\n",zd2,2*tubpar[2]+zd2);
8d433671 520
521 zd2 += 2.*tubpar[2];
522
523 // -- FIRST SECTION OF THE BEAM PIPE (from beginning of inner triplet to
f853b9aa 524 // beginning of D1)
8d433671 525 tubpar[0] = 6.3/2.;
526 tubpar[1] = 6.7/2.;
527 tubpar[2] = 3541.8/2.;
528 gMC->Gsvolu("QA02", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 529 gMC->Gspos("QA02", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 530 // Ch.debug
f853b9aa 531 //printf("\n QA02 TUBE from z = %f to z= %f (D1 beg.)\n",zd2,2*tubpar[2]+zd2);
8d433671 532
533 zd2 += 2.*tubpar[2];
534
535
536 // -- SECOND SECTION OF THE BEAM PIPE (from the beginning of D1 to the beginning of D2)
537 //
538 // FROM (MAGNETIC) BEGINNING OF D1 TO THE (MAGNETIC) END OF D1 + 126.5 cm
539 // CYLINDRICAL PIPE of diameter increasing from 6.75 cm up to 8.0 cm
540 // from magnetic end :
541 // 1) 80.1 cm still with ID = 6.75 radial beam screen
542 // 2) 2.5 cm conical section from ID = 6.75 to ID = 8.0 cm
543 // 3) 43.9 cm straight section (tube) with ID = 8.0 cm
f853b9aa 544 //
545 //printf("\n Beginning of D1 at z= %f\n",zd2);
8d433671 546
547 tubpar[0] = 6.75/2.;
548 tubpar[1] = 7.15/2.;
549 tubpar[2] = (945.0+80.1)/2.;
550 gMC->Gsvolu("QA03", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 551 gMC->Gspos("QA03", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 552 // Ch.debug
f853b9aa 553 //printf("\n QA03 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 554
555 zd2 += 2.*tubpar[2];
556
557 // Transition Cone from ID=67.5 mm to ID=80 mm
8d433671 558 conpar[0] = 2.5/2.;
559 conpar[1] = 6.75/2.;
560 conpar[2] = 7.15/2.;
561 conpar[3] = 8.0/2.;
562 conpar[4] = 8.4/2.;
563 gMC->Gsvolu("QA04", "CONE", idtmed[6], conpar, 5);
f853b9aa 564 gMC->Gspos("QA04", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
565 //printf(" QA04 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 566
567 zd2 += 2.*conpar[0];
568
569 tubpar[0] = 8.0/2.;
570 tubpar[1] = 8.4/2.;
571 tubpar[2] = 43.9/2.;
572 gMC->Gsvolu("QA05", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 573 gMC->Gspos("QA05", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 574 // Ch.debug
f853b9aa 575 //printf("\n QA05 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 576
577 zd2 += 2.*tubpar[2];
8d433671 578
579 // Bellow (ID=80 mm) - length = 0.2 m - VMAA
8d433671 580 tubpar[0] = 8.0/2.;
581 tubpar[1] = 8.4/2.;
582 tubpar[2] = 20./2.;
583 gMC->Gsvolu("QA06", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 584 gMC->Gspos("QA06", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 585 // Ch.debug
f853b9aa 586 //printf(" QA06 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 587
588 zd2 += 2.*tubpar[2];
589
f853b9aa 590 // Beam Position Monitor (ID=80 mm) Cu - BPMSX
8d433671 591 tubpar[0] = 8.0/2.;
592 tubpar[1] = 8.4/2.;
593 tubpar[2] = 28.5/2.;
594 gMC->Gsvolu("QA07", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 595 gMC->Gspos("QA07", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 596 // Ch.debug
f853b9aa 597 //printf(" QA07 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 598
599 zd2 += 2.*tubpar[2];
600
f853b9aa 601 // First section of VAEHI (tube ID=80mm)
8d433671 602 tubpar[0] = 8.0/2.;
603 tubpar[1] = 8.4/2.;
604 tubpar[2] = 28.5/2.;
605 gMC->Gsvolu("QAV1", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 606 gMC->Gspos("QAV1", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 607 // Ch.debug
f853b9aa 608 //printf(" QAV1 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 609
610 zd2 += 2.*tubpar[2];
611
f853b9aa 612 // Second section of VAEHI (transition cone from ID=80mm to ID=98mm)
8d433671 613 conpar[0] = 4.0/2.;
614 conpar[1] = 8.0/2.;
615 conpar[2] = 8.4/2.;
616 conpar[3] = 9.8/2.;
617 conpar[4] = 10.2/2.;
618 gMC->Gsvolu("QAV2", "CONE", idtmed[6], conpar, 5);
f853b9aa 619 gMC->Gspos("QAV2", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
620 //printf(" QAV2 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 621
622 zd2 += 2.*conpar[0];
623
f853b9aa 624 //Third section of VAEHI (transition cone from ID=98mm to ID=90mm)
8d433671 625 conpar[0] = 1.0/2.;
626 conpar[1] = 9.8/2.;
627 conpar[2] = 10.2/2.;
628 conpar[3] = 9.0/2.;
629 conpar[4] = 9.4/2.;
630 gMC->Gsvolu("QAV3", "CONE", idtmed[6], conpar, 5);
f853b9aa 631 gMC->Gspos("QAV3", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
632 //printf(" QAV3 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 633
634 zd2 += 2.*conpar[0];
635
f853b9aa 636 // Fourth section of VAEHI (tube ID=90mm)
8d433671 637 tubpar[0] = 9.0/2.;
638 tubpar[1] = 9.4/2.;
639 tubpar[2] = 31.0/2.;
640 gMC->Gsvolu("QAV4", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 641 gMC->Gspos("QAV4", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 642 // Ch.debug
f853b9aa 643 //printf(" QAV4 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 644
645 zd2 += 2.*tubpar[2];
646
8d433671 647 //---------------------------- TCDD beginning ----------------------------------
648 // space for the insertion of the collimator TCDD (2 m)
8d433671 649 // TCDD ZONE - 1st volume
650 conpar[0] = 1.3/2.;
651 conpar[1] = 9.0/2.;
652 conpar[2] = 13.0/2.;
653 conpar[3] = 9.6/2.;
654 conpar[4] = 13.0/2.;
655 gMC->Gsvolu("Q01T", "CONE", idtmed[6], conpar, 5);
f853b9aa 656 gMC->Gspos("Q01T", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
657 //printf(" Q01T CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 658
659 zd2 += 2.*conpar[0];
660
661 // TCDD ZONE - 2nd volume
662 tubpar[0] = 9.6/2.;
663 tubpar[1] = 10.0/2.;
664 tubpar[2] = 1.0/2.;
665 gMC->Gsvolu("Q02T", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 666 gMC->Gspos("Q02T", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 667 // Ch.debug
f853b9aa 668 //printf(" Q02T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 669
670 zd2 += 2.*tubpar[2];
671
672 // TCDD ZONE - third volume
673 conpar[0] = 9.04/2.;
674 conpar[1] = 9.6/2.;
675 conpar[2] = 10.0/2.;
676 conpar[3] = 13.8/2.;
677 conpar[4] = 14.2/2.;
678 gMC->Gsvolu("Q03T", "CONE", idtmed[6], conpar, 5);
f853b9aa 679 gMC->Gspos("Q03T", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
680 //printf(" Q03T CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 681
682 zd2 += 2.*conpar[0];
683
684 // TCDD ZONE - 4th volume
685 tubpar[0] = 13.8/2.;
686 tubpar[1] = 14.2/2.;
687 tubpar[2] = 38.6/2.;
688 gMC->Gsvolu("Q04T", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 689 gMC->Gspos("Q04T", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 690 // Ch.debug
f853b9aa 691 //printf(" Q04T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 692
693 zd2 += 2.*tubpar[2];
694
695 // TCDD ZONE - 5th volume
696 tubpar[0] = 21.0/2.;
697 tubpar[1] = 21.4/2.;
698 tubpar[2] = 100.12/2.;
699 gMC->Gsvolu("Q05T", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 700 gMC->Gspos("Q05T", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 701 // Ch.debug
f853b9aa 702 //printf(" Q05T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 703
704 zd2 += 2.*tubpar[2];
705
706 // TCDD ZONE - 6th volume
707 tubpar[0] = 13.8/2.;
708 tubpar[1] = 14.2/2.;
709 tubpar[2] = 38.6/2.;
710 gMC->Gsvolu("Q06T", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 711 gMC->Gspos("Q06T", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 712 // Ch.debug
f853b9aa 713 //printf(" Q06T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 714
715 zd2 += 2.*tubpar[2];
716
717 // TCDD ZONE - 7th volume
718 conpar[0] = 11.34/2.;
719 conpar[1] = 13.8/2.;
720 conpar[2] = 14.2/2.;
721 conpar[3] = 18.0/2.;
722 conpar[4] = 18.4/2.;
723 gMC->Gsvolu("Q07T", "CONE", idtmed[6], conpar, 5);
f853b9aa 724 gMC->Gspos("Q07T", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
725 //printf(" Q07T CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 726
727 zd2 += 2.*conpar[0];
728
f853b9aa 729 // Upper section : one single phi segment of a tube
730 // 5 parameters for tubs: inner radius = 0.,
731 // outer radius = 7.5 cm, half length = 50 cm
732 // phi1 = 0., phi2 = 180.
8d433671 733 tubspar[0] = 0.0/2.;
734 tubspar[1] = 15.0/2.;
735 tubspar[2] = 100.0/2.;
736 tubspar[3] = 0.;
737 tubspar[4] = 180.;
738 gMC->Gsvolu("Q08T", "TUBS", idtmed[6], tubspar, 5);
739 // Ch.debug
f853b9aa 740 //printf("\n upper part : one single phi segment of a tube (Q08T)\n");
741
742 // rectangular beam pipe inside TCDD upper section (Vacuum)
8d433671 743 boxpar[0] = 7.0/2.;
744 boxpar[1] = 2.5/2.;
745 boxpar[2] = 100./2.;
746 gMC->Gsvolu("Q09T", "BOX ", idtmed[10], boxpar, 3);
f853b9aa 747 // positioning vacuum box in the upper section of TCDD
8d433671 748 gMC->Gspos("Q09T", 1, "Q08T", 0., 1.25, 0., 0, "ONLY");
749
f853b9aa 750 // lower section : one single phi segment of a tube
8d433671 751 tubspar[0] = 0.0/2.;
752 tubspar[1] = 15.0/2.;
753 tubspar[2] = 100.0/2.;
754 tubspar[3] = 180.;
755 tubspar[4] = 360.;
756 gMC->Gsvolu("Q10T", "TUBS", idtmed[6], tubspar, 5);
f853b9aa 757 // rectangular beam pipe inside TCDD lower section (Vacuum)
8d433671 758 boxpar[0] = 7.0/2.;
759 boxpar[1] = 2.5/2.;
760 boxpar[2] = 100./2.;
761 gMC->Gsvolu("Q11T", "BOX ", idtmed[10], boxpar, 3);
f853b9aa 762 // positioning vacuum box in the lower section of TCDD
8d433671 763 gMC->Gspos("Q11T", 1, "Q10T", 0., -1.25, 0., 0, "ONLY");
764
765 // positioning TCDD elements in ZDC2, (inside TCDD volume)
f853b9aa 766 gMC->Gspos("Q08T", 1, "ZDCA", 0., 2.5, -100+zd2, 0, "ONLY");
767 gMC->Gspos("Q10T", 1, "ZDCA", 0., -2.5, -100+zd2, 0, "ONLY");
8d433671 768
769 // RF screen
770 boxpar[0] = 0.2/2.;
771 boxpar[1] = 5.0/2.;
772 boxpar[2] = 100./2.;
773 gMC->Gsvolu("Q12T", "BOX ", idtmed[6], boxpar, 3);
774 // positioning RF screen at both sides of TCDD
f853b9aa 775 gMC->Gspos("Q12T", 1, "ZDCA", tubspar[1]+boxpar[0], 0., -100+zd2, 0, "ONLY");
776 gMC->Gspos("Q12T", 2, "ZDCA", -tubspar[1]-boxpar[0], 0., -100+zd2, 0, "ONLY");
8d433671 777 //---------------------------- TCDD end ---------------------------------------
778
779 // Bellow (ID=80 mm) - length = 0.3 m - VMAAB
780 tubpar[0] = 8.0/2.;
781 tubpar[1] = 8.4/2.;
782 tubpar[2] = 30.0/2.;
783 gMC->Gsvolu("QA08", "TUBE", idtmed[8], tubpar, 3);
f853b9aa 784 gMC->Gspos("QA08", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 785 // Ch.debug
f853b9aa 786 //printf(" QA08 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 787
788 zd2 += 2.*tubpar[2];
789
f853b9aa 790 // Flange (ID=80 mm) Cu (first section of VCTCE)
8d433671 791 tubpar[0] = 8.0/2.;
792 tubpar[1] = 8.4/2.;
793 tubpar[2] = 2.0/2.;
794 gMC->Gsvolu("QA09", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 795 gMC->Gspos("QA09", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 796 // Ch.debug
f853b9aa 797 //printf(" QA09 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 798
799 zd2 += 2.*tubpar[2];
800
f853b9aa 801 // transition cone from ID=80 to ID=212 (second section of VCTCE)
8d433671 802 conpar[0] = 25.0/2.;
803 conpar[1] = 8.0/2.;
804 conpar[2] = 8.4/2.;
805 conpar[3] = 21.2/2.;
806 conpar[4] = 21.8/2.;
807 gMC->Gsvolu("QA10", "CONE", idtmed[6], conpar, 5);
f853b9aa 808 gMC->Gspos("QA10", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
809 //printf(" QA10 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 810
811 zd2 += 2.*conpar[0];
812
f853b9aa 813 // tube (ID=212 mm) Cu (third section of VCTCE)
8d433671 814 tubpar[0] = 21.2/2.;
815 tubpar[1] = 21.8/2.;
816 tubpar[2] = 403.54/2.;
817 gMC->Gsvolu("QA11", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 818 gMC->Gspos("QA11", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 819 // Ch.debug
f853b9aa 820 //printf(" QA11 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 821
822 zd2 += 2.*tubpar[2];
823
824 // bellow (ID=212 mm) (VMBGA)
8d433671 825 tubpar[0] = 21.2/2.;
826 tubpar[1] = 21.8/2.;
827 tubpar[2] = 40.0/2.;
828 gMC->Gsvolu("QA12", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 829 gMC->Gspos("QA12", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 830 // Ch.debug
f853b9aa 831 //printf(" QA12 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 832
833 zd2 += 2.*tubpar[2];
834
835 // TDI valve assembly (ID=212 mm)
8d433671 836 tubpar[0] = 21.2/2.;
837 tubpar[1] = 21.8/2.;
838 tubpar[2] = 30.0/2.;
839 gMC->Gsvolu("QA13", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 840 gMC->Gspos("QA13", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 841 // Ch.debug
f853b9aa 842 //printf(" QA13 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 843
844 zd2 += 2.*tubpar[2];
845
846 // bellow (ID=212 mm) (VMBGA)
8d433671 847 tubpar[0] = 21.2/2.;
848 tubpar[1] = 21.8/2.;
849 tubpar[2] = 40.0/2.;
850 gMC->Gsvolu("QA14", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 851 gMC->Gspos("QA14", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 852 // Ch.debug
f853b9aa 853 //printf(" QA14 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 854
855 zd2 += 2.*tubpar[2];
856
857 // skewed transition piece (ID=212 mm) (before TDI)
8d433671 858 tubpar[0] = 21.2/2.;
859 tubpar[1] = 21.8/2.;
860 tubpar[2] = 20.0/2.;
861 gMC->Gsvolu("QA15", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 862 gMC->Gspos("QA15", 1, "ZDCA", 1.10446, 0., tubpar[2]+zd2, irotpipe2, "ONLY");
8d433671 863 // Ch.debug
f853b9aa 864 //printf(" QA15 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 865
866 zd2 += 2.*tubpar[2];
867
f853b9aa 868 // Vacuum chamber containing TDI
8d433671 869 tubpar[0] = 54.0/2.;
870 tubpar[1] = 54.6/2.;
871 tubpar[2] = 540.0/2.;
872 gMC->Gsvolu("Q13T", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 873 gMC->Gspos("Q13T", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 874 // Ch.debug
f853b9aa 875 //printf(" Q13T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 876
877 zd2 += 2.*tubpar[2];
878
f853b9aa 879 //---------------- INSERT TDI INSIDE Q13T -----------------------------------
8d433671 880 boxpar[0] = 11.0/2.;
881 boxpar[1] = 9.0/2.;
882 boxpar[2] = 540.0/2.;
883 gMC->Gsvolu("QTD1", "BOX ", idtmed[6], boxpar, 3);
884 gMC->Gspos("QTD1", 1, "Q13T", -3.8, 10.5, 0., 0, "ONLY");
885 boxpar[0] = 11.0/2.;
886 boxpar[1] = 9.0/2.;
887 boxpar[2] = 540.0/2.;
888 gMC->Gsvolu("QTD2", "BOX ", idtmed[6], boxpar, 3);
889 gMC->Gspos("QTD2", 1, "Q13T", -3.8, -10.5, 0., 0, "ONLY");
890 boxpar[0] = 5.1/2.;
891 boxpar[1] = 0.2/2.;
892 boxpar[2] = 540.0/2.;
893 gMC->Gsvolu("QTD3", "BOX ", idtmed[6], boxpar, 3);
894 gMC->Gspos("QTD3", 1, "Q13T", -3.8+5.5+boxpar[0], 6.1, 0., 0, "ONLY");
895 gMC->Gspos("QTD3", 2, "Q13T", -3.8+5.5+boxpar[0], -6.1, 0., 0, "ONLY");
896 gMC->Gspos("QTD3", 3, "Q13T", -3.8-5.5-boxpar[0], 6.1, 0., 0, "ONLY");
897 gMC->Gspos("QTD3", 4, "Q13T", -3.8-5.5-boxpar[0], -6.1, 0., 0, "ONLY");
f853b9aa 898 //
8d433671 899 tubspar[0] = 12.0/2.;
900 tubspar[1] = 12.4/2.;
901 tubspar[2] = 540.0/2.;
902 tubspar[3] = 90.;
903 tubspar[4] = 270.;
904 gMC->Gsvolu("QTD4", "TUBS", idtmed[6], tubspar, 5);
905 gMC->Gspos("QTD4", 1, "Q13T", -3.8-10.6, 0., 0., 0, "ONLY");
906 tubspar[0] = 12.0/2.;
907 tubspar[1] = 12.4/2.;
908 tubspar[2] = 540.0/2.;
909 tubspar[3] = -90.;
910 tubspar[4] = 90.;
911 gMC->Gsvolu("QTD5", "TUBS", idtmed[6], tubspar, 5);
912 gMC->Gspos("QTD5", 1, "Q13T", -3.8+10.6, 0., 0., 0, "ONLY");
8d433671 913 //---------------- END DEFINING TDI INSIDE Q13T -------------------------------
914
915 // skewed transition piece (ID=212 mm) (after TDI)
916 tubpar[0] = 21.2/2.;
917 tubpar[1] = 21.8/2.;
918 tubpar[2] = 20.0/2.;
919 gMC->Gsvolu("QA16", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 920 gMC->Gspos("QA16", 1, "ZDCA", 1.10446+2.2, 0., tubpar[2]+zd2, irotpipe2, "ONLY");
8d433671 921 // Ch.debug
f853b9aa 922 //printf(" QA16 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 923
924 zd2 += 2.*tubpar[2];
925
926 // bellow (ID=212 mm) (VMBGA)
927 tubpar[0] = 21.2/2.;
928 tubpar[1] = 21.8/2.;
929 tubpar[2] = 40.0/2.;
930 gMC->Gsvolu("QA17", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 931 gMC->Gspos("QA17", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 932 // Ch.debug
f853b9aa 933 //printf(" QA17 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 934
935 zd2 += 2.*tubpar[2];
936
937 // TDI valve assembly (ID=212 mm)
938 tubpar[0] = 21.2/2.;
939 tubpar[1] = 21.8/2.;
940 tubpar[2] = 30.0/2.;
941 gMC->Gsvolu("QA18", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 942 gMC->Gspos("QA18", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 943 // Ch.debug
f853b9aa 944 //printf(" QA18 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 945
946 zd2 += 2.*tubpar[2];
947
948 // bellow (ID=212 mm) (VMBGA)
949 tubpar[0] = 21.2/2.;
950 tubpar[1] = 21.8/2.;
951 tubpar[2] = 40.0/2.;
952 gMC->Gsvolu("QA19", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 953 gMC->Gspos("QA19", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 954 // Ch.debug
f853b9aa 955 //printf(" QA19 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 956
957 zd2 += 2.*tubpar[2];
958
959 // vacuum chamber (ID=212 mm) (BTVST)
960 tubpar[0] = 21.2/2.;
961 tubpar[1] = 21.8/2.;
962 tubpar[2] = 50.0/2.;
963 gMC->Gsvolu("QA20", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 964 gMC->Gspos("QA20", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 965 // Ch.debug
f853b9aa 966 //printf(" QA20 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 967
968 zd2 += 2.*tubpar[2];
969
970 // bellow (ID=212 mm) (VMBGA) repeated 3 times
971 tubpar[0] = 21.2/2.;
972 tubpar[1] = 21.8/2.;
973 tubpar[2] = 120.0/2.;
974 gMC->Gsvolu("QA21", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 975 gMC->Gspos("QA21", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 976 // Ch.debug
f853b9aa 977 //printf(" QA21 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 978
979 zd2 += 2.*tubpar[2];
980
981 // skewed transition cone from ID=212 mm to ID=797 mm SS for the moment
982 conpar[0] = 110.0/2.;
983 conpar[1] = 21.2/2.;
984 conpar[2] = 21.8/2.;
985 conpar[3] = 79.7/2.;
986 conpar[4] = 81.3/2.;
987 gMC->Gsvolu("QA22", "CONE", idtmed[6], conpar, 5);
f853b9aa 988 gMC->Gspos("QA22", 1, "ZDCA", 4.4-2.201, 0., conpar[0]+zd2, irotpipe1, "ONLY");
989 //printf(" QA22 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 990
991 zd2 += 2.*conpar[0];
992
993 // beam pipe (ID=797 mm) SS
994 tubpar[0] = 79.7/2.;
995 tubpar[1] = 81.3/2.;
996 tubpar[2] = 2393.05/2.;
997 gMC->Gsvolu("QA23", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 998 gMC->Gspos("QA23", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 999 // Ch.debug
9c374a22 1000 //printf(" QA23 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1001
1002 zd2 += 2.*tubpar[2];
1003
1004 // Transition from ID=797 mm to ID=196 mm SS for the moment:
1005 //
1006 // in order to simulate the thin window opened in the transition cone
1007 // we divide the transition cone in three cones:
1008 // the first 8 mm thick
1009 // the second 3 mm thick
1010 // the third 8 mm thick
f853b9aa 1011 //
1012 // First section
8d433671 1013 conpar[0] = 9.09/2.; // 15 degree
1014 conpar[1] = 79.7/2.;
1015 conpar[2] = 81.3/2.; // thickness 8 mm
1016 conpar[3] = 74.82868/2.;
1017 conpar[4] = 76.42868/2.; // thickness 8 mm
1018 gMC->Gsvolu("Q24A", "CONE", idtmed[6], conpar, 5);
f853b9aa 1019 gMC->Gspos("Q24A", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1020 //printf(" Q24A CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1021
1022 zd2 += 2.*conpar[0];
1023
f853b9aa 1024 // Second section
8d433671 1025 conpar[0] = 96.2/2.; // 15 degree
1026 conpar[1] = 74.82868/2.;
1027 conpar[2] = 75.42868/2.; // thickness 3 mm
1028 conpar[3] = 23.19588/2.;
1029 conpar[4] = 23.79588/2.; // thickness 3 mm
1030 gMC->Gsvolu("QA25", "CONE", idtmed[6], conpar, 5);
f853b9aa 1031 gMC->Gspos("QA25", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1032 //printf(" QA25 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1033
1034 zd2 += 2.*conpar[0];
1035
f853b9aa 1036 // Third section
8d433671 1037 conpar[0] = 6.71/2.; // 15 degree
1038 conpar[1] = 23.19588/2.;
1039 conpar[2] = 24.79588/2.;// thickness 8 mm
1040 conpar[3] = 19.6/2.;
1041 conpar[4] = 21.2/2.;// thickness 8 mm
1042 gMC->Gsvolu("QA26", "CONE", idtmed[6], conpar, 5);
f853b9aa 1043 gMC->Gspos("QA26", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1044 //printf(" QA26 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1045
1046 zd2 += 2.*conpar[0];
1047
1048 // beam pipe (ID=196 mm)
1049 tubpar[0] = 19.6/2.;
1050 tubpar[1] = 21.2/2.;
1051 tubpar[2] = 9.55/2.;
1052 gMC->Gsvolu("QA27", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1053 gMC->Gspos("QA27", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1054 // Ch.debug
f853b9aa 1055 //printf(" QA27 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1056
1057 zd2 += 2.*tubpar[2];
1058
1059 // Flange (ID=196 mm)
1060 tubpar[0] = 19.6/2.;
1061 tubpar[1] = 25.3/2.;
1062 tubpar[2] = 4.9/2.;
1063 gMC->Gsvolu("QF01", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1064 gMC->Gspos("QF01", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1065 // Ch.debug
f853b9aa 1066 //printf(" QF01 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1067
1068 zd2 += 2.*tubpar[2];
1069
1070 // Special Warm Module (made by 5 volumes)
8d433671 1071 tubpar[0] = 20.2/2.;
1072 tubpar[1] = 20.6/2.;
1073 tubpar[2] = 2.15/2.;
1074 gMC->Gsvolu("QA28", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1075 gMC->Gspos("QA28", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1076 // Ch.debug
f853b9aa 1077 //printf(" QA28 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1078
1079 zd2 += 2.*tubpar[2];
1080
1081 conpar[0] = 6.9/2.;
1082 conpar[1] = 20.2/2.;
1083 conpar[2] = 20.6/2.;
1084 conpar[3] = 23.9/2.;
1085 conpar[4] = 24.3/2.;
1086 gMC->Gsvolu("QA29", "CONE", idtmed[6], conpar, 5);
f853b9aa 1087 gMC->Gspos("QA29", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1088 // Ch.debug
f853b9aa 1089 //printf(" QA29 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1090
1091 zd2 += 2.*conpar[0];
1092
1093 tubpar[0] = 23.9/2.;
1094 tubpar[1] = 25.5/2.;
1095 tubpar[2] = 17.0/2.;
1096 gMC->Gsvolu("QA30", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1097 gMC->Gspos("QA30", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1098 // Ch.debug
f853b9aa 1099 //printf(" QA30 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1100
1101 zd2 += 2.*tubpar[2];
1102
1103 conpar[0] = 6.9/2.;
1104 conpar[1] = 23.9/2.;
1105 conpar[2] = 24.3/2.;
1106 conpar[3] = 20.2/2.;
1107 conpar[4] = 20.6/2.;
1108 gMC->Gsvolu("QA31", "CONE", idtmed[6], conpar, 5);
f853b9aa 1109 gMC->Gspos("QA31", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1110 // Ch.debug
f853b9aa 1111 //printf(" QA31 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1112
1113 zd2 += 2.*conpar[0];
1114
1115 tubpar[0] = 20.2/2.;
1116 tubpar[1] = 20.6/2.;
1117 tubpar[2] = 2.15/2.;
1118 gMC->Gsvolu("QA32", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1119 gMC->Gspos("QA32", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1120 // Ch.debug
f853b9aa 1121 //printf(" QA32 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1122
1123 zd2 += 2.*tubpar[2];
1124
1125 // Flange (ID=196 mm)
1126 tubpar[0] = 19.6/2.;
1127 tubpar[1] = 25.3/2.;
1128 tubpar[2] = 4.9/2.;
1129 gMC->Gsvolu("QF02", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1130 gMC->Gspos("QF02", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1131 // Ch.debug
f853b9aa 1132 //printf(" QF02 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1133
1134 zd2 += 2.*tubpar[2];
1135
1136 // simulation of the trousers (VCTYB)
addda976 1137 // (last design -mail 3/6/05)
8d433671 1138 // pipe: a tube (ID = 196. OD = 200.)
1139 tubpar[0] = 19.6/2.;
1140 tubpar[1] = 20.0/2.;
1141 tubpar[2] = 3.9/2.;
1142 gMC->Gsvolu("QA33", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1143 gMC->Gspos("QA33", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1144 // Ch.debug
f853b9aa 1145 //printf(" QA33 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1146
1147 zd2 += 2.*tubpar[2];
1148
1149 // transition cone from ID=196. to ID=216.6
1150 conpar[0] = 32.55/2.;
1151 conpar[1] = 19.6/2.;
1152 conpar[2] = 20.0/2.;
1153 conpar[3] = 21.66/2.;
1154 conpar[4] = 22.06/2.;
1155 gMC->Gsvolu("QA34", "CONE", idtmed[6], conpar, 5);
f853b9aa 1156 gMC->Gspos("QA34", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1157 // Ch.debug
f853b9aa 1158 //printf(" QA34 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1159
1160 zd2 += 2.*conpar[0];
1161
1162 // Flange: first support for the trousers
1163 boxpar[0] = 25.3/2.;
1164 boxpar[1] = 25.3/2.;
1165 boxpar[2] = 2.5/2.;
1166 gMC->Gsvolu("QF03", "BOX ", idtmed[6], boxpar, 3);
1167 tubpar[0] = 0.0/2.;
1168 tubpar[1] = 22.06/2.;
1169 tubpar[2] = 2.5/2.;
1170 gMC->Gsvolu("QFV1", "TUBE", idtmed[10], tubpar, 3);
1171 gMC->Gspos("QFV1", 1, "QF03", 0., 0., 0., 0, "MANY");
f853b9aa 1172 gMC->Gspos("QF03", 1, "ZDCA", 0., 0., 14.3+zd2, 0, "MANY");
8d433671 1173 // Ch.debug
f853b9aa 1174 //printf("\n Flange: first support for the trousers\n");
8d433671 1175
1176 // tube
1177 tubpar[0] = 21.66/2.;
1178 tubpar[1] = 22.06/2.;
1179 tubpar[2] = 28.6/2.;
1180 gMC->Gsvolu("QA35", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1181 gMC->Gspos("QA35", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1182 // Ch.debug
f853b9aa 1183 //printf("\n QA35 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1184
1185 zd2 += 2.*tubpar[2];
1186
1187 // legs of the trousers
8d433671 1188 conpar[0] = (90.1+0.8)/2.;
1189 conpar[1] = 0.0/2.;
1190 conpar[2] = 21.6/2.;
1191 conpar[3] = 0.0/2.;
1192 conpar[4] = 5.8/2.;
1193 gMC->Gsvolu("QAL1", "CONE", idtmed[6], conpar, 5);
1194 gMC->Gsvolu("QAL2", "CONE", idtmed[6], conpar, 5);
f853b9aa 1195 gMC->Gspos("QAL1", 1, "ZDCA", -3.45-0.52, 0., (90.1/2.)+zd2, irotpipe5, "MANY");
1196 gMC->Gspos("QAL2", 1, "ZDCA", 3.45+0.52, 0., (90.1/2.)+zd2, irotpipe6, "MANY");
8d433671 1197
1198 conpar[0] = (90.1+0.8)/2.;
1199 conpar[1] = 0.0/2.;
1200 conpar[2] = 21.2/2.;
1201 conpar[3] = 0.0/2.;
1202 conpar[4] = 5.4/2.;
1203 gMC->Gsvolu("QAL3", "CONE", idtmed[10], conpar, 5);
1204 gMC->Gsvolu("QAL4", "CONE", idtmed[10], conpar, 5);
f853b9aa 1205 gMC->Gspos("QAL3", 1, "ZDCA", -3.45-0.52, 0., (90.1/2.)+zd2, irotpipe5, "ONLY");
1206 gMC->Gspos("QAL4", 1, "ZDCA", 3.45+0.52, 0., (90.1/2.)+zd2, irotpipe6, "ONLY");
8d433671 1207
8d433671 1208 zd2 += 90.1;
1209
f853b9aa 1210 // second section : 2 tubes (ID = 54. OD = 58.)
8d433671 1211 tubpar[0] = 5.4/2.;
1212 tubpar[1] = 5.8/2.;
1213 tubpar[2] = 40.0/2.;
1214 gMC->Gsvolu("QA36", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1215 gMC->Gspos("QA36", 1, "ZDCA", -15.8/2., 0., tubpar[2]+zd2, 0, "ONLY");
1216 gMC->Gspos("QA36", 2, "ZDCA", 15.8/2., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1217 // Ch.debug
f853b9aa 1218 //printf(" QA36 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1219
1220 zd2 += 2.*tubpar[2];
1221
1222 // transition x2zdc to recombination chamber : skewed cone
1223 conpar[0] = 10./2.;
1224 conpar[1] = 5.4/2.;
1225 conpar[2] = 5.8/2.;
1226 conpar[3] = 6.3/2.;
1227 conpar[4] = 7.0/2.;
1228 gMC->Gsvolu("QA37", "CONE", idtmed[6], conpar, 5);
f853b9aa 1229 gMC->Gspos("QA37", 1, "ZDCA", -7.9-0.175, 0., conpar[0]+zd2, irotpipe7, "ONLY");
1230 gMC->Gspos("QA37", 2, "ZDCA", 7.9+0.175, 0., conpar[0]+zd2, irotpipe8, "ONLY");
1231 //printf(" QA37 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1232
1233 zd2 += 2.*conpar[0];
1234
1235 // Flange: second support for the trousers
8d433671 1236 boxpar[0] = 25.9/2.;
1237 boxpar[1] = 9.4/2.;
1238 boxpar[2] = 1./2.;
1239 gMC->Gsvolu("QF04", "BOX ", idtmed[6], boxpar, 3);
1240 boxpar[0] = 16.5/2.;
1241 boxpar[1] = 7./2.;
1242 boxpar[2] = 1./2.;
1243 gMC->Gsvolu("QFV2", "BOX ", idtmed[10], boxpar, 3);
1244 gMC->Gspos("QFV2", 1, "QF04", 0., 0., 0., 0, "MANY");
1245 tubspar[0] = 0.0/2.;
1246 tubspar[1] = 7./2.;
1247 tubspar[2] = 1./2.;
1248 tubspar[3] = 90.;
1249 tubspar[4] = 270.;
1250 gMC->Gsvolu("QFV3", "TUBS", idtmed[10], tubspar, 5);
1251 gMC->Gspos("QFV3", 1, "QF04", -16.5/2., 0., 0., 0, "MANY");
1252 tubspar[0] = 0.0/2.;
1253 tubspar[1] = 7./2.;
1254 tubspar[2] = 1./2.;
1255 tubspar[3] = -90.;
1256 tubspar[4] = 90.;
1257 gMC->Gsvolu("QFV4", "TUBS", idtmed[10], tubspar, 5);
1258 gMC->Gspos("QFV4", 1, "QF04", 16.5/2., 0., 0., 0, "MANY");
f853b9aa 1259 gMC->Gspos("QF04", 1, "ZDCA", 0., 0., 18.5+zd2, 0, "MANY");
8d433671 1260
1261
1262 // 2 tubes (ID = 63 mm OD=70 mm)
1263 tubpar[0] = 6.3/2.;
1264 tubpar[1] = 7.0/2.;
1265 tubpar[2] = 512.9/2.;
1266 gMC->Gsvolu("QA38", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1267 gMC->Gspos("QA38", 1, "ZDCA", -16.5/2., 0., tubpar[2]+zd2, 0, "ONLY");
1268 gMC->Gspos("QA38", 2, "ZDCA", 16.5/2., 0., tubpar[2]+zd2, 0, "ONLY");
1269 //printf(" QA38 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1270
1271 zd2 += 2.*tubpar[2];
f853b9aa 1272 //printf("\n END OF BEAM PIPE VOLUME DEFINITION AT z= %f\n",zd2);
1273 //printf(" MAGNET DEFINITION FOLLOWS\n\n");
8d433671 1274
1275
1276 // ----------------------------------------------------------------
1277 // -- MAGNET DEFINITION -> LHC OPTICS 6.5
1278 // ----------------------------------------------------------------
1279 // ***************************************************************
1280 // SIDE C - RB26 (dimuon side)
1281 // ***************************************************************
1282 // -- COMPENSATOR DIPOLE (MBXW)
1283 zc = 1921.6;
1284
1285 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1286 tubpar[0] = 0.;
1287 tubpar[1] = 4.5;
1288 tubpar[2] = 170./2.;
1289 gMC->Gsvolu("MBXW", "TUBE", idtmed[11], tubpar, 3);
1290
1291 // -- YOKE
1292 tubpar[0] = 4.5;
1293 tubpar[1] = 55.;
1294 tubpar[2] = 170./2.;
f853b9aa 1295 gMC->Gsvolu("YMBX", "TUBE", idtmed[13], tubpar, 3);
8d433671 1296
f853b9aa 1297 gMC->Gspos("MBXW", 1, "ZDCC", 0., 0., -tubpar[2]-zc, 0, "ONLY");
1298 gMC->Gspos("YMBX", 1, "ZDCC", 0., 0., -tubpar[2]-zc, 0, "ONLY");
8d433671 1299
1300
1301 // -- INNER TRIPLET
1302 zq = 2296.5;
1303
1304 // -- DEFINE MQXL AND MQX QUADRUPOLE ELEMENT
1305 // -- MQXL
1306 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1307 tubpar[0] = 0.;
1308 tubpar[1] = 3.5;
1309 tubpar[2] = 637./2.;
1310 gMC->Gsvolu("MQXL", "TUBE", idtmed[11], tubpar, 3);
f853b9aa 1311
8d433671 1312 // -- YOKE
1313 tubpar[0] = 3.5;
1314 tubpar[1] = 22.;
1315 tubpar[2] = 637./2.;
1316 gMC->Gsvolu("YMQL", "TUBE", idtmed[7], tubpar, 3);
1317
f853b9aa 1318 gMC->Gspos("MQXL", 1, "ZDCC", 0., 0., -tubpar[2]-zq, 0, "ONLY");
1319 gMC->Gspos("YMQL", 1, "ZDCC", 0., 0., -tubpar[2]-zq, 0, "ONLY");
8d433671 1320
f853b9aa 1321 gMC->Gspos("MQXL", 2, "ZDCC", 0., 0., -tubpar[2]-zq-2430., 0, "ONLY");
1322 gMC->Gspos("YMQL", 2, "ZDCC", 0., 0., -tubpar[2]-zq-2430., 0, "ONLY");
8d433671 1323
1324 // -- MQX
1325 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1326 tubpar[0] = 0.;
1327 tubpar[1] = 3.5;
1328 tubpar[2] = 550./2.;
1329 gMC->Gsvolu("MQX ", "TUBE", idtmed[11], tubpar, 3);
1330
1331 // -- YOKE
1332 tubpar[0] = 3.5;
1333 tubpar[1] = 22.;
1334 tubpar[2] = 550./2.;
1335 gMC->Gsvolu("YMQ ", "TUBE", idtmed[7], tubpar, 3);
1336
f853b9aa 1337 gMC->Gspos("MQX ", 1, "ZDCC", 0., 0., -tubpar[2]-zq-908.5, 0, "ONLY");
1338 gMC->Gspos("YMQ ", 1, "ZDCC", 0., 0., -tubpar[2]-zq-908.5, 0, "ONLY");
8d433671 1339
f853b9aa 1340 gMC->Gspos("MQX ", 2, "ZDCC", 0., 0., -tubpar[2]-zq-1558.5, 0, "ONLY");
1341 gMC->Gspos("YMQ ", 2, "ZDCC", 0., 0., -tubpar[2]-zq-1558.5, 0, "ONLY");
8d433671 1342
1343 // -- SEPARATOR DIPOLE D1
1344 zd1 = 5838.3;
1345
1346 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1347 tubpar[0] = 0.;
1348 tubpar[1] = 6.94/2.;
1349 tubpar[2] = 945./2.;
1350 gMC->Gsvolu("MD1 ", "TUBE", idtmed[11], tubpar, 3);
1351
1352 // -- Insert horizontal Cu plates inside D1
1353 // -- (to simulate the vacuum chamber)
1354 boxpar[0] = TMath::Sqrt(tubpar[1]*tubpar[1]-(2.98+0.2)*(2.98+0.2)) - 0.05;
1355 boxpar[1] = 0.2/2.;
1356 boxpar[2] =945./2.;
1357 gMC->Gsvolu("MD1V", "BOX ", idtmed[6], boxpar, 3);
1358 gMC->Gspos("MD1V", 1, "MD1 ", 0., 2.98+boxpar[1], 0., 0, "ONLY");
1359 gMC->Gspos("MD1V", 2, "MD1 ", 0., -2.98-boxpar[1], 0., 0, "ONLY");
1360
1361 // -- YOKE
1362 tubpar[0] = 0.;
1363 tubpar[1] = 110./2;
1364 tubpar[2] = 945./2.;
1365 gMC->Gsvolu("YD1 ", "TUBE", idtmed[7], tubpar, 3);
1366
f853b9aa 1367 gMC->Gspos("YD1 ", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 1368 gMC->Gspos("MD1 ", 1, "YD1 ", 0., 0., 0., 0, "ONLY");
1369
1370 // -- DIPOLE D2
1371 // --- LHC optics v6.4
1372 zd2 = 12147.6;
1373
1374 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1375 tubpar[0] = 0.;
1376 tubpar[1] = 7.5/2.;
1377 tubpar[2] = 945./2.;
1378 gMC->Gsvolu("MD2 ", "TUBE", idtmed[11], tubpar, 3);
1379
1380 // -- YOKE
1381 tubpar[0] = 0.;
1382 tubpar[1] = 55.;
1383 tubpar[2] = 945./2.;
1384 gMC->Gsvolu("YD2 ", "TUBE", idtmed[7], tubpar, 3);
1385
f853b9aa 1386 gMC->Gspos("YD2 ", 1, "ZDCC", 0., 0., -tubpar[2]-zd2, 0, "ONLY");
8d433671 1387
1388 gMC->Gspos("MD2 ", 1, "YD2 ", -9.4, 0., 0., 0, "ONLY");
1389 gMC->Gspos("MD2 ", 2, "YD2 ", 9.4, 0., 0., 0, "ONLY");
1390
1391 // ***************************************************************
1392 // SIDE A - RB24
1393 // ***************************************************************
1394
1395 // COMPENSATOR DIPOLE (MCBWA) (2nd compensator)
1396 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1397 tubpar[0] = 0.;
1398 tubpar[1] = 4.5;
1399 tubpar[2] = 153./2.;
1400 gMC->Gsvolu("MCBW", "TUBE", idtmed[11], tubpar, 3);
f853b9aa 1401 gMC->Gspos("MCBW", 1, "ZDCA", 0., 0., tubpar[2]+1972.5, 0, "ONLY");
8d433671 1402
1403 // -- YOKE
1404 tubpar[0] = 4.5;
1405 tubpar[1] = 55.;
1406 tubpar[2] = 153./2.;
1407 gMC->Gsvolu("YMCB", "TUBE", idtmed[8], tubpar, 3);
f853b9aa 1408 gMC->Gspos("YMCB", 1, "ZDCA", 0., 0., tubpar[2]+1972.5, 0, "ONLY");
8d433671 1409
1410
1411 // -- INNER TRIPLET
1412 zql = 2296.5;
1413
1414 // -- DEFINE MQX1 AND MQX2 QUADRUPOLE ELEMENT
1415 // -- MQX1
1416 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1417 tubpar[0] = 0.;
1418 tubpar[1] = 3.5;
1419 tubpar[2] = 637./2.;
1420 gMC->Gsvolu("MQX1", "TUBE", idtmed[11], tubpar, 3);
1421
1422 // -- YOKE
1423 tubpar[0] = 3.5;
1424 tubpar[1] = 22.;
1425 tubpar[2] = 637./2.;
1426 gMC->Gsvolu("YMQ1", "TUBE", idtmed[8], tubpar, 3);
1427
1428 // -- BEAM SCREEN FOR Q1
1429 tubpar[0] = 4.78/2.;
1430 tubpar[1] = 5.18/2.;
1431 tubpar[2] = 637./2.;
1432 gMC->Gsvolu("QBS1", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1433 gMC->Gspos("QBS1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "ONLY");
8d433671 1434 // INSERT VERTICAL PLATE INSIDE Q1
1435 boxpar[0] = 0.2/2.0;
1436 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(1.9+0.2)*(1.9+0.2));
1437 boxpar[2] =637./2.;
1438 gMC->Gsvolu("QBS2", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1439 gMC->Gspos("QBS2", 1, "ZDCA", 1.9+boxpar[0], 0., boxpar[2]+zql, 0, "ONLY");
1440 gMC->Gspos("QBS2", 2, "ZDCA", -1.9-boxpar[0], 0., boxpar[2]+zql, 0, "ONLY");
8d433671 1441
1442 // -- BEAM SCREEN FOR Q3
1443 tubpar[0] = 5.79/2.;
1444 tubpar[1] = 6.14/2.;
1445 tubpar[2] = 637./2.;
1446 gMC->Gsvolu("QBS3", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1447 gMC->Gspos("QBS3", 1, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "ONLY");
8d433671 1448 // INSERT VERTICAL PLATE INSIDE Q3
1449 boxpar[0] = 0.2/2.0;
1450 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(2.405+0.2)*(2.405+0.2));
1451 boxpar[2] =637./2.;
1452 gMC->Gsvolu("QBS4", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1453 gMC->Gspos("QBS4", 1, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+2400., 0, "ONLY");
1454 gMC->Gspos("QBS4", 2, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+2400., 0, "ONLY");
8d433671 1455
1456 // -- Q1
f853b9aa 1457 gMC->Gspos("MQX1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "MANY");
1458 gMC->Gspos("YMQ1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "ONLY");
8d433671 1459
1460 // -- Q3
f853b9aa 1461 gMC->Gspos("MQX1", 2, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "MANY");
1462 gMC->Gspos("YMQ1", 2, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "ONLY");
8d433671 1463
1464
1465 // -- MQX2
1466 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1467 tubpar[0] = 0.;
1468 tubpar[1] = 3.5;
1469 tubpar[2] = 550./2.;
1470 gMC->Gsvolu("MQX2", "TUBE", idtmed[11], tubpar, 3);
1471
1472 // -- YOKE
1473 tubpar[0] = 3.5;
1474 tubpar[1] = 22.;
1475 tubpar[2] = 550./2.;
1476 gMC->Gsvolu("YMQ2", "TUBE", idtmed[8], tubpar, 3);
1477
1478
1479 // -- BEAM SCREEN FOR Q2
1480 tubpar[0] = 5.79/2.;
1481 tubpar[1] = 6.14/2.;
1482 tubpar[2] = 550./2.;
1483 gMC->Gsvolu("QBS5", "TUBE", idtmed[6], tubpar, 3);
1484 // VERTICAL PLATE INSIDE Q2
1485 boxpar[0] = 0.2/2.0;
1486 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(2.405+0.2)*(2.405+0.2));
1487 boxpar[2] =550./2.;
1488 gMC->Gsvolu("QBS6", "BOX ", idtmed[6], boxpar, 3);
1489
1490 // -- Q2A
f853b9aa 1491 gMC->Gspos("MQX2", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "MANY");
1492 gMC->Gspos("QBS5", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "ONLY");
1493 gMC->Gspos("QBS6", 1, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+908.5, 0, "ONLY");
1494 gMC->Gspos("QBS6", 2, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+908.5, 0, "ONLY");
1495 gMC->Gspos("YMQ2", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "ONLY");
8d433671 1496
1497
1498 // -- Q2B
f853b9aa 1499 gMC->Gspos("MQX2", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "MANY");
1500 gMC->Gspos("QBS5", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "ONLY");
1501 gMC->Gspos("QBS6", 3, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+1558.5, 0, "ONLY");
1502 gMC->Gspos("QBS6", 4, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+1558.5, 0, "ONLY");
1503 gMC->Gspos("YMQ2", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "ONLY");
8d433671 1504
1505 // -- SEPARATOR DIPOLE D1
1506 zd2 = 5838.3;
1507
1508 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1509 tubpar[0] = 0.;
1510 tubpar[1] = 6.75/2.;
1511 tubpar[2] = 945./2.;
1512 gMC->Gsvolu("MD1L", "TUBE", idtmed[11], tubpar, 3);
1513
1514 // -- The beam screen tube is provided by the beam pipe in D1 (QA03 volume)
1515 // -- Insert the beam screen horizontal Cu plates inside D1
1516 // -- (to simulate the vacuum chamber)
1517 boxpar[0] = TMath::Sqrt(tubpar[1]*tubpar[1]-(2.885+0.2)*(2.885+0.2));
1518 boxpar[1] = 0.2/2.;
1519 boxpar[2] =(945.+80.1)/2.;
1520 gMC->Gsvolu("QBS7", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1521 gMC->Gspos("QBS7", 1, "ZDCA", 0., 2.885+boxpar[1],boxpar[2]+zd2, 0, "ONLY");
1522 gMC->Gspos("QBS7", 2, "ZDCA", 0., -2.885-boxpar[1],boxpar[2]+zd2, 0, "ONLY");
8d433671 1523
1524 // -- YOKE
1525 tubpar[0] = 7.34/2.; // to be checked
1526 tubpar[1] = 110./2;
1527 tubpar[2] = 945./2.;
1528 gMC->Gsvolu("YD1L", "TUBE", idtmed[8], tubpar, 3);
1529
f853b9aa 1530 gMC->Gspos("YD1L", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
1531 gMC->Gspos("MD1L", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "MANY");
8d433671 1532
1533
1534 // -- DIPOLE D2
1535 // --- LHC optics v6.5
1536 zd2l = 12167.8;
1537
1538 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1539 tubpar[0] = 0.;
1540 tubpar[1] = 7.5/2.; // this has to be checked
1541 tubpar[2] = 945./2.;
1542 gMC->Gsvolu("MD2L", "TUBE", idtmed[11], tubpar, 3);
1543
1544 // -- YOKE
1545 tubpar[0] = 0.;
1546 tubpar[1] = 55.;
1547 tubpar[2] = 945./2.;
1548 gMC->Gsvolu("YD2L", "TUBE", idtmed[8], tubpar, 3);
1549
f853b9aa 1550 gMC->Gspos("YD2L", 1, "ZDCA", 0., 0., tubpar[2]+zd2l, 0, "ONLY");
8d433671 1551
1552 gMC->Gspos("MD2L", 1, "YD2L", -9.4, 0., 0., 0, "ONLY");
1553 gMC->Gspos("MD2L", 2, "YD2L", 9.4, 0., 0., 0, "ONLY");
1554
1555 // -- END OF MAGNET DEFINITION
1556}
1557
1558//_____________________________________________________________________________
1559void AliZDCv3::CreateZDC()
1560{
1561 //
1562 // Create the various ZDCs (ZN + ZP)
1563 //
1564
1565 Float_t dimPb[6], dimVoid[6];
1566
1567 Int_t *idtmed = fIdtmed->GetArray();
1568
1569 // Parameters for hadronic calorimeters geometry
1570 // NB -> parameters used ONLY in CreateZDC()
1571 Float_t fGrvZN[3] = {0.03, 0.03, 50.}; // Grooves for neutron detector
1572 Float_t fGrvZP[3] = {0.04, 0.04, 75.}; // Grooves for proton detector
1573 Int_t fDivZN[3] = {11, 11, 0}; // Division for neutron detector
1574 Int_t fDivZP[3] = {7, 15, 0}; // Division for proton detector
1575 Int_t fTowZN[2] = {2, 2}; // Tower for neutron detector
1576 Int_t fTowZP[2] = {4, 1}; // Tower for proton detector
1577
1578 // Parameters for EM calorimeter geometry
1579 // NB -> parameters used ONLY in CreateZDC()
1580 Float_t kDimZEMPb = 0.15*(TMath::Sqrt(2.)); // z-dimension of the Pb slice
1581 Float_t kFibRadZEM = 0.0315; // External fiber radius (including cladding)
1582 Int_t fDivZEM[3] = {92, 0, 20}; // Divisions for EM detector
1583 Float_t fDimZEM[6] = {fZEMLength, 3.5, 3.5, 45., 0., 0.}; // Dimensions of EM detector
1584 Float_t fFibZEM2 = fDimZEM[2]/TMath::Sin(fDimZEM[3]*kDegrad)-kFibRadZEM;
1585 Float_t fFibZEM[3] = {0., 0.0275, fFibZEM2}; // Fibers for EM calorimeter
1586
1587
1588 //-- Create calorimeters geometry
1589
1590 // -------------------------------------------------------------------------------
1591 //--> Neutron calorimeter (ZN)
1592
1593 gMC->Gsvolu("ZNEU", "BOX ", idtmed[1], fDimZN, 3); // Passive material
1594 gMC->Gsvolu("ZNF1", "TUBE", idtmed[3], fFibZN, 3); // Active material
1595 gMC->Gsvolu("ZNF2", "TUBE", idtmed[4], fFibZN, 3);
1596 gMC->Gsvolu("ZNF3", "TUBE", idtmed[4], fFibZN, 3);
1597 gMC->Gsvolu("ZNF4", "TUBE", idtmed[3], fFibZN, 3);
1598 gMC->Gsvolu("ZNG1", "BOX ", idtmed[12], fGrvZN, 3); // Empty grooves
1599 gMC->Gsvolu("ZNG2", "BOX ", idtmed[12], fGrvZN, 3);
1600 gMC->Gsvolu("ZNG3", "BOX ", idtmed[12], fGrvZN, 3);
1601 gMC->Gsvolu("ZNG4", "BOX ", idtmed[12], fGrvZN, 3);
1602
1603 // Divide ZNEU in towers (for hits purposes)
1604
1605 gMC->Gsdvn("ZNTX", "ZNEU", fTowZN[0], 1); // x-tower
1606 gMC->Gsdvn("ZN1 ", "ZNTX", fTowZN[1], 2); // y-tower
1607
1608 //-- Divide ZN1 in minitowers
1609 // fDivZN[0]= NUMBER OF FIBERS PER TOWER ALONG X-AXIS,
1610 // fDivZN[1]= NUMBER OF FIBERS PER TOWER ALONG Y-AXIS
1611 // (4 fibres per minitower)
1612
1613 gMC->Gsdvn("ZNSL", "ZN1 ", fDivZN[1], 2); // Slices
1614 gMC->Gsdvn("ZNST", "ZNSL", fDivZN[0], 1); // Sticks
1615
1616 // --- Position the empty grooves in the sticks (4 grooves per stick)
1617 Float_t dx = fDimZN[0] / fDivZN[0] / 4.;
1618 Float_t dy = fDimZN[1] / fDivZN[1] / 4.;
1619
1620 gMC->Gspos("ZNG1", 1, "ZNST", 0.-dx, 0.+dy, 0., 0, "ONLY");
1621 gMC->Gspos("ZNG2", 1, "ZNST", 0.+dx, 0.+dy, 0., 0, "ONLY");
1622 gMC->Gspos("ZNG3", 1, "ZNST", 0.-dx, 0.-dy, 0., 0, "ONLY");
1623 gMC->Gspos("ZNG4", 1, "ZNST", 0.+dx, 0.-dy, 0., 0, "ONLY");
1624
1625 // --- Position the fibers in the grooves
1626 gMC->Gspos("ZNF1", 1, "ZNG1", 0., 0., 0., 0, "ONLY");
1627 gMC->Gspos("ZNF2", 1, "ZNG2", 0., 0., 0., 0, "ONLY");
1628 gMC->Gspos("ZNF3", 1, "ZNG3", 0., 0., 0., 0, "ONLY");
1629 gMC->Gspos("ZNF4", 1, "ZNG4", 0., 0., 0., 0, "ONLY");
1630
1631 // --- Position the neutron calorimeter in ZDC
1632 // -- Rotation of ZDCs
1633 Int_t irotzdc;
1634 gMC->Matrix(irotzdc, 90., 180., 90., 90., 180., 0.);
1635 //
f853b9aa 1636 gMC->Gspos("ZNEU", 1, "ZDCC", fPosZNC[0], fPosZNC[1], fPosZNC[2]-fDimZN[2], irotzdc, "ONLY");
8d433671 1637 //Ch debug
1638 //printf("\n ZN -> %f < z < %f cm\n",fPosZN[2],fPosZN[2]-2*fDimZN[2]);
1639
1640 // --- Position the neutron calorimeter in ZDC2 (left line)
1641 // -- No Rotation of ZDCs
f853b9aa 1642 gMC->Gspos("ZNEU", 2, "ZDCA", fPosZNA[0], fPosZNA[1], fPosZNA[2]+fDimZN[2], 0, "ONLY");
8d433671 1643 //Ch debug
1644 //printf("\n ZN left -> %f < z < %f cm\n",fPosZNl[2],fPosZNl[2]+2*fDimZN[2]);
1645
1646
1647 // -------------------------------------------------------------------------------
1648 //--> Proton calorimeter (ZP)
1649
1650 gMC->Gsvolu("ZPRO", "BOX ", idtmed[2], fDimZP, 3); // Passive material
1651 gMC->Gsvolu("ZPF1", "TUBE", idtmed[3], fFibZP, 3); // Active material
1652 gMC->Gsvolu("ZPF2", "TUBE", idtmed[4], fFibZP, 3);
1653 gMC->Gsvolu("ZPF3", "TUBE", idtmed[4], fFibZP, 3);
1654 gMC->Gsvolu("ZPF4", "TUBE", idtmed[3], fFibZP, 3);
1655 gMC->Gsvolu("ZPG1", "BOX ", idtmed[12], fGrvZP, 3); // Empty grooves
1656 gMC->Gsvolu("ZPG2", "BOX ", idtmed[12], fGrvZP, 3);
1657 gMC->Gsvolu("ZPG3", "BOX ", idtmed[12], fGrvZP, 3);
1658 gMC->Gsvolu("ZPG4", "BOX ", idtmed[12], fGrvZP, 3);
1659
1660 //-- Divide ZPRO in towers(for hits purposes)
1661
1662 gMC->Gsdvn("ZPTX", "ZPRO", fTowZP[0], 1); // x-tower
1663 gMC->Gsdvn("ZP1 ", "ZPTX", fTowZP[1], 2); // y-tower
1664
1665
1666 //-- Divide ZP1 in minitowers
1667 // fDivZP[0]= NUMBER OF FIBERS ALONG X-AXIS PER MINITOWER,
1668 // fDivZP[1]= NUMBER OF FIBERS ALONG Y-AXIS PER MINITOWER
1669 // (4 fiber per minitower)
1670
1671 gMC->Gsdvn("ZPSL", "ZP1 ", fDivZP[1], 2); // Slices
1672 gMC->Gsdvn("ZPST", "ZPSL", fDivZP[0], 1); // Sticks
1673
1674 // --- Position the empty grooves in the sticks (4 grooves per stick)
1675 dx = fDimZP[0] / fTowZP[0] / fDivZP[0] / 2.;
1676 dy = fDimZP[1] / fTowZP[1] / fDivZP[1] / 2.;
1677
1678 gMC->Gspos("ZPG1", 1, "ZPST", 0.-dx, 0.+dy, 0., 0, "ONLY");
1679 gMC->Gspos("ZPG2", 1, "ZPST", 0.+dx, 0.+dy, 0., 0, "ONLY");
1680 gMC->Gspos("ZPG3", 1, "ZPST", 0.-dx, 0.-dy, 0., 0, "ONLY");
1681 gMC->Gspos("ZPG4", 1, "ZPST", 0.+dx, 0.-dy, 0., 0, "ONLY");
1682
1683 // --- Position the fibers in the grooves
1684 gMC->Gspos("ZPF1", 1, "ZPG1", 0., 0., 0., 0, "ONLY");
1685 gMC->Gspos("ZPF2", 1, "ZPG2", 0., 0., 0., 0, "ONLY");
1686 gMC->Gspos("ZPF3", 1, "ZPG3", 0., 0., 0., 0, "ONLY");
1687 gMC->Gspos("ZPF4", 1, "ZPG4", 0., 0., 0., 0, "ONLY");
1688
1689
f853b9aa 1690 // --- Position the proton calorimeter in ZDCC
921be7cf 1691 gMC->Gspos("ZPRO", 1, "ZDCC", fPosZPC[0], fPosZPC[1], fPosZPC[2]-fDimZP[2], irotzdc, "ONLY");
8d433671 1692 //Ch debug
1693 //printf("\n ZP -> %f < z < %f cm\n",fPosZP[2],fPosZP[2]-2*fDimZP[2]);
1694
f853b9aa 1695 // --- Position the proton calorimeter in ZDCA
1696 // --- No rotation
921be7cf 1697 gMC->Gspos("ZPRO", 2, "ZDCA", fPosZPA[0], fPosZPA[1], fPosZPA[2]+fDimZP[2], 0, "ONLY");
8d433671 1698 //Ch debug
1699 //printf("\n ZP left -> %f < z < %f cm\n",fPosZPl[2],fPosZPl[2]+2*fDimZP[2]);
1700
1701
1702 // -------------------------------------------------------------------------------
1703 // -> EM calorimeter (ZEM)
1704
1705 gMC->Gsvolu("ZEM ", "PARA", idtmed[10], fDimZEM, 6);
1706
1707 Int_t irot1, irot2;
1708 gMC->Matrix(irot1,0.,0.,90.,90.,-90.,0.); // Rotation matrix 1
1709 gMC->Matrix(irot2,180.,0.,90.,fDimZEM[3]+90.,90.,fDimZEM[3]);// Rotation matrix 2
1710 //printf("irot1 = %d, irot2 = %d \n", irot1, irot2);
1711
1712 gMC->Gsvolu("ZEMF", "TUBE", idtmed[3], fFibZEM, 3); // Active material
1713
1714 gMC->Gsdvn("ZETR", "ZEM ", fDivZEM[2], 1); // Tranches
1715
1716 dimPb[0] = kDimZEMPb; // Lead slices
1717 dimPb[1] = fDimZEM[2];
1718 dimPb[2] = fDimZEM[1];
1719 //dimPb[3] = fDimZEM[3]; //controllare
1720 dimPb[3] = 90.-fDimZEM[3]; //originale
1721 dimPb[4] = 0.;
1722 dimPb[5] = 0.;
1723 gMC->Gsvolu("ZEL0", "PARA", idtmed[5], dimPb, 6);
1724 gMC->Gsvolu("ZEL1", "PARA", idtmed[5], dimPb, 6);
1725 gMC->Gsvolu("ZEL2", "PARA", idtmed[5], dimPb, 6);
1726
1727 // --- Position the lead slices in the tranche
1728 Float_t zTran = fDimZEM[0]/fDivZEM[2];
1729 Float_t zTrPb = -zTran+kDimZEMPb;
1730 gMC->Gspos("ZEL0", 1, "ZETR", zTrPb, 0., 0., 0, "ONLY");
1731 gMC->Gspos("ZEL1", 1, "ZETR", kDimZEMPb, 0., 0., 0, "ONLY");
1732
1733 // --- Vacuum zone (to be filled with fibres)
1734 dimVoid[0] = (zTran-2*kDimZEMPb)/2.;
1735 dimVoid[1] = fDimZEM[2];
1736 dimVoid[2] = fDimZEM[1];
1737 dimVoid[3] = 90.-fDimZEM[3];
1738 dimVoid[4] = 0.;
1739 dimVoid[5] = 0.;
1740 gMC->Gsvolu("ZEV0", "PARA", idtmed[10], dimVoid,6);
1741 gMC->Gsvolu("ZEV1", "PARA", idtmed[10], dimVoid,6);
1742
1743 // --- Divide the vacuum slice into sticks along x axis
1744 gMC->Gsdvn("ZES0", "ZEV0", fDivZEM[0], 3);
1745 gMC->Gsdvn("ZES1", "ZEV1", fDivZEM[0], 3);
1746
1747 // --- Positioning the fibers into the sticks
1748 gMC->Gspos("ZEMF", 1,"ZES0", 0., 0., 0., irot2, "ONLY");
1749 gMC->Gspos("ZEMF", 1,"ZES1", 0., 0., 0., irot2, "ONLY");
1750
1751 // --- Positioning the vacuum slice into the tranche
1752 Float_t displFib = fDimZEM[1]/fDivZEM[0];
1753 gMC->Gspos("ZEV0", 1,"ZETR", -dimVoid[0], 0., 0., 0, "ONLY");
1754 gMC->Gspos("ZEV1", 1,"ZETR", -dimVoid[0]+zTran, 0., displFib, 0, "ONLY");
1755
1756 // --- Positioning the ZEM into the ZDC - rotation for 90 degrees
f853b9aa 1757 // NB -> ZEM is positioned in ALIC (instead of in ZDC) volume
8d433671 1758 gMC->Gspos("ZEM ", 1,"ALIC", -fPosZEM[0], fPosZEM[1], fPosZEM[2]+fDimZEM[0], irot1, "ONLY");
1759
1760 // Second EM ZDC (same side w.r.t. IP, just on the other side w.r.t. beam pipe)
1761 gMC->Gspos("ZEM ", 2,"ALIC", fPosZEM[0], fPosZEM[1], fPosZEM[2]+fDimZEM[0], irot1, "ONLY");
1762
1763 // --- Adding last slice at the end of the EM calorimeter
1764 Float_t zLastSlice = fPosZEM[2]+kDimZEMPb+2*fDimZEM[0];
1765 gMC->Gspos("ZEL2", 1,"ALIC", fPosZEM[0], fPosZEM[1], zLastSlice, irot1, "ONLY");
1766 //Ch debug
1767 //printf("\n ZEM lenght = %f cm\n",2*fZEMLength);
1768 //printf("\n ZEM -> %f < z < %f cm\n",fPosZEM[2],fPosZEM[2]+2*fZEMLength+zLastSlice+kDimZEMPb);
1769
1770}
1771
1772//_____________________________________________________________________________
1773void AliZDCv3::DrawModule() const
1774{
1775 //
1776 // Draw a shaded view of the Zero Degree Calorimeter version 1
1777 //
1778
1779 // Set everything unseen
1780 gMC->Gsatt("*", "seen", -1);
1781 //
1782 // Set ALIC mother transparent
1783 gMC->Gsatt("ALIC","SEEN",0);
1784 //
1785 // Set the volumes visible
f853b9aa 1786 gMC->Gsatt("ZDCC","SEEN",0);
8d433671 1787 gMC->Gsatt("QT01","SEEN",1);
1788 gMC->Gsatt("QT02","SEEN",1);
1789 gMC->Gsatt("QT03","SEEN",1);
1790 gMC->Gsatt("QT04","SEEN",1);
1791 gMC->Gsatt("QT05","SEEN",1);
1792 gMC->Gsatt("QT06","SEEN",1);
1793 gMC->Gsatt("QT07","SEEN",1);
1794 gMC->Gsatt("QT08","SEEN",1);
1795 gMC->Gsatt("QT09","SEEN",1);
1796 gMC->Gsatt("QT10","SEEN",1);
1797 gMC->Gsatt("QT11","SEEN",1);
1798 gMC->Gsatt("QT12","SEEN",1);
1799 gMC->Gsatt("QT13","SEEN",1);
1800 gMC->Gsatt("QT14","SEEN",1);
1801 gMC->Gsatt("QT15","SEEN",1);
1802 gMC->Gsatt("QT16","SEEN",1);
1803 gMC->Gsatt("QT17","SEEN",1);
1804 gMC->Gsatt("QT18","SEEN",1);
1805 gMC->Gsatt("QC01","SEEN",1);
1806 gMC->Gsatt("QC02","SEEN",1);
1807 gMC->Gsatt("QC03","SEEN",1);
1808 gMC->Gsatt("QC04","SEEN",1);
1809 gMC->Gsatt("QC05","SEEN",1);
1810 gMC->Gsatt("QTD1","SEEN",1);
1811 gMC->Gsatt("QTD2","SEEN",1);
1812 gMC->Gsatt("QTD3","SEEN",1);
1813 gMC->Gsatt("MQXL","SEEN",1);
1814 gMC->Gsatt("YMQL","SEEN",1);
1815 gMC->Gsatt("MQX ","SEEN",1);
1816 gMC->Gsatt("YMQ ","SEEN",1);
1817 gMC->Gsatt("ZQYX","SEEN",1);
1818 gMC->Gsatt("MD1 ","SEEN",1);
1819 gMC->Gsatt("MD1V","SEEN",1);
1820 gMC->Gsatt("YD1 ","SEEN",1);
1821 gMC->Gsatt("MD2 ","SEEN",1);
1822 gMC->Gsatt("YD2 ","SEEN",1);
1823 gMC->Gsatt("ZNEU","SEEN",0);
1824 gMC->Gsatt("ZNF1","SEEN",0);
1825 gMC->Gsatt("ZNF2","SEEN",0);
1826 gMC->Gsatt("ZNF3","SEEN",0);
1827 gMC->Gsatt("ZNF4","SEEN",0);
1828 gMC->Gsatt("ZNG1","SEEN",0);
1829 gMC->Gsatt("ZNG2","SEEN",0);
1830 gMC->Gsatt("ZNG3","SEEN",0);
1831 gMC->Gsatt("ZNG4","SEEN",0);
1832 gMC->Gsatt("ZNTX","SEEN",0);
1833 gMC->Gsatt("ZN1 ","COLO",4);
1834 gMC->Gsatt("ZN1 ","SEEN",1);
1835 gMC->Gsatt("ZNSL","SEEN",0);
1836 gMC->Gsatt("ZNST","SEEN",0);
1837 gMC->Gsatt("ZPRO","SEEN",0);
1838 gMC->Gsatt("ZPF1","SEEN",0);
1839 gMC->Gsatt("ZPF2","SEEN",0);
1840 gMC->Gsatt("ZPF3","SEEN",0);
1841 gMC->Gsatt("ZPF4","SEEN",0);
1842 gMC->Gsatt("ZPG1","SEEN",0);
1843 gMC->Gsatt("ZPG2","SEEN",0);
1844 gMC->Gsatt("ZPG3","SEEN",0);
1845 gMC->Gsatt("ZPG4","SEEN",0);
1846 gMC->Gsatt("ZPTX","SEEN",0);
1847 gMC->Gsatt("ZP1 ","COLO",6);
1848 gMC->Gsatt("ZP1 ","SEEN",1);
1849 gMC->Gsatt("ZPSL","SEEN",0);
1850 gMC->Gsatt("ZPST","SEEN",0);
1851 gMC->Gsatt("ZEM ","COLO",7);
1852 gMC->Gsatt("ZEM ","SEEN",1);
1853 gMC->Gsatt("ZEMF","SEEN",0);
1854 gMC->Gsatt("ZETR","SEEN",0);
1855 gMC->Gsatt("ZEL0","SEEN",0);
1856 gMC->Gsatt("ZEL1","SEEN",0);
1857 gMC->Gsatt("ZEL2","SEEN",0);
1858 gMC->Gsatt("ZEV0","SEEN",0);
1859 gMC->Gsatt("ZEV1","SEEN",0);
1860 gMC->Gsatt("ZES0","SEEN",0);
1861 gMC->Gsatt("ZES1","SEEN",0);
1862
1863 //
1864 gMC->Gdopt("hide", "on");
1865 gMC->Gdopt("shad", "on");
1866 gMC->Gsatt("*", "fill", 7);
1867 gMC->SetClipBox(".");
1868 gMC->SetClipBox("*", 0, 100, -100, 100, 12000, 16000);
1869 gMC->DefaultRange();
1870 gMC->Gdraw("alic", 40, 30, 0, 488, 220, .07, .07);
f853b9aa 1871 gMC->Gdhead(1111, "Zero Degree Calorimeter Version 3");
8d433671 1872 gMC->Gdman(18, 4, "MAN");
1873}
1874
1875//_____________________________________________________________________________
1876void AliZDCv3::CreateMaterials()
1877{
1878 //
1879 // Create Materials for the Zero Degree Calorimeter
1880 //
1881
8d433671 1882 Float_t dens, ubuf[1], wmat[2], a[2], z[2];
f853b9aa 1883
8d433671 1884 // --- Store in UBUF r0 for nuclear radius calculation R=r0*A**1/3
1885
1886 // --- Tantalum -> ZN passive material
1887 ubuf[0] = 1.1;
1888 AliMaterial(1, "TANT", 180.95, 73., 16.65, .4, 11.9, ubuf, 1);
8d433671 1889
1890 // --- Brass (CuZn) -> ZP passive material
1891 dens = 8.48;
1892 a[0] = 63.546;
1893 a[1] = 65.39;
1894 z[0] = 29.;
1895 z[1] = 30.;
1896 wmat[0] = .63;
1897 wmat[1] = .37;
1898 AliMixture(2, "BRASS ", a, z, dens, 2, wmat);
1899
1900 // --- SiO2
1901 dens = 2.64;
1902 a[0] = 28.086;
1903 a[1] = 15.9994;
1904 z[0] = 14.;
1905 z[1] = 8.;
1906 wmat[0] = 1.;
1907 wmat[1] = 2.;
1908 AliMixture(3, "SIO2 ", a, z, dens, -2, wmat);
1909
1910 // --- Lead
1911 ubuf[0] = 1.12;
1912 AliMaterial(5, "LEAD", 207.19, 82., 11.35, .56, 18.5, ubuf, 1);
1913
1914 // --- Copper (energy loss taken into account)
1915 ubuf[0] = 1.10;
1916 AliMaterial(6, "COPP0", 63.54, 29., 8.96, 1.4, 0., ubuf, 1);
1917
8d433671 1918 // --- Iron (energy loss taken into account)
1919 ubuf[0] = 1.1;
1920 AliMaterial(7, "IRON0", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
1921
1922 // --- Iron (no energy loss)
1923 ubuf[0] = 1.1;
1924 AliMaterial(8, "IRON1", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
f853b9aa 1925 AliMaterial(13, "IRON2", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
1926
8d433671 1927 // ---------------------------------------------------------
1928 Float_t aResGas[3]={1.008,12.0107,15.9994};
1929 Float_t zResGas[3]={1.,6.,8.};
1930 Float_t wResGas[3]={0.28,0.28,0.44};
1931 Float_t dResGas = 3.2E-14;
1932
1933 // --- Vacuum (no magnetic field)
1934 AliMixture(10, "VOID", aResGas, zResGas, dResGas, 3, wResGas);
8d433671 1935
1936 // --- Vacuum (with magnetic field)
1937 AliMixture(11, "VOIM", aResGas, zResGas, dResGas, 3, wResGas);
8d433671 1938
1939 // --- Air (no magnetic field)
1940 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1941 Float_t zAir[4]={6.,7.,8.,18.};
1942 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1943 Float_t dAir = 1.20479E-3;
1944 //
1945 AliMixture(12, "Air $", aAir, zAir, dAir, 4, wAir);
8d433671 1946
1947 // --- Definition of tracking media:
1948
1949 // --- Tantalum = 1 ;
1950 // --- Brass = 2 ;
1951 // --- Fibers (SiO2) = 3 ;
1952 // --- Fibers (SiO2) = 4 ;
1953 // --- Lead = 5 ;
1954 // --- Copper (with energy loss)= 6 ;
1955 // --- Copper (with energy loss)= 13 ;
1956 // --- Iron (with energy loss) = 7 ;
1957 // --- Iron (without energy loss) = 8 ;
1958 // --- Vacuum (no field) = 10
1959 // --- Vacuum (with field) = 11
1960 // --- Air (no field) = 12
1961
1962 // ****************************************************
1963 // Tracking media parameters
1964 //
1965 Float_t epsil = 0.01; // Tracking precision,
1966 Float_t stmin = 0.01; // Min. value 4 max. step (cm)
1967 Float_t stemax = 1.; // Max. step permitted (cm)
1968 Float_t tmaxfd = 0.; // Maximum angle due to field (degrees)
1969 Float_t deemax = -1.; // Maximum fractional energy loss
1970 Float_t nofieldm = 0.; // Max. field value (no field)
1971 Float_t fieldm = 45.; // Max. field value (with field)
1972 Int_t isvol = 0; // ISVOL =0 -> not sensitive volume
1973 Int_t isvolActive = 1; // ISVOL =1 -> sensitive volume
1974 Int_t inofld = 0; // IFIELD=0 -> no magnetic field
1975 Int_t ifield =2; // IFIELD=2 -> magnetic field defined in AliMagFC.h
1976 // *****************************************************
1977
1978 AliMedium(1, "ZTANT", 1, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1979 AliMedium(2, "ZBRASS",2, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1980 AliMedium(3, "ZSIO2", 3, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1981 AliMedium(4, "ZQUAR", 3, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1982 AliMedium(5, "ZLEAD", 5, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1983 AliMedium(6, "ZCOPP", 6, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1984 AliMedium(7, "ZIRON", 7, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1985 AliMedium(8, "ZIRONN",8, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1986 AliMedium(10,"ZVOID",10, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1987 AliMedium(12,"ZAIR", 12, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
1988 //
1989 AliMedium(11,"ZVOIM",11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
f853b9aa 1990 AliMedium(13,"ZIRONE",13, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
1991
1992}
1993
1994//_____________________________________________________________________________
1995void AliZDCv3::AddAlignableVolumes() const
1996{
1997 //
1998 // Create entries for alignable volumes associating the symbolic volume
1999 // name with the corresponding volume path. Needs to be syncronized with
2000 // eventual changes in the geometry.
2001 //
63e6d88e 2002 TString volpath1 = "ALIC_1/ZDCC_1/ZNEU_1";
2003 TString volpath2 = "ALIC_1/ZDCC_1/ZPRO_1";
2004 TString volpath3 = "ALIC_1/ZDCA_1/ZNEU_2";
2005 TString volpath4 = "ALIC_1/ZDCA_1/ZPRO_2";
f853b9aa 2006
63e6d88e 2007 TString symname1="ZDC/NeutronZDC_C";
2008 TString symname2="ZDC/ProtonZDC_C";
2009 TString symname3="ZDC/NeutronZDC_A";
2010 TString symname4="ZDC/ProtonZDC_A";
f853b9aa 2011
2012 if(!gGeoManager->SetAlignableEntry(symname1.Data(),volpath1.Data()))
2013 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
2014
2015 if(!gGeoManager->SetAlignableEntry(symname2.Data(),volpath2.Data()))
2016 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
63e6d88e 2017
2018 if(!gGeoManager->SetAlignableEntry(symname3.Data(),volpath3.Data()))
2019 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
2020
2021 if(!gGeoManager->SetAlignableEntry(symname4.Data(),volpath4.Data()))
2022 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
2023
f853b9aa 2024}
2025
2026
2027//_____________________________________________________________________________
2028void AliZDCv3::Init()
2029{
2030 InitTables();
2031 Int_t *idtmed = fIdtmed->GetArray();
2032 Int_t i;
8d433671 2033 // Thresholds for showering in the ZDCs
2034 i = 1; //tantalum
2035 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2036 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2037 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2038 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2039 i = 2; //brass
2040 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2041 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2042 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2043 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2044 i = 5; //lead
2045 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2046 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2047 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2048 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2049
2050 // Avoid too detailed showering in TDI
f853b9aa 2051 i = 6; //copper
8d433671 2052 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2053 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2054 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2055 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
2056
8d433671 2057 // Avoid too detailed showering along the beam line
2058 i = 7; //iron with energy loss (ZIRON)
2059 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2060 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2061 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2062 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
2063
2064 // Avoid too detailed showering along the beam line
2065 i = 8; //iron with energy loss (ZIRONN)
2066 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2067 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2068 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2069 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
8d433671 2070 // Avoid too detailed showering along the beam line
f853b9aa 2071 i = 13; //iron with energy loss (ZIRONN)
2072 gMC->Gstpar(idtmed[i], "CUTGAM", 1.);
2073 gMC->Gstpar(idtmed[i], "CUTELE", 1.);
8d433671 2074 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
f853b9aa 2075 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
8d433671 2076
2077 // Avoid interaction in fibers (only energy loss allowed)
2078 i = 3; //fibers (ZSI02)
2079 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2080 gMC->Gstpar(idtmed[i], "MULS", 0.);
2081 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2082 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2083 gMC->Gstpar(idtmed[i], "LOSS", 1.);
2084 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2085 gMC->Gstpar(idtmed[i], "COMP", 0.);
2086 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2087 gMC->Gstpar(idtmed[i], "BREM", 0.);
2088 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2089 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2090 gMC->Gstpar(idtmed[i], "HADR", 0.);
2091 i = 4; //fibers (ZQUAR)
2092 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2093 gMC->Gstpar(idtmed[i], "MULS", 0.);
2094 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2095 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2096 gMC->Gstpar(idtmed[i], "LOSS", 1.);
2097 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2098 gMC->Gstpar(idtmed[i], "COMP", 0.);
2099 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2100 gMC->Gstpar(idtmed[i], "BREM", 0.);
2101 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2102 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2103 gMC->Gstpar(idtmed[i], "HADR", 0.);
2104
2105 // Avoid interaction in void
2106 i = 11; //void with field
2107 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2108 gMC->Gstpar(idtmed[i], "MULS", 0.);
2109 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2110 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2111 gMC->Gstpar(idtmed[i], "LOSS", 0.);
2112 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2113 gMC->Gstpar(idtmed[i], "COMP", 0.);
2114 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2115 gMC->Gstpar(idtmed[i], "BREM", 0.);
2116 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2117 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2118 gMC->Gstpar(idtmed[i], "HADR", 0.);
2119
2120 //
2121 fMedSensZN = idtmed[1]; // Sensitive volume: ZN passive material
2122 fMedSensZP = idtmed[2]; // Sensitive volume: ZP passive material
2123 fMedSensF1 = idtmed[3]; // Sensitive volume: fibres type 1
2124 fMedSensF2 = idtmed[4]; // Sensitive volume: fibres type 2
2125 fMedSensZEM = idtmed[5]; // Sensitive volume: ZEM passive material
f853b9aa 2126 fMedSensTDI = idtmed[6]; // Sensitive volume: TDI Cu shield
8d433671 2127 fMedSensPI = idtmed[7]; // Sensitive volume: beam pipes
2128 fMedSensGR = idtmed[12]; // Sensitive volume: air into the grooves
8d433671 2129}
2130
2131//_____________________________________________________________________________
2132void AliZDCv3::InitTables()
2133{
2134 //
2135 // Read light tables for Cerenkov light production parameterization
2136 //
2137
2138 Int_t k, j;
2139
2140 char *lightfName1,*lightfName2,*lightfName3,*lightfName4,
2141 *lightfName5,*lightfName6,*lightfName7,*lightfName8;
2142 FILE *fp1, *fp2, *fp3, *fp4, *fp5, *fp6, *fp7, *fp8;
2143
2144 // --- Reading light tables for ZN
f853b9aa 2145 lightfName1 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362207s");
8d433671 2146 if((fp1 = fopen(lightfName1,"r")) == NULL){
2147 printf("Cannot open file fp1 \n");
2148 return;
2149 }
f853b9aa 2150 lightfName2 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362208s");
8d433671 2151 if((fp2 = fopen(lightfName2,"r")) == NULL){
2152 printf("Cannot open file fp2 \n");
2153 return;
2154 }
f853b9aa 2155 lightfName3 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362209s");
8d433671 2156 if((fp3 = fopen(lightfName3,"r")) == NULL){
2157 printf("Cannot open file fp3 \n");
2158 return;
2159 }
f853b9aa 2160 lightfName4 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362210s");
8d433671 2161 if((fp4 = fopen(lightfName4,"r")) == NULL){
2162 printf("Cannot open file fp4 \n");
2163 return;
2164 }
2165
2166 for(k=0; k<fNalfan; k++){
2167 for(j=0; j<fNben; j++){
2168 fscanf(fp1,"%f",&fTablen[0][k][j]);
2169 fscanf(fp2,"%f",&fTablen[1][k][j]);
2170 fscanf(fp3,"%f",&fTablen[2][k][j]);
2171 fscanf(fp4,"%f",&fTablen[3][k][j]);
2172 }
2173 }
2174 fclose(fp1);
2175 fclose(fp2);
2176 fclose(fp3);
2177 fclose(fp4);
2178
2179 // --- Reading light tables for ZP and ZEM
f853b9aa 2180 lightfName5 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552207s");
8d433671 2181 if((fp5 = fopen(lightfName5,"r")) == NULL){
2182 printf("Cannot open file fp5 \n");
2183 return;
2184 }
f853b9aa 2185 lightfName6 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552208s");
8d433671 2186 if((fp6 = fopen(lightfName6,"r")) == NULL){
2187 printf("Cannot open file fp6 \n");
2188 return;
2189 }
f853b9aa 2190 lightfName7 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552209s");
8d433671 2191 if((fp7 = fopen(lightfName7,"r")) == NULL){
2192 printf("Cannot open file fp7 \n");
2193 return;
2194 }
f853b9aa 2195 lightfName8 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552210s");
8d433671 2196 if((fp8 = fopen(lightfName8,"r")) == NULL){
2197 printf("Cannot open file fp8 \n");
2198 return;
2199 }
2200
2201 for(k=0; k<fNalfap; k++){
2202 for(j=0; j<fNbep; j++){
2203 fscanf(fp5,"%f",&fTablep[0][k][j]);
2204 fscanf(fp6,"%f",&fTablep[1][k][j]);
2205 fscanf(fp7,"%f",&fTablep[2][k][j]);
2206 fscanf(fp8,"%f",&fTablep[3][k][j]);
2207 }
2208 }
2209 fclose(fp5);
2210 fclose(fp6);
2211 fclose(fp7);
2212 fclose(fp8);
2213}
2214//_____________________________________________________________________________
2215void AliZDCv3::StepManager()
2216{
2217 //
2218 // Routine called at every step in the Zero Degree Calorimeters
2219 //
2220
2221 Int_t j, vol[2], ibeta=0, ialfa, ibe, nphe;
2222 Float_t x[3], xdet[3], destep, hits[10], m, ekin, um[3], ud[3], be, out;
2223 //Float_t radius;
f853b9aa 2224 Float_t xalic[3], z, guiEff;
61424d1c 2225 // Parametrization for light guide uniformity
2226 // -> OBSOLETE!!!! For guide tilted @ 46 degrees
2227 //Float_t guiPar[4]={0.31,-0.0004,0.0197,0.7958};
2228 // NEW!!! Light guide tilted @ 51 degrees
2229 Float_t guiPar[4]={0.31,-0.0006305,0.01337,0.8895};
f853b9aa 2230 Double_t s[3], p[3];
8d433671 2231 const char *knamed;
f853b9aa 2232 //
8d433671 2233 for (j=0;j<10;j++) hits[j]=-999.;
f853b9aa 2234 //
8d433671 2235 // --- This part is for no shower developement in beam pipe and TDI
2236 // If particle interacts with beam pipe or TDI -> return
f853b9aa 2237 if((gMC->CurrentMedium() == fMedSensPI) || (gMC->CurrentMedium() == fMedSensTDI)){
8d433671 2238 // If option NoShower is set -> StopTrack
2239 if(fNoShower==1) {
f853b9aa 2240 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2241 if(gMC->CurrentMedium() == fMedSensPI) {
2242 knamed = gMC->CurrentVolName();
f853b9aa 2243 if(!strncmp(knamed,"YMQ",3)){
2244 if(s[2]<0) fpLostITC += 1;
2245 else fpLostITA += 1;
2246 }
2247 if(!strncmp(knamed,"YD1",3)){
2248 if(s[2]<0) fpLostD1C += 1;
2249 else fpLostD1A += 1;
2250 }
8d433671 2251 }
f853b9aa 2252 else if(gMC->CurrentMedium() == fMedSensTDI){
8d433671 2253 knamed = gMC->CurrentVolName();
f853b9aa 2254 if(!strncmp(knamed,"MD1",3)){
2255 if(s[2]<0) fpLostD1C += 1;
2256 else fpLostD1A += 1;
2257 }
2258 if(!strncmp(knamed,"QTD",3)) fpLostTDI += 1;
8d433671 2259 }
f853b9aa 2260 printf("\n\t ---------- Side C ----------\n");
2261 printf("\n # of spectators lost in IT = %d\n",fpLostITC);
2262 printf("\n # of spectators lost in D1 = %d\n",fpLostD1C);
2263 printf("\n\t ---------- Side A ----------\n");
2264 printf("\n # of spectators lost in IT = %d\n",fpLostITA);
2265 printf("\n # of spectators lost in D1 = %d\n",fpLostD1A);
8d433671 2266 printf("\n # of spectators lost in TDI = %d\n\n",fpLostTDI);
2267 gMC->StopTrack();
2268 }
2269 return;
2270 }
2271
2272
2273 if((gMC->CurrentMedium() == fMedSensZN) || (gMC->CurrentMedium() == fMedSensZP) ||
2274 (gMC->CurrentMedium() == fMedSensGR) || (gMC->CurrentMedium() == fMedSensF1) ||
2275 (gMC->CurrentMedium() == fMedSensF2) || (gMC->CurrentMedium() == fMedSensZEM)){
2276
2277
2278 //Particle coordinates
f853b9aa 2279 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2280 for(j=0; j<=2; j++) x[j] = s[j];
2281 hits[0] = x[0];
2282 hits[1] = x[1];
2283 hits[2] = x[2];
2284
2285 // Determine in which ZDC the particle is
2286 knamed = gMC->CurrentVolName();
2287 if(!strncmp(knamed,"ZN",2)){
921be7cf 2288 if(x[2]<0.) vol[0]=1; // ZNC (dimuon side)
2289 else if(x[2]>0.) vol[0]=4; //ZNA
8d433671 2290 }
2291 else if(!strncmp(knamed,"ZP",2)){
921be7cf 2292 if(x[2]<0.) vol[0]=2; //ZPC (dimuon side)
2293 else if(x[2]>0.) vol[0]=5; //ZPA
8d433671 2294 }
921be7cf 2295 else if(!strncmp(knamed,"ZE",2)) vol[0]=3; //ZEM
8d433671 2296
2297 // Determine in which quadrant the particle is
f853b9aa 2298 if(vol[0]==1){ //Quadrant in ZNC
61424d1c 2299 // Calculating particle coordinates inside ZNC
f853b9aa 2300 xdet[0] = x[0]-fPosZNC[0];
2301 xdet[1] = x[1]-fPosZNC[1];
8d433671 2302 // Calculating quadrant in ZN
2303 if(xdet[0]<=0.){
f853b9aa 2304 if(xdet[1]<=0.) vol[1]=1;
2305 else vol[1]=3;
8d433671 2306 }
2307 else if(xdet[0]>0.){
f853b9aa 2308 if(xdet[1]<=0.) vol[1]=2;
2309 else vol[1]=4;
8d433671 2310 }
2311 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
2312 printf("\n ZDC StepManager->ERROR in ZN!!! vol[1] = %d, xdet[0] = %f,"
2313 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2314 }
2315
f853b9aa 2316 else if(vol[0]==2){ //Quadrant in ZPC
61424d1c 2317 // Calculating particle coordinates inside ZPC
f853b9aa 2318 xdet[0] = x[0]-fPosZPA[0];
2319 xdet[1] = x[1]-fPosZPA[1];
8d433671 2320 if(xdet[0]>=fDimZP[0]) xdet[0]=fDimZP[0]-0.01;
2321 if(xdet[0]<=-fDimZP[0]) xdet[0]=-fDimZP[0]+0.01;
2322 // Calculating tower in ZP
2323 Float_t xqZP = xdet[0]/(fDimZP[0]/2.);
2324 for(int i=1; i<=4; i++){
2325 if(xqZP>=(i-3) && xqZP<(i-2)){
2326 vol[1] = i;
2327 break;
2328 }
2329 }
2330 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
2331 printf(" ZDC StepManager->ERROR in ZP!!! vol[1] = %d, xdet[0] = %f,"
2332 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2333 }
f853b9aa 2334 //
8d433671 2335 // Quadrant in ZEM: vol[1] = 1 -> particle in 1st ZEM (placed at x = 8.5 cm)
2336 // vol[1] = 2 -> particle in 2nd ZEM (placed at x = -8.5 cm)
2337 else if(vol[0] == 3){
2338 if(x[0]>0.){
2339 vol[1] = 1;
2340 // Particle x-coordinate inside ZEM1
2341 xdet[0] = x[0]-fPosZEM[0];
2342 }
2343 else{
2344 vol[1] = 2;
2345 // Particle x-coordinate inside ZEM2
2346 xdet[0] = x[0]+fPosZEM[0];
2347 }
2348 xdet[1] = x[1]-fPosZEM[1];
2349 }
f853b9aa 2350 //
2351 else if(vol[0]==4){ //Quadrant in ZNA
2352 // Calculating particle coordinates inside ZNA
2353 xdet[0] = x[0]-fPosZNA[0];
2354 xdet[1] = x[1]-fPosZNA[1];
2355 // Calculating quadrant in ZNA
2356 if(xdet[0]>=0.){
2357 if(xdet[1]<=0.) vol[1]=1;
2358 else vol[1]=3;
8d433671 2359 }
f853b9aa 2360 else if(xdet[0]<0.){
2361 if(xdet[1]<=0.) vol[1]=2;
2362 else vol[1]=4;
8d433671 2363 }
2364 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
f853b9aa 2365 printf("\n ZDC StepManager->ERROR in ZNA!!! vol[1] = %d, xdet[0] = %f,"
8d433671 2366 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2367 }
f853b9aa 2368 //
2369 else if(vol[0]==5){ //Quadrant in ZPA
2370 // Calculating particle coordinates inside ZPA
2371 xdet[0] = x[0]-fPosZPC[0];
2372 xdet[1] = x[1]-fPosZPC[1];
8d433671 2373 if(xdet[0]>=fDimZP[0]) xdet[0]=fDimZP[0]-0.01;
2374 if(xdet[0]<=-fDimZP[0]) xdet[0]=-fDimZP[0]+0.01;
2375 // Calculating tower in ZP
f853b9aa 2376 Float_t xqZP = -xdet[0]/(fDimZP[0]/2.);
8d433671 2377 for(int i=1; i<=4; i++){
2378 if(xqZP>=(i-3) && xqZP<(i-2)){
2379 vol[1] = i;
2380 break;
2381 }
2382 }
2383 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
f853b9aa 2384 printf(" ZDC StepManager->ERROR in ZPA!!! vol[1] = %d, xdet[0] = %f,"
8d433671 2385 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2386 }
2387
2388
2389 // Store impact point and kinetic energy of the ENTERING particle
2390
2391 if(gMC->IsTrackEntering()){
2392 //Particle energy
f853b9aa 2393 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2394 hits[3] = p[3];
2395 // Impact point on ZDC
2396 hits[4] = xdet[0];
2397 hits[5] = xdet[1];
2398 hits[6] = 0;
2399 hits[7] = 0;
2400 hits[8] = 0;
2401 hits[9] = 0;
2402
2403 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2404
2405 if(fNoShower==1){
921be7cf 2406 //printf("\t VolName %s -> det %d quad %d - x = %f, y = %f, z = %f\n",
2407 //knamed, vol[0], vol[1], x[0], x[1], x[2]);
2408 if(vol[0]==1){
2409 fnDetectedC += 1;
2410 printf("\n # of detected neutrons in ZNC = %d\n\n",fnDetectedC);
2411 }
2412 else if(vol[0]==2){
2413 fpDetectedC += 1;
2414 printf("\n # of detected protons in ZPC = %d\n\n",fpDetectedC);
2415 }
2416 else if(vol[0]==4){
2417 fnDetectedA += 1;
2418 printf("\n # of detected neutrons in ZNA = %d\n\n",fnDetectedA);
2419 }
2420 else if(vol[0]==5){
2421 fpDetectedA += 1;
2422 printf("\n # of detected protons in ZPA = %d\n\n",fpDetectedA);
2423 }
8d433671 2424 gMC->StopTrack();
8d433671 2425 return;
2426 }
2427 }
2428
2429 // Charged particles -> Energy loss
2430 if((destep=gMC->Edep())){
2431 if(gMC->IsTrackStop()){
f853b9aa 2432 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2433 m = gMC->TrackMass();
2434 ekin = p[3]-m;
2435 hits[9] = ekin;
2436 hits[7] = 0.;
2437 hits[8] = 0.;
2438 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2439 }
2440 else{
2441 hits[9] = destep;
2442 hits[7] = 0.;
2443 hits[8] = 0.;
2444 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2445 }
2446 }
2447 }
2448
2449
2450 // *** Light production in fibres
2451 if((gMC->CurrentMedium() == fMedSensF1) || (gMC->CurrentMedium() == fMedSensF2)){
2452
2453 //Select charged particles
2454 if((destep=gMC->Edep())){
2455
2456 // Particle velocity
2457 Float_t beta = 0.;
f853b9aa 2458 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2459 Float_t ptot=TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
2460 if(p[3] > 0.00001) beta = ptot/p[3];
2461 else return;
2462 if(beta<0.67)return;
2463 else if((beta>=0.67) && (beta<=0.75)) ibeta = 0;
2464 else if((beta>0.75) && (beta<=0.85)) ibeta = 1;
2465 else if((beta>0.85) && (beta<=0.95)) ibeta = 2;
2466 else if(beta>0.95) ibeta = 3;
2467
2468 // Angle between particle trajectory and fibre axis
2469 // 1 -> Momentum directions
2470 um[0] = p[0]/ptot;
2471 um[1] = p[1]/ptot;
2472 um[2] = p[2]/ptot;
2473 gMC->Gmtod(um,ud,2);
2474 // 2 -> Angle < limit angle
2475 Double_t alfar = TMath::ACos(ud[2]);
2476 Double_t alfa = alfar*kRaddeg;
2477 if(alfa>=110.) return;
2478 //
2479 ialfa = Int_t(1.+alfa/2.);
2480
2481 // Distance between particle trajectory and fibre axis
f853b9aa 2482 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2483 for(j=0; j<=2; j++){
2484 x[j] = s[j];
2485 }
2486 gMC->Gmtod(x,xdet,1);
2487 if(TMath::Abs(ud[0])>0.00001){
2488 Float_t dcoeff = ud[1]/ud[0];
2489 be = TMath::Abs((xdet[1]-dcoeff*xdet[0])/TMath::Sqrt(dcoeff*dcoeff+1.));
2490 }
2491 else{
2492 be = TMath::Abs(ud[0]);
2493 }
2494
2495 ibe = Int_t(be*1000.+1);
2496 //if((vol[0]==1)) radius = fFibZN[1];
2497 //else if((vol[0]==2)) radius = fFibZP[1];
2498
2499 //Looking into the light tables
2500 Float_t charge = gMC->TrackCharge();
2501
80e87581 2502 if(vol[0]==1 || vol[0]==4) { // (1) ZN fibres
8d433671 2503 if(ibe>fNben) ibe=fNben;
2504 out = charge*charge*fTablen[ibeta][ialfa][ibe];
2505 nphe = gRandom->Poisson(out);
2506 // Ch. debug
2507 //if(ibeta==3) printf("\t %f \t %f \t %f\n",alfa, be, out);
2508 //printf("\t ibeta = %d, ialfa = %d, ibe = %d -> nphe = %d\n\n",ibeta,ialfa,ibe,nphe);
2509 if(gMC->CurrentMedium() == fMedSensF1){
2510 hits[7] = nphe; //fLightPMQ
2511 hits[8] = 0;
2512 hits[9] = 0;
2513 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2514 }
2515 else{
2516 hits[7] = 0;
2517 hits[8] = nphe; //fLightPMC
2518 hits[9] = 0;
2519 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2520 }
2521 }
80e87581 2522 else if(vol[0]==2 || vol[0]==5) {// (2) ZP fibres
8d433671 2523 if(ibe>fNbep) ibe=fNbep;
2524 out = charge*charge*fTablep[ibeta][ialfa][ibe];
2525 nphe = gRandom->Poisson(out);
2526 if(gMC->CurrentMedium() == fMedSensF1){
2527 hits[7] = nphe; //fLightPMQ
2528 hits[8] = 0;
2529 hits[9] = 0;
2530 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2531 }
2532 else{
2533 hits[7] = 0;
2534 hits[8] = nphe; //fLightPMC
2535 hits[9] = 0;
2536 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2537 }
2538 }
2539 else if((vol[0]==3)) { // (3) ZEM fibres
2540 if(ibe>fNbep) ibe=fNbep;
2541 out = charge*charge*fTablep[ibeta][ialfa][ibe];
f853b9aa 2542 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2543 for(j=0; j<=2; j++){
2544 xalic[j] = s[j];
2545 }
2546 // z-coordinate from ZEM front face
2547 // NB-> fPosZEM[2]+fZEMLength = -1000.+2*10.3 = 979.69 cm
2548 z = -xalic[2]+fPosZEM[2]+2*fZEMLength-xalic[1];
2549// z = xalic[2]-fPosZEM[2]-fZEMLength-xalic[1]*(TMath::Tan(45.*kDegrad));
2550// printf("\n fPosZEM[2]+2*fZEMLength = %f", fPosZEM[2]+2*fZEMLength);
2551 guiEff = guiPar[0]*(guiPar[1]*z*z+guiPar[2]*z+guiPar[3]);
2552 out = out*guiEff;
2553 nphe = gRandom->Poisson(out);
2554// printf(" out*guiEff = %f nphe = %d", out, nphe);
2555 if(vol[1] == 1){
2556 hits[7] = 0;
2557 hits[8] = nphe; //fLightPMC (ZEM1)
2558 hits[9] = 0;
2559 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2560 }
2561 else{
2562 hits[7] = nphe; //fLightPMQ (ZEM2)
2563 hits[8] = 0;
2564 hits[9] = 0;
2565 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2566 }
2567 }
2568 }
2569 }
2570}