Hole in shaft for ZDC_A
[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)
6ac9cca5 514 zd2 = 1910.22;// zd2 initial value
8d433671 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.;
6ac9cca5 531 tubpar[2] = (386.5 - 0.22)/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.;
8e622ffc 876 tubpar[2] = (20.0-2.41)/2.;
cd807e71 877 gMC->Gsvolu("QA15", "TUBE", idtmed[7], tubpar, 3);
8e622ffc 878 gMC->Gspos("QA15", 1, "ZDCA", 1.10446, 0., tubpar[2]+2.41/2.+zd2, irotpipe2, "ONLY");
8d433671 879 // Ch.debug
8e622ffc 880 //printf(" QA15 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+2.41+zd2);
8d433671 881
8e622ffc 882 zd2 += 2.*tubpar[2]+2.41;
8d433671 883
f853b9aa 884 // Vacuum chamber containing TDI
1243078f 885 tubpar[0] = 0.;
886 tubpar[1] = 54.6/2.;
887 tubpar[2] = 540.0/2.;
888 gMC->Gsvolu("Q13TM", "TUBE", idtmed[10], tubpar, 3);
889 gMC->Gspos("Q13TM", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 890 tubpar[0] = 54.0/2.;
891 tubpar[1] = 54.6/2.;
892 tubpar[2] = 540.0/2.;
cd807e71 893 gMC->Gsvolu("Q13T", "TUBE", idtmed[7], tubpar, 3);
1243078f 894 gMC->Gspos("Q13T", 1, "Q13TM", 0., 0., 0., 0, "ONLY");
8d433671 895 // Ch.debug
f853b9aa 896 //printf(" Q13T TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 897
898 zd2 += 2.*tubpar[2];
899
f853b9aa 900 //---------------- INSERT TDI INSIDE Q13T -----------------------------------
8d433671 901 boxpar[0] = 11.0/2.;
902 boxpar[1] = 9.0/2.;
903 boxpar[2] = 540.0/2.;
cd807e71 904 gMC->Gsvolu("QTD1", "BOX ", idtmed[7], boxpar, 3);
1243078f 905 gMC->Gspos("QTD1", 1, "Q13TM", -3.8, 10.5, 0., 0, "ONLY");
8d433671 906 boxpar[0] = 11.0/2.;
907 boxpar[1] = 9.0/2.;
908 boxpar[2] = 540.0/2.;
cd807e71 909 gMC->Gsvolu("QTD2", "BOX ", idtmed[7], boxpar, 3);
1243078f 910 gMC->Gspos("QTD2", 1, "Q13TM", -3.8, -10.5, 0., 0, "ONLY");
8d433671 911 boxpar[0] = 5.1/2.;
912 boxpar[1] = 0.2/2.;
913 boxpar[2] = 540.0/2.;
cd807e71 914 gMC->Gsvolu("QTD3", "BOX ", idtmed[7], boxpar, 3);
1243078f 915 gMC->Gspos("QTD3", 1, "Q13TM", -3.8+5.5+boxpar[0], 6.1, 0., 0, "ONLY");
916 gMC->Gspos("QTD3", 2, "Q13TM", -3.8+5.5+boxpar[0], -6.1, 0., 0, "ONLY");
917 gMC->Gspos("QTD3", 3, "Q13TM", -3.8-5.5-boxpar[0], 6.1, 0., 0, "ONLY");
918 gMC->Gspos("QTD3", 4, "Q13TM", -3.8-5.5-boxpar[0], -6.1, 0., 0, "ONLY");
f853b9aa 919 //
8d433671 920 tubspar[0] = 12.0/2.;
921 tubspar[1] = 12.4/2.;
922 tubspar[2] = 540.0/2.;
923 tubspar[3] = 90.;
924 tubspar[4] = 270.;
cd807e71 925 gMC->Gsvolu("QTD4", "TUBS", idtmed[7], tubspar, 5);
1243078f 926 gMC->Gspos("QTD4", 1, "Q13TM", -3.8-10.6, 0., 0., 0, "ONLY");
8d433671 927 tubspar[0] = 12.0/2.;
928 tubspar[1] = 12.4/2.;
929 tubspar[2] = 540.0/2.;
930 tubspar[3] = -90.;
931 tubspar[4] = 90.;
cd807e71 932 gMC->Gsvolu("QTD5", "TUBS", idtmed[7], tubspar, 5);
1243078f 933 gMC->Gspos("QTD5", 1, "Q13TM", -3.8+10.6, 0., 0., 0, "ONLY");
8d433671 934 //---------------- END DEFINING TDI INSIDE Q13T -------------------------------
935
936 // skewed transition piece (ID=212 mm) (after TDI)
937 tubpar[0] = 21.2/2.;
938 tubpar[1] = 21.8/2.;
8e622ffc 939 tubpar[2] = (20.0-2.41)/2.;
cd807e71 940 gMC->Gsvolu("QA16", "TUBE", idtmed[7], tubpar, 3);
8e622ffc 941 gMC->Gspos("QA16", 1, "ZDCA", 1.10446+2.2, 0., tubpar[2]+2.41/2.+zd2, irotpipe2, "ONLY");
8d433671 942 // Ch.debug
8e622ffc 943 //printf(" QA16 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+2.41+zd2);
8d433671 944
8e622ffc 945 zd2 += 2.*tubpar[2]+2.41;
8d433671 946
947 // bellow (ID=212 mm) (VMBGA)
948 tubpar[0] = 21.2/2.;
949 tubpar[1] = 21.8/2.;
950 tubpar[2] = 40.0/2.;
cd807e71 951 gMC->Gsvolu("QA17", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 952 gMC->Gspos("QA17", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 953 // Ch.debug
f853b9aa 954 //printf(" QA17 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 955
956 zd2 += 2.*tubpar[2];
957
958 // TDI valve assembly (ID=212 mm)
959 tubpar[0] = 21.2/2.;
960 tubpar[1] = 21.8/2.;
961 tubpar[2] = 30.0/2.;
cd807e71 962 gMC->Gsvolu("QA18", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 963 gMC->Gspos("QA18", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 964 // Ch.debug
f853b9aa 965 //printf(" QA18 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 966
967 zd2 += 2.*tubpar[2];
968
969 // bellow (ID=212 mm) (VMBGA)
970 tubpar[0] = 21.2/2.;
971 tubpar[1] = 21.8/2.;
972 tubpar[2] = 40.0/2.;
cd807e71 973 gMC->Gsvolu("QA19", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 974 gMC->Gspos("QA19", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 975 // Ch.debug
f853b9aa 976 //printf(" QA19 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 977
978 zd2 += 2.*tubpar[2];
979
980 // vacuum chamber (ID=212 mm) (BTVST)
981 tubpar[0] = 21.2/2.;
982 tubpar[1] = 21.8/2.;
983 tubpar[2] = 50.0/2.;
cd807e71 984 gMC->Gsvolu("QA20", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 985 gMC->Gspos("QA20", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 986 // Ch.debug
f853b9aa 987 //printf(" QA20 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 988
989 zd2 += 2.*tubpar[2];
990
991 // bellow (ID=212 mm) (VMBGA) repeated 3 times
992 tubpar[0] = 21.2/2.;
993 tubpar[1] = 21.8/2.;
994 tubpar[2] = 120.0/2.;
cd807e71 995 gMC->Gsvolu("QA21", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 996 gMC->Gspos("QA21", 1, "ZDCA", 4.4, 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 997 // Ch.debug
f853b9aa 998 //printf(" QA21 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 999
1000 zd2 += 2.*tubpar[2];
1001
1002 // skewed transition cone from ID=212 mm to ID=797 mm SS for the moment
f2e00220 1003 conpar[0] = (110.0-0.44-1.63)/2.;
8d433671 1004 conpar[1] = 21.2/2.;
1005 conpar[2] = 21.8/2.;
1006 conpar[3] = 79.7/2.;
1007 conpar[4] = 81.3/2.;
cd807e71 1008 gMC->Gsvolu("QA22", "CONE", idtmed[7], conpar, 5);
f2e00220 1009 gMC->Gspos("QA22", 1, "ZDCA", 4.4-2.201, 0., conpar[0]+0.44+zd2, irotpipe1, "ONLY");
1010 //printf(" QA22 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+0.44+1.63+zd2);
8d433671 1011
f2e00220 1012 zd2 += 2.*conpar[0]+0.44+1.63;
8d433671 1013
1014 // beam pipe (ID=797 mm) SS
1015 tubpar[0] = 79.7/2.;
1016 tubpar[1] = 81.3/2.;
1017 tubpar[2] = 2393.05/2.;
cd807e71 1018 gMC->Gsvolu("QA23", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1019 gMC->Gspos("QA23", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1020 // Ch.debug
9c374a22 1021 //printf(" QA23 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1022
1023 zd2 += 2.*tubpar[2];
1024
1025 // Transition from ID=797 mm to ID=196 mm SS for the moment:
1026 //
1027 // in order to simulate the thin window opened in the transition cone
1028 // we divide the transition cone in three cones:
1029 // the first 8 mm thick
1030 // the second 3 mm thick
1031 // the third 8 mm thick
f853b9aa 1032 //
1033 // First section
8d433671 1034 conpar[0] = 9.09/2.; // 15 degree
1035 conpar[1] = 79.7/2.;
1036 conpar[2] = 81.3/2.; // thickness 8 mm
1037 conpar[3] = 74.82868/2.;
1038 conpar[4] = 76.42868/2.; // thickness 8 mm
cd807e71 1039 gMC->Gsvolu("Q24A", "CONE", idtmed[7], conpar, 5);
f853b9aa 1040 gMC->Gspos("Q24A", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1041 //printf(" Q24A CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1042
1043 zd2 += 2.*conpar[0];
1044
f853b9aa 1045 // Second section
8d433671 1046 conpar[0] = 96.2/2.; // 15 degree
1047 conpar[1] = 74.82868/2.;
1048 conpar[2] = 75.42868/2.; // thickness 3 mm
1049 conpar[3] = 23.19588/2.;
1050 conpar[4] = 23.79588/2.; // thickness 3 mm
cd807e71 1051 gMC->Gsvolu("QA25", "CONE", idtmed[7], conpar, 5);
f853b9aa 1052 gMC->Gspos("QA25", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1053 //printf(" QA25 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1054
1055 zd2 += 2.*conpar[0];
1056
f853b9aa 1057 // Third section
8d433671 1058 conpar[0] = 6.71/2.; // 15 degree
1059 conpar[1] = 23.19588/2.;
1060 conpar[2] = 24.79588/2.;// thickness 8 mm
1061 conpar[3] = 19.6/2.;
1062 conpar[4] = 21.2/2.;// thickness 8 mm
cd807e71 1063 gMC->Gsvolu("QA26", "CONE", idtmed[7], conpar, 5);
f853b9aa 1064 gMC->Gspos("QA26", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
1065 //printf(" QA26 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1066
1067 zd2 += 2.*conpar[0];
1068
1069 // beam pipe (ID=196 mm)
1070 tubpar[0] = 19.6/2.;
1071 tubpar[1] = 21.2/2.;
1072 tubpar[2] = 9.55/2.;
cd807e71 1073 gMC->Gsvolu("QA27", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1074 gMC->Gspos("QA27", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1075 // Ch.debug
f853b9aa 1076 //printf(" QA27 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1077
1078 zd2 += 2.*tubpar[2];
1079
1080 // Flange (ID=196 mm)
1081 tubpar[0] = 19.6/2.;
1082 tubpar[1] = 25.3/2.;
1083 tubpar[2] = 4.9/2.;
cd807e71 1084 gMC->Gsvolu("QF01", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1085 gMC->Gspos("QF01", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1086 // Ch.debug
f853b9aa 1087 //printf(" QF01 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1088
1089 zd2 += 2.*tubpar[2];
1090
1091 // Special Warm Module (made by 5 volumes)
8d433671 1092 tubpar[0] = 20.2/2.;
1093 tubpar[1] = 20.6/2.;
1094 tubpar[2] = 2.15/2.;
cd807e71 1095 gMC->Gsvolu("QA28", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1096 gMC->Gspos("QA28", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1097 // Ch.debug
f853b9aa 1098 //printf(" QA28 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1099
1100 zd2 += 2.*tubpar[2];
1101
1102 conpar[0] = 6.9/2.;
1103 conpar[1] = 20.2/2.;
1104 conpar[2] = 20.6/2.;
1105 conpar[3] = 23.9/2.;
1106 conpar[4] = 24.3/2.;
cd807e71 1107 gMC->Gsvolu("QA29", "CONE", idtmed[7], conpar, 5);
f853b9aa 1108 gMC->Gspos("QA29", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1109 // Ch.debug
f853b9aa 1110 //printf(" QA29 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1111
1112 zd2 += 2.*conpar[0];
1113
1114 tubpar[0] = 23.9/2.;
1115 tubpar[1] = 25.5/2.;
1116 tubpar[2] = 17.0/2.;
cd807e71 1117 gMC->Gsvolu("QA30", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1118 gMC->Gspos("QA30", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1119 // Ch.debug
f853b9aa 1120 //printf(" QA30 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1121
1122 zd2 += 2.*tubpar[2];
1123
1124 conpar[0] = 6.9/2.;
1125 conpar[1] = 23.9/2.;
1126 conpar[2] = 24.3/2.;
1127 conpar[3] = 20.2/2.;
1128 conpar[4] = 20.6/2.;
cd807e71 1129 gMC->Gsvolu("QA31", "CONE", idtmed[7], conpar, 5);
f853b9aa 1130 gMC->Gspos("QA31", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1131 // Ch.debug
f853b9aa 1132 //printf(" QA31 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1133
1134 zd2 += 2.*conpar[0];
1135
1136 tubpar[0] = 20.2/2.;
1137 tubpar[1] = 20.6/2.;
1138 tubpar[2] = 2.15/2.;
cd807e71 1139 gMC->Gsvolu("QA32", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1140 gMC->Gspos("QA32", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1141 // Ch.debug
f853b9aa 1142 //printf(" QA32 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1143
1144 zd2 += 2.*tubpar[2];
1145
1146 // Flange (ID=196 mm)
1147 tubpar[0] = 19.6/2.;
1148 tubpar[1] = 25.3/2.;
1149 tubpar[2] = 4.9/2.;
cd807e71 1150 gMC->Gsvolu("QF02", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1151 gMC->Gspos("QF02", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1152 // Ch.debug
f853b9aa 1153 //printf(" QF02 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1154
1155 zd2 += 2.*tubpar[2];
1156
1157 // simulation of the trousers (VCTYB)
addda976 1158 // (last design -mail 3/6/05)
8d433671 1159 // pipe: a tube (ID = 196. OD = 200.)
1160 tubpar[0] = 19.6/2.;
1161 tubpar[1] = 20.0/2.;
1162 tubpar[2] = 3.9/2.;
cd807e71 1163 gMC->Gsvolu("QA33", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1164 gMC->Gspos("QA33", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1165 // Ch.debug
f853b9aa 1166 //printf(" QA33 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1167
1168 zd2 += 2.*tubpar[2];
1169
1170 // transition cone from ID=196. to ID=216.6
1171 conpar[0] = 32.55/2.;
1172 conpar[1] = 19.6/2.;
1173 conpar[2] = 20.0/2.;
1174 conpar[3] = 21.66/2.;
1175 conpar[4] = 22.06/2.;
cd807e71 1176 gMC->Gsvolu("QA34", "CONE", idtmed[7], conpar, 5);
f853b9aa 1177 gMC->Gspos("QA34", 1, "ZDCA", 0., 0., conpar[0]+zd2, 0, "ONLY");
8d433671 1178 // Ch.debug
f853b9aa 1179 //printf(" QA34 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+zd2);
8d433671 1180
1181 zd2 += 2.*conpar[0];
1182
1183 // Flange: first support for the trousers
1184 boxpar[0] = 25.3/2.;
1185 boxpar[1] = 25.3/2.;
1186 boxpar[2] = 2.5/2.;
cd807e71 1187 gMC->Gsvolu("QF03", "BOX ", idtmed[7], boxpar, 3);
8d433671 1188 tubpar[0] = 0.0/2.;
1189 tubpar[1] = 22.06/2.;
1190 tubpar[2] = 2.5/2.;
1191 gMC->Gsvolu("QFV1", "TUBE", idtmed[10], tubpar, 3);
1192 gMC->Gspos("QFV1", 1, "QF03", 0., 0., 0., 0, "MANY");
f853b9aa 1193 gMC->Gspos("QF03", 1, "ZDCA", 0., 0., 14.3+zd2, 0, "MANY");
8d433671 1194
1195 // tube
1196 tubpar[0] = 21.66/2.;
1197 tubpar[1] = 22.06/2.;
1198 tubpar[2] = 28.6/2.;
cd807e71 1199 gMC->Gsvolu("QA35", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1200 gMC->Gspos("QA35", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1201 // Ch.debug
f853b9aa 1202 //printf("\n QA35 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1203
1204 zd2 += 2.*tubpar[2];
1205
1206 // legs of the trousers
f2e00220 1207 conpar[0] = (90.1-0.95-0.26)/2.;
8d433671 1208 conpar[1] = 0.0/2.;
1209 conpar[2] = 21.6/2.;
1210 conpar[3] = 0.0/2.;
1211 conpar[4] = 5.8/2.;
cd807e71 1212 gMC->Gsvolu("QAL1", "CONE", idtmed[7], conpar, 5);
1213 gMC->Gsvolu("QAL2", "CONE", idtmed[7], conpar, 5);
f2e00220 1214 gMC->Gspos("QAL1", 1, "ZDCA", -3.45-0.52, 0., conpar[0]+0.95+zd2, irotpipe5, "MANY");
1215 gMC->Gspos("QAL2", 1, "ZDCA", 3.45+0.52, 0., conpar[0]+0.95+zd2, irotpipe6, "MANY");
8d433671 1216
f2e00220 1217 conpar[0] = (90.1-0.95-0.26)/2.;
8d433671 1218 conpar[1] = 0.0/2.;
1219 conpar[2] = 21.2/2.;
1220 conpar[3] = 0.0/2.;
1221 conpar[4] = 5.4/2.;
1222 gMC->Gsvolu("QAL3", "CONE", idtmed[10], conpar, 5);
1223 gMC->Gsvolu("QAL4", "CONE", idtmed[10], conpar, 5);
f2e00220 1224 gMC->Gspos("QAL3", 1, "ZDCA", -3.45-0.52, 0., conpar[0]+0.95+zd2, irotpipe5, "ONLY");
1225 gMC->Gspos("QAL4", 1, "ZDCA", 3.45+0.52, 0., conpar[0]+0.95+zd2, irotpipe6, "ONLY");
8d433671 1226
8d433671 1227 zd2 += 90.1;
1228
f853b9aa 1229 // second section : 2 tubes (ID = 54. OD = 58.)
8d433671 1230 tubpar[0] = 5.4/2.;
1231 tubpar[1] = 5.8/2.;
1232 tubpar[2] = 40.0/2.;
cd807e71 1233 gMC->Gsvolu("QA36", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1234 gMC->Gspos("QA36", 1, "ZDCA", -15.8/2., 0., tubpar[2]+zd2, 0, "ONLY");
1235 gMC->Gspos("QA36", 2, "ZDCA", 15.8/2., 0., tubpar[2]+zd2, 0, "ONLY");
8d433671 1236 // Ch.debug
f853b9aa 1237 //printf(" QA36 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1238
1239 zd2 += 2.*tubpar[2];
1240
1241 // transition x2zdc to recombination chamber : skewed cone
8e622ffc 1242 conpar[0] = (10.-0.2)/2.;
8d433671 1243 conpar[1] = 5.4/2.;
1244 conpar[2] = 5.8/2.;
1245 conpar[3] = 6.3/2.;
1246 conpar[4] = 7.0/2.;
cd807e71 1247 gMC->Gsvolu("QA37", "CONE", idtmed[7], conpar, 5);
8e622ffc 1248 gMC->Gspos("QA37", 1, "ZDCA", -7.9-0.175, 0., conpar[0]+0.1+zd2, irotpipe7, "ONLY");
1249 gMC->Gspos("QA37", 2, "ZDCA", 7.9+0.175, 0., conpar[0]+0.1+zd2, irotpipe8, "ONLY");
1250 //printf(" QA37 CONE from z = %f to z= %f\n",zd2,2*conpar[0]+0.2+zd2);
8d433671 1251
8e622ffc 1252 zd2 += 2.*conpar[0]+0.2;
8d433671 1253
1254 // Flange: second support for the trousers
8d433671 1255 boxpar[0] = 25.9/2.;
1256 boxpar[1] = 9.4/2.;
1257 boxpar[2] = 1./2.;
cd807e71 1258 gMC->Gsvolu("QF04", "BOX ", idtmed[7], boxpar, 3);
8d433671 1259 boxpar[0] = 16.5/2.;
1260 boxpar[1] = 7./2.;
1261 boxpar[2] = 1./2.;
1262 gMC->Gsvolu("QFV2", "BOX ", idtmed[10], boxpar, 3);
1263 gMC->Gspos("QFV2", 1, "QF04", 0., 0., 0., 0, "MANY");
1264 tubspar[0] = 0.0/2.;
1265 tubspar[1] = 7./2.;
1266 tubspar[2] = 1./2.;
1267 tubspar[3] = 90.;
1268 tubspar[4] = 270.;
1269 gMC->Gsvolu("QFV3", "TUBS", idtmed[10], tubspar, 5);
1270 gMC->Gspos("QFV3", 1, "QF04", -16.5/2., 0., 0., 0, "MANY");
1271 tubspar[0] = 0.0/2.;
1272 tubspar[1] = 7./2.;
1273 tubspar[2] = 1./2.;
1274 tubspar[3] = -90.;
1275 tubspar[4] = 90.;
1276 gMC->Gsvolu("QFV4", "TUBS", idtmed[10], tubspar, 5);
1277 gMC->Gspos("QFV4", 1, "QF04", 16.5/2., 0., 0., 0, "MANY");
f853b9aa 1278 gMC->Gspos("QF04", 1, "ZDCA", 0., 0., 18.5+zd2, 0, "MANY");
8d433671 1279
8d433671 1280 // 2 tubes (ID = 63 mm OD=70 mm)
1281 tubpar[0] = 6.3/2.;
1282 tubpar[1] = 7.0/2.;
1283 tubpar[2] = 512.9/2.;
cd807e71 1284 gMC->Gsvolu("QA38", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1285 gMC->Gspos("QA38", 1, "ZDCA", -16.5/2., 0., tubpar[2]+zd2, 0, "ONLY");
1286 gMC->Gspos("QA38", 2, "ZDCA", 16.5/2., 0., tubpar[2]+zd2, 0, "ONLY");
1287 //printf(" QA38 TUBE from z = %f to z= %f\n",zd2,2*tubpar[2]+zd2);
8d433671 1288
1289 zd2 += 2.*tubpar[2];
f853b9aa 1290 //printf("\n END OF BEAM PIPE VOLUME DEFINITION AT z= %f\n",zd2);
2fdd1072 1291
1292 // -- Luminometer (Cu box) in front of ZN - side A
1293 boxpar[0] = 8.0/2.;
1294 boxpar[1] = 8.0/2.;
1295 boxpar[2] = 15./2.;
cd807e71 1296 gMC->Gsvolu("QLUA", "BOX ", idtmed[7], boxpar, 3);
2fdd1072 1297 gMC->Gspos("QLUA", 1, "ZDCA", 0., 0., fPosZNA[2]-66.-boxpar[2], 0, "ONLY");
1298 //printf("\n QLUC LUMINOMETER from z = %f to z= %f\n\n", fPosZNA[2]-66., fPosZNA[2]-66.-2*boxpar[2]);
8d433671 1299
1300
1301 // ----------------------------------------------------------------
1302 // -- MAGNET DEFINITION -> LHC OPTICS 6.5
1303 // ----------------------------------------------------------------
1304 // ***************************************************************
1305 // SIDE C - RB26 (dimuon side)
1306 // ***************************************************************
1307 // -- COMPENSATOR DIPOLE (MBXW)
b6a8f9f1 1308 zc = 1972.5;
8d433671 1309
1310 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1311 tubpar[0] = 0.;
5bb2bc93 1312 tubpar[1] = 3.14;
b6a8f9f1 1313 tubpar[2] = 153./2.;
8d433671 1314 gMC->Gsvolu("MBXW", "TUBE", idtmed[11], tubpar, 3);
1315
1316 // -- YOKE
1317 tubpar[0] = 4.5;
1318 tubpar[1] = 55.;
b6a8f9f1 1319 tubpar[2] = 153./2.;
cd807e71 1320 gMC->Gsvolu("YMBX", "TUBE", idtmed[7], tubpar, 3);
8d433671 1321
f853b9aa 1322 gMC->Gspos("MBXW", 1, "ZDCC", 0., 0., -tubpar[2]-zc, 0, "ONLY");
1323 gMC->Gspos("YMBX", 1, "ZDCC", 0., 0., -tubpar[2]-zc, 0, "ONLY");
8d433671 1324
1325
1326 // -- INNER TRIPLET
1327 zq = 2296.5;
1328
1329 // -- DEFINE MQXL AND MQX QUADRUPOLE ELEMENT
1330 // -- MQXL
1331 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1332 tubpar[0] = 0.;
5bb2bc93 1333 tubpar[1] = 3.14;
8d433671 1334 tubpar[2] = 637./2.;
1335 gMC->Gsvolu("MQXL", "TUBE", idtmed[11], tubpar, 3);
f853b9aa 1336
8d433671 1337 // -- YOKE
1338 tubpar[0] = 3.5;
1339 tubpar[1] = 22.;
1340 tubpar[2] = 637./2.;
1341 gMC->Gsvolu("YMQL", "TUBE", idtmed[7], tubpar, 3);
1342
f853b9aa 1343 gMC->Gspos("MQXL", 1, "ZDCC", 0., 0., -tubpar[2]-zq, 0, "ONLY");
1344 gMC->Gspos("YMQL", 1, "ZDCC", 0., 0., -tubpar[2]-zq, 0, "ONLY");
8d433671 1345
b6a8f9f1 1346 gMC->Gspos("MQXL", 2, "ZDCC", 0., 0., -tubpar[2]-zq-2400., 0, "ONLY");
1347 gMC->Gspos("YMQL", 2, "ZDCC", 0., 0., -tubpar[2]-zq-2400., 0, "ONLY");
8d433671 1348
1349 // -- MQX
1350 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1351 tubpar[0] = 0.;
5bb2bc93 1352 tubpar[1] = 3.14;
8d433671 1353 tubpar[2] = 550./2.;
1354 gMC->Gsvolu("MQX ", "TUBE", idtmed[11], tubpar, 3);
1355
1356 // -- YOKE
1357 tubpar[0] = 3.5;
1358 tubpar[1] = 22.;
1359 tubpar[2] = 550./2.;
1360 gMC->Gsvolu("YMQ ", "TUBE", idtmed[7], tubpar, 3);
1361
f853b9aa 1362 gMC->Gspos("MQX ", 1, "ZDCC", 0., 0., -tubpar[2]-zq-908.5, 0, "ONLY");
1363 gMC->Gspos("YMQ ", 1, "ZDCC", 0., 0., -tubpar[2]-zq-908.5, 0, "ONLY");
8d433671 1364
f853b9aa 1365 gMC->Gspos("MQX ", 2, "ZDCC", 0., 0., -tubpar[2]-zq-1558.5, 0, "ONLY");
1366 gMC->Gspos("YMQ ", 2, "ZDCC", 0., 0., -tubpar[2]-zq-1558.5, 0, "ONLY");
8d433671 1367
1368 // -- SEPARATOR DIPOLE D1
1369 zd1 = 5838.3;
1370
1371 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1372 tubpar[0] = 0.;
1373 tubpar[1] = 6.94/2.;
1374 tubpar[2] = 945./2.;
1375 gMC->Gsvolu("MD1 ", "TUBE", idtmed[11], tubpar, 3);
1376
1377 // -- Insert horizontal Cu plates inside D1
1378 // -- (to simulate the vacuum chamber)
1379 boxpar[0] = TMath::Sqrt(tubpar[1]*tubpar[1]-(2.98+0.2)*(2.98+0.2)) - 0.05;
1380 boxpar[1] = 0.2/2.;
1381 boxpar[2] =945./2.;
1382 gMC->Gsvolu("MD1V", "BOX ", idtmed[6], boxpar, 3);
1383 gMC->Gspos("MD1V", 1, "MD1 ", 0., 2.98+boxpar[1], 0., 0, "ONLY");
1384 gMC->Gspos("MD1V", 2, "MD1 ", 0., -2.98-boxpar[1], 0., 0, "ONLY");
1385
1386 // -- YOKE
1387 tubpar[0] = 0.;
5bb2bc93 1388 tubpar[1] = 3.46;
8d433671 1389 tubpar[2] = 945./2.;
1390 gMC->Gsvolu("YD1 ", "TUBE", idtmed[7], tubpar, 3);
1391
f853b9aa 1392 gMC->Gspos("YD1 ", 1, "ZDCC", 0., 0., -tubpar[2]-zd1, 0, "ONLY");
8d433671 1393 gMC->Gspos("MD1 ", 1, "YD1 ", 0., 0., 0., 0, "ONLY");
b6a8f9f1 1394 // Ch debug
1395 //printf("\t **** D1 positioned! It goes from z = %1.2f to z = %1.2f cm\n",-zd1, -zd1-2*tubpar[2]);
8d433671 1396
1397 // -- DIPOLE D2
1398 // --- LHC optics v6.4
b6a8f9f1 1399 zd2 = 12167.8;
8d433671 1400
1401 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1402 tubpar[0] = 0.;
1403 tubpar[1] = 7.5/2.;
1404 tubpar[2] = 945./2.;
1405 gMC->Gsvolu("MD2 ", "TUBE", idtmed[11], tubpar, 3);
1406
1407 // -- YOKE
1408 tubpar[0] = 0.;
1409 tubpar[1] = 55.;
1410 tubpar[2] = 945./2.;
1411 gMC->Gsvolu("YD2 ", "TUBE", idtmed[7], tubpar, 3);
1412
f853b9aa 1413 gMC->Gspos("YD2 ", 1, "ZDCC", 0., 0., -tubpar[2]-zd2, 0, "ONLY");
8d433671 1414
1415 gMC->Gspos("MD2 ", 1, "YD2 ", -9.4, 0., 0., 0, "ONLY");
1416 gMC->Gspos("MD2 ", 2, "YD2 ", 9.4, 0., 0., 0, "ONLY");
1417
1418 // ***************************************************************
1419 // SIDE A - RB24
1420 // ***************************************************************
1421
1422 // COMPENSATOR DIPOLE (MCBWA) (2nd compensator)
1423 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1424 tubpar[0] = 0.;
1425 tubpar[1] = 4.5;
1426 tubpar[2] = 153./2.;
1427 gMC->Gsvolu("MCBW", "TUBE", idtmed[11], tubpar, 3);
f853b9aa 1428 gMC->Gspos("MCBW", 1, "ZDCA", 0., 0., tubpar[2]+1972.5, 0, "ONLY");
8d433671 1429
1430 // -- YOKE
1431 tubpar[0] = 4.5;
1432 tubpar[1] = 55.;
1433 tubpar[2] = 153./2.;
cd807e71 1434 gMC->Gsvolu("YMCB", "TUBE", idtmed[7], tubpar, 3);
f853b9aa 1435 gMC->Gspos("YMCB", 1, "ZDCA", 0., 0., tubpar[2]+1972.5, 0, "ONLY");
8d433671 1436
1437
1438 // -- INNER TRIPLET
1439 zql = 2296.5;
1440
1441 // -- DEFINE MQX1 AND MQX2 QUADRUPOLE ELEMENT
1442 // -- MQX1
1443 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1444 tubpar[0] = 0.;
1445 tubpar[1] = 3.5;
1446 tubpar[2] = 637./2.;
1447 gMC->Gsvolu("MQX1", "TUBE", idtmed[11], tubpar, 3);
1448
1449 // -- YOKE
1450 tubpar[0] = 3.5;
1451 tubpar[1] = 22.;
1452 tubpar[2] = 637./2.;
cd807e71 1453 gMC->Gsvolu("YMQ1", "TUBE", idtmed[7], tubpar, 3);
8d433671 1454
1455 // -- BEAM SCREEN FOR Q1
1456 tubpar[0] = 4.78/2.;
1457 tubpar[1] = 5.18/2.;
1458 tubpar[2] = 637./2.;
1459 gMC->Gsvolu("QBS1", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1460 gMC->Gspos("QBS1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "ONLY");
8d433671 1461 // INSERT VERTICAL PLATE INSIDE Q1
1462 boxpar[0] = 0.2/2.0;
1463 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(1.9+0.2)*(1.9+0.2));
1464 boxpar[2] =637./2.;
1465 gMC->Gsvolu("QBS2", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1466 gMC->Gspos("QBS2", 1, "ZDCA", 1.9+boxpar[0], 0., boxpar[2]+zql, 0, "ONLY");
1467 gMC->Gspos("QBS2", 2, "ZDCA", -1.9-boxpar[0], 0., boxpar[2]+zql, 0, "ONLY");
8d433671 1468
1469 // -- BEAM SCREEN FOR Q3
1470 tubpar[0] = 5.79/2.;
1471 tubpar[1] = 6.14/2.;
1472 tubpar[2] = 637./2.;
1473 gMC->Gsvolu("QBS3", "TUBE", idtmed[6], tubpar, 3);
f853b9aa 1474 gMC->Gspos("QBS3", 1, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "ONLY");
8d433671 1475 // INSERT VERTICAL PLATE INSIDE Q3
1476 boxpar[0] = 0.2/2.0;
1477 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(2.405+0.2)*(2.405+0.2));
1478 boxpar[2] =637./2.;
1479 gMC->Gsvolu("QBS4", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1480 gMC->Gspos("QBS4", 1, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+2400., 0, "ONLY");
1481 gMC->Gspos("QBS4", 2, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+2400., 0, "ONLY");
8d433671 1482
1483 // -- Q1
f853b9aa 1484 gMC->Gspos("MQX1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "MANY");
1485 gMC->Gspos("YMQ1", 1, "ZDCA", 0., 0., tubpar[2]+zql, 0, "ONLY");
8d433671 1486
1487 // -- Q3
f853b9aa 1488 gMC->Gspos("MQX1", 2, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "MANY");
1489 gMC->Gspos("YMQ1", 2, "ZDCA", 0., 0., tubpar[2]+zql+2400., 0, "ONLY");
8d433671 1490
1491
1492 // -- MQX2
1493 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1494 tubpar[0] = 0.;
1495 tubpar[1] = 3.5;
1496 tubpar[2] = 550./2.;
1497 gMC->Gsvolu("MQX2", "TUBE", idtmed[11], tubpar, 3);
1498
1499 // -- YOKE
1500 tubpar[0] = 3.5;
1501 tubpar[1] = 22.;
1502 tubpar[2] = 550./2.;
cd807e71 1503 gMC->Gsvolu("YMQ2", "TUBE", idtmed[7], tubpar, 3);
8d433671 1504
1505
1506 // -- BEAM SCREEN FOR Q2
1507 tubpar[0] = 5.79/2.;
1508 tubpar[1] = 6.14/2.;
1509 tubpar[2] = 550./2.;
1510 gMC->Gsvolu("QBS5", "TUBE", idtmed[6], tubpar, 3);
1511 // VERTICAL PLATE INSIDE Q2
1512 boxpar[0] = 0.2/2.0;
1513 boxpar[1] = TMath::Sqrt(tubpar[0]*tubpar[0]-(2.405+0.2)*(2.405+0.2));
1514 boxpar[2] =550./2.;
1515 gMC->Gsvolu("QBS6", "BOX ", idtmed[6], boxpar, 3);
1516
1517 // -- Q2A
f853b9aa 1518 gMC->Gspos("MQX2", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "MANY");
1519 gMC->Gspos("QBS5", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "ONLY");
1520 gMC->Gspos("QBS6", 1, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+908.5, 0, "ONLY");
1521 gMC->Gspos("QBS6", 2, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+908.5, 0, "ONLY");
1522 gMC->Gspos("YMQ2", 1, "ZDCA", 0., 0., tubpar[2]+zql+908.5, 0, "ONLY");
8d433671 1523
1524
1525 // -- Q2B
f853b9aa 1526 gMC->Gspos("MQX2", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "MANY");
1527 gMC->Gspos("QBS5", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "ONLY");
1528 gMC->Gspos("QBS6", 3, "ZDCA", 2.405+boxpar[0], 0., boxpar[2]+zql+1558.5, 0, "ONLY");
1529 gMC->Gspos("QBS6", 4, "ZDCA", -2.405-boxpar[0], 0., boxpar[2]+zql+1558.5, 0, "ONLY");
1530 gMC->Gspos("YMQ2", 2, "ZDCA", 0., 0., tubpar[2]+zql+1558.5, 0, "ONLY");
8d433671 1531
1532 // -- SEPARATOR DIPOLE D1
1533 zd2 = 5838.3;
1534
1535 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1536 tubpar[0] = 0.;
1537 tubpar[1] = 6.75/2.;
1538 tubpar[2] = 945./2.;
1539 gMC->Gsvolu("MD1L", "TUBE", idtmed[11], tubpar, 3);
1540
1541 // -- The beam screen tube is provided by the beam pipe in D1 (QA03 volume)
1542 // -- Insert the beam screen horizontal Cu plates inside D1
1543 // -- (to simulate the vacuum chamber)
1544 boxpar[0] = TMath::Sqrt(tubpar[1]*tubpar[1]-(2.885+0.2)*(2.885+0.2));
1545 boxpar[1] = 0.2/2.;
1546 boxpar[2] =(945.+80.1)/2.;
1547 gMC->Gsvolu("QBS7", "BOX ", idtmed[6], boxpar, 3);
f853b9aa 1548 gMC->Gspos("QBS7", 1, "ZDCA", 0., 2.885+boxpar[1],boxpar[2]+zd2, 0, "ONLY");
1549 gMC->Gspos("QBS7", 2, "ZDCA", 0., -2.885-boxpar[1],boxpar[2]+zd2, 0, "ONLY");
8d433671 1550
1551 // -- YOKE
1552 tubpar[0] = 7.34/2.; // to be checked
1553 tubpar[1] = 110./2;
1554 tubpar[2] = 945./2.;
cd807e71 1555 gMC->Gsvolu("YD1L", "TUBE", idtmed[7], tubpar, 3);
8d433671 1556
f853b9aa 1557 gMC->Gspos("YD1L", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "ONLY");
1558 gMC->Gspos("MD1L", 1, "ZDCA", 0., 0., tubpar[2]+zd2, 0, "MANY");
8d433671 1559
1560
1561 // -- DIPOLE D2
1562 // --- LHC optics v6.5
1563 zd2l = 12167.8;
1564
1565 // -- GAP (VACUUM WITH MAGNETIC FIELD)
1566 tubpar[0] = 0.;
1567 tubpar[1] = 7.5/2.; // this has to be checked
1568 tubpar[2] = 945./2.;
1569 gMC->Gsvolu("MD2L", "TUBE", idtmed[11], tubpar, 3);
1570
1571 // -- YOKE
1572 tubpar[0] = 0.;
1573 tubpar[1] = 55.;
1574 tubpar[2] = 945./2.;
cd807e71 1575 gMC->Gsvolu("YD2L", "TUBE", idtmed[7], tubpar, 3);
8d433671 1576
f853b9aa 1577 gMC->Gspos("YD2L", 1, "ZDCA", 0., 0., tubpar[2]+zd2l, 0, "ONLY");
8d433671 1578
1579 gMC->Gspos("MD2L", 1, "YD2L", -9.4, 0., 0., 0, "ONLY");
1580 gMC->Gspos("MD2L", 2, "YD2L", 9.4, 0., 0., 0, "ONLY");
1581
1582 // -- END OF MAGNET DEFINITION
1583}
1584
1585//_____________________________________________________________________________
1586void AliZDCv3::CreateZDC()
1587{
1588 //
1589 // Create the various ZDCs (ZN + ZP)
1590 //
1591
1592 Float_t dimPb[6], dimVoid[6];
1593
1594 Int_t *idtmed = fIdtmed->GetArray();
1595
1596 // Parameters for hadronic calorimeters geometry
1597 // NB -> parameters used ONLY in CreateZDC()
1598 Float_t fGrvZN[3] = {0.03, 0.03, 50.}; // Grooves for neutron detector
1599 Float_t fGrvZP[3] = {0.04, 0.04, 75.}; // Grooves for proton detector
1600 Int_t fDivZN[3] = {11, 11, 0}; // Division for neutron detector
1601 Int_t fDivZP[3] = {7, 15, 0}; // Division for proton detector
1602 Int_t fTowZN[2] = {2, 2}; // Tower for neutron detector
1603 Int_t fTowZP[2] = {4, 1}; // Tower for proton detector
1604
1605 // Parameters for EM calorimeter geometry
1606 // NB -> parameters used ONLY in CreateZDC()
1607 Float_t kDimZEMPb = 0.15*(TMath::Sqrt(2.)); // z-dimension of the Pb slice
1608 Float_t kFibRadZEM = 0.0315; // External fiber radius (including cladding)
1609 Int_t fDivZEM[3] = {92, 0, 20}; // Divisions for EM detector
1610 Float_t fDimZEM[6] = {fZEMLength, 3.5, 3.5, 45., 0., 0.}; // Dimensions of EM detector
1611 Float_t fFibZEM2 = fDimZEM[2]/TMath::Sin(fDimZEM[3]*kDegrad)-kFibRadZEM;
1612 Float_t fFibZEM[3] = {0., 0.0275, fFibZEM2}; // Fibers for EM calorimeter
1613
1614
1615 //-- Create calorimeters geometry
1616
1617 // -------------------------------------------------------------------------------
1618 //--> Neutron calorimeter (ZN)
1619
1620 gMC->Gsvolu("ZNEU", "BOX ", idtmed[1], fDimZN, 3); // Passive material
1621 gMC->Gsvolu("ZNF1", "TUBE", idtmed[3], fFibZN, 3); // Active material
1622 gMC->Gsvolu("ZNF2", "TUBE", idtmed[4], fFibZN, 3);
1623 gMC->Gsvolu("ZNF3", "TUBE", idtmed[4], fFibZN, 3);
1624 gMC->Gsvolu("ZNF4", "TUBE", idtmed[3], fFibZN, 3);
1625 gMC->Gsvolu("ZNG1", "BOX ", idtmed[12], fGrvZN, 3); // Empty grooves
1626 gMC->Gsvolu("ZNG2", "BOX ", idtmed[12], fGrvZN, 3);
1627 gMC->Gsvolu("ZNG3", "BOX ", idtmed[12], fGrvZN, 3);
1628 gMC->Gsvolu("ZNG4", "BOX ", idtmed[12], fGrvZN, 3);
1629
1630 // Divide ZNEU in towers (for hits purposes)
1631
1632 gMC->Gsdvn("ZNTX", "ZNEU", fTowZN[0], 1); // x-tower
1633 gMC->Gsdvn("ZN1 ", "ZNTX", fTowZN[1], 2); // y-tower
1634
1635 //-- Divide ZN1 in minitowers
1636 // fDivZN[0]= NUMBER OF FIBERS PER TOWER ALONG X-AXIS,
1637 // fDivZN[1]= NUMBER OF FIBERS PER TOWER ALONG Y-AXIS
1638 // (4 fibres per minitower)
1639
1640 gMC->Gsdvn("ZNSL", "ZN1 ", fDivZN[1], 2); // Slices
1641 gMC->Gsdvn("ZNST", "ZNSL", fDivZN[0], 1); // Sticks
1642
1643 // --- Position the empty grooves in the sticks (4 grooves per stick)
1644 Float_t dx = fDimZN[0] / fDivZN[0] / 4.;
1645 Float_t dy = fDimZN[1] / fDivZN[1] / 4.;
1646
1647 gMC->Gspos("ZNG1", 1, "ZNST", 0.-dx, 0.+dy, 0., 0, "ONLY");
1648 gMC->Gspos("ZNG2", 1, "ZNST", 0.+dx, 0.+dy, 0., 0, "ONLY");
1649 gMC->Gspos("ZNG3", 1, "ZNST", 0.-dx, 0.-dy, 0., 0, "ONLY");
1650 gMC->Gspos("ZNG4", 1, "ZNST", 0.+dx, 0.-dy, 0., 0, "ONLY");
1651
1652 // --- Position the fibers in the grooves
1653 gMC->Gspos("ZNF1", 1, "ZNG1", 0., 0., 0., 0, "ONLY");
1654 gMC->Gspos("ZNF2", 1, "ZNG2", 0., 0., 0., 0, "ONLY");
1655 gMC->Gspos("ZNF3", 1, "ZNG3", 0., 0., 0., 0, "ONLY");
1656 gMC->Gspos("ZNF4", 1, "ZNG4", 0., 0., 0., 0, "ONLY");
1657
1658 // --- Position the neutron calorimeter in ZDC
1659 // -- Rotation of ZDCs
1660 Int_t irotzdc;
1661 gMC->Matrix(irotzdc, 90., 180., 90., 90., 180., 0.);
1662 //
f853b9aa 1663 gMC->Gspos("ZNEU", 1, "ZDCC", fPosZNC[0], fPosZNC[1], fPosZNC[2]-fDimZN[2], irotzdc, "ONLY");
8d433671 1664 //Ch debug
1665 //printf("\n ZN -> %f < z < %f cm\n",fPosZN[2],fPosZN[2]-2*fDimZN[2]);
1666
1667 // --- Position the neutron calorimeter in ZDC2 (left line)
1668 // -- No Rotation of ZDCs
f853b9aa 1669 gMC->Gspos("ZNEU", 2, "ZDCA", fPosZNA[0], fPosZNA[1], fPosZNA[2]+fDimZN[2], 0, "ONLY");
8d433671 1670 //Ch debug
1671 //printf("\n ZN left -> %f < z < %f cm\n",fPosZNl[2],fPosZNl[2]+2*fDimZN[2]);
1672
1673
1674 // -------------------------------------------------------------------------------
1675 //--> Proton calorimeter (ZP)
1676
1677 gMC->Gsvolu("ZPRO", "BOX ", idtmed[2], fDimZP, 3); // Passive material
1678 gMC->Gsvolu("ZPF1", "TUBE", idtmed[3], fFibZP, 3); // Active material
1679 gMC->Gsvolu("ZPF2", "TUBE", idtmed[4], fFibZP, 3);
1680 gMC->Gsvolu("ZPF3", "TUBE", idtmed[4], fFibZP, 3);
1681 gMC->Gsvolu("ZPF4", "TUBE", idtmed[3], fFibZP, 3);
1682 gMC->Gsvolu("ZPG1", "BOX ", idtmed[12], fGrvZP, 3); // Empty grooves
1683 gMC->Gsvolu("ZPG2", "BOX ", idtmed[12], fGrvZP, 3);
1684 gMC->Gsvolu("ZPG3", "BOX ", idtmed[12], fGrvZP, 3);
1685 gMC->Gsvolu("ZPG4", "BOX ", idtmed[12], fGrvZP, 3);
1686
1687 //-- Divide ZPRO in towers(for hits purposes)
1688
1689 gMC->Gsdvn("ZPTX", "ZPRO", fTowZP[0], 1); // x-tower
1690 gMC->Gsdvn("ZP1 ", "ZPTX", fTowZP[1], 2); // y-tower
1691
1692
1693 //-- Divide ZP1 in minitowers
1694 // fDivZP[0]= NUMBER OF FIBERS ALONG X-AXIS PER MINITOWER,
1695 // fDivZP[1]= NUMBER OF FIBERS ALONG Y-AXIS PER MINITOWER
1696 // (4 fiber per minitower)
1697
1698 gMC->Gsdvn("ZPSL", "ZP1 ", fDivZP[1], 2); // Slices
1699 gMC->Gsdvn("ZPST", "ZPSL", fDivZP[0], 1); // Sticks
1700
1701 // --- Position the empty grooves in the sticks (4 grooves per stick)
1702 dx = fDimZP[0] / fTowZP[0] / fDivZP[0] / 2.;
1703 dy = fDimZP[1] / fTowZP[1] / fDivZP[1] / 2.;
1704
1705 gMC->Gspos("ZPG1", 1, "ZPST", 0.-dx, 0.+dy, 0., 0, "ONLY");
1706 gMC->Gspos("ZPG2", 1, "ZPST", 0.+dx, 0.+dy, 0., 0, "ONLY");
1707 gMC->Gspos("ZPG3", 1, "ZPST", 0.-dx, 0.-dy, 0., 0, "ONLY");
1708 gMC->Gspos("ZPG4", 1, "ZPST", 0.+dx, 0.-dy, 0., 0, "ONLY");
1709
1710 // --- Position the fibers in the grooves
1711 gMC->Gspos("ZPF1", 1, "ZPG1", 0., 0., 0., 0, "ONLY");
1712 gMC->Gspos("ZPF2", 1, "ZPG2", 0., 0., 0., 0, "ONLY");
1713 gMC->Gspos("ZPF3", 1, "ZPG3", 0., 0., 0., 0, "ONLY");
1714 gMC->Gspos("ZPF4", 1, "ZPG4", 0., 0., 0., 0, "ONLY");
1715
1716
f853b9aa 1717 // --- Position the proton calorimeter in ZDCC
921be7cf 1718 gMC->Gspos("ZPRO", 1, "ZDCC", fPosZPC[0], fPosZPC[1], fPosZPC[2]-fDimZP[2], irotzdc, "ONLY");
8d433671 1719 //Ch debug
1720 //printf("\n ZP -> %f < z < %f cm\n",fPosZP[2],fPosZP[2]-2*fDimZP[2]);
1721
f853b9aa 1722 // --- Position the proton calorimeter in ZDCA
1723 // --- No rotation
921be7cf 1724 gMC->Gspos("ZPRO", 2, "ZDCA", fPosZPA[0], fPosZPA[1], fPosZPA[2]+fDimZP[2], 0, "ONLY");
8d433671 1725 //Ch debug
1726 //printf("\n ZP left -> %f < z < %f cm\n",fPosZPl[2],fPosZPl[2]+2*fDimZP[2]);
1727
1728
1729 // -------------------------------------------------------------------------------
1730 // -> EM calorimeter (ZEM)
1731
1732 gMC->Gsvolu("ZEM ", "PARA", idtmed[10], fDimZEM, 6);
1733
1734 Int_t irot1, irot2;
1735 gMC->Matrix(irot1,0.,0.,90.,90.,-90.,0.); // Rotation matrix 1
1736 gMC->Matrix(irot2,180.,0.,90.,fDimZEM[3]+90.,90.,fDimZEM[3]);// Rotation matrix 2
1737 //printf("irot1 = %d, irot2 = %d \n", irot1, irot2);
1738
1739 gMC->Gsvolu("ZEMF", "TUBE", idtmed[3], fFibZEM, 3); // Active material
1740
1741 gMC->Gsdvn("ZETR", "ZEM ", fDivZEM[2], 1); // Tranches
1742
1743 dimPb[0] = kDimZEMPb; // Lead slices
1744 dimPb[1] = fDimZEM[2];
1745 dimPb[2] = fDimZEM[1];
1746 //dimPb[3] = fDimZEM[3]; //controllare
1747 dimPb[3] = 90.-fDimZEM[3]; //originale
1748 dimPb[4] = 0.;
1749 dimPb[5] = 0.;
1750 gMC->Gsvolu("ZEL0", "PARA", idtmed[5], dimPb, 6);
1751 gMC->Gsvolu("ZEL1", "PARA", idtmed[5], dimPb, 6);
1752 gMC->Gsvolu("ZEL2", "PARA", idtmed[5], dimPb, 6);
1753
1754 // --- Position the lead slices in the tranche
1755 Float_t zTran = fDimZEM[0]/fDivZEM[2];
1756 Float_t zTrPb = -zTran+kDimZEMPb;
1757 gMC->Gspos("ZEL0", 1, "ZETR", zTrPb, 0., 0., 0, "ONLY");
1758 gMC->Gspos("ZEL1", 1, "ZETR", kDimZEMPb, 0., 0., 0, "ONLY");
1759
1760 // --- Vacuum zone (to be filled with fibres)
1761 dimVoid[0] = (zTran-2*kDimZEMPb)/2.;
1762 dimVoid[1] = fDimZEM[2];
1763 dimVoid[2] = fDimZEM[1];
1764 dimVoid[3] = 90.-fDimZEM[3];
1765 dimVoid[4] = 0.;
1766 dimVoid[5] = 0.;
1767 gMC->Gsvolu("ZEV0", "PARA", idtmed[10], dimVoid,6);
1768 gMC->Gsvolu("ZEV1", "PARA", idtmed[10], dimVoid,6);
1769
1770 // --- Divide the vacuum slice into sticks along x axis
1771 gMC->Gsdvn("ZES0", "ZEV0", fDivZEM[0], 3);
1772 gMC->Gsdvn("ZES1", "ZEV1", fDivZEM[0], 3);
1773
1774 // --- Positioning the fibers into the sticks
1775 gMC->Gspos("ZEMF", 1,"ZES0", 0., 0., 0., irot2, "ONLY");
1776 gMC->Gspos("ZEMF", 1,"ZES1", 0., 0., 0., irot2, "ONLY");
1777
1778 // --- Positioning the vacuum slice into the tranche
5bb2bc93 1779 //Float_t displFib = fDimZEM[1]/fDivZEM[0];
8d433671 1780 gMC->Gspos("ZEV0", 1,"ZETR", -dimVoid[0], 0., 0., 0, "ONLY");
6ac9cca5 1781 gMC->Gspos("ZEV1", 1,"ZETR", -dimVoid[0]+zTran, 0., 0., 0, "ONLY");
8d433671 1782
1783 // --- Positioning the ZEM into the ZDC - rotation for 90 degrees
f853b9aa 1784 // NB -> ZEM is positioned in ALIC (instead of in ZDC) volume
8d433671 1785 gMC->Gspos("ZEM ", 1,"ALIC", -fPosZEM[0], fPosZEM[1], fPosZEM[2]+fDimZEM[0], irot1, "ONLY");
1786
1787 // Second EM ZDC (same side w.r.t. IP, just on the other side w.r.t. beam pipe)
1788 gMC->Gspos("ZEM ", 2,"ALIC", fPosZEM[0], fPosZEM[1], fPosZEM[2]+fDimZEM[0], irot1, "ONLY");
1789
1790 // --- Adding last slice at the end of the EM calorimeter
1791 Float_t zLastSlice = fPosZEM[2]+kDimZEMPb+2*fDimZEM[0];
1792 gMC->Gspos("ZEL2", 1,"ALIC", fPosZEM[0], fPosZEM[1], zLastSlice, irot1, "ONLY");
1793 //Ch debug
1794 //printf("\n ZEM lenght = %f cm\n",2*fZEMLength);
1795 //printf("\n ZEM -> %f < z < %f cm\n",fPosZEM[2],fPosZEM[2]+2*fZEMLength+zLastSlice+kDimZEMPb);
1796
1797}
1798
1799//_____________________________________________________________________________
1800void AliZDCv3::DrawModule() const
1801{
1802 //
1803 // Draw a shaded view of the Zero Degree Calorimeter version 1
1804 //
1805
1806 // Set everything unseen
1807 gMC->Gsatt("*", "seen", -1);
1808 //
1809 // Set ALIC mother transparent
1810 gMC->Gsatt("ALIC","SEEN",0);
1811 //
1812 // Set the volumes visible
f853b9aa 1813 gMC->Gsatt("ZDCC","SEEN",0);
8d433671 1814 gMC->Gsatt("QT01","SEEN",1);
1815 gMC->Gsatt("QT02","SEEN",1);
1816 gMC->Gsatt("QT03","SEEN",1);
1817 gMC->Gsatt("QT04","SEEN",1);
1818 gMC->Gsatt("QT05","SEEN",1);
1819 gMC->Gsatt("QT06","SEEN",1);
1820 gMC->Gsatt("QT07","SEEN",1);
1821 gMC->Gsatt("QT08","SEEN",1);
1822 gMC->Gsatt("QT09","SEEN",1);
1823 gMC->Gsatt("QT10","SEEN",1);
1824 gMC->Gsatt("QT11","SEEN",1);
1825 gMC->Gsatt("QT12","SEEN",1);
1826 gMC->Gsatt("QT13","SEEN",1);
1827 gMC->Gsatt("QT14","SEEN",1);
1828 gMC->Gsatt("QT15","SEEN",1);
1829 gMC->Gsatt("QT16","SEEN",1);
1830 gMC->Gsatt("QT17","SEEN",1);
1831 gMC->Gsatt("QT18","SEEN",1);
1832 gMC->Gsatt("QC01","SEEN",1);
1833 gMC->Gsatt("QC02","SEEN",1);
1834 gMC->Gsatt("QC03","SEEN",1);
1835 gMC->Gsatt("QC04","SEEN",1);
1836 gMC->Gsatt("QC05","SEEN",1);
1837 gMC->Gsatt("QTD1","SEEN",1);
1838 gMC->Gsatt("QTD2","SEEN",1);
1839 gMC->Gsatt("QTD3","SEEN",1);
1840 gMC->Gsatt("MQXL","SEEN",1);
1841 gMC->Gsatt("YMQL","SEEN",1);
1842 gMC->Gsatt("MQX ","SEEN",1);
1843 gMC->Gsatt("YMQ ","SEEN",1);
1844 gMC->Gsatt("ZQYX","SEEN",1);
1845 gMC->Gsatt("MD1 ","SEEN",1);
1846 gMC->Gsatt("MD1V","SEEN",1);
1847 gMC->Gsatt("YD1 ","SEEN",1);
1848 gMC->Gsatt("MD2 ","SEEN",1);
1849 gMC->Gsatt("YD2 ","SEEN",1);
1850 gMC->Gsatt("ZNEU","SEEN",0);
1851 gMC->Gsatt("ZNF1","SEEN",0);
1852 gMC->Gsatt("ZNF2","SEEN",0);
1853 gMC->Gsatt("ZNF3","SEEN",0);
1854 gMC->Gsatt("ZNF4","SEEN",0);
1855 gMC->Gsatt("ZNG1","SEEN",0);
1856 gMC->Gsatt("ZNG2","SEEN",0);
1857 gMC->Gsatt("ZNG3","SEEN",0);
1858 gMC->Gsatt("ZNG4","SEEN",0);
1859 gMC->Gsatt("ZNTX","SEEN",0);
1860 gMC->Gsatt("ZN1 ","COLO",4);
1861 gMC->Gsatt("ZN1 ","SEEN",1);
1862 gMC->Gsatt("ZNSL","SEEN",0);
1863 gMC->Gsatt("ZNST","SEEN",0);
1864 gMC->Gsatt("ZPRO","SEEN",0);
1865 gMC->Gsatt("ZPF1","SEEN",0);
1866 gMC->Gsatt("ZPF2","SEEN",0);
1867 gMC->Gsatt("ZPF3","SEEN",0);
1868 gMC->Gsatt("ZPF4","SEEN",0);
1869 gMC->Gsatt("ZPG1","SEEN",0);
1870 gMC->Gsatt("ZPG2","SEEN",0);
1871 gMC->Gsatt("ZPG3","SEEN",0);
1872 gMC->Gsatt("ZPG4","SEEN",0);
1873 gMC->Gsatt("ZPTX","SEEN",0);
1874 gMC->Gsatt("ZP1 ","COLO",6);
1875 gMC->Gsatt("ZP1 ","SEEN",1);
1876 gMC->Gsatt("ZPSL","SEEN",0);
1877 gMC->Gsatt("ZPST","SEEN",0);
1878 gMC->Gsatt("ZEM ","COLO",7);
1879 gMC->Gsatt("ZEM ","SEEN",1);
1880 gMC->Gsatt("ZEMF","SEEN",0);
1881 gMC->Gsatt("ZETR","SEEN",0);
1882 gMC->Gsatt("ZEL0","SEEN",0);
1883 gMC->Gsatt("ZEL1","SEEN",0);
1884 gMC->Gsatt("ZEL2","SEEN",0);
1885 gMC->Gsatt("ZEV0","SEEN",0);
1886 gMC->Gsatt("ZEV1","SEEN",0);
1887 gMC->Gsatt("ZES0","SEEN",0);
1888 gMC->Gsatt("ZES1","SEEN",0);
1889
1890 //
1891 gMC->Gdopt("hide", "on");
1892 gMC->Gdopt("shad", "on");
1893 gMC->Gsatt("*", "fill", 7);
1894 gMC->SetClipBox(".");
1895 gMC->SetClipBox("*", 0, 100, -100, 100, 12000, 16000);
1896 gMC->DefaultRange();
1897 gMC->Gdraw("alic", 40, 30, 0, 488, 220, .07, .07);
f853b9aa 1898 gMC->Gdhead(1111, "Zero Degree Calorimeter Version 3");
8d433671 1899 gMC->Gdman(18, 4, "MAN");
1900}
1901
1902//_____________________________________________________________________________
1903void AliZDCv3::CreateMaterials()
1904{
1905 //
1906 // Create Materials for the Zero Degree Calorimeter
1907 //
1908
8d433671 1909 Float_t dens, ubuf[1], wmat[2], a[2], z[2];
f853b9aa 1910
8d433671 1911 // --- Store in UBUF r0 for nuclear radius calculation R=r0*A**1/3
1912
1913 // --- Tantalum -> ZN passive material
1914 ubuf[0] = 1.1;
1915 AliMaterial(1, "TANT", 180.95, 73., 16.65, .4, 11.9, ubuf, 1);
8d433671 1916
1917 // --- Brass (CuZn) -> ZP passive material
1918 dens = 8.48;
1919 a[0] = 63.546;
1920 a[1] = 65.39;
1921 z[0] = 29.;
1922 z[1] = 30.;
1923 wmat[0] = .63;
1924 wmat[1] = .37;
cd807e71 1925 AliMixture(2, "BRASS", a, z, dens, 2, wmat);
8d433671 1926
1927 // --- SiO2
1928 dens = 2.64;
1929 a[0] = 28.086;
1930 a[1] = 15.9994;
1931 z[0] = 14.;
1932 z[1] = 8.;
1933 wmat[0] = 1.;
1934 wmat[1] = 2.;
cd807e71 1935 AliMixture(3, "SIO2", a, z, dens, -2, wmat);
8d433671 1936
1937 // --- Lead
1938 ubuf[0] = 1.12;
1939 AliMaterial(5, "LEAD", 207.19, 82., 11.35, .56, 18.5, ubuf, 1);
1940
1941 // --- Copper (energy loss taken into account)
1942 ubuf[0] = 1.10;
1943 AliMaterial(6, "COPP0", 63.54, 29., 8.96, 1.4, 0., ubuf, 1);
1944
8d433671 1945 // --- Iron (energy loss taken into account)
1946 ubuf[0] = 1.1;
1947 AliMaterial(7, "IRON0", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
1948
1949 // --- Iron (no energy loss)
1950 ubuf[0] = 1.1;
cd807e71 1951 AliMaterial(8, "IRON1", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
f853b9aa 1952 AliMaterial(13, "IRON2", 55.85, 26., 7.87, 1.76, 0., ubuf, 1);
1953
8d433671 1954 // ---------------------------------------------------------
1955 Float_t aResGas[3]={1.008,12.0107,15.9994};
1956 Float_t zResGas[3]={1.,6.,8.};
1957 Float_t wResGas[3]={0.28,0.28,0.44};
1958 Float_t dResGas = 3.2E-14;
1959
1960 // --- Vacuum (no magnetic field)
1961 AliMixture(10, "VOID", aResGas, zResGas, dResGas, 3, wResGas);
8d433671 1962
1963 // --- Vacuum (with magnetic field)
1964 AliMixture(11, "VOIM", aResGas, zResGas, dResGas, 3, wResGas);
8d433671 1965
1966 // --- Air (no magnetic field)
1967 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1968 Float_t zAir[4]={6.,7.,8.,18.};
1969 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1970 Float_t dAir = 1.20479E-3;
1971 //
1972 AliMixture(12, "Air $", aAir, zAir, dAir, 4, wAir);
8d433671 1973
1974 // --- Definition of tracking media:
1975
1976 // --- Tantalum = 1 ;
1977 // --- Brass = 2 ;
1978 // --- Fibers (SiO2) = 3 ;
1979 // --- Fibers (SiO2) = 4 ;
1980 // --- Lead = 5 ;
1981 // --- Copper (with energy loss)= 6 ;
1982 // --- Copper (with energy loss)= 13 ;
1983 // --- Iron (with energy loss) = 7 ;
1984 // --- Iron (without energy loss) = 8 ;
1985 // --- Vacuum (no field) = 10
1986 // --- Vacuum (with field) = 11
1987 // --- Air (no field) = 12
1988
1989 // ****************************************************
1990 // Tracking media parameters
1991 //
1992 Float_t epsil = 0.01; // Tracking precision,
1993 Float_t stmin = 0.01; // Min. value 4 max. step (cm)
1994 Float_t stemax = 1.; // Max. step permitted (cm)
1995 Float_t tmaxfd = 0.; // Maximum angle due to field (degrees)
1996 Float_t deemax = -1.; // Maximum fractional energy loss
1997 Float_t nofieldm = 0.; // Max. field value (no field)
1998 Float_t fieldm = 45.; // Max. field value (with field)
1999 Int_t isvol = 0; // ISVOL =0 -> not sensitive volume
2000 Int_t isvolActive = 1; // ISVOL =1 -> sensitive volume
2001 Int_t inofld = 0; // IFIELD=0 -> no magnetic field
2002 Int_t ifield =2; // IFIELD=2 -> magnetic field defined in AliMagFC.h
2003 // *****************************************************
2004
2005 AliMedium(1, "ZTANT", 1, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2006 AliMedium(2, "ZBRASS",2, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2007 AliMedium(3, "ZSIO2", 3, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2008 AliMedium(4, "ZQUAR", 3, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2009 AliMedium(5, "ZLEAD", 5, isvolActive, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2010 AliMedium(6, "ZCOPP", 6, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2011 AliMedium(7, "ZIRON", 7, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2012 AliMedium(8, "ZIRONN",8, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2013 AliMedium(10,"ZVOID",10, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2014 AliMedium(12,"ZAIR", 12, isvol, inofld, nofieldm, tmaxfd, stemax, deemax, epsil, stmin);
2015 //
2016 AliMedium(11,"ZVOIM",11, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
f853b9aa 2017 AliMedium(13,"ZIRONE",13, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
2018
2019}
2020
2021//_____________________________________________________________________________
2022void AliZDCv3::AddAlignableVolumes() const
2023{
2024 //
2025 // Create entries for alignable volumes associating the symbolic volume
2026 // name with the corresponding volume path. Needs to be syncronized with
2027 // eventual changes in the geometry.
2028 //
63e6d88e 2029 TString volpath1 = "ALIC_1/ZDCC_1/ZNEU_1";
2030 TString volpath2 = "ALIC_1/ZDCC_1/ZPRO_1";
2031 TString volpath3 = "ALIC_1/ZDCA_1/ZNEU_2";
2032 TString volpath4 = "ALIC_1/ZDCA_1/ZPRO_2";
f853b9aa 2033
63e6d88e 2034 TString symname1="ZDC/NeutronZDC_C";
2035 TString symname2="ZDC/ProtonZDC_C";
2036 TString symname3="ZDC/NeutronZDC_A";
2037 TString symname4="ZDC/ProtonZDC_A";
f853b9aa 2038
2039 if(!gGeoManager->SetAlignableEntry(symname1.Data(),volpath1.Data()))
2040 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
2041
2042 if(!gGeoManager->SetAlignableEntry(symname2.Data(),volpath2.Data()))
2043 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
63e6d88e 2044
2045 if(!gGeoManager->SetAlignableEntry(symname3.Data(),volpath3.Data()))
2046 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname1.Data(),volpath1.Data()));
2047
2048 if(!gGeoManager->SetAlignableEntry(symname4.Data(),volpath4.Data()))
2049 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname2.Data(),volpath2.Data()));
2050
f853b9aa 2051}
2052
2053
2054//_____________________________________________________________________________
2055void AliZDCv3::Init()
2056{
2057 InitTables();
2058 Int_t *idtmed = fIdtmed->GetArray();
2059 Int_t i;
8d433671 2060 // Thresholds for showering in the ZDCs
2061 i = 1; //tantalum
2062 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2063 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2064 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2065 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2066 i = 2; //brass
2067 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2068 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2069 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2070 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2071 i = 5; //lead
2072 gMC->Gstpar(idtmed[i], "CUTGAM", .001);
2073 gMC->Gstpar(idtmed[i], "CUTELE", .001);
2074 gMC->Gstpar(idtmed[i], "CUTNEU", .01);
2075 gMC->Gstpar(idtmed[i], "CUTHAD", .01);
2076
2077 // Avoid too detailed showering in TDI
f853b9aa 2078 i = 6; //copper
8d433671 2079 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2080 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2081 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2082 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
2083
8d433671 2084 // Avoid too detailed showering along the beam line
2085 i = 7; //iron with energy loss (ZIRON)
2086 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2087 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2088 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2089 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
2090
2091 // Avoid too detailed showering along the beam line
2092 i = 8; //iron with energy loss (ZIRONN)
2093 gMC->Gstpar(idtmed[i], "CUTGAM", .1);
2094 gMC->Gstpar(idtmed[i], "CUTELE", .1);
2095 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
2096 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
cd807e71 2097
8d433671 2098 // Avoid too detailed showering along the beam line
f853b9aa 2099 i = 13; //iron with energy loss (ZIRONN)
2100 gMC->Gstpar(idtmed[i], "CUTGAM", 1.);
2101 gMC->Gstpar(idtmed[i], "CUTELE", 1.);
8d433671 2102 gMC->Gstpar(idtmed[i], "CUTNEU", 1.);
f853b9aa 2103 gMC->Gstpar(idtmed[i], "CUTHAD", 1.);
8d433671 2104
2105 // Avoid interaction in fibers (only energy loss allowed)
2106 i = 3; //fibers (ZSI02)
2107 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2108 gMC->Gstpar(idtmed[i], "MULS", 0.);
2109 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2110 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2111 gMC->Gstpar(idtmed[i], "LOSS", 1.);
2112 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2113 gMC->Gstpar(idtmed[i], "COMP", 0.);
2114 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2115 gMC->Gstpar(idtmed[i], "BREM", 0.);
2116 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2117 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2118 gMC->Gstpar(idtmed[i], "HADR", 0.);
2119 i = 4; //fibers (ZQUAR)
2120 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2121 gMC->Gstpar(idtmed[i], "MULS", 0.);
2122 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2123 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2124 gMC->Gstpar(idtmed[i], "LOSS", 1.);
2125 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2126 gMC->Gstpar(idtmed[i], "COMP", 0.);
2127 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2128 gMC->Gstpar(idtmed[i], "BREM", 0.);
2129 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2130 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2131 gMC->Gstpar(idtmed[i], "HADR", 0.);
2132
2133 // Avoid interaction in void
2134 i = 11; //void with field
2135 gMC->Gstpar(idtmed[i], "DCAY", 0.);
2136 gMC->Gstpar(idtmed[i], "MULS", 0.);
2137 gMC->Gstpar(idtmed[i], "PFIS", 0.);
2138 gMC->Gstpar(idtmed[i], "MUNU", 0.);
2139 gMC->Gstpar(idtmed[i], "LOSS", 0.);
2140 gMC->Gstpar(idtmed[i], "PHOT", 0.);
2141 gMC->Gstpar(idtmed[i], "COMP", 0.);
2142 gMC->Gstpar(idtmed[i], "PAIR", 0.);
2143 gMC->Gstpar(idtmed[i], "BREM", 0.);
2144 gMC->Gstpar(idtmed[i], "DRAY", 0.);
2145 gMC->Gstpar(idtmed[i], "ANNI", 0.);
2146 gMC->Gstpar(idtmed[i], "HADR", 0.);
2147
2148 //
2149 fMedSensZN = idtmed[1]; // Sensitive volume: ZN passive material
2150 fMedSensZP = idtmed[2]; // Sensitive volume: ZP passive material
2151 fMedSensF1 = idtmed[3]; // Sensitive volume: fibres type 1
2152 fMedSensF2 = idtmed[4]; // Sensitive volume: fibres type 2
2153 fMedSensZEM = idtmed[5]; // Sensitive volume: ZEM passive material
f853b9aa 2154 fMedSensTDI = idtmed[6]; // Sensitive volume: TDI Cu shield
8d433671 2155 fMedSensPI = idtmed[7]; // Sensitive volume: beam pipes
2156 fMedSensGR = idtmed[12]; // Sensitive volume: air into the grooves
8d433671 2157}
2158
2159//_____________________________________________________________________________
2160void AliZDCv3::InitTables()
2161{
2162 //
2163 // Read light tables for Cerenkov light production parameterization
2164 //
2165
2166 Int_t k, j;
2167
2168 char *lightfName1,*lightfName2,*lightfName3,*lightfName4,
2169 *lightfName5,*lightfName6,*lightfName7,*lightfName8;
2170 FILE *fp1, *fp2, *fp3, *fp4, *fp5, *fp6, *fp7, *fp8;
2171
2172 // --- Reading light tables for ZN
f853b9aa 2173 lightfName1 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362207s");
8d433671 2174 if((fp1 = fopen(lightfName1,"r")) == NULL){
2175 printf("Cannot open file fp1 \n");
2176 return;
2177 }
f853b9aa 2178 lightfName2 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362208s");
8d433671 2179 if((fp2 = fopen(lightfName2,"r")) == NULL){
2180 printf("Cannot open file fp2 \n");
2181 return;
2182 }
f853b9aa 2183 lightfName3 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362209s");
8d433671 2184 if((fp3 = fopen(lightfName3,"r")) == NULL){
2185 printf("Cannot open file fp3 \n");
2186 return;
2187 }
f853b9aa 2188 lightfName4 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620362210s");
8d433671 2189 if((fp4 = fopen(lightfName4,"r")) == NULL){
2190 printf("Cannot open file fp4 \n");
2191 return;
2192 }
2193
2194 for(k=0; k<fNalfan; k++){
2195 for(j=0; j<fNben; j++){
2196 fscanf(fp1,"%f",&fTablen[0][k][j]);
2197 fscanf(fp2,"%f",&fTablen[1][k][j]);
2198 fscanf(fp3,"%f",&fTablen[2][k][j]);
2199 fscanf(fp4,"%f",&fTablen[3][k][j]);
2200 }
2201 }
2202 fclose(fp1);
2203 fclose(fp2);
2204 fclose(fp3);
2205 fclose(fp4);
2206
2207 // --- Reading light tables for ZP and ZEM
f853b9aa 2208 lightfName5 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552207s");
8d433671 2209 if((fp5 = fopen(lightfName5,"r")) == NULL){
2210 printf("Cannot open file fp5 \n");
2211 return;
2212 }
f853b9aa 2213 lightfName6 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552208s");
8d433671 2214 if((fp6 = fopen(lightfName6,"r")) == NULL){
2215 printf("Cannot open file fp6 \n");
2216 return;
2217 }
f853b9aa 2218 lightfName7 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552209s");
8d433671 2219 if((fp7 = fopen(lightfName7,"r")) == NULL){
2220 printf("Cannot open file fp7 \n");
2221 return;
2222 }
f853b9aa 2223 lightfName8 = gSystem->ExpandPathName("$ALICE_ROOT/ZDC/light22620552210s");
8d433671 2224 if((fp8 = fopen(lightfName8,"r")) == NULL){
2225 printf("Cannot open file fp8 \n");
2226 return;
2227 }
2228
2229 for(k=0; k<fNalfap; k++){
2230 for(j=0; j<fNbep; j++){
2231 fscanf(fp5,"%f",&fTablep[0][k][j]);
2232 fscanf(fp6,"%f",&fTablep[1][k][j]);
2233 fscanf(fp7,"%f",&fTablep[2][k][j]);
2234 fscanf(fp8,"%f",&fTablep[3][k][j]);
2235 }
2236 }
2237 fclose(fp5);
2238 fclose(fp6);
2239 fclose(fp7);
2240 fclose(fp8);
2241}
2242//_____________________________________________________________________________
2243void AliZDCv3::StepManager()
2244{
2245 //
2246 // Routine called at every step in the Zero Degree Calorimeters
b6a8f9f1 2247 //
47709f57 2248 Int_t j, vol[2]={0,0}, ibeta=0, ialfa=0, ibe=0, nphe=0;
2249 Float_t hits[11], x[3], xdet[3], um[3], ud[3];
2250 Float_t m=0., ekin=0., destep=0., be=0., out=0.;
61424d1c 2251 // Parametrization for light guide uniformity
61424d1c 2252 // NEW!!! Light guide tilted @ 51 degrees
2253 Float_t guiPar[4]={0.31,-0.0006305,0.01337,0.8895};
f853b9aa 2254 Double_t s[3], p[3];
8d433671 2255 const char *knamed;
f853b9aa 2256 //
47709f57 2257 for(j=0;j<11;j++) hits[j]=-999.;
f853b9aa 2258 //
8d433671 2259 // --- This part is for no shower developement in beam pipe and TDI
2260 // If particle interacts with beam pipe or TDI -> return
f853b9aa 2261 if((gMC->CurrentMedium() == fMedSensPI) || (gMC->CurrentMedium() == fMedSensTDI)){
8d433671 2262 // If option NoShower is set -> StopTrack
cd807e71 2263 if(fNoShower==1){
f853b9aa 2264 gMC->TrackPosition(s[0],s[1],s[2]);
cd807e71 2265 if(gMC->CurrentMedium() == fMedSensPI){
8d433671 2266 knamed = gMC->CurrentVolName();
f853b9aa 2267 if(!strncmp(knamed,"YMQ",3)){
2268 if(s[2]<0) fpLostITC += 1;
2269 else fpLostITA += 1;
2270 }
8cbab886 2271 else if(!strncmp(knamed,"YD1",3)){
f853b9aa 2272 if(s[2]<0) fpLostD1C += 1;
2273 else fpLostD1A += 1;
2274 }
8cbab886 2275 else if(!strncmp(knamed,"QAL",3)) fnTrou++;
8d433671 2276 }
f853b9aa 2277 else if(gMC->CurrentMedium() == fMedSensTDI){
8d433671 2278 knamed = gMC->CurrentVolName();
f853b9aa 2279 if(!strncmp(knamed,"MD1",3)){
2280 if(s[2]<0) fpLostD1C += 1;
2281 else fpLostD1A += 1;
2282 }
8cbab886 2283 else if(!strncmp(knamed,"QTD",3)) fpLostTDI += 1;
2284 else if(!strncmp(knamed,"QLU",3)){
2285 if(s[2]<0) fnLumiC ++;
2286 else fnLumiA++;
2287 }
8d433671 2288 }
cd807e71 2289 //
8cbab886 2290 //gMC->TrackMomentum(p[0], p[1], p[2], p[3]);
cd807e71 2291 //printf("\t Particle: mass = %1.3f, E = %1.3f GeV, pz = %1.2f GeV -> stopped in volume %s\n",
2292 // gMC->TrackMass(), p[3], p[2], gMC->CurrentVolName());
2293 //
8cbab886 2294 printf("\n\t **********************************\n");
2295 printf("\t ********** Side C **********\n");
2296 printf("\t # of spectators in IT = %d\n",fpLostITC);
2297 printf("\t # of spectators in D1 = %d\n",fpLostD1C);
2298 printf("\t # of spectators in luminometer = %d\n",fnLumiC);
2299 printf("\t ********** Side A **********\n");
2300 printf("\t # of spectators in IT = %d\n",fpLostITA);
2301 printf("\t # of spectators in D1 = %d\n",fpLostD1A);
2302 printf("\t # of spectators in TDI = %d\n",fpLostTDI);
2303 printf("\t # of spectators in luminometer = %d\n",fnLumiA);
2304 printf("\t # of spectators in trousers = %d\n",fnTrou);
2305 printf("\t **********************************\n");
8d433671 2306 gMC->StopTrack();
2307 }
2308 return;
2309 }
2310
2311
2312 if((gMC->CurrentMedium() == fMedSensZN) || (gMC->CurrentMedium() == fMedSensZP) ||
2313 (gMC->CurrentMedium() == fMedSensGR) || (gMC->CurrentMedium() == fMedSensF1) ||
2314 (gMC->CurrentMedium() == fMedSensF2) || (gMC->CurrentMedium() == fMedSensZEM)){
2315
8cbab886 2316
8d433671 2317 //Particle coordinates
f853b9aa 2318 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2319 for(j=0; j<=2; j++) x[j] = s[j];
2320 hits[0] = x[0];
2321 hits[1] = x[1];
2322 hits[2] = x[2];
2323
2324 // Determine in which ZDC the particle is
2325 knamed = gMC->CurrentVolName();
2326 if(!strncmp(knamed,"ZN",2)){
921be7cf 2327 if(x[2]<0.) vol[0]=1; // ZNC (dimuon side)
2328 else if(x[2]>0.) vol[0]=4; //ZNA
8d433671 2329 }
2330 else if(!strncmp(knamed,"ZP",2)){
921be7cf 2331 if(x[2]<0.) vol[0]=2; //ZPC (dimuon side)
2332 else if(x[2]>0.) vol[0]=5; //ZPA
8d433671 2333 }
921be7cf 2334 else if(!strncmp(knamed,"ZE",2)) vol[0]=3; //ZEM
8d433671 2335
2336 // Determine in which quadrant the particle is
f853b9aa 2337 if(vol[0]==1){ //Quadrant in ZNC
61424d1c 2338 // Calculating particle coordinates inside ZNC
f853b9aa 2339 xdet[0] = x[0]-fPosZNC[0];
2340 xdet[1] = x[1]-fPosZNC[1];
8d433671 2341 // Calculating quadrant in ZN
2342 if(xdet[0]<=0.){
f853b9aa 2343 if(xdet[1]<=0.) vol[1]=1;
2344 else vol[1]=3;
8d433671 2345 }
2346 else if(xdet[0]>0.){
f853b9aa 2347 if(xdet[1]<=0.) vol[1]=2;
2348 else vol[1]=4;
8d433671 2349 }
2350 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
2351 printf("\n ZDC StepManager->ERROR in ZN!!! vol[1] = %d, xdet[0] = %f,"
2352 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2353 }
2354
f853b9aa 2355 else if(vol[0]==2){ //Quadrant in ZPC
61424d1c 2356 // Calculating particle coordinates inside ZPC
f853b9aa 2357 xdet[0] = x[0]-fPosZPA[0];
2358 xdet[1] = x[1]-fPosZPA[1];
8d433671 2359 if(xdet[0]>=fDimZP[0]) xdet[0]=fDimZP[0]-0.01;
2360 if(xdet[0]<=-fDimZP[0]) xdet[0]=-fDimZP[0]+0.01;
2361 // Calculating tower in ZP
2362 Float_t xqZP = xdet[0]/(fDimZP[0]/2.);
2363 for(int i=1; i<=4; i++){
2364 if(xqZP>=(i-3) && xqZP<(i-2)){
2365 vol[1] = i;
2366 break;
2367 }
2368 }
2369 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
2370 printf(" ZDC StepManager->ERROR in ZP!!! vol[1] = %d, xdet[0] = %f,"
2371 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2372 }
f853b9aa 2373 //
8d433671 2374 // Quadrant in ZEM: vol[1] = 1 -> particle in 1st ZEM (placed at x = 8.5 cm)
2375 // vol[1] = 2 -> particle in 2nd ZEM (placed at x = -8.5 cm)
2376 else if(vol[0] == 3){
2377 if(x[0]>0.){
2378 vol[1] = 1;
2379 // Particle x-coordinate inside ZEM1
2380 xdet[0] = x[0]-fPosZEM[0];
2381 }
2382 else{
2383 vol[1] = 2;
2384 // Particle x-coordinate inside ZEM2
2385 xdet[0] = x[0]+fPosZEM[0];
2386 }
2387 xdet[1] = x[1]-fPosZEM[1];
2388 }
f853b9aa 2389 //
2390 else if(vol[0]==4){ //Quadrant in ZNA
2391 // Calculating particle coordinates inside ZNA
2392 xdet[0] = x[0]-fPosZNA[0];
2393 xdet[1] = x[1]-fPosZNA[1];
2394 // Calculating quadrant in ZNA
2395 if(xdet[0]>=0.){
2396 if(xdet[1]<=0.) vol[1]=1;
2397 else vol[1]=3;
8d433671 2398 }
f853b9aa 2399 else if(xdet[0]<0.){
2400 if(xdet[1]<=0.) vol[1]=2;
2401 else vol[1]=4;
8d433671 2402 }
2403 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
f853b9aa 2404 printf("\n ZDC StepManager->ERROR in ZNA!!! vol[1] = %d, xdet[0] = %f,"
8d433671 2405 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2406 }
f853b9aa 2407 //
2408 else if(vol[0]==5){ //Quadrant in ZPA
2409 // Calculating particle coordinates inside ZPA
2410 xdet[0] = x[0]-fPosZPC[0];
2411 xdet[1] = x[1]-fPosZPC[1];
8d433671 2412 if(xdet[0]>=fDimZP[0]) xdet[0]=fDimZP[0]-0.01;
2413 if(xdet[0]<=-fDimZP[0]) xdet[0]=-fDimZP[0]+0.01;
2414 // Calculating tower in ZP
f853b9aa 2415 Float_t xqZP = -xdet[0]/(fDimZP[0]/2.);
8d433671 2416 for(int i=1; i<=4; i++){
2417 if(xqZP>=(i-3) && xqZP<(i-2)){
2418 vol[1] = i;
2419 break;
2420 }
2421 }
2422 if((vol[1]!=1) && (vol[1]!=2) && (vol[1]!=3) && (vol[1]!=4))
f853b9aa 2423 printf(" ZDC StepManager->ERROR in ZPA!!! vol[1] = %d, xdet[0] = %f,"
8d433671 2424 "xdet[1] = %f\n",vol[1], xdet[0], xdet[1]);
2425 }
2426
2427
2428 // Store impact point and kinetic energy of the ENTERING particle
2429
2430 if(gMC->IsTrackEntering()){
2431 //Particle energy
f853b9aa 2432 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2433 hits[3] = p[3];
2434 // Impact point on ZDC
2435 hits[4] = xdet[0];
2436 hits[5] = xdet[1];
2437 hits[6] = 0;
2438 hits[7] = 0;
2439 hits[8] = 0;
2440 hits[9] = 0;
47709f57 2441 //
2442 Int_t curTrackN = gAlice->GetMCApp()->GetCurrentTrackNumber();
2443 TParticle *part = (gAlice->GetMCApp())->Particle(curTrackN);
2444 hits[10] = part->GetPdgCode();
2445 //printf("\t PDGCode = %d\n", part->GetPdgCode());
8d433671 2446
47709f57 2447 AddHit(curTrackN, vol, hits);
8d433671 2448
2449 if(fNoShower==1){
921be7cf 2450 //printf("\t VolName %s -> det %d quad %d - x = %f, y = %f, z = %f\n",
2451 //knamed, vol[0], vol[1], x[0], x[1], x[2]);
2452 if(vol[0]==1){
2453 fnDetectedC += 1;
8cbab886 2454 printf("\n # of particles in ZNC = %d\n\n",fnDetectedC);
921be7cf 2455 }
2456 else if(vol[0]==2){
2457 fpDetectedC += 1;
8cbab886 2458 printf("\n # of particles in ZPC = %d\n\n",fpDetectedC);
921be7cf 2459 }
2460 else if(vol[0]==4){
2461 fnDetectedA += 1;
8cbab886 2462 printf("\n # of particles in ZNA = %d\n\n",fnDetectedA);
921be7cf 2463 }
2464 else if(vol[0]==5){
2465 fpDetectedA += 1;
8cbab886 2466 printf("\n # of particles in ZPA = %d\n\n",fpDetectedA);
921be7cf 2467 }
cd807e71 2468 //
2469 //printf("\t Particle: mass = %1.3f, E = %1.3f GeV, pz = %1.2f GeV -> stopped in volume %s\n",
2470 // gMC->TrackMass(), p[3], p[2], gMC->CurrentVolName());
2471 //
8d433671 2472 gMC->StopTrack();
8d433671 2473 return;
2474 }
2475 }
2476
2477 // Charged particles -> Energy loss
2478 if((destep=gMC->Edep())){
2479 if(gMC->IsTrackStop()){
f853b9aa 2480 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2481 m = gMC->TrackMass();
2482 ekin = p[3]-m;
2483 hits[9] = ekin;
2484 hits[7] = 0.;
2485 hits[8] = 0.;
2486 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2487 }
2488 else{
2489 hits[9] = destep;
2490 hits[7] = 0.;
2491 hits[8] = 0.;
2492 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2493 }
2494 }
2495 }
2496
2497
2498 // *** Light production in fibres
2499 if((gMC->CurrentMedium() == fMedSensF1) || (gMC->CurrentMedium() == fMedSensF2)){
2500
2501 //Select charged particles
2502 if((destep=gMC->Edep())){
2503
2504 // Particle velocity
2505 Float_t beta = 0.;
f853b9aa 2506 gMC->TrackMomentum(p[0],p[1],p[2],p[3]);
8d433671 2507 Float_t ptot=TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
2508 if(p[3] > 0.00001) beta = ptot/p[3];
2509 else return;
2510 if(beta<0.67)return;
2511 else if((beta>=0.67) && (beta<=0.75)) ibeta = 0;
2512 else if((beta>0.75) && (beta<=0.85)) ibeta = 1;
2513 else if((beta>0.85) && (beta<=0.95)) ibeta = 2;
2514 else if(beta>0.95) ibeta = 3;
2515
2516 // Angle between particle trajectory and fibre axis
2517 // 1 -> Momentum directions
2518 um[0] = p[0]/ptot;
2519 um[1] = p[1]/ptot;
2520 um[2] = p[2]/ptot;
2521 gMC->Gmtod(um,ud,2);
2522 // 2 -> Angle < limit angle
2523 Double_t alfar = TMath::ACos(ud[2]);
2524 Double_t alfa = alfar*kRaddeg;
2525 if(alfa>=110.) return;
2526 //
2527 ialfa = Int_t(1.+alfa/2.);
2528
2529 // Distance between particle trajectory and fibre axis
f853b9aa 2530 gMC->TrackPosition(s[0],s[1],s[2]);
8d433671 2531 for(j=0; j<=2; j++){
2532 x[j] = s[j];
2533 }
2534 gMC->Gmtod(x,xdet,1);
2535 if(TMath::Abs(ud[0])>0.00001){
2536 Float_t dcoeff = ud[1]/ud[0];
2537 be = TMath::Abs((xdet[1]-dcoeff*xdet[0])/TMath::Sqrt(dcoeff*dcoeff+1.));
2538 }
2539 else{
2540 be = TMath::Abs(ud[0]);
2541 }
2542
2543 ibe = Int_t(be*1000.+1);
2544 //if((vol[0]==1)) radius = fFibZN[1];
2545 //else if((vol[0]==2)) radius = fFibZP[1];
2546
2547 //Looking into the light tables
2548 Float_t charge = gMC->TrackCharge();
2549
80e87581 2550 if(vol[0]==1 || vol[0]==4) { // (1) ZN fibres
8d433671 2551 if(ibe>fNben) ibe=fNben;
2552 out = charge*charge*fTablen[ibeta][ialfa][ibe];
2553 nphe = gRandom->Poisson(out);
2554 // Ch. debug
2555 //if(ibeta==3) printf("\t %f \t %f \t %f\n",alfa, be, out);
2556 //printf("\t ibeta = %d, ialfa = %d, ibe = %d -> nphe = %d\n\n",ibeta,ialfa,ibe,nphe);
2557 if(gMC->CurrentMedium() == fMedSensF1){
2558 hits[7] = nphe; //fLightPMQ
2559 hits[8] = 0;
2560 hits[9] = 0;
2561 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2562 }
2563 else{
2564 hits[7] = 0;
2565 hits[8] = nphe; //fLightPMC
2566 hits[9] = 0;
2567 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2568 }
2569 }
80e87581 2570 else if(vol[0]==2 || vol[0]==5) {// (2) ZP fibres
8d433671 2571 if(ibe>fNbep) ibe=fNbep;
2572 out = charge*charge*fTablep[ibeta][ialfa][ibe];
2573 nphe = gRandom->Poisson(out);
2574 if(gMC->CurrentMedium() == fMedSensF1){
2575 hits[7] = nphe; //fLightPMQ
2576 hits[8] = 0;
2577 hits[9] = 0;
2578 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2579 }
2580 else{
2581 hits[7] = 0;
2582 hits[8] = nphe; //fLightPMC
2583 hits[9] = 0;
2584 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2585 }
2586 }
2587 else if((vol[0]==3)) { // (3) ZEM fibres
2588 if(ibe>fNbep) ibe=fNbep;
2589 out = charge*charge*fTablep[ibeta][ialfa][ibe];
f853b9aa 2590 gMC->TrackPosition(s[0],s[1],s[2]);
47709f57 2591 Float_t xalic[3];
2592 for(j=0; j<3; j++){
8d433671 2593 xalic[j] = s[j];
2594 }
2595 // z-coordinate from ZEM front face
2596 // NB-> fPosZEM[2]+fZEMLength = -1000.+2*10.3 = 979.69 cm
47709f57 2597 Float_t z = -xalic[2]+fPosZEM[2]+2*fZEMLength-xalic[1];
8d433671 2598// z = xalic[2]-fPosZEM[2]-fZEMLength-xalic[1]*(TMath::Tan(45.*kDegrad));
2599// printf("\n fPosZEM[2]+2*fZEMLength = %f", fPosZEM[2]+2*fZEMLength);
47709f57 2600 Float_t guiEff = guiPar[0]*(guiPar[1]*z*z+guiPar[2]*z+guiPar[3]);
8d433671 2601 out = out*guiEff;
2602 nphe = gRandom->Poisson(out);
2603// printf(" out*guiEff = %f nphe = %d", out, nphe);
2604 if(vol[1] == 1){
2605 hits[7] = 0;
2606 hits[8] = nphe; //fLightPMC (ZEM1)
2607 hits[9] = 0;
2608 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2609 }
2610 else{
2611 hits[7] = nphe; //fLightPMQ (ZEM2)
2612 hits[8] = 0;
2613 hits[9] = 0;
2614 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2615 }
2616 }
2617 }
2618 }
2619}