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