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