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