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