1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.22 2007/10/07 19:40:46 decaro
19 right handling of l2t matrices and alignable entries in case of TOF staging geometry
21 Revision 1.21 2007/10/04 13:15:30 arcelli
22 updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
24 Revision 1.20 2007/10/03 18:07:22 arcelli
25 right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
27 Revision 1.19 2007/10/03 10:41:12 arcelli
28 adding tracking-to-local matrices for new AliTOFcluster
30 Revision 1.18 2007/07/27 08:14:48 morsch
31 Write all track references into the same branch.
33 Revision 1.17 2007/05/14 14:41:13 decaro
34 Fix a bug in FTOA volume positionig inside BTOF13,14,15,16,17 in case of holes in 11th and 12th sectors
36 Revision 1.16 2007/05/04 12:59:26 arcelli
37 Change the TOF SM paths for misalignment (one layer up)
39 Revision 1.15 2007/02/19 15:41:55 decaro
40 Coding convention: few corrections
42 Revision 1.14 2006/10/17 15:33:14 arcelli
43 Moving some printout from Info to Debug level
45 Revision 1.13 2006/10/12 16:35:43 arcelli
46 definition of the alignable volumes symbolic names added
48 Revision 1.12 2006/08/22 13:34:46 arcelli
49 removal of effective c++ warnings (C.Zampolli)
51 Revision 1.11 2006/07/12 16:03:44 arcelli
52 updates to match the new numbering of the TOF/TRD mother volumes in FRAME (ALICE convention)
54 Revision 1.10 2006/05/10 18:40:17 hristov
55 Larger strings for the names
57 Revision 1.9 2006/05/04 19:41:42 hristov
58 Possibility for partial TOF geometry (S.Arcelli)
60 Revision 1.8 2006/04/20 22:30:50 hristov
61 Coding conventions (Annalisa)
63 Revision 1.7 2006/04/16 22:29:05 hristov
64 Coding conventions (Annalisa)
66 Revision 1.6 2006/03/20 08:20:35 decaro
67 Al layer: positioning correction
69 Revision 1.5 2006/03/20 07:54:20 decaro
70 Correction of some layer thickness
72 Revision 1.4 2006/03/13 12:35:44 decaro
73 Suppression of fractional Z warning
75 Revision 1.3 2006/02/28 10:38:00 decaro
76 AliTOFGeometry::fAngles, AliTOFGeometry::fHeights,
77 AliTOFGeometry::fDistances arrays: dimension definition in the right
80 Revision 1.2 2006/02/27 18:12:14 decaro
81 Remove in StepManager the dependence of hit indexes from parametrized
84 Revision 1.1 2005/12/15 08:55:33 decaro
85 New TOF geometry description (V5) -G. Cara Romeo and A. De Caro
88 Revision 0.1 2004 November G. Cara Romeo and A. De Caro
89 Implement new TOF geometry version
91 suppress few volume overlaps
92 (in the 4th TOF geometry version),
93 insert the realistic strip numbers and positions
97 ///////////////////////////////////////////////////////////////////////////////
99 // This class contains the functions for version 5 of the Time Of Flight //
102 // VERSION WITH 5 MODULES AND TILTED STRIPS //
104 // FULL COVERAGE VERSION + OPTION for PHOS holes //
109 <img src="picts/AliTOFv5T0Class.gif"> //
113 ///////////////////////////////////////////////////////////////////////////////
115 #include "TDirectory.h"
117 #include "TGeometry.h"
118 #include "TLorentzVector.h"
120 #include "TVirtualMC.h"
121 #include "TGeoManager.h"
122 #include <TGeoMatrix.h>
123 #include <TGeoPhysicalNode.h>
124 #include <TGeoVolume.h>
126 #include "AliConst.h"
127 #include "AliGeomManager.h"
132 #include "AliTrackReference.h"
134 #include "AliTOFGeometry.h"
135 #include "AliTOFv5T0.h"
137 extern TDirectory *gDirectory;
138 extern TVirtualMC *gMC;
139 extern TGeoManager *gGeoManager;
141 extern AliRun *gAlice;
145 //_____________________________________________________________________________
146 AliTOFv5T0::AliTOFv5T0():
156 // Default constructor
160 //_____________________________________________________________________________
161 AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
162 AliTOF(name,title,"tzero"),
172 // Standard constructor
175 // Check that FRAME is there otherwise we have no place where to
179 AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
181 AliFatal("TOF needs FRAME to be present");
184 if (fTOFGeometry) delete fTOFGeometry;
185 fTOFGeometry = new AliTOFGeometry();
187 if(frame->IsVersion()==1) {
188 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
189 AliDebug(1,"Full Coverage for TOF");
192 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
193 AliDebug(1,"TOF with Holes for PHOS");
196 fTOFGeometry->SetHoles(fTOFHoles);
199 if (fTOFGeometry) delete fTOFGeometry;
200 fTOFGeometry = new AliTOFGeometry();
201 fTOFGeometry->SetHoles(fTOFHoles);
203 //AliTOF::fTOFGeometry = fTOFGeometry;
206 TDirectory* saveDir = gDirectory;
207 gAlice->GetRunLoader()->CdGAFile();
208 fTOFGeometry->Write("TOFgeometry");
213 //_____________________________________________________________________________
214 void AliTOFv5T0::AddAlignableVolumes() const
217 // Create entries for alignable volumes associating the symbolic volume
218 // name with the corresponding volume path. Needs to be syncronized with
219 // eventual changes in the geometry.
222 AliGeomManager::ELayerID idTOF = AliGeomManager::kTOF;
223 Int_t modUID, modnum=0;
228 TString vpL0 = "ALIC_1/B077_1/BSEGMO";
229 TString vpL1 = "_1/BTOF";
231 TString vpL3 = "/FTOA_0";
232 TString vpL4 = "/FLTA_0/FSTR_";
234 TString snSM = "TOF/sm";
235 TString snSTRIP = "/strip";
237 Int_t nSectors=fTOFGeometry->NSectors();
238 Int_t nStrips =fTOFGeometry->NStripA()+
239 2*fTOFGeometry->NStripB()+
240 2*fTOFGeometry->NStripC();
243 // The TOF MRPC Strips
244 // The symbolic names are: TOF/sm00/strip01
250 for (Int_t isect = 0; isect < nSectors; isect++) {
251 for (Int_t istr = 1; istr <= nStrips; istr++) {
253 modUID = AliGeomManager::LayerToVolUID(idTOF,modnum++);
254 if (fTOFSectors[isect]==-1) continue;
256 if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
259 vpL4 = "/FLTB_0/FSTR_";
263 vpL4 = "/FLTC_0/FSTR_";
269 vpL4 = "/FLTA_0/FSTR_";
283 symName += Form("%02d",isect);
285 symName += Form("%02d",istr);
287 AliDebug(2,"--------------------------------------------");
288 AliDebug(2,Form("Alignable object %d", imod));
289 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
290 AliDebug(2,Form("symName=%s\n",symName.Data()));
291 AliDebug(2,"--------------------------------------------");
293 if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data(),modUID))
294 AliError(Form("Alignable entry %s not set",symName.Data()));
296 //T2L matrices for alignment
297 TGeoPNEntry *e = gGeoManager->GetAlignableEntryByUID(modUID);
299 TGeoHMatrix *globMatrix = e->GetGlobalOrig();
300 Double_t phi = 20.0 * (isect % 18) + 10.0;
301 TGeoHMatrix *t2l = new TGeoHMatrix();
303 t2l->MultiplyLeft(&(globMatrix->Inverse()));
307 AliError(Form("Alignable entry %s is not valid!",symName.Data()));
315 // The TOF supermodules
316 // The symbolic names are: TOF/sm00
320 for (Int_t isect = 0; isect < nSectors; isect++) {
329 symName += Form("%02d",isect);
331 AliDebug(2,"--------------------------------------------");
332 AliDebug(2,Form("Alignable object %d", isect+imod));
333 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
334 AliDebug(2,Form("symName=%s\n",symName.Data()));
335 AliDebug(2,"--------------------------------------------");
337 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
342 //____________________________________________________________________________
343 void AliTOFv5T0::BuildGeometry()
346 // Build TOF ROOT geometry for the ALICE event display
349 const int kColorTOF = 27;
351 TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
354 top = globalGeometry->GetNode("alice");
356 // Position the different copies
357 const Float_t krTof =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
358 const Float_t khTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
359 const Int_t kNTof = fTOFGeometry->NSectors();
360 const Float_t kangle = k2PI/kNTof;
362 const Float_t kInterCentrModBorder1 = 49.5;
363 const Float_t kInterCentrModBorder2 = 57.5;
367 // define offset for nodes
368 Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*0.5)*0.5;
369 Float_t zOffsetA = 0.;
370 // Define TOF basic volume
372 char nodeName0[16], nodeName1[16], nodeName2[16];
373 char nodeName3[16], nodeName4[16], rotMatNum[16];
376 new TBRIK("S_TOF_B","TOF box","void",
377 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
378 new TBRIK("S_TOF_C","TOF box","void",
379 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
381 new TBRIK("S_TOF_A","TOF box","void",
382 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
384 for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
387 sprintf(rotMatNum,"rot50%i",nodeNum);
388 sprintf(nodeName0,"FTO00%i",nodeNum);
389 sprintf(nodeName1,"FTO10%i",nodeNum);
390 sprintf(nodeName2,"FTO20%i",nodeNum);
391 sprintf(nodeName3,"FTO30%i",nodeNum);
392 sprintf(nodeName4,"FTO40%i",nodeNum);
395 sprintf(rotMatNum,"rot5%i",nodeNum);
396 sprintf(nodeName0,"FTO0%i",nodeNum);
397 sprintf(nodeName1,"FTO1%i",nodeNum);
398 sprintf(nodeName2,"FTO2%i",nodeNum);
399 sprintf(nodeName3,"FTO3%i",nodeNum);
400 sprintf(nodeName4,"FTO4%i",nodeNum);
403 new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
404 ang = (4.5-nodeNum) * kangle;
408 node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
409 node->SetLineColor(kColorTOF);
413 node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
414 node->SetLineColor(kColorTOF);
419 node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
420 node->SetLineColor(kColorTOF);
422 } // end loop on nodeNum
426 //_____________________________________________________________________________
427 void AliTOFv5T0::CreateGeometry()
430 // Create geometry for Time Of Flight version 0
434 <img src="picts/AliTOFv5T0.gif">
438 // Creates common geometry
440 AliTOF::CreateGeometry();
444 //_____________________________________________________________________________
445 void AliTOFv5T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA,
449 // Definition of the Time Of Fligh Resistive Plate Chambers
452 const Float_t kPi = TMath::Pi();
454 const Float_t kInterCentrModBorder1 = 49.5;
455 const Float_t kInterCentrModBorder2 = 57.5;
456 const Float_t kExterInterModBorder1 = 196.0;
457 const Float_t kExterInterModBorder2 = 203.5;
459 const Float_t kLengthExInModBorder = 4.7;
460 const Float_t kLengthInCeModBorder = 7.0;
462 // Al layers over all internal module walls (cm)
463 const Float_t khAlWall = 0.03;
465 // module wall thickness (cm)
466 const Float_t kModuleWallThickness = 0.3;
468 // Al honeycomb layer between strips and cards (cm)
469 const Float_t kHoneycombLayerThickness = 1.5;
471 AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
472 AliDebug(1, "************************* TOF geometry **************************");
474 // Definition of the Time Of Fligh Resistive Plate Chambers
475 // xFLT, yFLT, zFLT - sizes of TOF modules (large)
477 Float_t xcoor, ycoor, zcoor;
479 Int_t *idtmed = fIdtmed->GetArray()-499;
484 par[2] = zlenA * 0.5;
485 gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3); // fibre glass
490 par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
491 gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3); // fibre glass
492 gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3); // fibre glass
495 // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
497 //AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,-90.);
498 AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,270.);
503 for(Int_t isec=0;isec<18;isec++){
504 if(fTOFSectors[isec]==-1)continue;
506 sprintf(name, "BTOF%d",isec);
507 if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
508 // if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
510 ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
512 gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
513 gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
519 gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
523 // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
525 Float_t xFLT, yFLT, zFLTA;
527 xFLT = xtof - kModuleWallThickness*2.;
528 yFLT = ytof - kModuleWallThickness*2.;
529 zFLTA = zlenA - kModuleWallThickness*2.;
534 gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); // Freon mix
539 gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
544 par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
545 gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
546 gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
550 zcoor = kModuleWallThickness*0.5;
551 gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
552 gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
555 // Layer of Aluminum before detector (FALA, FALB and FALC)
558 par[1] = khAlWall*0.5;
559 par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
560 gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
563 ycoor = (-yFLT + khAlWall)*0.5;
565 gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
568 par[1] = khAlWall*0.5;
569 par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
570 gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
573 ycoor = (-yFLT + khAlWall)*0.5;
574 zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
575 gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
576 gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
579 par[1] = khAlWall*0.5;
580 par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
581 gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
584 ycoor = (-yFLT + khAlWall)*0.5;
585 zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
586 gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
587 gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
591 ycoor = (-yFLT + khAlWall)*0.5;
592 zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
593 gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
594 gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
597 ycoor = (-yFLT + khAlWall)*0.5;
598 zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
599 gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
600 gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
603 Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
605 // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
607 tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
608 alpha = TMath::ATan(tgal);
609 beta = (kPi*0.5 - alpha)*0.5;
610 tgbe = TMath::Tan(beta);
614 trpa[3] = kModuleWallThickness;
615 trpa[4] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
616 trpa[5] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
617 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
618 trpa[7] = kModuleWallThickness;
619 trpa[8] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
620 trpa[9] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
621 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
622 gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11); // fibre glass
624 AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
625 AliMatrix (idrotm[4],90., 90., 0.,0.,90., 0.);
628 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
629 zcoor = kInterCentrModBorder1;
630 gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
631 gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
634 y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
638 trpa[3] = kModuleWallThickness*0.5;
639 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
640 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
641 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
642 trpa[7] = kModuleWallThickness*0.5;
643 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
644 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
645 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
646 gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11); // fibre glass
649 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
650 zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
651 gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
652 gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
655 AliMatrix (idrotm[2],90.,270., 0.,0.,90.,180.);
656 AliMatrix (idrotm[5],90.,270.,180.,0.,90., 0.);
659 ycoor = -kLengthInCeModBorder*0.5;
660 zcoor = kInterCentrModBorder2;
661 gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
662 gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
665 y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
669 trpa[3] = kModuleWallThickness*0.5;
670 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
671 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
672 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
673 trpa[7] = kModuleWallThickness*0.5;
674 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
675 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
676 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
677 gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11); // fibre glass
680 ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
681 zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
682 gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
683 gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
686 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
687 trpa[1] = kModuleWallThickness;
689 trpa[3] = -beta*kRaddeg;
692 gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6); // fibre glass
694 AliMatrix (idrotm[3], alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
695 AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90., 0.);
699 zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
700 gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
701 gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
704 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
705 trpa[1] = kModuleWallThickness*0.5;
707 trpa[3] = -beta*kRaddeg;
710 gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6); // fibre glass
713 ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
714 zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
715 gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
716 gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
719 // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
721 tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
722 alpha = TMath::ATan(tgal);
723 beta = (kPi*0.5 - alpha)*0.5;
724 tgbe = TMath::Tan(beta);
728 trpa[3] = kModuleWallThickness;
729 trpa[4] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
730 trpa[5] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
731 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
732 trpa[7] = kModuleWallThickness;
733 trpa[8] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
734 trpa[9] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
735 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
736 gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11); // fibre glass
739 ycoor = -kLengthExInModBorder*0.5;
740 zcoor = kExterInterModBorder1;
741 gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
742 gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
746 ycoor = -kLengthExInModBorder*0.5;
747 zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
748 gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
749 gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
753 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
754 zcoor = kExterInterModBorder2;
755 gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
756 gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
760 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
761 zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
762 gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
763 gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
766 trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
767 trpa[1] = kModuleWallThickness;
769 trpa[3] = -beta*kRaddeg;
772 gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6); // fibre glass
774 AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
775 AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
779 zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
780 gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
781 gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
786 zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
787 gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
788 gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
792 ///////////////// Detector itself //////////////////////
794 const Int_t knx = fTOFGeometry->NpadX(); // number of pads along x
795 const Int_t knz = fTOFGeometry->NpadZ(); // number of pads along z
796 const Float_t kPadX = fTOFGeometry->XPad(); // pad length along x
797 const Float_t kPadZ = fTOFGeometry->ZPad(); // pad length along z
799 // new description for strip volume -double stack strip-
800 // -- all constants are expressed in cm
801 // heigth of different layers
802 const Float_t khhony = 1.0 ; // heigth of HONY Layer
803 const Float_t khpcby = 0.08 ; // heigth of PCB Layer
804 const Float_t khrgly = 0.055 ; // heigth of RED GLASS Layer
806 const Float_t khfiliy = 0.125 ; // heigth of FISHLINE Layer
807 const Float_t khglassy = 0.160*0.5; // heigth of GLASS Layer
808 const Float_t khglfy = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE Layer
810 const Float_t khcpcby = 0.16 ; // heigth of PCB Central Layer
811 const Float_t kwhonz = 8.1 ; // z dimension of HONEY Layer
812 const Float_t kwpcbz1 = 10.6 ; // z dimension of PCB Lower Layer
813 const Float_t kwpcbz2 = 11.6 ; // z dimension of PCB Upper Layer
814 const Float_t kwcpcbz = 12.4 ; // z dimension of PCB Central Layer
815 const Float_t kwrglz = 8. ; // z dimension of RED GLASS Layer
816 const Float_t kwglfz = 7. ; // z dimension of GLASS+FISHLN Layer
817 const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
818 const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
819 const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
821 // heigth of the FSTR Volume (the strip volume)
822 const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
824 // width of the FSTR Volume (the strip volume)
825 const Float_t kwstripz = kwcpcbz;
826 // length of the FSTR Volume (the strip volume)
827 const Float_t klstripx = fTOFGeometry->StripLength();
829 Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
830 // Coordinates of the strip center in the strip reference frame;
831 // used for positioning internal strip volumes
832 Float_t posfp[3]={0.,0.,0.};
834 // FSTR volume definition-filling this volume with non sensitive Gas Mixture
835 gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3); // Freon mix
837 //-- HONY Layer definition
838 parfp[1] = khhony*0.5;
839 parfp[2] = kwhonz*0.5;
840 gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3); // honeycomb (Nomex)
841 // positioning 2 HONY Layers on FSTR volume
842 posfp[1] =-khstripy*0.5+parfp[1];
843 gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
844 gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
846 //-- PCB Layer definition
847 parfp[1] = khpcby*0.5;
848 parfp[2] = kwpcbz1*0.5;
849 gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3); // G10
850 parfp[2] = kwpcbz2*0.5;
851 gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3); // G10
852 // positioning 2 PCB Layers on FSTR volume
853 posfp[1] =-khstripy*0.5+khhony+parfp[1];
854 gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
855 gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
857 //-- central PCB layer definition
858 parfp[1] = khcpcby*0.5;
859 parfp[2] = kwcpcbz*0.5;
860 gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3); // G10
861 // positioning the central PCB layer
862 gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
865 Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
866 gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3); // sensitive ...
867 // dividing FSEN along z in knz=2 and along x in knx=48
868 gMC->Gsdvn("FSEZ","FSEN",knz,3);
869 gMC->Gsdvn("FPAD","FSEZ",knx,1);
870 // positioning a Sensitive layer inside FPCB
871 gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
873 //-- RED GLASS Layer definition
874 parfp[1] = khrgly*0.5;
875 parfp[2] = kwrglz*0.5;
876 gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3); // glass
877 // positioning 4 RED GLASS Layers on FSTR volume
878 posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
879 gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
880 gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
881 posfp[1] = (khcpcby+khrgly)*0.5;
882 gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
883 gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
885 //-- GLASS Layer definition
886 parfp[1] = khglassy*0.5;
887 parfp[2] = kwglfz*0.5;
888 gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3); // glass
890 // positioning 4 GLASS Layers on FSTR volume
891 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
892 gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
893 gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
894 posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
895 gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
896 gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
898 //-- FREON Layer definition
899 parfp[1] = khfiliy*0.5;
900 gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3); // freon
902 // positioning 2 FREON Layers on FSTR volume
903 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
904 gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
905 gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
908 //-- GLASS+FISHLINE Layer definition
909 parfp[1] = khglfy*0.5;
910 parfp[2] = kwglfz*0.5;
911 gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
913 // positioning 2 GLASS+FISHLINE Layers on FSTR volume
914 posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
915 gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
916 gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
919 // Positioning the Strips (FSTR) in the FLT volumes
920 Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
921 fTOFGeometry->NStripB(),
922 fTOFGeometry->NStripA(),
923 fTOFGeometry->NStripB(),
924 fTOFGeometry->NStripC()};
926 Int_t totalStrip = 0;
927 Float_t xpos, zpos, ypos, ang;
928 for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
929 if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
930 for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
932 ang = fTOFGeometry->GetAngles(iplate,istrip);
933 AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
935 if (ang>0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
936 else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
937 else if (ang<0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
940 zpos = fTOFGeometry->GetDistances(iplate,istrip);
941 ypos = fTOFGeometry->GetHeights(iplate,istrip);
943 gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1], "ONLY");
946 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");
947 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");
952 // 1.5 cm Al honeycomb layer between strips and cards
954 par[1] = kHoneycombLayerThickness*0.5;
956 gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3); // Al honeycomb
959 ycoor = kHoneycombLayerThickness*0.5;
961 gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
965 par[1] = kHoneycombLayerThickness*0.5;
966 par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
967 gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3); // Al honeycomb
970 ycoor = kHoneycombLayerThickness*0.5;
971 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
972 gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
973 gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
978 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
980 gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
983 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
985 gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
989 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
990 par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
991 gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
992 gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
995 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
996 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
997 gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
998 gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
1001 // start with cards and cooling tubes
1002 // finally, cards, cooling tubes and layer for thermal dispersion
1005 // see GEOM200 in GEANT manual
1009 // card volume definition
1010 cardpar[0]= xFLT*0.5;
1013 gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card
1015 //alu plate volume definition
1018 gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
1020 // tube volume definition
1025 gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
1030 gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
1031 // positioning water tube into the steel one
1032 gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
1035 AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
1037 // central module positioning
1038 Float_t cardpos[3], aplpos2;
1039 Float_t stepforcardA = 6.625;
1041 Float_t aplpos1 = -2.;
1046 // tubepos= -53.+tdis;
1048 for (icard=39; icard<54; ++icard) {
1049 cardpos[2]= cardpos[2]+stepforcardA;
1050 aplpos2 = cardpos[2]+0.15;
1051 gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1052 gMC->Gspos("FALP",icard,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1053 gMC->Gspos("FTUB",icard,"FAIA", 0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
1056 // intermediate module positioning
1057 Float_t stepforcardB= 7.05;
1061 for (icard=20; icard<39; ++icard) {
1062 cardpos[2]= cardpos[2]+stepforcardB;
1063 aplpos2 = cardpos[2]+0.15;
1065 gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1066 gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1067 gMC->Gspos("FTUB",icard+34,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1068 gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1069 gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1070 gMC->Gspos("FTUB",58-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1073 gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1074 gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1075 gMC->Gspos("FTUB",icard+34+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1076 gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1077 gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1078 gMC->Gspos("FTUB",58-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1083 // outer module positioning
1084 Float_t stepforcardC= 8.45238;
1087 for (icard=1; icard<20; ++icard) {
1088 cardpos[2]= cardpos[2]+stepforcardC;
1089 aplpos2 = cardpos[2]+0.15;
1091 gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1092 gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1093 gMC->Gspos("FTUB",icard+72,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1094 gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1095 gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1096 gMC->Gspos("FTUB",20-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1099 gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1100 gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1101 gMC->Gspos("FTUB",icard+72+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1102 gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1103 gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1104 gMC->Gspos("FTUB",20-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1109 //_____________________________________________________________________________
1110 void AliTOFv5T0::DrawModule() const
1113 // Draw a shaded view of the Time Of Flight version 4
1116 // Set everything unseen
1117 gMC->Gsatt("*", "seen", -1);
1120 //Set volumes visible
1123 //Set ALIC mother transparent
1124 gMC->Gsatt("ALIC","SEEN", 0);
1127 // Level 1 for TOF volumes
1128 gMC->Gsatt("B077","seen", 0);
1131 // Level 2 for TOF volumes
1132 gMC->Gsatt("B071","seen", 0);
1133 gMC->Gsatt("B074","seen", 0);
1134 gMC->Gsatt("B075","seen", 0);
1135 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1136 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1139 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1140 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1141 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1142 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1143 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1145 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1146 gMC->Gsatt("BTO1","seen", 0);
1149 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1150 gMC->Gsatt("BTO2","seen", 0);
1153 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1154 gMC->Gsatt("BTO3","seen", 0);
1156 // Level 3 of B071, B074 and B075
1157 gMC->Gsatt("FTOA","SEEN", 0);
1158 if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
1160 // Level 4 of B071, B074 and B075
1161 gMC->Gsatt("FLTA","SEEN", 0);
1162 if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
1163 if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
1165 // Level 5 of B071, B074 and B075
1166 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1167 if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1168 if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1170 gMC->Gsatt("FALA","SEEN", 0);
1171 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1173 gMC->Gsatt("FPEA","SEEN", 1);
1174 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
1176 gMC->Gsatt("FSTR","SEEN",-1); // all FSTR sub-levels skipped -
1178 gMC->Gsatt("FWZ1","SEEN", 0);
1179 gMC->Gsatt("FWZ2","SEEN", 0);
1180 gMC->Gsatt("FWZ3","SEEN", 0);
1181 gMC->Gsatt("FWZ4","SEEN", 0);
1183 gMC->Gsatt("FZ1B","SEEN", 0);
1184 gMC->Gsatt("FZ1C","SEEN", 0);
1185 gMC->Gsatt("FZ2B","SEEN", 0);
1188 gMC->Gdopt("hide", "on");
1189 gMC->Gdopt("shad", "on");
1190 gMC->Gsatt("*", "fill", 7);
1191 gMC->SetClipBox(".");
1192 gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1193 gMC->DefaultRange();
1194 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1195 gMC->Gdhead(1111, "Time Of Flight");
1196 gMC->Gdman(18, 3, "MAN");
1197 gMC->Gdopt("hide","off");
1199 //_____________________________________________________________________________
1200 void AliTOFv5T0::DrawDetectorModules() const
1203 // Draw a shaded view of the TOF detector version 4
1206 // Set everything unseen
1207 gMC->Gsatt("*", "seen", -1);
1210 //Set volumes visible
1213 //Set ALIC mother transparent
1214 gMC->Gsatt("ALIC","SEEN", 0);
1217 // Level 1 for TOF volumes
1218 gMC->Gsatt("B077","seen", 0);
1221 // Level 2 for TOF volumes
1222 gMC->Gsatt("B071","seen", 0);
1223 gMC->Gsatt("B074","seen", 0);
1224 gMC->Gsatt("B075","seen", 0);
1225 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1226 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1229 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1230 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1231 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1232 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1233 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1235 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1236 gMC->Gsatt("BTO1","seen", 0);
1239 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1240 gMC->Gsatt("BTO2","seen", 0);
1243 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1244 gMC->Gsatt("BTO3","seen", 0);
1246 // Level 3 of B071, B075 and B074
1247 gMC->Gsatt("FTOA","seen",-2); // all FTOA sub-levels skipped -
1249 gMC->Gsatt("FTOB","seen",-2); // all FTOB sub-levels skipped -
1250 gMC->Gsatt("FTOC","seen",-2); // all FTOC sub-levels skipped -
1253 gMC->Gdopt("hide","on");
1254 gMC->Gdopt("shad","on");
1255 gMC->Gsatt("*", "fill", 5);
1256 gMC->SetClipBox(".");
1257 gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1258 gMC->DefaultRange();
1259 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1260 gMC->Gdhead(1111,"TOF detector");
1261 gMC->Gdman(18, 3, "MAN");
1262 gMC->Gdopt("hide","off");
1265 //_____________________________________________________________________________
1266 void AliTOFv5T0::DrawDetectorStrips() const
1269 // Draw a shaded view of the TOF strips for version 4
1272 // Set everything unseen
1273 gMC->Gsatt("*", "seen", -1);
1276 //Set volumes visible
1279 //Set ALIC mother transparent
1280 gMC->Gsatt("ALIC","SEEN", 0);
1283 // Level 1 for TOF volumes
1284 gMC->Gsatt("B077","seen", 0);
1287 // Level 2 for TOF volumes
1288 gMC->Gsatt("B071","seen", 0);
1289 gMC->Gsatt("B074","seen", 0);
1290 gMC->Gsatt("B075","seen", 0);
1291 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1292 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1295 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1296 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1297 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1298 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1299 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1301 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1302 gMC->Gsatt("BTO1","seen", 0);
1305 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1306 gMC->Gsatt("BTO2","seen", 0);
1309 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1310 gMC->Gsatt("BTO3","seen", 0);
1312 // Level 3 of B071, B074 and B075
1313 gMC->Gsatt("FTOA","SEEN", 0);
1315 gMC->Gsatt("FTOB","SEEN", 0);
1316 gMC->Gsatt("FTOC","SEEN", 0);
1319 // Level 4 of B071, B074 and B075
1320 gMC->Gsatt("FLTA","SEEN", 0);
1322 gMC->Gsatt("FLTB","SEEN", 0);
1323 gMC->Gsatt("FLTC","SEEN", 0);
1326 // Level 5 of B071, B074 and B075
1327 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1329 gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1330 gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1333 gMC->Gsatt("FALA","SEEN", 0);
1334 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1336 gMC->Gsatt("FPEA","SEEN", 0);
1337 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1339 gMC->Gsatt("FSTR","SEEN",-2); // all FSTR sub-levels skipped -
1341 gMC->Gsatt("FWZ1","SEEN", 0);
1342 gMC->Gsatt("FWZ2","SEEN", 0);
1343 gMC->Gsatt("FWZ3","SEEN", 0);
1344 gMC->Gsatt("FWZ4","SEEN", 0);
1346 gMC->Gsatt("FZ1B","SEEN", 0);
1347 gMC->Gsatt("FZ1C","SEEN", 0);
1348 gMC->Gsatt("FZ2B","SEEN", 0);
1355 gMC->Gsatt("FALP","SEEN",0);
1356 gMC->Gsatt("FCAR","SEEN",0);
1357 gMC->Gsatt("FTUB","SEEN",-1); // all FTUB sub-levels skipped -
1360 gMC->Gsatt("FITU","SEEN",0);
1365 gMC->Gsatt("FGLF","SEEN",0);
1366 gMC->Gsatt("FHON","SEEN",0);
1367 gMC->Gsatt("FPC1","SEEN",0);
1368 gMC->Gsatt("FPC2","SEEN",0);
1369 gMC->Gsatt("FPCB","SEEN",0);
1370 gMC->Gsatt("FRGL","SEEN",0);
1372 // Level 2 of FPCB => Level 3 of FSTR
1373 gMC->Gsatt("FSEN","SEEN",0);
1374 gMC->Gsatt("FSEZ","SEEN",0);
1375 gMC->Gsatt("FPAD","SEEN",1);
1378 gMC->Gdopt("hide","on");
1379 gMC->Gdopt("shad","on");
1380 gMC->Gsatt("*", "fill", 5);
1381 gMC->SetClipBox(".");
1382 gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1383 gMC->DefaultRange();
1384 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1385 gMC->Gdhead(1111,"TOF Strips");
1386 gMC->Gdman(18, 3, "MAN");
1387 gMC->Gdopt("hide","off");
1390 //_____________________________________________________________________________
1391 void AliTOFv5T0::CreateMaterials()
1394 // Define materials for the Time Of Flight
1397 //AliTOF::CreateMaterials();
1399 AliMagF *magneticField = (AliMagF*)gAlice->Field();
1401 Int_t isxfld = magneticField->Integ();
1402 Float_t sxmgmx = magneticField->Max();
1404 Float_t we[7], ae[7], na[7], fr[7], vl[7];
1407 //--- Quartz (SiO2) to simulate float glass
1408 // density tuned to have correct float glass
1410 Float_t aq[2] = { 28.0855,15.9994 };
1411 Float_t zq[2] = { 14.,8. };
1412 Float_t wq[2] = { 1.,2. };
1413 Float_t dq = 2.55; // std value: 2.2
1417 Float_t anox[4] = {12.01,1.01,16.00,14.01};
1418 Float_t znox[4] = { 6., 1., 8., 7.};
1419 Float_t wnox[4] = {14., 22., 2., 2.};
1420 Float_t dnox = 0.048;
1424 Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1425 Float_t zg10[4] = {14., 6., 1., 8.};
1428 for (i = 0; i < nlmatg10; ++i) {
1444 MaterialMixer(we,ae,na,fr,vl,5);
1450 Float_t densg10 = 1.7;
1453 Float_t awa[2] = { 1., 16. };
1454 Float_t zwa[2] = { 1., 8. };
1455 Float_t wwa[2] = { 2., 1. };
1460 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1461 Float_t zsteel[4] = { 26.,24.,28.,14. };
1462 Float_t wsteel[4] = { .715,.18,.1,.005 };
1465 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1466 Float_t zAir[4]={6.,7.,8.,18.};
1467 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1468 Float_t dAir = 1.20479E-3;
1471 Float_t afg[4] = {28.09,16.00,12.01,1.01};
1472 Float_t zfg[4] = {14., 8., 6., 1.};
1473 Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1474 Float_t dfg = 1.111;
1477 // --- Freon C2F4H2 + SF6
1478 Float_t afre[4]= {12.01,1.01,19.00,32.07};
1479 Float_t zfre[4]= { 6., 1., 9., 16.};
1480 Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1481 Float_t densfre= 0.00375;
1484 //char namat[15] = " ";
1485 //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1488 AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1489 AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1490 AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1491 AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1492 AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1493 AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1494 AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
1495 AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1497 // get freon and glass
1498 gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1499 gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1502 Float_t wgfr[2]= {0.0011,0.9989};
1503 Float_t dgfr = 1.434;
1505 AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1507 AliMixture ( 9, "Water$", awa, zwa, dwa, nwa, wwa);
1508 AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1510 Float_t epsil, stmin, deemax, stemax;
1513 // EPSIL = 0.1 ! Tracking precision,
1514 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
1515 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
1519 epsil = .001; // Tracking precision,
1520 stemax = -1.; // Maximum displacement for multiple scattering
1521 deemax = -.3; // Maximum fractional energy loss, DLS
1524 AliMedium( 1, "Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1525 AliMedium( 2,"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1526 AliMedium( 3,"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1527 AliMedium( 4,"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1528 //AliMedium( 5,"glass-freon$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1529 AliMedium( 6,"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1530 AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1531 AliMedium( 8,"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1532 AliMedium( 9,"PCB-S$", 2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1533 AliMedium(10,"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1534 AliMedium(11,"Water$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1535 AliMedium(12,"STEEL$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1538 //_____________________________________________________________________________
1539 void AliTOFv5T0::Init()
1542 // Initialise the detector after the geometry has been defined
1544 AliDebug(1, "**************************************"
1546 "**************************************");
1547 AliDebug(1, " Version 4 of TOF initialing, "
1548 "symmetric TOF - Full Coverage version");
1552 fIdFTOA = gMC->VolId("FTOA");
1554 fIdFTOB = gMC->VolId("FTOB");
1555 fIdFTOC = gMC->VolId("FTOC");
1557 fIdFLTA = gMC->VolId("FLTA");
1559 fIdFLTB = gMC->VolId("FLTB");
1560 fIdFLTC = gMC->VolId("FLTC");
1563 AliDebug(1, "**************************************"
1565 "**************************************");
1568 //_____________________________________________________________________________
1569 void AliTOFv5T0::StepManager()
1573 // Procedure called at each step in the Time Of Flight
1576 TLorentzVector mom, pos;
1577 Float_t xm[3],pm[3],xpad[3],ppad[3];
1580 Int_t sector, plate, padx, padz, strip;
1581 Int_t copy, padzid, padxid, stripid, i;
1582 Int_t *idtmed = fIdtmed->GetArray()-499;
1583 Float_t incidenceAngle;
1585 const char* volpath;
1590 gMC->IsTrackEntering()
1591 && gMC->TrackCharge()
1592 //&& gMC->GetMedium()==idtmed[508]
1593 && gMC->CurrentMedium()==idtmed[508]
1594 && gMC->CurrentVolID(copy)==fIdSens
1598 AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1600 AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
1601 //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
1603 // getting information about hit volumes
1605 padzid=gMC->CurrentVolOffID(1,copy);
1609 padxid=gMC->CurrentVolOffID(0,copy);
1613 stripid=gMC->CurrentVolOffID(4,copy);
1617 gMC->TrackPosition(pos);
1618 gMC->TrackMomentum(mom);
1620 Double_t normMom=1./mom.Rho();
1622 // getting the coordinates in pad ref system
1624 xm[0] = (Float_t)pos.X();
1625 xm[1] = (Float_t)pos.Y();
1626 xm[2] = (Float_t)pos.Z();
1628 pm[0] = (Float_t)mom.X()*normMom;
1629 pm[1] = (Float_t)mom.Y()*normMom;
1630 pm[2] = (Float_t)mom.Z()*normMom;
1632 gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1633 gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1636 if (TMath::Abs(ppad[1])>1) {
1637 AliWarning("Abs(ppad) > 1");
1638 ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1640 incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1643 if (strip < fTOFGeometry->NStripC()) {
1647 else if (strip >= fTOFGeometry->NStripC() &&
1648 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1650 strip = strip - fTOFGeometry->NStripC();
1652 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1653 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1655 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1657 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1658 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1660 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1664 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1667 volpath=gMC->CurrentVolOffName(7);
1668 index=atoi(&volpath[4]);
1685 hits[6] = mom.Rho();
1690 hits[11]= incidenceAngle;
1691 hits[12]= gMC->Edep();
1692 hits[13]= gMC->TrackLength();
1700 AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1701 //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
1704 //-------------------------------------------------------------------
1705 void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1707 // a[] atomic weights vector (in)
1708 // (atoms present in more compound appear separately)
1709 // m[] number of corresponding atoms in the mixture (in)
1710 // d[] fraction of the compound relative to the corresponding atoms (in)
1711 // s[] further possible weights " " " " (in)
1713 for (Int_t i = 0; i < n; ++i) {
1714 p[i] = a[i]*m[i]*d[i]*s[i];
1717 for (Int_t i = 0; i < n; ++i) {
1719 // AliInfo(Form((\n weight[%i] = %f (,i,p[i]));