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