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"
131 #include "AliTrackReference.h"
133 #include "AliTOFGeometry.h"
134 #include "AliTOFv5T0.h"
136 extern TDirectory *gDirectory;
137 extern TVirtualMC *gMC;
138 extern TGeoManager *gGeoManager;
140 extern AliRun *gAlice;
144 //_____________________________________________________________________________
145 AliTOFv5T0::AliTOFv5T0():
155 // Default constructor
159 //_____________________________________________________________________________
160 AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
161 AliTOF(name,title,"tzero"),
171 // Standard constructor
174 // Check that FRAME is there otherwise we have no place where to
178 AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
180 AliFatal("TOF needs FRAME to be present");
183 if (fTOFGeometry) delete fTOFGeometry;
184 fTOFGeometry = new AliTOFGeometry();
186 if(frame->IsVersion()==1) {
187 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
188 AliDebug(1,"Full Coverage for TOF");
191 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
192 AliDebug(1,"TOF with Holes for PHOS");
195 fTOFGeometry->SetHoles(fTOFHoles);
198 if (fTOFGeometry) delete fTOFGeometry;
199 fTOFGeometry = new AliTOFGeometry();
200 fTOFGeometry->SetHoles(fTOFHoles);
202 //AliTOF::fTOFGeometry = fTOFGeometry;
205 TDirectory* saveDir = gDirectory;
206 gAlice->GetRunLoader()->CdGAFile();
207 fTOFGeometry->Write("TOFgeometry");
212 //_____________________________________________________________________________
213 void AliTOFv5T0::AddAlignableVolumes() const
216 // Create entries for alignable volumes associating the symbolic volume
217 // name with the corresponding volume path. Needs to be syncronized with
218 // eventual changes in the geometry.
224 TString vpL0 = "ALIC_1/B077_1/BSEGMO";
225 TString vpL1 = "_1/BTOF";
227 TString vpL3 = "/FTOA_0";
228 TString vpL4 = "/FLTA_0/FSTR_";
230 TString snSM = "TOF/sm";
231 TString snSTRIP = "/strip";
233 Int_t nSectors=fTOFGeometry->NSectors();
234 Int_t nStrips =fTOFGeometry->NStripA()+
235 2*fTOFGeometry->NStripB()+
236 2*fTOFGeometry->NStripC();
239 // The TOF MRPC Strips
240 // The symbolic names are: TOF/sm00/strip01
246 for (Int_t isect = 0; isect < nSectors; isect++) {
247 for (Int_t istr = 1; istr <= nStrips; istr++) {
249 //if (fTOFSectors[isect]==-1) continue;
251 if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
254 vpL4 = "/FLTB_0/FSTR_";
258 vpL4 = "/FLTC_0/FSTR_";
264 vpL4 = "/FLTA_0/FSTR_";
278 symName += Form("%02d",isect);
280 symName += Form("%02d",istr);
282 AliDebug(2,"--------------------------------------------");
283 AliDebug(2,Form("Alignable object %d", imod));
284 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
285 AliDebug(2,Form("symName=%s\n",symName.Data()));
286 AliDebug(2,"--------------------------------------------");
288 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
290 //T2L matrices for alignment
291 TGeoPNEntry *e = gGeoManager->GetAlignableEntry(symName.Data());
293 const char *path = e->GetTitle();
294 if (!gGeoManager->cd(path)) {
295 AliFatal(Form("Volume path %s not valid!",path));
297 TGeoHMatrix *globMatrix = gGeoManager->GetCurrentMatrix();
298 Double_t phi = 20.0 * (isect % 18) + 10.0;
299 TGeoHMatrix *t2l = new TGeoHMatrix();
301 t2l->MultiplyLeft(&(globMatrix->Inverse()));
305 AliError(Form("Alignable entry %s is not valid!",symName.Data()));
313 // The TOF supermodules
314 // The symbolic names are: TOF/sm00
318 for (Int_t isect = 0; isect < nSectors; isect++) {
327 symName += Form("%02d",isect);
329 AliDebug(2,"--------------------------------------------");
330 AliDebug(2,Form("Alignable object %d", isect+imod));
331 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
332 AliDebug(2,Form("symName=%s\n",symName.Data()));
333 AliDebug(2,"--------------------------------------------");
335 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
340 //____________________________________________________________________________
341 void AliTOFv5T0::BuildGeometry()
344 // Build TOF ROOT geometry for the ALICE event display
347 const int kColorTOF = 27;
349 TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
352 top = globalGeometry->GetNode("alice");
354 // Position the different copies
355 const Float_t krTof =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
356 const Float_t khTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
357 const Int_t kNTof = fTOFGeometry->NSectors();
358 const Float_t kangle = k2PI/kNTof;
360 const Float_t kInterCentrModBorder1 = 49.5;
361 const Float_t kInterCentrModBorder2 = 57.5;
365 // define offset for nodes
366 Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*0.5)*0.5;
367 Float_t zOffsetA = 0.;
368 // Define TOF basic volume
370 char nodeName0[16], nodeName1[16], nodeName2[16];
371 char nodeName3[16], nodeName4[16], rotMatNum[16];
374 new TBRIK("S_TOF_B","TOF box","void",
375 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
376 new TBRIK("S_TOF_C","TOF box","void",
377 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
379 new TBRIK("S_TOF_A","TOF box","void",
380 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
382 for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
385 sprintf(rotMatNum,"rot50%i",nodeNum);
386 sprintf(nodeName0,"FTO00%i",nodeNum);
387 sprintf(nodeName1,"FTO10%i",nodeNum);
388 sprintf(nodeName2,"FTO20%i",nodeNum);
389 sprintf(nodeName3,"FTO30%i",nodeNum);
390 sprintf(nodeName4,"FTO40%i",nodeNum);
393 sprintf(rotMatNum,"rot5%i",nodeNum);
394 sprintf(nodeName0,"FTO0%i",nodeNum);
395 sprintf(nodeName1,"FTO1%i",nodeNum);
396 sprintf(nodeName2,"FTO2%i",nodeNum);
397 sprintf(nodeName3,"FTO3%i",nodeNum);
398 sprintf(nodeName4,"FTO4%i",nodeNum);
401 new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
402 ang = (4.5-nodeNum) * kangle;
406 node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
407 node->SetLineColor(kColorTOF);
411 node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
412 node->SetLineColor(kColorTOF);
417 node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
418 node->SetLineColor(kColorTOF);
420 } // end loop on nodeNum
424 //_____________________________________________________________________________
425 void AliTOFv5T0::CreateGeometry()
428 // Create geometry for Time Of Flight version 0
432 <img src="picts/AliTOFv5T0.gif">
436 // Creates common geometry
438 AliTOF::CreateGeometry();
442 //_____________________________________________________________________________
443 void AliTOFv5T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA,
447 // Definition of the Time Of Fligh Resistive Plate Chambers
450 const Float_t kPi = TMath::Pi();
452 const Float_t kInterCentrModBorder1 = 49.5;
453 const Float_t kInterCentrModBorder2 = 57.5;
454 const Float_t kExterInterModBorder1 = 196.0;
455 const Float_t kExterInterModBorder2 = 203.5;
457 const Float_t kLengthExInModBorder = 4.7;
458 const Float_t kLengthInCeModBorder = 7.0;
460 // Al layers over all internal module walls (cm)
461 const Float_t khAlWall = 0.03;
463 // module wall thickness (cm)
464 const Float_t kModuleWallThickness = 0.3;
466 // Al honeycomb layer between strips and cards (cm)
467 const Float_t kHoneycombLayerThickness = 1.5;
469 AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
470 AliDebug(1, "************************* TOF geometry **************************");
472 // Definition of the Time Of Fligh Resistive Plate Chambers
473 // xFLT, yFLT, zFLT - sizes of TOF modules (large)
475 Float_t xcoor, ycoor, zcoor;
477 Int_t *idtmed = fIdtmed->GetArray()-499;
482 par[2] = zlenA * 0.5;
483 gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3); // fibre glass
488 par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
489 gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3); // fibre glass
490 gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3); // fibre glass
493 // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
495 //AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,-90.);
496 AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,270.);
501 for(Int_t isec=0;isec<18;isec++){
502 if(fTOFSectors[isec]==-1)continue;
504 sprintf(name, "BTOF%d",isec);
505 if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
506 // if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
508 ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
510 gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
511 gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
517 gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
521 // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
523 Float_t xFLT, yFLT, zFLTA;
525 xFLT = xtof - kModuleWallThickness*2.;
526 yFLT = ytof - kModuleWallThickness*2.;
527 zFLTA = zlenA - kModuleWallThickness*2.;
532 gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); // Freon mix
537 gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
542 par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
543 gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
544 gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
548 zcoor = kModuleWallThickness*0.5;
549 gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
550 gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
553 // Layer of Aluminum before detector (FALA, FALB and FALC)
556 par[1] = khAlWall*0.5;
557 par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
558 gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
561 ycoor = (-yFLT + khAlWall)*0.5;
563 gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
566 par[1] = khAlWall*0.5;
567 par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
568 gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
571 ycoor = (-yFLT + khAlWall)*0.5;
572 zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
573 gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
574 gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
577 par[1] = khAlWall*0.5;
578 par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
579 gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
582 ycoor = (-yFLT + khAlWall)*0.5;
583 zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
584 gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
585 gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
589 ycoor = (-yFLT + khAlWall)*0.5;
590 zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
591 gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
592 gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
595 ycoor = (-yFLT + khAlWall)*0.5;
596 zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
597 gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
598 gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
601 Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
603 // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
605 tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
606 alpha = TMath::ATan(tgal);
607 beta = (kPi*0.5 - alpha)*0.5;
608 tgbe = TMath::Tan(beta);
612 trpa[3] = kModuleWallThickness;
613 trpa[4] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
614 trpa[5] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
615 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
616 trpa[7] = kModuleWallThickness;
617 trpa[8] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
618 trpa[9] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
619 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
620 gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11); // fibre glass
622 AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
623 AliMatrix (idrotm[4],90., 90., 0.,0.,90., 0.);
626 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
627 zcoor = kInterCentrModBorder1;
628 gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
629 gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
632 y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
636 trpa[3] = kModuleWallThickness*0.5;
637 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
638 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
639 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
640 trpa[7] = kModuleWallThickness*0.5;
641 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
642 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
643 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
644 gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11); // fibre glass
647 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
648 zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
649 gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
650 gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
653 AliMatrix (idrotm[2],90.,270., 0.,0.,90.,180.);
654 AliMatrix (idrotm[5],90.,270.,180.,0.,90., 0.);
657 ycoor = -kLengthInCeModBorder*0.5;
658 zcoor = kInterCentrModBorder2;
659 gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
660 gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
663 y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
667 trpa[3] = kModuleWallThickness*0.5;
668 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
669 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
670 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
671 trpa[7] = kModuleWallThickness*0.5;
672 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
673 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
674 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
675 gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11); // fibre glass
678 ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
679 zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
680 gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
681 gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
684 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
685 trpa[1] = kModuleWallThickness;
687 trpa[3] = -beta*kRaddeg;
690 gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6); // fibre glass
692 AliMatrix (idrotm[3], alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
693 AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90., 0.);
697 zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
698 gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
699 gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
702 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
703 trpa[1] = kModuleWallThickness*0.5;
705 trpa[3] = -beta*kRaddeg;
708 gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6); // fibre glass
711 ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
712 zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
713 gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
714 gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
717 // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
719 tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
720 alpha = TMath::ATan(tgal);
721 beta = (kPi*0.5 - alpha)*0.5;
722 tgbe = TMath::Tan(beta);
726 trpa[3] = kModuleWallThickness;
727 trpa[4] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
728 trpa[5] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
729 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
730 trpa[7] = kModuleWallThickness;
731 trpa[8] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
732 trpa[9] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
733 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
734 gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11); // fibre glass
737 ycoor = -kLengthExInModBorder*0.5;
738 zcoor = kExterInterModBorder1;
739 gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
740 gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
744 ycoor = -kLengthExInModBorder*0.5;
745 zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
746 gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
747 gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
751 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
752 zcoor = kExterInterModBorder2;
753 gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
754 gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
758 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
759 zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
760 gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
761 gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
764 trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
765 trpa[1] = kModuleWallThickness;
767 trpa[3] = -beta*kRaddeg;
770 gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6); // fibre glass
772 AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
773 AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
777 zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
778 gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
779 gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
784 zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
785 gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
786 gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
790 ///////////////// Detector itself //////////////////////
792 const Int_t knx = fTOFGeometry->NpadX(); // number of pads along x
793 const Int_t knz = fTOFGeometry->NpadZ(); // number of pads along z
794 const Float_t kPadX = fTOFGeometry->XPad(); // pad length along x
795 const Float_t kPadZ = fTOFGeometry->ZPad(); // pad length along z
797 // new description for strip volume -double stack strip-
798 // -- all constants are expressed in cm
799 // heigth of different layers
800 const Float_t khhony = 1.0 ; // heigth of HONY Layer
801 const Float_t khpcby = 0.08 ; // heigth of PCB Layer
802 const Float_t khrgly = 0.055 ; // heigth of RED GLASS Layer
804 const Float_t khfiliy = 0.125 ; // heigth of FISHLINE Layer
805 const Float_t khglassy = 0.160*0.5; // heigth of GLASS Layer
806 const Float_t khglfy = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE Layer
808 const Float_t khcpcby = 0.16 ; // heigth of PCB Central Layer
809 const Float_t kwhonz = 8.1 ; // z dimension of HONEY Layer
810 const Float_t kwpcbz1 = 10.6 ; // z dimension of PCB Lower Layer
811 const Float_t kwpcbz2 = 11.6 ; // z dimension of PCB Upper Layer
812 const Float_t kwcpcbz = 12.4 ; // z dimension of PCB Central Layer
813 const Float_t kwrglz = 8. ; // z dimension of RED GLASS Layer
814 const Float_t kwglfz = 7. ; // z dimension of GLASS+FISHLN Layer
815 const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
816 const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
817 const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
819 // heigth of the FSTR Volume (the strip volume)
820 const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
822 // width of the FSTR Volume (the strip volume)
823 const Float_t kwstripz = kwcpcbz;
824 // length of the FSTR Volume (the strip volume)
825 const Float_t klstripx = fTOFGeometry->StripLength();
827 Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
828 // Coordinates of the strip center in the strip reference frame;
829 // used for positioning internal strip volumes
830 Float_t posfp[3]={0.,0.,0.};
832 // FSTR volume definition-filling this volume with non sensitive Gas Mixture
833 gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3); // Freon mix
835 //-- HONY Layer definition
836 parfp[1] = khhony*0.5;
837 parfp[2] = kwhonz*0.5;
838 gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3); // honeycomb (Nomex)
839 // positioning 2 HONY Layers on FSTR volume
840 posfp[1] =-khstripy*0.5+parfp[1];
841 gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
842 gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
844 //-- PCB Layer definition
845 parfp[1] = khpcby*0.5;
846 parfp[2] = kwpcbz1*0.5;
847 gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3); // G10
848 parfp[2] = kwpcbz2*0.5;
849 gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3); // G10
850 // positioning 2 PCB Layers on FSTR volume
851 posfp[1] =-khstripy*0.5+khhony+parfp[1];
852 gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
853 gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
855 //-- central PCB layer definition
856 parfp[1] = khcpcby*0.5;
857 parfp[2] = kwcpcbz*0.5;
858 gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3); // G10
859 // positioning the central PCB layer
860 gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
863 Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
864 gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3); // sensitive ...
865 // dividing FSEN along z in knz=2 and along x in knx=48
866 gMC->Gsdvn("FSEZ","FSEN",knz,3);
867 gMC->Gsdvn("FPAD","FSEZ",knx,1);
868 // positioning a Sensitive layer inside FPCB
869 gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
871 //-- RED GLASS Layer definition
872 parfp[1] = khrgly*0.5;
873 parfp[2] = kwrglz*0.5;
874 gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3); // glass
875 // positioning 4 RED GLASS Layers on FSTR volume
876 posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
877 gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
878 gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
879 posfp[1] = (khcpcby+khrgly)*0.5;
880 gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
881 gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
883 //-- GLASS Layer definition
884 parfp[1] = khglassy*0.5;
885 parfp[2] = kwglfz*0.5;
886 gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3); // glass
888 // positioning 4 GLASS Layers on FSTR volume
889 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
890 gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
891 gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
892 posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
893 gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
894 gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
896 //-- FREON Layer definition
897 parfp[1] = khfiliy*0.5;
898 gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3); // freon
900 // positioning 2 FREON Layers on FSTR volume
901 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
902 gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
903 gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
906 //-- GLASS+FISHLINE Layer definition
907 parfp[1] = khglfy*0.5;
908 parfp[2] = kwglfz*0.5;
909 gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
911 // positioning 2 GLASS+FISHLINE Layers on FSTR volume
912 posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
913 gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
914 gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
917 // Positioning the Strips (FSTR) in the FLT volumes
918 Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
919 fTOFGeometry->NStripB(),
920 fTOFGeometry->NStripA(),
921 fTOFGeometry->NStripB(),
922 fTOFGeometry->NStripC()};
924 Int_t totalStrip = 0;
925 Float_t xpos, zpos, ypos, ang;
926 for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
927 if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
928 for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
930 ang = fTOFGeometry->GetAngles(iplate,istrip);
931 AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
933 if (ang>0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
934 else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
935 else if (ang<0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
938 zpos = fTOFGeometry->GetDistances(iplate,istrip);
939 ypos = fTOFGeometry->GetHeights(iplate,istrip);
941 gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1], "ONLY");
944 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");
945 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");
950 // 1.5 cm Al honeycomb layer between strips and cards
952 par[1] = kHoneycombLayerThickness*0.5;
954 gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3); // Al honeycomb
957 ycoor = kHoneycombLayerThickness*0.5;
959 gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
963 par[1] = kHoneycombLayerThickness*0.5;
964 par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
965 gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3); // Al honeycomb
968 ycoor = kHoneycombLayerThickness*0.5;
969 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
970 gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
971 gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
976 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
978 gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
981 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
983 gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
987 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
988 par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
989 gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
990 gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
993 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
994 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
995 gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
996 gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
999 // start with cards and cooling tubes
1000 // finally, cards, cooling tubes and layer for thermal dispersion
1003 // see GEOM200 in GEANT manual
1007 // card volume definition
1008 cardpar[0]= xFLT*0.5;
1011 gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card
1013 //alu plate volume definition
1016 gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
1018 // tube volume definition
1023 gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
1028 gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
1029 // positioning water tube into the steel one
1030 gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
1033 AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
1035 // central module positioning
1036 Float_t cardpos[3], aplpos2;
1037 Float_t stepforcardA = 6.625;
1039 Float_t aplpos1 = -2.;
1044 // tubepos= -53.+tdis;
1046 for (icard=39; icard<54; ++icard) {
1047 cardpos[2]= cardpos[2]+stepforcardA;
1048 aplpos2 = cardpos[2]+0.15;
1049 gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1050 gMC->Gspos("FALP",icard,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1051 gMC->Gspos("FTUB",icard,"FAIA", 0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
1054 // intermediate module positioning
1055 Float_t stepforcardB= 7.05;
1059 for (icard=20; icard<39; ++icard) {
1060 cardpos[2]= cardpos[2]+stepforcardB;
1061 aplpos2 = cardpos[2]+0.15;
1063 gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1064 gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1065 gMC->Gspos("FTUB",icard+34,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1066 gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1067 gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1068 gMC->Gspos("FTUB",58-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1071 gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1072 gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1073 gMC->Gspos("FTUB",icard+34+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1074 gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1075 gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1076 gMC->Gspos("FTUB",58-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1081 // outer module positioning
1082 Float_t stepforcardC= 8.45238;
1085 for (icard=1; icard<20; ++icard) {
1086 cardpos[2]= cardpos[2]+stepforcardC;
1087 aplpos2 = cardpos[2]+0.15;
1089 gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1090 gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1091 gMC->Gspos("FTUB",icard+72,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1092 gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1093 gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1094 gMC->Gspos("FTUB",20-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1097 gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1098 gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1099 gMC->Gspos("FTUB",icard+72+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1100 gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1101 gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1102 gMC->Gspos("FTUB",20-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1107 //_____________________________________________________________________________
1108 void AliTOFv5T0::DrawModule() const
1111 // Draw a shaded view of the Time Of Flight version 4
1114 // Set everything unseen
1115 gMC->Gsatt("*", "seen", -1);
1118 //Set volumes visible
1121 //Set ALIC mother transparent
1122 gMC->Gsatt("ALIC","SEEN", 0);
1125 // Level 1 for TOF volumes
1126 gMC->Gsatt("B077","seen", 0);
1129 // Level 2 for TOF volumes
1130 gMC->Gsatt("B071","seen", 0);
1131 gMC->Gsatt("B074","seen", 0);
1132 gMC->Gsatt("B075","seen", 0);
1133 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1134 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1137 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1138 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1139 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1140 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1141 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1143 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1144 gMC->Gsatt("BTO1","seen", 0);
1147 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1148 gMC->Gsatt("BTO2","seen", 0);
1151 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1152 gMC->Gsatt("BTO3","seen", 0);
1154 // Level 3 of B071, B074 and B075
1155 gMC->Gsatt("FTOA","SEEN", 0);
1156 if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
1158 // Level 4 of B071, B074 and B075
1159 gMC->Gsatt("FLTA","SEEN", 0);
1160 if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
1161 if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
1163 // Level 5 of B071, B074 and B075
1164 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1165 if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1166 if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1168 gMC->Gsatt("FALA","SEEN", 0);
1169 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1171 gMC->Gsatt("FPEA","SEEN", 1);
1172 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
1174 gMC->Gsatt("FSTR","SEEN",-1); // all FSTR sub-levels skipped -
1176 gMC->Gsatt("FWZ1","SEEN", 0);
1177 gMC->Gsatt("FWZ2","SEEN", 0);
1178 gMC->Gsatt("FWZ3","SEEN", 0);
1179 gMC->Gsatt("FWZ4","SEEN", 0);
1181 gMC->Gsatt("FZ1B","SEEN", 0);
1182 gMC->Gsatt("FZ1C","SEEN", 0);
1183 gMC->Gsatt("FZ2B","SEEN", 0);
1186 gMC->Gdopt("hide", "on");
1187 gMC->Gdopt("shad", "on");
1188 gMC->Gsatt("*", "fill", 7);
1189 gMC->SetClipBox(".");
1190 gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1191 gMC->DefaultRange();
1192 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1193 gMC->Gdhead(1111, "Time Of Flight");
1194 gMC->Gdman(18, 3, "MAN");
1195 gMC->Gdopt("hide","off");
1197 //_____________________________________________________________________________
1198 void AliTOFv5T0::DrawDetectorModules() const
1201 // Draw a shaded view of the TOF detector version 4
1204 // Set everything unseen
1205 gMC->Gsatt("*", "seen", -1);
1208 //Set volumes visible
1211 //Set ALIC mother transparent
1212 gMC->Gsatt("ALIC","SEEN", 0);
1215 // Level 1 for TOF volumes
1216 gMC->Gsatt("B077","seen", 0);
1219 // Level 2 for TOF volumes
1220 gMC->Gsatt("B071","seen", 0);
1221 gMC->Gsatt("B074","seen", 0);
1222 gMC->Gsatt("B075","seen", 0);
1223 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1224 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1227 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1228 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1229 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1230 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1231 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1233 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1234 gMC->Gsatt("BTO1","seen", 0);
1237 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1238 gMC->Gsatt("BTO2","seen", 0);
1241 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1242 gMC->Gsatt("BTO3","seen", 0);
1244 // Level 3 of B071, B075 and B074
1245 gMC->Gsatt("FTOA","seen",-2); // all FTOA sub-levels skipped -
1247 gMC->Gsatt("FTOB","seen",-2); // all FTOB sub-levels skipped -
1248 gMC->Gsatt("FTOC","seen",-2); // all FTOC sub-levels skipped -
1251 gMC->Gdopt("hide","on");
1252 gMC->Gdopt("shad","on");
1253 gMC->Gsatt("*", "fill", 5);
1254 gMC->SetClipBox(".");
1255 gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1256 gMC->DefaultRange();
1257 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1258 gMC->Gdhead(1111,"TOF detector");
1259 gMC->Gdman(18, 3, "MAN");
1260 gMC->Gdopt("hide","off");
1263 //_____________________________________________________________________________
1264 void AliTOFv5T0::DrawDetectorStrips() const
1267 // Draw a shaded view of the TOF strips for version 4
1270 // Set everything unseen
1271 gMC->Gsatt("*", "seen", -1);
1274 //Set volumes visible
1277 //Set ALIC mother transparent
1278 gMC->Gsatt("ALIC","SEEN", 0);
1281 // Level 1 for TOF volumes
1282 gMC->Gsatt("B077","seen", 0);
1285 // Level 2 for TOF volumes
1286 gMC->Gsatt("B071","seen", 0);
1287 gMC->Gsatt("B074","seen", 0);
1288 gMC->Gsatt("B075","seen", 0);
1289 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1290 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1293 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1294 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1295 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1296 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1297 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1299 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1300 gMC->Gsatt("BTO1","seen", 0);
1303 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1304 gMC->Gsatt("BTO2","seen", 0);
1307 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1308 gMC->Gsatt("BTO3","seen", 0);
1310 // Level 3 of B071, B074 and B075
1311 gMC->Gsatt("FTOA","SEEN", 0);
1313 gMC->Gsatt("FTOB","SEEN", 0);
1314 gMC->Gsatt("FTOC","SEEN", 0);
1317 // Level 4 of B071, B074 and B075
1318 gMC->Gsatt("FLTA","SEEN", 0);
1320 gMC->Gsatt("FLTB","SEEN", 0);
1321 gMC->Gsatt("FLTC","SEEN", 0);
1324 // Level 5 of B071, B074 and B075
1325 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1327 gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1328 gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1331 gMC->Gsatt("FALA","SEEN", 0);
1332 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1334 gMC->Gsatt("FPEA","SEEN", 0);
1335 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1337 gMC->Gsatt("FSTR","SEEN",-2); // all FSTR sub-levels skipped -
1339 gMC->Gsatt("FWZ1","SEEN", 0);
1340 gMC->Gsatt("FWZ2","SEEN", 0);
1341 gMC->Gsatt("FWZ3","SEEN", 0);
1342 gMC->Gsatt("FWZ4","SEEN", 0);
1344 gMC->Gsatt("FZ1B","SEEN", 0);
1345 gMC->Gsatt("FZ1C","SEEN", 0);
1346 gMC->Gsatt("FZ2B","SEEN", 0);
1353 gMC->Gsatt("FALP","SEEN",0);
1354 gMC->Gsatt("FCAR","SEEN",0);
1355 gMC->Gsatt("FTUB","SEEN",-1); // all FTUB sub-levels skipped -
1358 gMC->Gsatt("FITU","SEEN",0);
1363 gMC->Gsatt("FGLF","SEEN",0);
1364 gMC->Gsatt("FHON","SEEN",0);
1365 gMC->Gsatt("FPC1","SEEN",0);
1366 gMC->Gsatt("FPC2","SEEN",0);
1367 gMC->Gsatt("FPCB","SEEN",0);
1368 gMC->Gsatt("FRGL","SEEN",0);
1370 // Level 2 of FPCB => Level 3 of FSTR
1371 gMC->Gsatt("FSEN","SEEN",0);
1372 gMC->Gsatt("FSEZ","SEEN",0);
1373 gMC->Gsatt("FPAD","SEEN",1);
1376 gMC->Gdopt("hide","on");
1377 gMC->Gdopt("shad","on");
1378 gMC->Gsatt("*", "fill", 5);
1379 gMC->SetClipBox(".");
1380 gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1381 gMC->DefaultRange();
1382 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1383 gMC->Gdhead(1111,"TOF Strips");
1384 gMC->Gdman(18, 3, "MAN");
1385 gMC->Gdopt("hide","off");
1388 //_____________________________________________________________________________
1389 void AliTOFv5T0::CreateMaterials()
1392 // Define materials for the Time Of Flight
1395 //AliTOF::CreateMaterials();
1397 AliMagF *magneticField = (AliMagF*)gAlice->Field();
1399 Int_t isxfld = magneticField->Integ();
1400 Float_t sxmgmx = magneticField->Max();
1402 Float_t we[7], ae[7], na[7], fr[7], vl[7];
1405 //--- Quartz (SiO2) to simulate float glass
1406 // density tuned to have correct float glass
1408 Float_t aq[2] = { 28.0855,15.9994 };
1409 Float_t zq[2] = { 14.,8. };
1410 Float_t wq[2] = { 1.,2. };
1411 Float_t dq = 2.55; // std value: 2.2
1415 Float_t anox[4] = {12.01,1.01,16.00,14.01};
1416 Float_t znox[4] = { 6., 1., 8., 7.};
1417 Float_t wnox[4] = {14., 22., 2., 2.};
1418 Float_t dnox = 0.048;
1422 Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1423 Float_t zg10[4] = {14., 6., 1., 8.};
1426 for (i = 0; i < nlmatg10; ++i) {
1442 MaterialMixer(we,ae,na,fr,vl,5);
1448 Float_t densg10 = 1.7;
1451 Float_t awa[2] = { 1., 16. };
1452 Float_t zwa[2] = { 1., 8. };
1453 Float_t wwa[2] = { 2., 1. };
1458 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1459 Float_t zsteel[4] = { 26.,24.,28.,14. };
1460 Float_t wsteel[4] = { .715,.18,.1,.005 };
1463 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1464 Float_t zAir[4]={6.,7.,8.,18.};
1465 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1466 Float_t dAir = 1.20479E-3;
1469 Float_t afg[4] = {28.09,16.00,12.01,1.01};
1470 Float_t zfg[4] = {14., 8., 6., 1.};
1471 Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1472 Float_t dfg = 1.111;
1475 // --- Freon C2F4H2 + SF6
1476 Float_t afre[4]= {12.01,1.01,19.00,32.07};
1477 Float_t zfre[4]= { 6., 1., 9., 16.};
1478 Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1479 Float_t densfre= 0.00375;
1482 //char namat[15] = " ";
1483 //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1486 AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1487 AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1488 AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1489 AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1490 AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1491 AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1492 AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
1493 AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1495 // get freon and glass
1496 gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1497 gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1500 Float_t wgfr[2]= {0.0011,0.9989};
1501 Float_t dgfr = 1.434;
1503 AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1505 AliMixture ( 9, "Water$", awa, zwa, dwa, nwa, wwa);
1506 AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1508 Float_t epsil, stmin, deemax, stemax;
1511 // EPSIL = 0.1 ! Tracking precision,
1512 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
1513 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
1517 epsil = .001; // Tracking precision,
1518 stemax = -1.; // Maximum displacement for multiple scattering
1519 deemax = -.3; // Maximum fractional energy loss, DLS
1522 AliMedium( 1, "Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1523 AliMedium( 2,"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1524 AliMedium( 3,"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1525 AliMedium( 4,"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1526 //AliMedium( 5,"glass-freon$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1527 AliMedium( 6,"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1528 AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1529 AliMedium( 8,"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1530 AliMedium( 9,"PCB-S$", 2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1531 AliMedium(10,"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1532 AliMedium(11,"Water$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1533 AliMedium(12,"STEEL$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1536 //_____________________________________________________________________________
1537 void AliTOFv5T0::Init()
1540 // Initialise the detector after the geometry has been defined
1542 AliDebug(1, "**************************************"
1544 "**************************************");
1545 AliDebug(1, " Version 4 of TOF initialing, "
1546 "symmetric TOF - Full Coverage version");
1550 fIdFTOA = gMC->VolId("FTOA");
1552 fIdFTOB = gMC->VolId("FTOB");
1553 fIdFTOC = gMC->VolId("FTOC");
1555 fIdFLTA = gMC->VolId("FLTA");
1557 fIdFLTB = gMC->VolId("FLTB");
1558 fIdFLTC = gMC->VolId("FLTC");
1561 AliDebug(1, "**************************************"
1563 "**************************************");
1566 //_____________________________________________________________________________
1567 void AliTOFv5T0::StepManager()
1571 // Procedure called at each step in the Time Of Flight
1574 TLorentzVector mom, pos;
1575 Float_t xm[3],pm[3],xpad[3],ppad[3];
1578 Int_t sector, plate, padx, padz, strip;
1579 Int_t copy, padzid, padxid, stripid, i;
1580 Int_t *idtmed = fIdtmed->GetArray()-499;
1581 Float_t incidenceAngle;
1583 const char* volpath;
1588 gMC->IsTrackEntering()
1589 && gMC->TrackCharge()
1590 //&& gMC->GetMedium()==idtmed[508]
1591 && gMC->CurrentMedium()==idtmed[508]
1592 && gMC->CurrentVolID(copy)==fIdSens
1596 AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1598 AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
1599 //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
1601 // getting information about hit volumes
1603 padzid=gMC->CurrentVolOffID(1,copy);
1607 padxid=gMC->CurrentVolOffID(0,copy);
1611 stripid=gMC->CurrentVolOffID(4,copy);
1615 gMC->TrackPosition(pos);
1616 gMC->TrackMomentum(mom);
1618 Double_t normMom=1./mom.Rho();
1620 // getting the coordinates in pad ref system
1622 xm[0] = (Float_t)pos.X();
1623 xm[1] = (Float_t)pos.Y();
1624 xm[2] = (Float_t)pos.Z();
1626 pm[0] = (Float_t)mom.X()*normMom;
1627 pm[1] = (Float_t)mom.Y()*normMom;
1628 pm[2] = (Float_t)mom.Z()*normMom;
1630 gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1631 gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1634 if (TMath::Abs(ppad[1])>1) {
1635 AliWarning("Abs(ppad) > 1");
1636 ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1638 incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1641 if (strip < fTOFGeometry->NStripC()) {
1645 else if (strip >= fTOFGeometry->NStripC() &&
1646 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1648 strip = strip - fTOFGeometry->NStripC();
1650 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1651 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1653 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1655 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1656 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1658 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1662 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1665 volpath=gMC->CurrentVolOffName(7);
1666 index=atoi(&volpath[4]);
1683 hits[6] = mom.Rho();
1688 hits[11]= incidenceAngle;
1689 hits[12]= gMC->Edep();
1690 hits[13]= gMC->TrackLength();
1698 AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1699 //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
1702 //-------------------------------------------------------------------
1703 void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1705 // a[] atomic weights vector (in)
1706 // (atoms present in more compound appear separately)
1707 // m[] number of corresponding atoms in the mixture (in)
1708 // d[] fraction of the compound relative to the corresponding atoms (in)
1709 // s[] further possible weights " " " " (in)
1711 for (Int_t i = 0; i < n; ++i) {
1712 p[i] = a[i]*m[i]*d[i]*s[i];
1715 for (Int_t i = 0; i < n; ++i) {
1717 // AliInfo(Form((\n weight[%i] = %f (,i,p[i]));