]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFv5T0.cxx
Remove dependcies on obsolete data structures
[u/mrichter/AliRoot.git] / TOF / AliTOFv5T0.cxx
CommitLineData
d3c7bfac 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$Log$
3c5f55bc 18Revision 1.22 2007/10/07 19:40:46 decaro
19right handling of l2t matrices and alignable entries in case of TOF staging geometry
20
19dd44a6 21Revision 1.21 2007/10/04 13:15:30 arcelli
22updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
23
ba66add8 24Revision 1.20 2007/10/03 18:07:22 arcelli
25right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
26
da79abb0 27Revision 1.19 2007/10/03 10:41:12 arcelli
28adding tracking-to-local matrices for new AliTOFcluster
29
ce352d73 30Revision 1.18 2007/07/27 08:14:48 morsch
31Write all track references into the same branch.
32
e6add757 33Revision 1.17 2007/05/14 14:41:13 decaro
34Fix a bug in FTOA volume positionig inside BTOF13,14,15,16,17 in case of holes in 11th and 12th sectors
35
08aa1974 36Revision 1.16 2007/05/04 12:59:26 arcelli
37Change the TOF SM paths for misalignment (one layer up)
38
6e2570fc 39Revision 1.15 2007/02/19 15:41:55 decaro
40Coding convention: few corrections
41
3a3ece53 42Revision 1.14 2006/10/17 15:33:14 arcelli
43Moving some printout from Info to Debug level
44
ba795372 45Revision 1.13 2006/10/12 16:35:43 arcelli
46definition of the alignable volumes symbolic names added
47
93f8b8bc 48Revision 1.12 2006/08/22 13:34:46 arcelli
49removal of effective c++ warnings (C.Zampolli)
50
655e379f 51Revision 1.11 2006/07/12 16:03:44 arcelli
52updates to match the new numbering of the TOF/TRD mother volumes in FRAME (ALICE convention)
53
96c2b15b 54Revision 1.10 2006/05/10 18:40:17 hristov
55Larger strings for the names
56
8ce41745 57Revision 1.9 2006/05/04 19:41:42 hristov
58Possibility for partial TOF geometry (S.Arcelli)
59
06e24a91 60Revision 1.8 2006/04/20 22:30:50 hristov
61Coding conventions (Annalisa)
62
0e46b9ae 63Revision 1.7 2006/04/16 22:29:05 hristov
64Coding conventions (Annalisa)
65
7aeeaf38 66Revision 1.6 2006/03/20 08:20:35 decaro
67Al layer: positioning correction
68
7fa116c9 69Revision 1.5 2006/03/20 07:54:20 decaro
70Correction of some layer thickness
71
43b40e69 72Revision 1.4 2006/03/13 12:35:44 decaro
73Suppression of fractional Z warning
74
1ac1b685 75Revision 1.3 2006/02/28 10:38:00 decaro
76AliTOFGeometry::fAngles, AliTOFGeometry::fHeights,
77AliTOFGeometry::fDistances arrays: dimension definition in the right
78location
79
4402e7cb 80Revision 1.2 2006/02/27 18:12:14 decaro
1ac1b685 81Remove in StepManager the dependence of hit indexes from parametrized
82TOF position
4402e7cb 83
0dadb22b 84Revision 1.1 2005/12/15 08:55:33 decaro
85New TOF geometry description (V5) -G. Cara Romeo and A. De Caro
86
d3c7bfac 87
88Revision 0.1 2004 November G. Cara Romeo and A. De Caro
89 Implement new TOF geometry version
90 in order to
91 suppress few volume overlaps
92 (in the 4th TOF geometry version),
93 insert the realistic strip numbers and positions
94
95*/
96
97///////////////////////////////////////////////////////////////////////////////
98// //
99// This class contains the functions for version 5 of the Time Of Flight //
100// detector. //
101// //
102// VERSION WITH 5 MODULES AND TILTED STRIPS //
103// //
104// FULL COVERAGE VERSION + OPTION for PHOS holes //
105// //
106// //
107//Begin_Html //
108/* //
109<img src="picts/AliTOFv5T0Class.gif"> //
110*/ //
111//End_Html //
112// //
113///////////////////////////////////////////////////////////////////////////////
114
8e1462ed 115#include "TDirectory.h"
0e46b9ae 116#include "TLorentzVector.h"
d3c7bfac 117#include "TVirtualMC.h"
93f8b8bc 118#include "TGeoManager.h"
ce352d73 119#include <TGeoMatrix.h>
120#include <TGeoPhysicalNode.h>
121#include <TGeoVolume.h>
d3c7bfac 122
d3c7bfac 123#include "AliConst.h"
c28a5715 124#include "AliGeomManager.h"
0e46b9ae 125#include "AliLog.h"
d3c7bfac 126#include "AliMagF.h"
0e46b9ae 127#include "AliMC.h"
128#include "AliRun.h"
e6add757 129#include "AliTrackReference.h"
d3c7bfac 130
131#include "AliTOFGeometry.h"
d3c7bfac 132#include "AliTOFv5T0.h"
133
0e46b9ae 134extern TDirectory *gDirectory;
135extern TVirtualMC *gMC;
3a3ece53 136extern TGeoManager *gGeoManager;
0e46b9ae 137
138extern AliRun *gAlice;
139
d3c7bfac 140ClassImp(AliTOFv5T0)
141
142//_____________________________________________________________________________
655e379f 143 AliTOFv5T0::AliTOFv5T0():
144 fIdFTOA(-1),
145 fIdFTOB(-1),
146 fIdFTOC(-1),
147 fIdFLTA(-1),
148 fIdFLTB(-1),
8e1462ed 149 fIdFLTC(-1)//,
150 //fTOFHoles(kFALSE)
d3c7bfac 151{
152 //
153 // Default constructor
154 //
155}
156
157//_____________________________________________________________________________
655e379f 158AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
159 AliTOF(name,title,"tzero"),
160 fIdFTOA(-1),
161 fIdFTOB(-1),
162 fIdFTOC(-1),
163 fIdFLTA(-1),
164 fIdFLTB(-1),
8e1462ed 165 fIdFLTC(-1)//,
166 //fTOFHoles(kFALSE)
d3c7bfac 167{
168 //
169 // Standard constructor
170 //
171 //
172 // Check that FRAME is there otherwise we have no place where to
173 // put TOF
174
8e1462ed 175 /*
0e46b9ae 176 AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
d3c7bfac 177 if(!frame) {
178 AliFatal("TOF needs FRAME to be present");
179 } else{
180
181 if (fTOFGeometry) delete fTOFGeometry;
ba66add8 182 fTOFGeometry = new AliTOFGeometry();
d3c7bfac 183
184 if(frame->IsVersion()==1) {
ba795372 185 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
186 AliDebug(1,"Full Coverage for TOF");
d3c7bfac 187 fTOFHoles=false;}
188 else {
ba795372 189 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
190 AliDebug(1,"TOF with Holes for PHOS");
d3c7bfac 191 fTOFHoles=true;}
192 }
193 fTOFGeometry->SetHoles(fTOFHoles);
8e1462ed 194 */
195
196 if (fTOFGeometry) delete fTOFGeometry;
197 fTOFGeometry = new AliTOFGeometry();
198 fTOFGeometry->SetHoles(fTOFHoles);
d3c7bfac 199
200 //AliTOF::fTOFGeometry = fTOFGeometry;
201
202 // Save the geometry
203 TDirectory* saveDir = gDirectory;
d3b3a3b2 204 AliRunLoader::GetRunLoader()->CdGAFile();
d3c7bfac 205 fTOFGeometry->Write("TOFgeometry");
206 saveDir->cd();
207
208}
209
93f8b8bc 210//_____________________________________________________________________________
211void AliTOFv5T0::AddAlignableVolumes() const
212{
213 //
214 // Create entries for alignable volumes associating the symbolic volume
215 // name with the corresponding volume path. Needs to be syncronized with
216 // eventual changes in the geometry.
217 //
218
c28a5715 219 AliGeomManager::ELayerID idTOF = AliGeomManager::kTOF;
220 Int_t modUID, modnum=0;
221
93f8b8bc 222 TString volPath;
223 TString symName;
224
225 TString vpL0 = "ALIC_1/B077_1/BSEGMO";
226 TString vpL1 = "_1/BTOF";
227 TString vpL2 = "_1";
228 TString vpL3 = "/FTOA_0";
229 TString vpL4 = "/FLTA_0/FSTR_";
230
231 TString snSM = "TOF/sm";
232 TString snSTRIP = "/strip";
233
234 Int_t nSectors=fTOFGeometry->NSectors();
235 Int_t nStrips =fTOFGeometry->NStripA()+
236 2*fTOFGeometry->NStripB()+
237 2*fTOFGeometry->NStripC();
238
239 //
240 // The TOF MRPC Strips
241 // The symbolic names are: TOF/sm00/strip01
242 // ...
243 // TOF/sm17/strip91
244
245 Int_t imod=0;
246
247 for (Int_t isect = 0; isect < nSectors; isect++) {
248 for (Int_t istr = 1; istr <= nStrips; istr++) {
da79abb0 249
c28a5715 250 modUID = AliGeomManager::LayerToVolUID(idTOF,modnum++);
251 if (fTOFSectors[isect]==-1) continue;
19dd44a6 252
3c5f55bc 253 if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
da79abb0 254 if (istr<39) {
255 vpL3 = "/FTOB_0";
256 vpL4 = "/FLTB_0/FSTR_";
257 }
258 else if (istr>53) {
259 vpL3 = "/FTOC_0";
260 vpL4 = "/FLTC_0/FSTR_";
261 }
262 else continue;
263 }
264 else {
265 vpL3 = "/FTOA_0";
266 vpL4 = "/FLTA_0/FSTR_";
267 }
268
93f8b8bc 269 volPath = vpL0;
270 volPath += isect;
271 volPath += vpL1;
272 volPath += isect;
273 volPath += vpL2;
274 volPath += vpL3;
275 volPath += vpL4;
276 volPath += istr;
277
278
279 symName = snSM;
280 symName += Form("%02d",isect);
281 symName += snSTRIP;
282 symName += Form("%02d",istr);
283
284 AliDebug(2,"--------------------------------------------");
285 AliDebug(2,Form("Alignable object %d", imod));
286 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
287 AliDebug(2,Form("symName=%s\n",symName.Data()));
288 AliDebug(2,"--------------------------------------------");
289
c28a5715 290 if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data(),modUID))
291 AliError(Form("Alignable entry %s not set",symName.Data()));
ce352d73 292
293 //T2L matrices for alignment
c28a5715 294 TGeoPNEntry *e = gGeoManager->GetAlignableEntryByUID(modUID);
ce352d73 295 if (e) {
c28a5715 296 TGeoHMatrix *globMatrix = e->GetGlobalOrig();
ce352d73 297 Double_t phi = 20.0 * (isect % 18) + 10.0;
298 TGeoHMatrix *t2l = new TGeoHMatrix();
299 t2l->RotateZ(phi);
300 t2l->MultiplyLeft(&(globMatrix->Inverse()));
301 e->SetMatrix(t2l);
302 }
303 else {
304 AliError(Form("Alignable entry %s is not valid!",symName.Data()));
305 }
93f8b8bc 306 imod++;
307 }
308 }
309
310
311 //
312 // The TOF supermodules
313 // The symbolic names are: TOF/sm00
314 // ...
315 // TOF/sm17
316 //
317 for (Int_t isect = 0; isect < nSectors; isect++) {
318
319 volPath = vpL0;
320 volPath += isect;
321 volPath += vpL1;
322 volPath += isect;
323 volPath += vpL2;
93f8b8bc 324
325 symName = snSM;
326 symName += Form("%02d",isect);
327
c28a5715 328 AliDebug(2,"--------------------------------------------");
329 AliDebug(2,Form("Alignable object %d", isect+imod));
330 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
331 AliDebug(2,Form("symName=%s\n",symName.Data()));
332 AliDebug(2,"--------------------------------------------");
333
93f8b8bc 334 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
335
336 }
337
d3c7bfac 338}
339
340//_____________________________________________________________________________
341void AliTOFv5T0::CreateGeometry()
342{
343 //
344 // Create geometry for Time Of Flight version 0
345 //
346 //Begin_Html
347 /*
348 <img src="picts/AliTOFv5T0.gif">
349 */
350 //End_Html
351 //
352 // Creates common geometry
353 //
354 AliTOF::CreateGeometry();
355}
356
357
358//_____________________________________________________________________________
359void AliTOFv5T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA,
360 Float_t zlenB)
361{
7aeeaf38 362 //
363 // Definition of the Time Of Fligh Resistive Plate Chambers
364 //
d3c7bfac 365
366 const Float_t kPi = TMath::Pi();
367
368 const Float_t kInterCentrModBorder1 = 49.5;
369 const Float_t kInterCentrModBorder2 = 57.5;
370 const Float_t kExterInterModBorder1 = 196.0;
371 const Float_t kExterInterModBorder2 = 203.5;
372
373 const Float_t kLengthExInModBorder = 4.7;
374 const Float_t kLengthInCeModBorder = 7.0;
375
7fa116c9 376 // Al layers over all internal module walls (cm)
377 const Float_t khAlWall = 0.03;
d3c7bfac 378
1ac1b685 379 // module wall thickness (cm)
d3c7bfac 380 const Float_t kModuleWallThickness = 0.3;
381
1ac1b685 382 // Al honeycomb layer between strips and cards (cm)
d3c7bfac 383 const Float_t kHoneycombLayerThickness = 1.5;
384
385 AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
386 AliDebug(1, "************************* TOF geometry **************************");
387
388 // Definition of the Time Of Fligh Resistive Plate Chambers
389 // xFLT, yFLT, zFLT - sizes of TOF modules (large)
390
1ac1b685 391 Float_t xcoor, ycoor, zcoor;
d3c7bfac 392 Float_t par[3];
393 Int_t *idtmed = fIdtmed->GetArray()-499;
394 Int_t idrotm[100];
395
396 par[0] = xtof * 0.5;
397 par[1] = ytof * 0.5;
398 par[2] = zlenA * 0.5;
399 gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3); // fibre glass
400
401 if (fTOFHoles) {
1ac1b685 402 par[0] = xtof * 0.5;
403 par[1] = ytof * 0.5;
d3c7bfac 404 par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
1ac1b685 405 gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3); // fibre glass
406 gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3); // fibre glass
d3c7bfac 407 }
408
1ac1b685 409 // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
d3c7bfac 410
411 //AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,-90.);
1ac1b685 412 AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,270.);
d3c7bfac 413
1ac1b685 414 xcoor = 0.;
415 ycoor = 0.;
416 zcoor = 0.;
06e24a91 417 for(Int_t isec=0;isec<18;isec++){
418 if(fTOFSectors[isec]==-1)continue;
8ce41745 419 char name[16];
06e24a91 420 sprintf(name, "BTOF%d",isec);
3c5f55bc 421 if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
96c2b15b 422 // if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
06e24a91 423 xcoor = 0.;
424 ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
425 zcoor = 0.;
426 gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
427 gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
428 }
08aa1974 429 else {
430 xcoor = 0.;
431 ycoor = 0.;
432 zcoor = 0.;
433 gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
434 }
435
d3c7bfac 436 }
1ac1b685 437 // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
06e24a91 438
d3c7bfac 439 Float_t xFLT, yFLT, zFLTA;
440
441 xFLT = xtof - kModuleWallThickness*2.;
442 yFLT = ytof - kModuleWallThickness*2.;
443 zFLTA = zlenA - kModuleWallThickness*2.;
444
445 par[0] = xFLT*0.5;
446 par[1] = yFLT*0.5;
d3c7bfac 447 par[2] = zFLTA*0.5;
1ac1b685 448 gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); // Freon mix
449
450 xcoor = 0.;
451 ycoor = 0.;
452 zcoor = 0.;
453 gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 454
455 if (fTOFHoles) {
1ac1b685 456 par[0] = xFLT*0.5;
457 par[1] = yFLT*0.5;
d3c7bfac 458 par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
459 gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
d3c7bfac 460 gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
1ac1b685 461
462 xcoor = 0.;
463 ycoor = 0.;
464 zcoor = kModuleWallThickness*0.5;
465 gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
466 gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
d3c7bfac 467 }
468
7fa116c9 469 // Layer of Aluminum before detector (FALA, FALB and FALC)
470
471 par[0] = xFLT*0.5;
d3c7bfac 472 par[1] = khAlWall*0.5;
7fa116c9 473 par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
474 gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
475
1ac1b685 476 xcoor = 0.;
d3c7bfac 477 ycoor = (-yFLT + khAlWall)*0.5;
1ac1b685 478 zcoor = 0.;
7fa116c9 479 gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
480
481 par[0] = xFLT*0.5;
482 par[1] = khAlWall*0.5;
483 par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
484 gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
485
486 xcoor = 0.;
487 ycoor = (-yFLT + khAlWall)*0.5;
488 zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
489 gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
490 gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
491
492 par[0] = xFLT*0.5;
493 par[1] = khAlWall*0.5;
494 par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
495 gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
496
497 xcoor = 0.;
498 ycoor = (-yFLT + khAlWall)*0.5;
499 zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
500 gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
501 gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
d3c7bfac 502
503 if (fTOFHoles) {
7fa116c9 504 xcoor = 0.;
1ac1b685 505 ycoor = (-yFLT + khAlWall)*0.5;
7fa116c9 506 zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
507 gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
508 gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
509
510 xcoor = 0.;
511 ycoor = (-yFLT + khAlWall)*0.5;
512 zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
513 gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
514 gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 515 }
516
1ac1b685 517 Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
d3c7bfac 518
1ac1b685 519 // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
520
521 tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
522 alpha = TMath::ATan(tgal);
523 beta = (kPi*0.5 - alpha)*0.5;
d3c7bfac 524 tgbe = TMath::Tan(beta);
1ac1b685 525 trpa[0] = xFLT*0.5;
d3c7bfac 526 trpa[1] = 0.;
527 trpa[2] = 0.;
528 trpa[3] = kModuleWallThickness;
1ac1b685 529 trpa[4] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
530 trpa[5] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
7fa116c9 531 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 532 trpa[7] = kModuleWallThickness;
1ac1b685 533 trpa[8] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
534 trpa[9] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
7fa116c9 535 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 536 gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11); // fibre glass
537
538 AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
d3c7bfac 539 AliMatrix (idrotm[4],90., 90., 0.,0.,90., 0.);
1ac1b685 540
541 xcoor = 0.;
542 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
543 zcoor = kInterCentrModBorder1;
544 gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
545 gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
d3c7bfac 546
547 if (fTOFHoles) {
1ac1b685 548 y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
549 trpa[0] = xFLT*0.5;
d3c7bfac 550 trpa[1] = 0.;
551 trpa[2] = 0.;
552 trpa[3] = kModuleWallThickness*0.5;
1ac1b685 553 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
554 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
7fa116c9 555 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 556 trpa[7] = kModuleWallThickness*0.5;
1ac1b685 557 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
558 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
7fa116c9 559 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 560 gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11); // fibre glass
1ac1b685 561
562 xcoor = 0.;
563 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
564 zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
565 gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
566 gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
d3c7bfac 567 }
568
569 AliMatrix (idrotm[2],90.,270., 0.,0.,90.,180.);
d3c7bfac 570 AliMatrix (idrotm[5],90.,270.,180.,0.,90., 0.);
1ac1b685 571
572 xcoor = 0.;
573 ycoor = -kLengthInCeModBorder*0.5;
574 zcoor = kInterCentrModBorder2;
575 gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
576 gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
d3c7bfac 577
578 if (fTOFHoles) {
1ac1b685 579 y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
580 trpa[0] = xFLT*0.5;
d3c7bfac 581 trpa[1] = 0.;
582 trpa[2] = 0.;
583 trpa[3] = kModuleWallThickness*0.5;
1ac1b685 584 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
585 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
7fa116c9 586 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 587 trpa[7] = kModuleWallThickness*0.5;
1ac1b685 588 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
589 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
7fa116c9 590 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 591 gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11); // fibre glass
1ac1b685 592
593 xcoor = 0.;
594 ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
595 zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
596 gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
597 gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
d3c7bfac 598 }
599
1ac1b685 600 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
d3c7bfac 601 trpa[1] = kModuleWallThickness;
1ac1b685 602 trpa[2] = xFLT*0.5;
d3c7bfac 603 trpa[3] = -beta*kRaddeg;
604 trpa[4] = 0.;
605 trpa[5] = 0.;
606 gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6); // fibre glass
1ac1b685 607
d3c7bfac 608 AliMatrix (idrotm[3], alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
d3c7bfac 609 AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90., 0.);
1ac1b685 610
611 xcoor = 0.;
612 ycoor = -yFLT*0.25;
613 zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
614 gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
615 gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
d3c7bfac 616
617 if (fTOFHoles) {
1ac1b685 618 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
d3c7bfac 619 trpa[1] = kModuleWallThickness*0.5;
1ac1b685 620 trpa[2] = xFLT*0.5;
d3c7bfac 621 trpa[3] = -beta*kRaddeg;
622 trpa[4] = 0.;
623 trpa[5] = 0.;
624 gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6); // fibre glass
1ac1b685 625
626 xcoor = 0.;
627 ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
628 zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
629 gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
630 gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
d3c7bfac 631 }
632
7fa116c9 633 // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
634
1ac1b685 635 tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
636 alpha = TMath::ATan(tgal);
637 beta = (kPi*0.5 - alpha)*0.5;
d3c7bfac 638 tgbe = TMath::Tan(beta);
1ac1b685 639 trpa[0] = xFLT*0.5;
d3c7bfac 640 trpa[1] = 0.;
641 trpa[2] = 0.;
642 trpa[3] = kModuleWallThickness;
1ac1b685 643 trpa[4] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
644 trpa[5] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
7fa116c9 645 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 646 trpa[7] = kModuleWallThickness;
1ac1b685 647 trpa[8] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
648 trpa[9] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
7fa116c9 649 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
d3c7bfac 650 gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11); // fibre glass
1ac1b685 651
652 xcoor = 0.;
653 ycoor = -kLengthExInModBorder*0.5;
654 zcoor = kExterInterModBorder1;
655 gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
656 gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
d3c7bfac 657
658 if (fTOFHoles) {
1ac1b685 659 xcoor = 0.;
660 ycoor = -kLengthExInModBorder*0.5;
661 zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
662 gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
663 gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
d3c7bfac 664 }
1ac1b685 665
666 xcoor = 0.;
667 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
668 zcoor = kExterInterModBorder2;
669 gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
670 gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
d3c7bfac 671
672 if (fTOFHoles) {
1ac1b685 673 xcoor = 0.;
674 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
675 zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
676 gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
677 gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
d3c7bfac 678 }
679
1ac1b685 680 trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
d3c7bfac 681 trpa[1] = kModuleWallThickness;
1ac1b685 682 trpa[2] = xFLT*0.5;
d3c7bfac 683 trpa[3] = -beta*kRaddeg;
684 trpa[4] = 0.;
685 trpa[5] = 0.;
686 gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6); // fibre glass
1ac1b685 687
688 AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
689 AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
690
691 xcoor = 0.;
692 ycoor = -yFLT*0.25;
693 zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
694 gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
695 gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
d3c7bfac 696
697 if (fTOFHoles) {
1ac1b685 698 xcoor = 0.;
699 ycoor = -yFLT*0.25;
700 zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
701 gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
702 gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
d3c7bfac 703 }
704
1ac1b685 705
d3c7bfac 706 ///////////////// Detector itself //////////////////////
707
708 const Int_t knx = fTOFGeometry->NpadX(); // number of pads along x
709 const Int_t knz = fTOFGeometry->NpadZ(); // number of pads along z
710 const Float_t kPadX = fTOFGeometry->XPad(); // pad length along x
711 const Float_t kPadZ = fTOFGeometry->ZPad(); // pad length along z
712
713 // new description for strip volume -double stack strip-
714 // -- all constants are expressed in cm
715 // heigth of different layers
716 const Float_t khhony = 1.0 ; // heigth of HONY Layer
717 const Float_t khpcby = 0.08 ; // heigth of PCB Layer
718 const Float_t khrgly = 0.055 ; // heigth of RED GLASS Layer
1ac1b685 719
720 const Float_t khfiliy = 0.125 ; // heigth of FISHLINE Layer
721 const Float_t khglassy = 0.160*0.5; // heigth of GLASS Layer
722 const Float_t khglfy = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE Layer
723
d3c7bfac 724 const Float_t khcpcby = 0.16 ; // heigth of PCB Central Layer
725 const Float_t kwhonz = 8.1 ; // z dimension of HONEY Layer
726 const Float_t kwpcbz1 = 10.6 ; // z dimension of PCB Lower Layer
727 const Float_t kwpcbz2 = 11.6 ; // z dimension of PCB Upper Layer
728 const Float_t kwcpcbz = 12.4 ; // z dimension of PCB Central Layer
729 const Float_t kwrglz = 8. ; // z dimension of RED GLASS Layer
730 const Float_t kwglfz = 7. ; // z dimension of GLASS+FISHLN Layer
731 const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
1ac1b685 732 const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
d3c7bfac 733 const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
734
735 // heigth of the FSTR Volume (the strip volume)
736 const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
737
738 // width of the FSTR Volume (the strip volume)
739 const Float_t kwstripz = kwcpcbz;
740 // length of the FSTR Volume (the strip volume)
1ac1b685 741 const Float_t klstripx = fTOFGeometry->StripLength();
d3c7bfac 742
743 Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
744 // Coordinates of the strip center in the strip reference frame;
745 // used for positioning internal strip volumes
746 Float_t posfp[3]={0.,0.,0.};
747
748 // FSTR volume definition-filling this volume with non sensitive Gas Mixture
749 gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3); // Freon mix
750
751 //-- HONY Layer definition
752 parfp[1] = khhony*0.5;
753 parfp[2] = kwhonz*0.5;
754 gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3); // honeycomb (Nomex)
755 // positioning 2 HONY Layers on FSTR volume
756 posfp[1] =-khstripy*0.5+parfp[1];
757 gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
758 gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
759
760 //-- PCB Layer definition
761 parfp[1] = khpcby*0.5;
762 parfp[2] = kwpcbz1*0.5;
763 gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3); // G10
764 parfp[2] = kwpcbz2*0.5;
765 gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3); // G10
766 // positioning 2 PCB Layers on FSTR volume
767 posfp[1] =-khstripy*0.5+khhony+parfp[1];
768 gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
769 gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
770
771 //-- central PCB layer definition
772 parfp[1] = khcpcby*0.5;
773 parfp[2] = kwcpcbz*0.5;
774 gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3); // G10
775 // positioning the central PCB layer
776 gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
777
778 // Sensitive volume
779 Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
780 gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3); // sensitive ...
781 // dividing FSEN along z in knz=2 and along x in knx=48
782 gMC->Gsdvn("FSEZ","FSEN",knz,3);
783 gMC->Gsdvn("FPAD","FSEZ",knx,1);
784 // positioning a Sensitive layer inside FPCB
785 gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
786
787 //-- RED GLASS Layer definition
788 parfp[1] = khrgly*0.5;
789 parfp[2] = kwrglz*0.5;
790 gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3); // glass
791 // positioning 4 RED GLASS Layers on FSTR volume
792 posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
793 gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
794 gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
795 posfp[1] = (khcpcby+khrgly)*0.5;
796 gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
797 gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
798
1ac1b685 799 //-- GLASS Layer definition
800 parfp[1] = khglassy*0.5;
801 parfp[2] = kwglfz*0.5;
802 gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3); // glass
803
804 // positioning 4 GLASS Layers on FSTR volume
805 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
806 gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
807 gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
808 posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
809 gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
810 gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
811
812 //-- FREON Layer definition
813 parfp[1] = khfiliy*0.5;
814 gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3); // freon
815
816 // positioning 2 FREON Layers on FSTR volume
817 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
818 gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
819 gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
820
821 /*
d3c7bfac 822 //-- GLASS+FISHLINE Layer definition
823 parfp[1] = khglfy*0.5;
824 parfp[2] = kwglfz*0.5;
825 gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
826
827 // positioning 2 GLASS+FISHLINE Layers on FSTR volume
828 posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
829 gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
830 gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
1ac1b685 831 */
d3c7bfac 832
833 // Positioning the Strips (FSTR) in the FLT volumes
834 Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
835 fTOFGeometry->NStripB(),
836 fTOFGeometry->NStripA(),
837 fTOFGeometry->NStripB(),
838 fTOFGeometry->NStripC()};
839
840 Int_t totalStrip = 0;
1ac1b685 841 Float_t xpos, zpos, ypos, ang;
d3c7bfac 842 for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
843 if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
844 for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
845
846 ang = fTOFGeometry->GetAngles(iplate,istrip);
847 AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
848
849 if (ang>0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
850 else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
851 else if (ang<0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
852
1ac1b685 853 xpos = 0.;
d3c7bfac 854 zpos = fTOFGeometry->GetDistances(iplate,istrip);
855 ypos = fTOFGeometry->GetHeights(iplate,istrip);
856
1ac1b685 857 gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1], "ONLY");
d3c7bfac 858
859 if (fTOFHoles) {
1ac1b685 860 if (istrip+totalStrip+1>53) gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTC", xpos, ypos,-zpos-(zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5,idrotm[istrip+totalStrip+1],"ONLY");
861 if (istrip+totalStrip+1<39) gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTB", xpos, ypos,-zpos+(zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5,idrotm[istrip+totalStrip+1],"ONLY");
d3c7bfac 862 }
863 }
864 }
865
866 // 1.5 cm Al honeycomb layer between strips and cards
867 par[0] = xFLT*0.5;
868 par[1] = kHoneycombLayerThickness*0.5;
869 par[2] = zFLTA*0.5;
1ac1b685 870 gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3); // Al honeycomb
871
872 xcoor = 0.;
873 ycoor = kHoneycombLayerThickness*0.5;
874 zcoor = 0.;
875 gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 876
877 if (fTOFHoles) {
1ac1b685 878 par[0] = xFLT*0.5;
879 par[1] = kHoneycombLayerThickness*0.5;
d3c7bfac 880 par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
1ac1b685 881 gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3); // Al honeycomb
882
883 xcoor = 0.;
d3c7bfac 884 ycoor = kHoneycombLayerThickness*0.5;
1ac1b685 885 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
886 gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
887 gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 888 }
889
890 // frame of Air
1ac1b685 891 par[0] = xFLT*0.5;
7fa116c9 892 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
d3c7bfac 893 par[2] = zFLTA *0.5;
d3c7bfac 894 gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
1ac1b685 895
896 xcoor = 0.;
7fa116c9 897 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
1ac1b685 898 zcoor = 0.;
899 gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 900
901 if (fTOFHoles) {
1ac1b685 902 par[0] = xFLT*0.5;
7fa116c9 903 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
d3c7bfac 904 par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
905 gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
d3c7bfac 906 gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
1ac1b685 907
908 xcoor = 0.;
7fa116c9 909 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
1ac1b685 910 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
911 gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
912 gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
d3c7bfac 913 }
914
915 // start with cards and cooling tubes
916 // finally, cards, cooling tubes and layer for thermal dispersion
917 // 3 volumes
918
919 // see GEOM200 in GEANT manual
920
d3c7bfac 921 Float_t cardpar[3];
922
923 // card volume definition
924 cardpar[0]= xFLT*0.5;
925 cardpar[1]= 5.;
926 cardpar[2]= 0.1;
927 gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card
928
929 //alu plate volume definition
930 cardpar[1]= 3.5;
931 cardpar[2]= 0.05;
932 gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
933
934 // tube volume definition
935 Float_t tubepar[3];
936 tubepar[0]= 0.;
937 tubepar[1]= 0.4;
938 tubepar[2]= 61.;
939 gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
940
941 //tubepar[0]= 0.;
942 tubepar[1]= 0.35;
943 //tubepar[2]= 61.;
944 gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
945 // positioning water tube into the steel one
946 gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
947
948 // rotation matrix
949 AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
950
951 // central module positioning
952 Float_t cardpos[3], aplpos2;
1ac1b685 953 Float_t stepforcardA = 6.625;
954 Float_t tdis = 0.6;
d3c7bfac 955 Float_t aplpos1 = -2.;
956
957 cardpos[0]= 0.;
958 cardpos[1]= -0.5;
959 cardpos[2]= -53.;
960 // tubepos= -53.+tdis;
961 Int_t icard;
962 for (icard=39; icard<54; ++icard) {
963 cardpos[2]= cardpos[2]+stepforcardA;
964 aplpos2 = cardpos[2]+0.15;
965 gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
966 gMC->Gspos("FALP",icard,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
967 gMC->Gspos("FTUB",icard,"FAIA", 0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
968 }
969
970 // intermediate module positioning
971 Float_t stepforcardB= 7.05;
972 Float_t offs = 53.;
973
974 cardpos[2]= offs;
975 for (icard=20; icard<39; ++icard) {
976 cardpos[2]= cardpos[2]+stepforcardB;
977 aplpos2 = cardpos[2]+0.15;
978
979 gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
980 gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
981 gMC->Gspos("FTUB",icard+34,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
982 gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
983 gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
984 gMC->Gspos("FTUB",58-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
985
986 if (fTOFHoles) {
987 gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
988 gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
989 gMC->Gspos("FTUB",icard+34+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
990 gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
991 gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
992 gMC->Gspos("FTUB",58-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
993 }
994
995 }
996
997 // outer module positioning
998 Float_t stepforcardC= 8.45238;
999 offs += zlenB;
1000 cardpos[2]= offs;
1001 for (icard=1; icard<20; ++icard) {
1002 cardpos[2]= cardpos[2]+stepforcardC;
1003 aplpos2 = cardpos[2]+0.15;
1004
1005 gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1006 gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1007 gMC->Gspos("FTUB",icard+72,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1008 gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1009 gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1010 gMC->Gspos("FTUB",20-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1011
1012 if (fTOFHoles) {
1013 gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1014 gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1015 gMC->Gspos("FTUB",icard+72+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1016 gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1017 gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1018 gMC->Gspos("FTUB",20-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1019 }
1020 }
1021
1022}
1023//_____________________________________________________________________________
1024void AliTOFv5T0::DrawModule() const
1025{
1026 //
1027 // Draw a shaded view of the Time Of Flight version 4
1028 //
1029
1030 // Set everything unseen
1031 gMC->Gsatt("*", "seen", -1);
1032
1033 //
1034 //Set volumes visible
1035 //
1036
1037 //Set ALIC mother transparent
1038 gMC->Gsatt("ALIC","SEEN", 0);
1039
1040//=====> Level 1
1041 // Level 1 for TOF volumes
1042 gMC->Gsatt("B077","seen", 0);
1043
1044//=====> Level 2
1045 // Level 2 for TOF volumes
1046 gMC->Gsatt("B071","seen", 0);
1047 gMC->Gsatt("B074","seen", 0);
1048 gMC->Gsatt("B075","seen", 0);
1049 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1050 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1051
1052 // Level 2 of B071
1053 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1054 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1055 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1056 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1057 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1058
1059 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1060 gMC->Gsatt("BTO1","seen", 0);
1061
1062 // Level 2 of B074
1063 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1064 gMC->Gsatt("BTO2","seen", 0);
1065
1066 // Level 2 of B075
1067 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1068 gMC->Gsatt("BTO3","seen", 0);
1069
1070 // Level 3 of B071, B074 and B075
1071 gMC->Gsatt("FTOA","SEEN", 0);
1072 if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
1073
1074 // Level 4 of B071, B074 and B075
1075 gMC->Gsatt("FLTA","SEEN", 0);
1076 if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
1077 if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
1078
1079 // Level 5 of B071, B074 and B075
1080 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1081 if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1082 if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1083
1084 gMC->Gsatt("FALA","SEEN", 0);
1085 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1086
1087 gMC->Gsatt("FPEA","SEEN", 1);
1088 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
1089
1090 gMC->Gsatt("FSTR","SEEN",-1); // all FSTR sub-levels skipped -
1091
1092 gMC->Gsatt("FWZ1","SEEN", 0);
1093 gMC->Gsatt("FWZ2","SEEN", 0);
1094 gMC->Gsatt("FWZ3","SEEN", 0);
1095 gMC->Gsatt("FWZ4","SEEN", 0);
1096 if (fTOFHoles) {
1097 gMC->Gsatt("FZ1B","SEEN", 0);
1098 gMC->Gsatt("FZ1C","SEEN", 0);
1099 gMC->Gsatt("FZ2B","SEEN", 0);
1100 }
1101
1102 gMC->Gdopt("hide", "on");
1103 gMC->Gdopt("shad", "on");
1104 gMC->Gsatt("*", "fill", 7);
1105 gMC->SetClipBox(".");
1106 gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1107 gMC->DefaultRange();
1108 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1109 gMC->Gdhead(1111, "Time Of Flight");
1110 gMC->Gdman(18, 3, "MAN");
1111 gMC->Gdopt("hide","off");
1112}
1113//_____________________________________________________________________________
7aeeaf38 1114void AliTOFv5T0::DrawDetectorModules() const
d3c7bfac 1115{
1116 //
1117 // Draw a shaded view of the TOF detector version 4
1118 //
1119
1120 // Set everything unseen
1121 gMC->Gsatt("*", "seen", -1);
1122
1123 //
1124 //Set volumes visible
1125 //
1126
1127 //Set ALIC mother transparent
1128 gMC->Gsatt("ALIC","SEEN", 0);
1129
1130//=====> Level 1
1131 // Level 1 for TOF volumes
1132 gMC->Gsatt("B077","seen", 0);
1133
1134//=====> Level 2
1135 // Level 2 for TOF volumes
1136 gMC->Gsatt("B071","seen", 0);
1137 gMC->Gsatt("B074","seen", 0);
1138 gMC->Gsatt("B075","seen", 0);
1139 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1140 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1141
1142 // Level 2 of B071
1143 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1144 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1145 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1146 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1147 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1148
1149 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1150 gMC->Gsatt("BTO1","seen", 0);
1151
1152 // Level 2 of B074
1153 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1154 gMC->Gsatt("BTO2","seen", 0);
1155
1156 // Level 2 of B075
1157 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1158 gMC->Gsatt("BTO3","seen", 0);
1159
1160 // Level 3 of B071, B075 and B074
1161 gMC->Gsatt("FTOA","seen",-2); // all FTOA sub-levels skipped -
1162 if (fTOFHoles) {
1163 gMC->Gsatt("FTOB","seen",-2); // all FTOB sub-levels skipped -
1164 gMC->Gsatt("FTOC","seen",-2); // all FTOC sub-levels skipped -
1165 }
1166
1167 gMC->Gdopt("hide","on");
1168 gMC->Gdopt("shad","on");
1169 gMC->Gsatt("*", "fill", 5);
1170 gMC->SetClipBox(".");
1171 gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1172 gMC->DefaultRange();
1173 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1174 gMC->Gdhead(1111,"TOF detector");
1175 gMC->Gdman(18, 3, "MAN");
1176 gMC->Gdopt("hide","off");
1177}
1178
1179//_____________________________________________________________________________
7aeeaf38 1180void AliTOFv5T0::DrawDetectorStrips() const
d3c7bfac 1181{
1182 //
1183 // Draw a shaded view of the TOF strips for version 4
1184 //
1185
1186 // Set everything unseen
1187 gMC->Gsatt("*", "seen", -1);
1188
1189 //
1190 //Set volumes visible
1191 //
1192
1193 //Set ALIC mother transparent
1194 gMC->Gsatt("ALIC","SEEN", 0);
1195
1196//=====> Level 1
1197 // Level 1 for TOF volumes
1198 gMC->Gsatt("B077","seen", 0);
1199
1200//=====> Level 2
1201 // Level 2 for TOF volumes
1202 gMC->Gsatt("B071","seen", 0);
1203 gMC->Gsatt("B074","seen", 0);
1204 gMC->Gsatt("B075","seen", 0);
1205 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1206 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1207
1208 // Level 2 of B071
1209 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1210 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1211 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1212 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1213 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1214
1215 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1216 gMC->Gsatt("BTO1","seen", 0);
1217
1218 // Level 2 of B074
1219 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1220 gMC->Gsatt("BTO2","seen", 0);
1221
1222 // Level 2 of B075
1223 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1224 gMC->Gsatt("BTO3","seen", 0);
1225
1226 // Level 3 of B071, B074 and B075
1227 gMC->Gsatt("FTOA","SEEN", 0);
1228 if (fTOFHoles) {
1229 gMC->Gsatt("FTOB","SEEN", 0);
1230 gMC->Gsatt("FTOC","SEEN", 0);
1231 }
1232
1233 // Level 4 of B071, B074 and B075
1234 gMC->Gsatt("FLTA","SEEN", 0);
1235 if (fTOFHoles) {
1236 gMC->Gsatt("FLTB","SEEN", 0);
1237 gMC->Gsatt("FLTC","SEEN", 0);
1238 }
1239
1240 // Level 5 of B071, B074 and B075
1241 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1242 if (fTOFHoles) {
1243 gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1244 gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1245 }
1246
1247 gMC->Gsatt("FALA","SEEN", 0);
1248 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1249
1250 gMC->Gsatt("FPEA","SEEN", 0);
1251 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1252
1253 gMC->Gsatt("FSTR","SEEN",-2); // all FSTR sub-levels skipped -
1254
1255 gMC->Gsatt("FWZ1","SEEN", 0);
1256 gMC->Gsatt("FWZ2","SEEN", 0);
1257 gMC->Gsatt("FWZ3","SEEN", 0);
1258 gMC->Gsatt("FWZ4","SEEN", 0);
1259 if (fTOFHoles){
1260 gMC->Gsatt("FZ1B","SEEN", 0);
1261 gMC->Gsatt("FZ1C","SEEN", 0);
1262 gMC->Gsatt("FZ2B","SEEN", 0);
1263 }
1264
1265 /*
1266 // Level 2 of FAIA
1267 // Level 2 of FAIB
1268 // Level 2 of FAIC
1269 gMC->Gsatt("FALP","SEEN",0);
1270 gMC->Gsatt("FCAR","SEEN",0);
1271 gMC->Gsatt("FTUB","SEEN",-1); // all FTUB sub-levels skipped -
1272
1273 // Level 2 of FTUB
1274 gMC->Gsatt("FITU","SEEN",0);
1275 */
1276
1277 /*
1278 // Level 2 of FSTR
1279 gMC->Gsatt("FGLF","SEEN",0);
1280 gMC->Gsatt("FHON","SEEN",0);
1281 gMC->Gsatt("FPC1","SEEN",0);
1282 gMC->Gsatt("FPC2","SEEN",0);
1283 gMC->Gsatt("FPCB","SEEN",0);
1284 gMC->Gsatt("FRGL","SEEN",0);
1285
1286 // Level 2 of FPCB => Level 3 of FSTR
1287 gMC->Gsatt("FSEN","SEEN",0);
1288 gMC->Gsatt("FSEZ","SEEN",0);
1289 gMC->Gsatt("FPAD","SEEN",1);
1290 */
1291
1292 gMC->Gdopt("hide","on");
1293 gMC->Gdopt("shad","on");
1294 gMC->Gsatt("*", "fill", 5);
1295 gMC->SetClipBox(".");
1296 gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1297 gMC->DefaultRange();
1298 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1299 gMC->Gdhead(1111,"TOF Strips");
1300 gMC->Gdman(18, 3, "MAN");
1301 gMC->Gdopt("hide","off");
1302}
1303
1304//_____________________________________________________________________________
1305void AliTOFv5T0::CreateMaterials()
1306{
1307 //
1308 // Define materials for the Time Of Flight
1309 //
1310
1311 //AliTOF::CreateMaterials();
1312
0e46b9ae 1313 AliMagF *magneticField = (AliMagF*)gAlice->Field();
1314
1315 Int_t isxfld = magneticField->Integ();
1316 Float_t sxmgmx = magneticField->Max();
1317
d3c7bfac 1318 Float_t we[7], ae[7], na[7], fr[7], vl[7];
1319 Int_t i;
1320
d3c7bfac 1321 //--- Quartz (SiO2) to simulate float glass
1322 // density tuned to have correct float glass
1323 // radiation length
1324 Float_t aq[2] = { 28.0855,15.9994 };
1325 Float_t zq[2] = { 14.,8. };
1326 Float_t wq[2] = { 1.,2. };
1327 Float_t dq = 2.55; // std value: 2.2
1328 Int_t nq = -2;
1329
1330 // --- Nomex
1331 Float_t anox[4] = {12.01,1.01,16.00,14.01};
1332 Float_t znox[4] = { 6., 1., 8., 7.};
1333 Float_t wnox[4] = {14., 22., 2., 2.};
1334 Float_t dnox = 0.048;
1335 Int_t nnox = -4;
1336
1337 // { Si, C, H, O }
1338 Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1339 Float_t zg10[4] = {14., 6., 1., 8.};
1340 Float_t wmatg10[4];
1341 Int_t nlmatg10 = 4;
1342 for (i = 0; i < nlmatg10; ++i) {
1343 ae[i] = ag10[i];
1344 vl[i] = 1.;
1345 }
1346 ae[4] = 16.00;
1347 vl[4] = 1.;
1348 na[0] = 1.;
1349 na[1] = 14.;
1350 na[2] = 20.;
1351 na[3] = 2.;
1352 na[4] = 3.;
1353 fr[0] = 0.6;
1354 fr[1] = 0.4;
1355 fr[2] = 0.4;
1356 fr[3] = 0.6;
1357 fr[4] = 0.4;
1358 MaterialMixer(we,ae,na,fr,vl,5);
1359 we[3] += we[4];
1360 wmatg10[0]= we[0];
1361 wmatg10[1]= we[1];
1362 wmatg10[2]= we[2];
1363 wmatg10[3]= we[3];
1364 Float_t densg10 = 1.7;
1365
1366 // -- Water
1367 Float_t awa[2] = { 1., 16. };
1368 Float_t zwa[2] = { 1., 8. };
1369 Float_t wwa[2] = { 2., 1. };
1370 Float_t dwa = 1.0;
1371 Int_t nwa = -2;
1372
1373 // stainless steel
1374 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1375 Float_t zsteel[4] = { 26.,24.,28.,14. };
1376 Float_t wsteel[4] = { .715,.18,.1,.005 };
1377
1378 // AIR
1379 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1380 Float_t zAir[4]={6.,7.,8.,18.};
1381 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1382 Float_t dAir = 1.20479E-3;
1383
1384 // --- fibre glass
1385 Float_t afg[4] = {28.09,16.00,12.01,1.01};
1386 Float_t zfg[4] = {14., 8., 6., 1.};
1387 Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1388 Float_t dfg = 1.111;
1389 Int_t nfg = 4;
1390
1391 // --- Freon C2F4H2 + SF6
1392 Float_t afre[4]= {12.01,1.01,19.00,32.07};
1393 Float_t zfre[4]= { 6., 1., 9., 16.};
1394 Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1395 Float_t densfre= 0.00375;
1396 Int_t nfre = 4;
1397
1ac1b685 1398 //char namat[15] = " ";
1399 //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1400 //Int_t nbuf;
d3c7bfac 1401
1402 AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1403 AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1404 AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1405 AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1406 AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1407 AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1408 AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
1409 AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1ac1b685 1410 /*
d3c7bfac 1411 // get freon and glass
1412 gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1413 gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1414
1415 // --- glass-freon
1416 Float_t wgfr[2]= {0.0011,0.9989};
1417 Float_t dgfr = 1.434;
1418 Int_t ngfr = 2;
1419 AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1ac1b685 1420 */
d3c7bfac 1421 AliMixture ( 9, "Water$", awa, zwa, dwa, nwa, wwa);
1422 AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1423
1424 Float_t epsil, stmin, deemax, stemax;
1425
1426 // Previous data
1427 // EPSIL = 0.1 ! Tracking precision,
1428 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
1429 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
1430 // STMIN = 0.1
1431
1432 // New data
1433 epsil = .001; // Tracking precision,
1434 stemax = -1.; // Maximum displacement for multiple scattering
1435 deemax = -.3; // Maximum fractional energy loss, DLS
1436 stmin = -.8;
1437
1438 AliMedium( 1, "Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1439 AliMedium( 2,"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1440 AliMedium( 3,"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1441 AliMedium( 4,"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1ac1b685 1442 //AliMedium( 5,"glass-freon$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
d3c7bfac 1443 AliMedium( 6,"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1444 AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1445 AliMedium( 8,"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1446 AliMedium( 9,"PCB-S$", 2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1447 AliMedium(10,"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1448 AliMedium(11,"Water$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1449 AliMedium(12,"STEEL$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1450
1451}
1452//_____________________________________________________________________________
1453void AliTOFv5T0::Init()
1454{
1455 //
1456 // Initialise the detector after the geometry has been defined
1457 //
1458 AliDebug(1, "**************************************"
1459 " TOF "
1460 "**************************************");
1461 AliDebug(1, " Version 4 of TOF initialing, "
1462 "symmetric TOF - Full Coverage version");
1463
1464 AliTOF::Init();
1465
1466 fIdFTOA = gMC->VolId("FTOA");
1467 if (fTOFHoles) {
1468 fIdFTOB = gMC->VolId("FTOB");
1469 fIdFTOC = gMC->VolId("FTOC");
1470 }
1471 fIdFLTA = gMC->VolId("FLTA");
1472 if (fTOFHoles) {
1473 fIdFLTB = gMC->VolId("FLTB");
1474 fIdFLTC = gMC->VolId("FLTC");
1475 }
1476
1477 AliDebug(1, "**************************************"
1478 " TOF "
1479 "**************************************");
1480}
1481
1482//_____________________________________________________________________________
1483void AliTOFv5T0::StepManager()
1484{
1485
1486 //
1487 // Procedure called at each step in the Time Of Flight
1488 //
1489
1490 TLorentzVector mom, pos;
1491 Float_t xm[3],pm[3],xpad[3],ppad[3];
0dadb22b 1492 Float_t hits[14];
d3c7bfac 1493 Int_t vol[5];
0dadb22b 1494 Int_t sector, plate, padx, padz, strip;
d3c7bfac 1495 Int_t copy, padzid, padxid, stripid, i;
1496 Int_t *idtmed = fIdtmed->GetArray()-499;
1497 Float_t incidenceAngle;
1498
0dadb22b 1499 const char* volpath;
1500
1501 Int_t index = 0;
1502
d3c7bfac 1503 if(
1504 gMC->IsTrackEntering()
1505 && gMC->TrackCharge()
4402e7cb 1506 //&& gMC->GetMedium()==idtmed[508]
1507 && gMC->CurrentMedium()==idtmed[508]
d3c7bfac 1508 && gMC->CurrentVolID(copy)==fIdSens
1509 )
1510 {
1511
0e46b9ae 1512 AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1513
e6add757 1514 AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
0e46b9ae 1515 //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
d3c7bfac 1516
1517 // getting information about hit volumes
1518
1519 padzid=gMC->CurrentVolOffID(1,copy);
1520 padz=copy;
1521 padz--;
1522
1523 padxid=gMC->CurrentVolOffID(0,copy);
1524 padx=copy;
1525 padx--;
1526
1527 stripid=gMC->CurrentVolOffID(4,copy);
1528 strip=copy;
1529 strip--;
1530
1531 gMC->TrackPosition(pos);
1532 gMC->TrackMomentum(mom);
1533
1534 Double_t normMom=1./mom.Rho();
1535
1536 // getting the coordinates in pad ref system
1537
1538 xm[0] = (Float_t)pos.X();
1539 xm[1] = (Float_t)pos.Y();
1540 xm[2] = (Float_t)pos.Z();
1541
1542 pm[0] = (Float_t)mom.X()*normMom;
1543 pm[1] = (Float_t)mom.Y()*normMom;
1544 pm[2] = (Float_t)mom.Z()*normMom;
1545
1546 gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1547 gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1548
1549
1550 if (TMath::Abs(ppad[1])>1) {
1551 AliWarning("Abs(ppad) > 1");
1552 ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1553 }
1554 incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1555
0dadb22b 1556 plate = -1;
d3c7bfac 1557 if (strip < fTOFGeometry->NStripC()) {
1558 plate = 0;
1559 //strip = strip;
1560 }
1561 else if (strip >= fTOFGeometry->NStripC() &&
1562 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1563 plate = 1;
1564 strip = strip - fTOFGeometry->NStripC();
1565 }
1566 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1567 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1568 plate = 2;
1569 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1570 }
1571 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1572 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1573 plate = 3;
1574 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1575 }
1576 else {
1577 plate = 4;
1578 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1579 }
1580
06e24a91 1581 volpath=gMC->CurrentVolOffName(7);
1582 index=atoi(&volpath[4]);
0dadb22b 1583 sector=-1;
96c2b15b 1584 sector=index;
1585
1586 //Old 6h convention
1587 // if(index<5){
1588 // sector=index+13;
1589 // }
1590 // else{
1591 // sector=index-5;
1592 // }
06e24a91 1593
d3c7bfac 1594 for(i=0;i<3;++i) {
1595 hits[i] = pos[i];
1596 hits[i+3] = pm[i];
1597 }
1598
1599 hits[6] = mom.Rho();
1600 hits[7] = pos[3];
1601 hits[8] = xpad[0];
1602 hits[9] = xpad[1];
1603 hits[10]= xpad[2];
1604 hits[11]= incidenceAngle;
1605 hits[12]= gMC->Edep();
1606 hits[13]= gMC->TrackLength();
1607
1608 vol[0]= sector;
1609 vol[1]= plate;
1610 vol[2]= strip;
1611 vol[3]= padx;
1612 vol[4]= padz;
1613
0e46b9ae 1614 AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1615 //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
d3c7bfac 1616 }
1617}
1618//-------------------------------------------------------------------
7aeeaf38 1619void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1620{
d3c7bfac 1621 // a[] atomic weights vector (in)
1622 // (atoms present in more compound appear separately)
1623 // m[] number of corresponding atoms in the mixture (in)
1624 // d[] fraction of the compound relative to the corresponding atoms (in)
1625 // s[] further possible weights " " " " (in)
1626 Float_t t = 0.;
1627 for (Int_t i = 0; i < n; ++i) {
1628 p[i] = a[i]*m[i]*d[i]*s[i];
1629 t += p[i];
1630 }
1631 for (Int_t i = 0; i < n; ++i) {
1632 p[i] = p[i]/t;
1633 // AliInfo(Form((\n weight[%i] = %f (,i,p[i]));
1634 }
1635}