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