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 ///////////////////////////////////////////////////////////////////////////////
116 #include "TGeometry.h"
117 #include "TLorentzVector.h"
119 #include "TVirtualMC.h"
120 #include "TGeoManager.h"
121 #include <TGeoMatrix.h>
122 #include <TGeoPhysicalNode.h>
123 #include <TGeoVolume.h>
125 #include "AliConst.h"
130 #include "AliTrackReference.h"
132 #include "AliTOFGeometry.h"
133 #include "AliTOFv5T0.h"
135 extern TDirectory *gDirectory;
136 extern TVirtualMC *gMC;
137 extern TGeoManager *gGeoManager;
139 extern AliRun *gAlice;
143 //_____________________________________________________________________________
144 AliTOFv5T0::AliTOFv5T0():
154 // Default constructor
158 //_____________________________________________________________________________
159 AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
160 AliTOF(name,title,"tzero"),
170 // Standard constructor
173 // Check that FRAME is there otherwise we have no place where to
177 AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
179 AliFatal("TOF needs FRAME to be present");
182 if (fTOFGeometry) delete fTOFGeometry;
183 fTOFGeometry = new AliTOFGeometry();
185 if(frame->IsVersion()==1) {
186 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
187 AliDebug(1,"Full Coverage for TOF");
190 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
191 AliDebug(1,"TOF with Holes for PHOS");
194 fTOFGeometry->SetHoles(fTOFHoles);
196 //AliTOF::fTOFGeometry = fTOFGeometry;
199 TDirectory* saveDir = gDirectory;
200 gAlice->GetRunLoader()->CdGAFile();
201 fTOFGeometry->Write("TOFgeometry");
206 //_____________________________________________________________________________
207 void AliTOFv5T0::AddAlignableVolumes() const
210 // Create entries for alignable volumes associating the symbolic volume
211 // name with the corresponding volume path. Needs to be syncronized with
212 // eventual changes in the geometry.
218 TString vpL0 = "ALIC_1/B077_1/BSEGMO";
219 TString vpL1 = "_1/BTOF";
221 TString vpL3 = "/FTOA_0";
222 TString vpL4 = "/FLTA_0/FSTR_";
224 TString snSM = "TOF/sm";
225 TString snSTRIP = "/strip";
227 Int_t nSectors=fTOFGeometry->NSectors();
228 Int_t nStrips =fTOFGeometry->NStripA()+
229 2*fTOFGeometry->NStripB()+
230 2*fTOFGeometry->NStripC();
233 // The TOF MRPC Strips
234 // The symbolic names are: TOF/sm00/strip01
240 for (Int_t isect = 0; isect < nSectors; isect++) {
241 for (Int_t istr = 1; istr <= nStrips; istr++) {
243 //if (fTOFSectors[isect]==-1) continue;
245 if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
248 vpL4 = "/FLTB_0/FSTR_";
252 vpL4 = "/FLTC_0/FSTR_";
258 vpL4 = "/FLTA_0/FSTR_";
272 symName += Form("%02d",isect);
274 symName += Form("%02d",istr);
276 AliDebug(2,"--------------------------------------------");
277 AliDebug(2,Form("Alignable object %d", imod));
278 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
279 AliDebug(2,Form("symName=%s\n",symName.Data()));
280 AliDebug(2,"--------------------------------------------");
282 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
284 //T2L matrices for alignment
285 TGeoPNEntry *e = gGeoManager->GetAlignableEntry(symName.Data());
287 const char *path = e->GetTitle();
288 if (!gGeoManager->cd(path)) {
289 AliFatal(Form("Volume path %s not valid!",path));
291 TGeoHMatrix *globMatrix = gGeoManager->GetCurrentMatrix();
292 Double_t phi = 20.0 * (isect % 18) + 10.0;
293 TGeoHMatrix *t2l = new TGeoHMatrix();
295 t2l->MultiplyLeft(&(globMatrix->Inverse()));
299 AliError(Form("Alignable entry %s is not valid!",symName.Data()));
307 // The TOF supermodules
308 // The symbolic names are: TOF/sm00
312 for (Int_t isect = 0; isect < nSectors; isect++) {
321 symName += Form("%02d",isect);
323 AliDebug(2,"--------------------------------------------");
324 AliDebug(2,Form("Alignable object %d", isect+imod));
325 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
326 AliDebug(2,Form("symName=%s\n",symName.Data()));
327 AliDebug(2,"--------------------------------------------");
329 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
334 //____________________________________________________________________________
335 void AliTOFv5T0::BuildGeometry()
338 // Build TOF ROOT geometry for the ALICE event display
341 const int kColorTOF = 27;
343 TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
346 top = globalGeometry->GetNode("alice");
348 // Position the different copies
349 const Float_t krTof =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
350 const Float_t khTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
351 const Int_t kNTof = fTOFGeometry->NSectors();
352 const Float_t kangle = k2PI/kNTof;
354 const Float_t kInterCentrModBorder1 = 49.5;
355 const Float_t kInterCentrModBorder2 = 57.5;
359 // define offset for nodes
360 Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*0.5)*0.5;
361 Float_t zOffsetA = 0.;
362 // Define TOF basic volume
364 char nodeName0[16], nodeName1[16], nodeName2[16];
365 char nodeName3[16], nodeName4[16], rotMatNum[16];
368 new TBRIK("S_TOF_B","TOF box","void",
369 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
370 new TBRIK("S_TOF_C","TOF box","void",
371 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
373 new TBRIK("S_TOF_A","TOF box","void",
374 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
376 for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
379 sprintf(rotMatNum,"rot50%i",nodeNum);
380 sprintf(nodeName0,"FTO00%i",nodeNum);
381 sprintf(nodeName1,"FTO10%i",nodeNum);
382 sprintf(nodeName2,"FTO20%i",nodeNum);
383 sprintf(nodeName3,"FTO30%i",nodeNum);
384 sprintf(nodeName4,"FTO40%i",nodeNum);
387 sprintf(rotMatNum,"rot5%i",nodeNum);
388 sprintf(nodeName0,"FTO0%i",nodeNum);
389 sprintf(nodeName1,"FTO1%i",nodeNum);
390 sprintf(nodeName2,"FTO2%i",nodeNum);
391 sprintf(nodeName3,"FTO3%i",nodeNum);
392 sprintf(nodeName4,"FTO4%i",nodeNum);
395 new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
396 ang = (4.5-nodeNum) * kangle;
400 node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
401 node->SetLineColor(kColorTOF);
405 node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
406 node->SetLineColor(kColorTOF);
411 node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
412 node->SetLineColor(kColorTOF);
414 } // end loop on nodeNum
418 //_____________________________________________________________________________
419 void AliTOFv5T0::CreateGeometry()
422 // Create geometry for Time Of Flight version 0
426 <img src="picts/AliTOFv5T0.gif">
430 // Creates common geometry
432 AliTOF::CreateGeometry();
436 //_____________________________________________________________________________
437 void AliTOFv5T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA,
441 // Definition of the Time Of Fligh Resistive Plate Chambers
444 const Float_t kPi = TMath::Pi();
446 const Float_t kInterCentrModBorder1 = 49.5;
447 const Float_t kInterCentrModBorder2 = 57.5;
448 const Float_t kExterInterModBorder1 = 196.0;
449 const Float_t kExterInterModBorder2 = 203.5;
451 const Float_t kLengthExInModBorder = 4.7;
452 const Float_t kLengthInCeModBorder = 7.0;
454 // Al layers over all internal module walls (cm)
455 const Float_t khAlWall = 0.03;
457 // module wall thickness (cm)
458 const Float_t kModuleWallThickness = 0.3;
460 // Al honeycomb layer between strips and cards (cm)
461 const Float_t kHoneycombLayerThickness = 1.5;
463 AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
464 AliDebug(1, "************************* TOF geometry **************************");
466 // Definition of the Time Of Fligh Resistive Plate Chambers
467 // xFLT, yFLT, zFLT - sizes of TOF modules (large)
469 Float_t xcoor, ycoor, zcoor;
471 Int_t *idtmed = fIdtmed->GetArray()-499;
476 par[2] = zlenA * 0.5;
477 gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3); // fibre glass
482 par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
483 gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3); // fibre glass
484 gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3); // fibre glass
487 // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
489 //AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,-90.);
490 AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,270.);
495 for(Int_t isec=0;isec<18;isec++){
496 if(fTOFSectors[isec]==-1)continue;
498 sprintf(name, "BTOF%d",isec);
499 if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
500 // if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
502 ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
504 gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
505 gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
511 gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
515 // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
517 Float_t xFLT, yFLT, zFLTA;
519 xFLT = xtof - kModuleWallThickness*2.;
520 yFLT = ytof - kModuleWallThickness*2.;
521 zFLTA = zlenA - kModuleWallThickness*2.;
526 gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); // Freon mix
531 gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
536 par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
537 gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
538 gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
542 zcoor = kModuleWallThickness*0.5;
543 gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
544 gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
547 // Layer of Aluminum before detector (FALA, FALB and FALC)
550 par[1] = khAlWall*0.5;
551 par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
552 gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
555 ycoor = (-yFLT + khAlWall)*0.5;
557 gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
560 par[1] = khAlWall*0.5;
561 par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
562 gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
565 ycoor = (-yFLT + khAlWall)*0.5;
566 zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
567 gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
568 gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
571 par[1] = khAlWall*0.5;
572 par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
573 gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
576 ycoor = (-yFLT + khAlWall)*0.5;
577 zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
578 gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
579 gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
583 ycoor = (-yFLT + khAlWall)*0.5;
584 zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
585 gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
586 gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
589 ycoor = (-yFLT + khAlWall)*0.5;
590 zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
591 gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
592 gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
595 Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
597 // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
599 tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
600 alpha = TMath::ATan(tgal);
601 beta = (kPi*0.5 - alpha)*0.5;
602 tgbe = TMath::Tan(beta);
606 trpa[3] = kModuleWallThickness;
607 trpa[4] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
608 trpa[5] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
609 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
610 trpa[7] = kModuleWallThickness;
611 trpa[8] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
612 trpa[9] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
613 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
614 gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11); // fibre glass
616 AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
617 AliMatrix (idrotm[4],90., 90., 0.,0.,90., 0.);
620 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
621 zcoor = kInterCentrModBorder1;
622 gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
623 gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
626 y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
630 trpa[3] = kModuleWallThickness*0.5;
631 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
632 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
633 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
634 trpa[7] = kModuleWallThickness*0.5;
635 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
636 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
637 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
638 gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11); // fibre glass
641 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
642 zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
643 gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
644 gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
647 AliMatrix (idrotm[2],90.,270., 0.,0.,90.,180.);
648 AliMatrix (idrotm[5],90.,270.,180.,0.,90., 0.);
651 ycoor = -kLengthInCeModBorder*0.5;
652 zcoor = kInterCentrModBorder2;
653 gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
654 gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
657 y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
661 trpa[3] = kModuleWallThickness*0.5;
662 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
663 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
664 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
665 trpa[7] = kModuleWallThickness*0.5;
666 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
667 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
668 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
669 gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11); // fibre glass
672 ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
673 zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
674 gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
675 gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
678 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
679 trpa[1] = kModuleWallThickness;
681 trpa[3] = -beta*kRaddeg;
684 gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6); // fibre glass
686 AliMatrix (idrotm[3], alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
687 AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90., 0.);
691 zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
692 gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
693 gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
696 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
697 trpa[1] = kModuleWallThickness*0.5;
699 trpa[3] = -beta*kRaddeg;
702 gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6); // fibre glass
705 ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
706 zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
707 gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
708 gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
711 // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
713 tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
714 alpha = TMath::ATan(tgal);
715 beta = (kPi*0.5 - alpha)*0.5;
716 tgbe = TMath::Tan(beta);
720 trpa[3] = kModuleWallThickness;
721 trpa[4] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
722 trpa[5] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
723 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
724 trpa[7] = kModuleWallThickness;
725 trpa[8] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
726 trpa[9] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
727 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
728 gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11); // fibre glass
731 ycoor = -kLengthExInModBorder*0.5;
732 zcoor = kExterInterModBorder1;
733 gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
734 gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
738 ycoor = -kLengthExInModBorder*0.5;
739 zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
740 gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
741 gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
745 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
746 zcoor = kExterInterModBorder2;
747 gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
748 gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
752 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
753 zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
754 gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
755 gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
758 trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
759 trpa[1] = kModuleWallThickness;
761 trpa[3] = -beta*kRaddeg;
764 gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6); // fibre glass
766 AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
767 AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
771 zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
772 gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
773 gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
778 zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
779 gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
780 gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
784 ///////////////// Detector itself //////////////////////
786 const Int_t knx = fTOFGeometry->NpadX(); // number of pads along x
787 const Int_t knz = fTOFGeometry->NpadZ(); // number of pads along z
788 const Float_t kPadX = fTOFGeometry->XPad(); // pad length along x
789 const Float_t kPadZ = fTOFGeometry->ZPad(); // pad length along z
791 // new description for strip volume -double stack strip-
792 // -- all constants are expressed in cm
793 // heigth of different layers
794 const Float_t khhony = 1.0 ; // heigth of HONY Layer
795 const Float_t khpcby = 0.08 ; // heigth of PCB Layer
796 const Float_t khrgly = 0.055 ; // heigth of RED GLASS Layer
798 const Float_t khfiliy = 0.125 ; // heigth of FISHLINE Layer
799 const Float_t khglassy = 0.160*0.5; // heigth of GLASS Layer
800 const Float_t khglfy = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE Layer
802 const Float_t khcpcby = 0.16 ; // heigth of PCB Central Layer
803 const Float_t kwhonz = 8.1 ; // z dimension of HONEY Layer
804 const Float_t kwpcbz1 = 10.6 ; // z dimension of PCB Lower Layer
805 const Float_t kwpcbz2 = 11.6 ; // z dimension of PCB Upper Layer
806 const Float_t kwcpcbz = 12.4 ; // z dimension of PCB Central Layer
807 const Float_t kwrglz = 8. ; // z dimension of RED GLASS Layer
808 const Float_t kwglfz = 7. ; // z dimension of GLASS+FISHLN Layer
809 const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
810 const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
811 const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
813 // heigth of the FSTR Volume (the strip volume)
814 const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
816 // width of the FSTR Volume (the strip volume)
817 const Float_t kwstripz = kwcpcbz;
818 // length of the FSTR Volume (the strip volume)
819 const Float_t klstripx = fTOFGeometry->StripLength();
821 Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
822 // Coordinates of the strip center in the strip reference frame;
823 // used for positioning internal strip volumes
824 Float_t posfp[3]={0.,0.,0.};
826 // FSTR volume definition-filling this volume with non sensitive Gas Mixture
827 gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3); // Freon mix
829 //-- HONY Layer definition
830 parfp[1] = khhony*0.5;
831 parfp[2] = kwhonz*0.5;
832 gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3); // honeycomb (Nomex)
833 // positioning 2 HONY Layers on FSTR volume
834 posfp[1] =-khstripy*0.5+parfp[1];
835 gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
836 gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
838 //-- PCB Layer definition
839 parfp[1] = khpcby*0.5;
840 parfp[2] = kwpcbz1*0.5;
841 gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3); // G10
842 parfp[2] = kwpcbz2*0.5;
843 gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3); // G10
844 // positioning 2 PCB Layers on FSTR volume
845 posfp[1] =-khstripy*0.5+khhony+parfp[1];
846 gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
847 gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
849 //-- central PCB layer definition
850 parfp[1] = khcpcby*0.5;
851 parfp[2] = kwcpcbz*0.5;
852 gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3); // G10
853 // positioning the central PCB layer
854 gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
857 Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
858 gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3); // sensitive ...
859 // dividing FSEN along z in knz=2 and along x in knx=48
860 gMC->Gsdvn("FSEZ","FSEN",knz,3);
861 gMC->Gsdvn("FPAD","FSEZ",knx,1);
862 // positioning a Sensitive layer inside FPCB
863 gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
865 //-- RED GLASS Layer definition
866 parfp[1] = khrgly*0.5;
867 parfp[2] = kwrglz*0.5;
868 gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3); // glass
869 // positioning 4 RED GLASS Layers on FSTR volume
870 posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
871 gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
872 gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
873 posfp[1] = (khcpcby+khrgly)*0.5;
874 gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
875 gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
877 //-- GLASS Layer definition
878 parfp[1] = khglassy*0.5;
879 parfp[2] = kwglfz*0.5;
880 gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3); // glass
882 // positioning 4 GLASS Layers on FSTR volume
883 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
884 gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
885 gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
886 posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
887 gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
888 gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
890 //-- FREON Layer definition
891 parfp[1] = khfiliy*0.5;
892 gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3); // freon
894 // positioning 2 FREON Layers on FSTR volume
895 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
896 gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
897 gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
900 //-- GLASS+FISHLINE Layer definition
901 parfp[1] = khglfy*0.5;
902 parfp[2] = kwglfz*0.5;
903 gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
905 // positioning 2 GLASS+FISHLINE Layers on FSTR volume
906 posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
907 gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
908 gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
911 // Positioning the Strips (FSTR) in the FLT volumes
912 Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
913 fTOFGeometry->NStripB(),
914 fTOFGeometry->NStripA(),
915 fTOFGeometry->NStripB(),
916 fTOFGeometry->NStripC()};
918 Int_t totalStrip = 0;
919 Float_t xpos, zpos, ypos, ang;
920 for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
921 if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
922 for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
924 ang = fTOFGeometry->GetAngles(iplate,istrip);
925 AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
927 if (ang>0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
928 else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
929 else if (ang<0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
932 zpos = fTOFGeometry->GetDistances(iplate,istrip);
933 ypos = fTOFGeometry->GetHeights(iplate,istrip);
935 gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1], "ONLY");
938 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");
939 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");
944 // 1.5 cm Al honeycomb layer between strips and cards
946 par[1] = kHoneycombLayerThickness*0.5;
948 gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3); // Al honeycomb
951 ycoor = kHoneycombLayerThickness*0.5;
953 gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
957 par[1] = kHoneycombLayerThickness*0.5;
958 par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
959 gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3); // Al honeycomb
962 ycoor = kHoneycombLayerThickness*0.5;
963 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
964 gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
965 gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
970 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
972 gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
975 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
977 gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
981 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
982 par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
983 gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
984 gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
987 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
988 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
989 gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
990 gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
993 // start with cards and cooling tubes
994 // finally, cards, cooling tubes and layer for thermal dispersion
997 // see GEOM200 in GEANT manual
1001 // card volume definition
1002 cardpar[0]= xFLT*0.5;
1005 gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card
1007 //alu plate volume definition
1010 gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
1012 // tube volume definition
1017 gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
1022 gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
1023 // positioning water tube into the steel one
1024 gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
1027 AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
1029 // central module positioning
1030 Float_t cardpos[3], aplpos2;
1031 Float_t stepforcardA = 6.625;
1033 Float_t aplpos1 = -2.;
1038 // tubepos= -53.+tdis;
1040 for (icard=39; icard<54; ++icard) {
1041 cardpos[2]= cardpos[2]+stepforcardA;
1042 aplpos2 = cardpos[2]+0.15;
1043 gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1044 gMC->Gspos("FALP",icard,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1045 gMC->Gspos("FTUB",icard,"FAIA", 0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
1048 // intermediate module positioning
1049 Float_t stepforcardB= 7.05;
1053 for (icard=20; icard<39; ++icard) {
1054 cardpos[2]= cardpos[2]+stepforcardB;
1055 aplpos2 = cardpos[2]+0.15;
1057 gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1058 gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1059 gMC->Gspos("FTUB",icard+34,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1060 gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1061 gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1062 gMC->Gspos("FTUB",58-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1065 gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1066 gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1067 gMC->Gspos("FTUB",icard+34+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1068 gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1069 gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1070 gMC->Gspos("FTUB",58-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1075 // outer module positioning
1076 Float_t stepforcardC= 8.45238;
1079 for (icard=1; icard<20; ++icard) {
1080 cardpos[2]= cardpos[2]+stepforcardC;
1081 aplpos2 = cardpos[2]+0.15;
1083 gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1084 gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1085 gMC->Gspos("FTUB",icard+72,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1086 gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1087 gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1088 gMC->Gspos("FTUB",20-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1091 gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1092 gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1093 gMC->Gspos("FTUB",icard+72+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1094 gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1095 gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1096 gMC->Gspos("FTUB",20-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1101 //_____________________________________________________________________________
1102 void AliTOFv5T0::DrawModule() const
1105 // Draw a shaded view of the Time Of Flight version 4
1108 // Set everything unseen
1109 gMC->Gsatt("*", "seen", -1);
1112 //Set volumes visible
1115 //Set ALIC mother transparent
1116 gMC->Gsatt("ALIC","SEEN", 0);
1119 // Level 1 for TOF volumes
1120 gMC->Gsatt("B077","seen", 0);
1123 // Level 2 for TOF volumes
1124 gMC->Gsatt("B071","seen", 0);
1125 gMC->Gsatt("B074","seen", 0);
1126 gMC->Gsatt("B075","seen", 0);
1127 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1128 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1131 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1132 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1133 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1134 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1135 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1137 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1138 gMC->Gsatt("BTO1","seen", 0);
1141 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1142 gMC->Gsatt("BTO2","seen", 0);
1145 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1146 gMC->Gsatt("BTO3","seen", 0);
1148 // Level 3 of B071, B074 and B075
1149 gMC->Gsatt("FTOA","SEEN", 0);
1150 if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
1152 // Level 4 of B071, B074 and B075
1153 gMC->Gsatt("FLTA","SEEN", 0);
1154 if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
1155 if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
1157 // Level 5 of B071, B074 and B075
1158 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1159 if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1160 if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1162 gMC->Gsatt("FALA","SEEN", 0);
1163 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1165 gMC->Gsatt("FPEA","SEEN", 1);
1166 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
1168 gMC->Gsatt("FSTR","SEEN",-1); // all FSTR sub-levels skipped -
1170 gMC->Gsatt("FWZ1","SEEN", 0);
1171 gMC->Gsatt("FWZ2","SEEN", 0);
1172 gMC->Gsatt("FWZ3","SEEN", 0);
1173 gMC->Gsatt("FWZ4","SEEN", 0);
1175 gMC->Gsatt("FZ1B","SEEN", 0);
1176 gMC->Gsatt("FZ1C","SEEN", 0);
1177 gMC->Gsatt("FZ2B","SEEN", 0);
1180 gMC->Gdopt("hide", "on");
1181 gMC->Gdopt("shad", "on");
1182 gMC->Gsatt("*", "fill", 7);
1183 gMC->SetClipBox(".");
1184 gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1185 gMC->DefaultRange();
1186 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1187 gMC->Gdhead(1111, "Time Of Flight");
1188 gMC->Gdman(18, 3, "MAN");
1189 gMC->Gdopt("hide","off");
1191 //_____________________________________________________________________________
1192 void AliTOFv5T0::DrawDetectorModules() const
1195 // Draw a shaded view of the TOF detector version 4
1198 // Set everything unseen
1199 gMC->Gsatt("*", "seen", -1);
1202 //Set volumes visible
1205 //Set ALIC mother transparent
1206 gMC->Gsatt("ALIC","SEEN", 0);
1209 // Level 1 for TOF volumes
1210 gMC->Gsatt("B077","seen", 0);
1213 // Level 2 for TOF volumes
1214 gMC->Gsatt("B071","seen", 0);
1215 gMC->Gsatt("B074","seen", 0);
1216 gMC->Gsatt("B075","seen", 0);
1217 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1218 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1221 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1222 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1223 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1224 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1225 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1227 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1228 gMC->Gsatt("BTO1","seen", 0);
1231 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1232 gMC->Gsatt("BTO2","seen", 0);
1235 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1236 gMC->Gsatt("BTO3","seen", 0);
1238 // Level 3 of B071, B075 and B074
1239 gMC->Gsatt("FTOA","seen",-2); // all FTOA sub-levels skipped -
1241 gMC->Gsatt("FTOB","seen",-2); // all FTOB sub-levels skipped -
1242 gMC->Gsatt("FTOC","seen",-2); // all FTOC sub-levels skipped -
1245 gMC->Gdopt("hide","on");
1246 gMC->Gdopt("shad","on");
1247 gMC->Gsatt("*", "fill", 5);
1248 gMC->SetClipBox(".");
1249 gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1250 gMC->DefaultRange();
1251 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1252 gMC->Gdhead(1111,"TOF detector");
1253 gMC->Gdman(18, 3, "MAN");
1254 gMC->Gdopt("hide","off");
1257 //_____________________________________________________________________________
1258 void AliTOFv5T0::DrawDetectorStrips() const
1261 // Draw a shaded view of the TOF strips for version 4
1264 // Set everything unseen
1265 gMC->Gsatt("*", "seen", -1);
1268 //Set volumes visible
1271 //Set ALIC mother transparent
1272 gMC->Gsatt("ALIC","SEEN", 0);
1275 // Level 1 for TOF volumes
1276 gMC->Gsatt("B077","seen", 0);
1279 // Level 2 for TOF volumes
1280 gMC->Gsatt("B071","seen", 0);
1281 gMC->Gsatt("B074","seen", 0);
1282 gMC->Gsatt("B075","seen", 0);
1283 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1284 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1287 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1288 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1289 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1290 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1291 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1293 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1294 gMC->Gsatt("BTO1","seen", 0);
1297 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1298 gMC->Gsatt("BTO2","seen", 0);
1301 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1302 gMC->Gsatt("BTO3","seen", 0);
1304 // Level 3 of B071, B074 and B075
1305 gMC->Gsatt("FTOA","SEEN", 0);
1307 gMC->Gsatt("FTOB","SEEN", 0);
1308 gMC->Gsatt("FTOC","SEEN", 0);
1311 // Level 4 of B071, B074 and B075
1312 gMC->Gsatt("FLTA","SEEN", 0);
1314 gMC->Gsatt("FLTB","SEEN", 0);
1315 gMC->Gsatt("FLTC","SEEN", 0);
1318 // Level 5 of B071, B074 and B075
1319 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1321 gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1322 gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1325 gMC->Gsatt("FALA","SEEN", 0);
1326 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1328 gMC->Gsatt("FPEA","SEEN", 0);
1329 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1331 gMC->Gsatt("FSTR","SEEN",-2); // all FSTR sub-levels skipped -
1333 gMC->Gsatt("FWZ1","SEEN", 0);
1334 gMC->Gsatt("FWZ2","SEEN", 0);
1335 gMC->Gsatt("FWZ3","SEEN", 0);
1336 gMC->Gsatt("FWZ4","SEEN", 0);
1338 gMC->Gsatt("FZ1B","SEEN", 0);
1339 gMC->Gsatt("FZ1C","SEEN", 0);
1340 gMC->Gsatt("FZ2B","SEEN", 0);
1347 gMC->Gsatt("FALP","SEEN",0);
1348 gMC->Gsatt("FCAR","SEEN",0);
1349 gMC->Gsatt("FTUB","SEEN",-1); // all FTUB sub-levels skipped -
1352 gMC->Gsatt("FITU","SEEN",0);
1357 gMC->Gsatt("FGLF","SEEN",0);
1358 gMC->Gsatt("FHON","SEEN",0);
1359 gMC->Gsatt("FPC1","SEEN",0);
1360 gMC->Gsatt("FPC2","SEEN",0);
1361 gMC->Gsatt("FPCB","SEEN",0);
1362 gMC->Gsatt("FRGL","SEEN",0);
1364 // Level 2 of FPCB => Level 3 of FSTR
1365 gMC->Gsatt("FSEN","SEEN",0);
1366 gMC->Gsatt("FSEZ","SEEN",0);
1367 gMC->Gsatt("FPAD","SEEN",1);
1370 gMC->Gdopt("hide","on");
1371 gMC->Gdopt("shad","on");
1372 gMC->Gsatt("*", "fill", 5);
1373 gMC->SetClipBox(".");
1374 gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1375 gMC->DefaultRange();
1376 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1377 gMC->Gdhead(1111,"TOF Strips");
1378 gMC->Gdman(18, 3, "MAN");
1379 gMC->Gdopt("hide","off");
1382 //_____________________________________________________________________________
1383 void AliTOFv5T0::CreateMaterials()
1386 // Define materials for the Time Of Flight
1389 //AliTOF::CreateMaterials();
1391 AliMagF *magneticField = (AliMagF*)gAlice->Field();
1393 Int_t isxfld = magneticField->Integ();
1394 Float_t sxmgmx = magneticField->Max();
1396 Float_t we[7], ae[7], na[7], fr[7], vl[7];
1399 //--- Quartz (SiO2) to simulate float glass
1400 // density tuned to have correct float glass
1402 Float_t aq[2] = { 28.0855,15.9994 };
1403 Float_t zq[2] = { 14.,8. };
1404 Float_t wq[2] = { 1.,2. };
1405 Float_t dq = 2.55; // std value: 2.2
1409 Float_t anox[4] = {12.01,1.01,16.00,14.01};
1410 Float_t znox[4] = { 6., 1., 8., 7.};
1411 Float_t wnox[4] = {14., 22., 2., 2.};
1412 Float_t dnox = 0.048;
1416 Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1417 Float_t zg10[4] = {14., 6., 1., 8.};
1420 for (i = 0; i < nlmatg10; ++i) {
1436 MaterialMixer(we,ae,na,fr,vl,5);
1442 Float_t densg10 = 1.7;
1445 Float_t awa[2] = { 1., 16. };
1446 Float_t zwa[2] = { 1., 8. };
1447 Float_t wwa[2] = { 2., 1. };
1452 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1453 Float_t zsteel[4] = { 26.,24.,28.,14. };
1454 Float_t wsteel[4] = { .715,.18,.1,.005 };
1457 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1458 Float_t zAir[4]={6.,7.,8.,18.};
1459 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1460 Float_t dAir = 1.20479E-3;
1463 Float_t afg[4] = {28.09,16.00,12.01,1.01};
1464 Float_t zfg[4] = {14., 8., 6., 1.};
1465 Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1466 Float_t dfg = 1.111;
1469 // --- Freon C2F4H2 + SF6
1470 Float_t afre[4]= {12.01,1.01,19.00,32.07};
1471 Float_t zfre[4]= { 6., 1., 9., 16.};
1472 Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1473 Float_t densfre= 0.00375;
1476 //char namat[15] = " ";
1477 //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1480 AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1481 AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1482 AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1483 AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1484 AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1485 AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1486 AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
1487 AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1489 // get freon and glass
1490 gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1491 gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1494 Float_t wgfr[2]= {0.0011,0.9989};
1495 Float_t dgfr = 1.434;
1497 AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1499 AliMixture ( 9, "Water$", awa, zwa, dwa, nwa, wwa);
1500 AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1502 Float_t epsil, stmin, deemax, stemax;
1505 // EPSIL = 0.1 ! Tracking precision,
1506 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
1507 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
1511 epsil = .001; // Tracking precision,
1512 stemax = -1.; // Maximum displacement for multiple scattering
1513 deemax = -.3; // Maximum fractional energy loss, DLS
1516 AliMedium( 1, "Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1517 AliMedium( 2,"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1518 AliMedium( 3,"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1519 AliMedium( 4,"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1520 //AliMedium( 5,"glass-freon$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1521 AliMedium( 6,"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1522 AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1523 AliMedium( 8,"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1524 AliMedium( 9,"PCB-S$", 2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1525 AliMedium(10,"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1526 AliMedium(11,"Water$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1527 AliMedium(12,"STEEL$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1530 //_____________________________________________________________________________
1531 void AliTOFv5T0::Init()
1534 // Initialise the detector after the geometry has been defined
1536 AliDebug(1, "**************************************"
1538 "**************************************");
1539 AliDebug(1, " Version 4 of TOF initialing, "
1540 "symmetric TOF - Full Coverage version");
1544 fIdFTOA = gMC->VolId("FTOA");
1546 fIdFTOB = gMC->VolId("FTOB");
1547 fIdFTOC = gMC->VolId("FTOC");
1549 fIdFLTA = gMC->VolId("FLTA");
1551 fIdFLTB = gMC->VolId("FLTB");
1552 fIdFLTC = gMC->VolId("FLTC");
1555 AliDebug(1, "**************************************"
1557 "**************************************");
1560 //_____________________________________________________________________________
1561 void AliTOFv5T0::StepManager()
1565 // Procedure called at each step in the Time Of Flight
1568 TLorentzVector mom, pos;
1569 Float_t xm[3],pm[3],xpad[3],ppad[3];
1572 Int_t sector, plate, padx, padz, strip;
1573 Int_t copy, padzid, padxid, stripid, i;
1574 Int_t *idtmed = fIdtmed->GetArray()-499;
1575 Float_t incidenceAngle;
1577 const char* volpath;
1582 gMC->IsTrackEntering()
1583 && gMC->TrackCharge()
1584 //&& gMC->GetMedium()==idtmed[508]
1585 && gMC->CurrentMedium()==idtmed[508]
1586 && gMC->CurrentVolID(copy)==fIdSens
1590 AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1592 AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
1593 //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
1595 // getting information about hit volumes
1597 padzid=gMC->CurrentVolOffID(1,copy);
1601 padxid=gMC->CurrentVolOffID(0,copy);
1605 stripid=gMC->CurrentVolOffID(4,copy);
1609 gMC->TrackPosition(pos);
1610 gMC->TrackMomentum(mom);
1612 Double_t normMom=1./mom.Rho();
1614 // getting the coordinates in pad ref system
1616 xm[0] = (Float_t)pos.X();
1617 xm[1] = (Float_t)pos.Y();
1618 xm[2] = (Float_t)pos.Z();
1620 pm[0] = (Float_t)mom.X()*normMom;
1621 pm[1] = (Float_t)mom.Y()*normMom;
1622 pm[2] = (Float_t)mom.Z()*normMom;
1624 gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1625 gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1628 if (TMath::Abs(ppad[1])>1) {
1629 AliWarning("Abs(ppad) > 1");
1630 ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1632 incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1635 if (strip < fTOFGeometry->NStripC()) {
1639 else if (strip >= fTOFGeometry->NStripC() &&
1640 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1642 strip = strip - fTOFGeometry->NStripC();
1644 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1645 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1647 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1649 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1650 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1652 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1656 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1659 volpath=gMC->CurrentVolOffName(7);
1660 index=atoi(&volpath[4]);
1677 hits[6] = mom.Rho();
1682 hits[11]= incidenceAngle;
1683 hits[12]= gMC->Edep();
1684 hits[13]= gMC->TrackLength();
1692 AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1693 //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
1696 //-------------------------------------------------------------------
1697 void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1699 // a[] atomic weights vector (in)
1700 // (atoms present in more compound appear separately)
1701 // m[] number of corresponding atoms in the mixture (in)
1702 // d[] fraction of the compound relative to the corresponding atoms (in)
1703 // s[] further possible weights " " " " (in)
1705 for (Int_t i = 0; i < n; ++i) {
1706 p[i] = a[i]*m[i]*d[i]*s[i];
1709 for (Int_t i = 0; i < n; ++i) {
1711 // AliInfo(Form((\n weight[%i] = %f (,i,p[i]));