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