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.21 2007/10/04 13:15:30 arcelli
19 updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
21 Revision 1.20 2007/10/03 18:07:22 arcelli
22 right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
24 Revision 1.19 2007/10/03 10:41:12 arcelli
25 adding tracking-to-local matrices for new AliTOFcluster
27 Revision 1.18 2007/07/27 08:14:48 morsch
28 Write all track references into the same branch.
30 Revision 1.17 2007/05/14 14:41:13 decaro
31 Fix a bug in FTOA volume positionig inside BTOF13,14,15,16,17 in case of holes in 11th and 12th sectors
33 Revision 1.16 2007/05/04 12:59:26 arcelli
34 Change the TOF SM paths for misalignment (one layer up)
36 Revision 1.15 2007/02/19 15:41:55 decaro
37 Coding convention: few corrections
39 Revision 1.14 2006/10/17 15:33:14 arcelli
40 Moving some printout from Info to Debug level
42 Revision 1.13 2006/10/12 16:35:43 arcelli
43 definition of the alignable volumes symbolic names added
45 Revision 1.12 2006/08/22 13:34:46 arcelli
46 removal of effective c++ warnings (C.Zampolli)
48 Revision 1.11 2006/07/12 16:03:44 arcelli
49 updates to match the new numbering of the TOF/TRD mother volumes in FRAME (ALICE convention)
51 Revision 1.10 2006/05/10 18:40:17 hristov
52 Larger strings for the names
54 Revision 1.9 2006/05/04 19:41:42 hristov
55 Possibility for partial TOF geometry (S.Arcelli)
57 Revision 1.8 2006/04/20 22:30:50 hristov
58 Coding conventions (Annalisa)
60 Revision 1.7 2006/04/16 22:29:05 hristov
61 Coding conventions (Annalisa)
63 Revision 1.6 2006/03/20 08:20:35 decaro
64 Al layer: positioning correction
66 Revision 1.5 2006/03/20 07:54:20 decaro
67 Correction of some layer thickness
69 Revision 1.4 2006/03/13 12:35:44 decaro
70 Suppression of fractional Z warning
72 Revision 1.3 2006/02/28 10:38:00 decaro
73 AliTOFGeometry::fAngles, AliTOFGeometry::fHeights,
74 AliTOFGeometry::fDistances arrays: dimension definition in the right
77 Revision 1.2 2006/02/27 18:12:14 decaro
78 Remove in StepManager the dependence of hit indexes from parametrized
81 Revision 1.1 2005/12/15 08:55:33 decaro
82 New TOF geometry description (V5) -G. Cara Romeo and A. De Caro
85 Revision 0.1 2004 November G. Cara Romeo and A. De Caro
86 Implement new TOF geometry version
88 suppress few volume overlaps
89 (in the 4th TOF geometry version),
90 insert the realistic strip numbers and positions
94 ///////////////////////////////////////////////////////////////////////////////
96 // This class contains the functions for version 5 of the Time Of Flight //
99 // VERSION WITH 5 MODULES AND TILTED STRIPS //
101 // FULL COVERAGE VERSION + OPTION for PHOS holes //
106 <img src="picts/AliTOFv5T0Class.gif"> //
110 ///////////////////////////////////////////////////////////////////////////////
113 #include "TGeometry.h"
114 #include "TLorentzVector.h"
116 #include "TVirtualMC.h"
117 #include "TGeoManager.h"
118 #include <TGeoMatrix.h>
119 #include <TGeoPhysicalNode.h>
120 #include <TGeoVolume.h>
122 #include "AliConst.h"
127 #include "AliTrackReference.h"
129 #include "AliTOFGeometry.h"
130 #include "AliTOFv5T0.h"
132 extern TDirectory *gDirectory;
133 extern TVirtualMC *gMC;
134 extern TGeoManager *gGeoManager;
136 extern AliRun *gAlice;
140 //_____________________________________________________________________________
141 AliTOFv5T0::AliTOFv5T0():
151 // Default constructor
155 //_____________________________________________________________________________
156 AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
157 AliTOF(name,title,"tzero"),
167 // Standard constructor
170 // Check that FRAME is there otherwise we have no place where to
174 AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
176 AliFatal("TOF needs FRAME to be present");
179 if (fTOFGeometry) delete fTOFGeometry;
180 fTOFGeometry = new AliTOFGeometry();
182 if(frame->IsVersion()==1) {
183 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
184 AliDebug(1,"Full Coverage for TOF");
187 AliDebug(1,Form("Frame version %d", frame->IsVersion()));
188 AliDebug(1,"TOF with Holes for PHOS");
191 fTOFGeometry->SetHoles(fTOFHoles);
193 //AliTOF::fTOFGeometry = fTOFGeometry;
196 TDirectory* saveDir = gDirectory;
197 gAlice->GetRunLoader()->CdGAFile();
198 fTOFGeometry->Write("TOFgeometry");
203 //_____________________________________________________________________________
204 void AliTOFv5T0::AddAlignableVolumes() const
207 // Create entries for alignable volumes associating the symbolic volume
208 // name with the corresponding volume path. Needs to be syncronized with
209 // eventual changes in the geometry.
215 TString vpL0 = "ALIC_1/B077_1/BSEGMO";
216 TString vpL1 = "_1/BTOF";
218 TString vpL3 = "/FTOA_0";
219 TString vpL4 = "/FLTA_0/FSTR_";
221 TString snSM = "TOF/sm";
222 TString snSTRIP = "/strip";
224 Int_t nSectors=fTOFGeometry->NSectors();
225 Int_t nStrips =fTOFGeometry->NStripA()+
226 2*fTOFGeometry->NStripB()+
227 2*fTOFGeometry->NStripC();
230 // The TOF MRPC Strips
231 // The symbolic names are: TOF/sm00/strip01
237 for (Int_t isect = 0; isect < nSectors; isect++) {
238 for (Int_t istr = 1; istr <= nStrips; istr++) {
240 if (fTOFSectors[isect]==-1) continue;
242 if (fTOFHoles && (isect==11 || isect==12)) {
245 vpL4 = "/FLTB_0/FSTR_";
249 vpL4 = "/FLTC_0/FSTR_";
255 vpL4 = "/FLTA_0/FSTR_";
269 symName += Form("%02d",isect);
271 symName += Form("%02d",istr);
273 AliDebug(2,"--------------------------------------------");
274 AliDebug(2,Form("Alignable object %d", imod));
275 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
276 AliDebug(2,Form("symName=%s\n",symName.Data()));
277 AliDebug(2,"--------------------------------------------");
279 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
281 //T2L matrices for alignment
282 TGeoPNEntry *e = gGeoManager->GetAlignableEntry(symName.Data());
284 const char *path = e->GetTitle();
285 if (!gGeoManager->cd(path)) {
286 AliFatal(Form("Volume path %s not valid!",path));
288 TGeoHMatrix *globMatrix = gGeoManager->GetCurrentMatrix();
289 Double_t phi = 20.0 * (isect % 18) + 10.0;
290 TGeoHMatrix *t2l = new TGeoHMatrix();
292 t2l->MultiplyLeft(&(globMatrix->Inverse()));
296 AliError(Form("Alignable entry %s is not valid!",symName.Data()));
304 // The TOF supermodules
305 // The symbolic names are: TOF/sm00
309 for (Int_t isect = 0; isect < nSectors; isect++) {
318 symName += Form("%02d",isect);
320 AliDebug(2,"--------------------------------------------");
321 AliDebug(2,Form("Alignable object %d", isect+imod));
322 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
323 AliDebug(2,Form("symName=%s\n",symName.Data()));
324 AliDebug(2,"--------------------------------------------");
326 gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
331 //____________________________________________________________________________
332 void AliTOFv5T0::BuildGeometry()
335 // Build TOF ROOT geometry for the ALICE event display
338 const int kColorTOF = 27;
340 TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
343 top = globalGeometry->GetNode("alice");
345 // Position the different copies
346 const Float_t krTof =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
347 const Float_t khTof = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
348 const Int_t kNTof = fTOFGeometry->NSectors();
349 const Float_t kangle = k2PI/kNTof;
351 const Float_t kInterCentrModBorder1 = 49.5;
352 const Float_t kInterCentrModBorder2 = 57.5;
356 // define offset for nodes
357 Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*0.5)*0.5;
358 Float_t zOffsetA = 0.;
359 // Define TOF basic volume
361 char nodeName0[16], nodeName1[16], nodeName2[16];
362 char nodeName3[16], nodeName4[16], rotMatNum[16];
365 new TBRIK("S_TOF_B","TOF box","void",
366 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
367 new TBRIK("S_TOF_C","TOF box","void",
368 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
370 new TBRIK("S_TOF_A","TOF box","void",
371 fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
373 for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
376 sprintf(rotMatNum,"rot50%i",nodeNum);
377 sprintf(nodeName0,"FTO00%i",nodeNum);
378 sprintf(nodeName1,"FTO10%i",nodeNum);
379 sprintf(nodeName2,"FTO20%i",nodeNum);
380 sprintf(nodeName3,"FTO30%i",nodeNum);
381 sprintf(nodeName4,"FTO40%i",nodeNum);
384 sprintf(rotMatNum,"rot5%i",nodeNum);
385 sprintf(nodeName0,"FTO0%i",nodeNum);
386 sprintf(nodeName1,"FTO1%i",nodeNum);
387 sprintf(nodeName2,"FTO2%i",nodeNum);
388 sprintf(nodeName3,"FTO3%i",nodeNum);
389 sprintf(nodeName4,"FTO4%i",nodeNum);
392 new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
393 ang = (4.5-nodeNum) * kangle;
397 node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
398 node->SetLineColor(kColorTOF);
402 node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
403 node->SetLineColor(kColorTOF);
408 node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
409 node->SetLineColor(kColorTOF);
411 } // end loop on nodeNum
415 //_____________________________________________________________________________
416 void AliTOFv5T0::CreateGeometry()
419 // Create geometry for Time Of Flight version 0
423 <img src="picts/AliTOFv5T0.gif">
427 // Creates common geometry
429 AliTOF::CreateGeometry();
433 //_____________________________________________________________________________
434 void AliTOFv5T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA,
438 // Definition of the Time Of Fligh Resistive Plate Chambers
441 const Float_t kPi = TMath::Pi();
443 const Float_t kInterCentrModBorder1 = 49.5;
444 const Float_t kInterCentrModBorder2 = 57.5;
445 const Float_t kExterInterModBorder1 = 196.0;
446 const Float_t kExterInterModBorder2 = 203.5;
448 const Float_t kLengthExInModBorder = 4.7;
449 const Float_t kLengthInCeModBorder = 7.0;
451 // Al layers over all internal module walls (cm)
452 const Float_t khAlWall = 0.03;
454 // module wall thickness (cm)
455 const Float_t kModuleWallThickness = 0.3;
457 // Al honeycomb layer between strips and cards (cm)
458 const Float_t kHoneycombLayerThickness = 1.5;
460 AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
461 AliDebug(1, "************************* TOF geometry **************************");
463 // Definition of the Time Of Fligh Resistive Plate Chambers
464 // xFLT, yFLT, zFLT - sizes of TOF modules (large)
466 Float_t xcoor, ycoor, zcoor;
468 Int_t *idtmed = fIdtmed->GetArray()-499;
473 par[2] = zlenA * 0.5;
474 gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3); // fibre glass
479 par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
480 gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3); // fibre glass
481 gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3); // fibre glass
484 // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
486 //AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,-90.);
487 AliMatrix(idrotm[0], 90., 0., 0., 0., 90.,270.);
492 for(Int_t isec=0;isec<18;isec++){
493 if(fTOFSectors[isec]==-1)continue;
495 sprintf(name, "BTOF%d",isec);
496 if (fTOFHoles && (isec==11||isec==12)) {
497 // if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
499 ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
501 gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
502 gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
508 gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
512 // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
514 Float_t xFLT, yFLT, zFLTA;
516 xFLT = xtof - kModuleWallThickness*2.;
517 yFLT = ytof - kModuleWallThickness*2.;
518 zFLTA = zlenA - kModuleWallThickness*2.;
523 gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); // Freon mix
528 gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
533 par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
534 gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
535 gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
539 zcoor = kModuleWallThickness*0.5;
540 gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
541 gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
544 // Layer of Aluminum before detector (FALA, FALB and FALC)
547 par[1] = khAlWall*0.5;
548 par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
549 gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
552 ycoor = (-yFLT + khAlWall)*0.5;
554 gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
557 par[1] = khAlWall*0.5;
558 par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
559 gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
562 ycoor = (-yFLT + khAlWall)*0.5;
563 zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
564 gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
565 gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
568 par[1] = khAlWall*0.5;
569 par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
570 gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
573 ycoor = (-yFLT + khAlWall)*0.5;
574 zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
575 gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
576 gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
580 ycoor = (-yFLT + khAlWall)*0.5;
581 zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
582 gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
583 gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
586 ycoor = (-yFLT + khAlWall)*0.5;
587 zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
588 gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
589 gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
592 Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
594 // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
596 tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
597 alpha = TMath::ATan(tgal);
598 beta = (kPi*0.5 - alpha)*0.5;
599 tgbe = TMath::Tan(beta);
603 trpa[3] = kModuleWallThickness;
604 trpa[4] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
605 trpa[5] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
606 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
607 trpa[7] = kModuleWallThickness;
608 trpa[8] = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
609 trpa[9] = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
610 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
611 gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11); // fibre glass
613 AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
614 AliMatrix (idrotm[4],90., 90., 0.,0.,90., 0.);
617 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
618 zcoor = kInterCentrModBorder1;
619 gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
620 gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
623 y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
627 trpa[3] = kModuleWallThickness*0.5;
628 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
629 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
630 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
631 trpa[7] = kModuleWallThickness*0.5;
632 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
633 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
634 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
635 gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11); // fibre glass
638 ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
639 zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
640 gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
641 gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
644 AliMatrix (idrotm[2],90.,270., 0.,0.,90.,180.);
645 AliMatrix (idrotm[5],90.,270.,180.,0.,90., 0.);
648 ycoor = -kLengthInCeModBorder*0.5;
649 zcoor = kInterCentrModBorder2;
650 gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
651 gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
654 y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
658 trpa[3] = kModuleWallThickness*0.5;
659 trpa[4] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
660 trpa[5] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
661 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
662 trpa[7] = kModuleWallThickness*0.5;
663 trpa[8] = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
664 trpa[9] = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
665 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
666 gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11); // fibre glass
669 ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
670 zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
671 gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
672 gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
675 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
676 trpa[1] = kModuleWallThickness;
678 trpa[3] = -beta*kRaddeg;
681 gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6); // fibre glass
683 AliMatrix (idrotm[3], alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
684 AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90., 0.);
688 zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
689 gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
690 gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
693 trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
694 trpa[1] = kModuleWallThickness*0.5;
696 trpa[3] = -beta*kRaddeg;
699 gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6); // fibre glass
702 ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
703 zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
704 gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
705 gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
708 // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
710 tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
711 alpha = TMath::ATan(tgal);
712 beta = (kPi*0.5 - alpha)*0.5;
713 tgbe = TMath::Tan(beta);
717 trpa[3] = kModuleWallThickness;
718 trpa[4] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
719 trpa[5] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
720 trpa[6] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
721 trpa[7] = kModuleWallThickness;
722 trpa[8] = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
723 trpa[9] = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
724 trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
725 gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11); // fibre glass
728 ycoor = -kLengthExInModBorder*0.5;
729 zcoor = kExterInterModBorder1;
730 gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
731 gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
735 ycoor = -kLengthExInModBorder*0.5;
736 zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
737 gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
738 gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
742 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
743 zcoor = kExterInterModBorder2;
744 gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
745 gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
749 ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
750 zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
751 gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
752 gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
755 trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
756 trpa[1] = kModuleWallThickness;
758 trpa[3] = -beta*kRaddeg;
761 gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6); // fibre glass
763 AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
764 AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
768 zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
769 gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
770 gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
775 zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
776 gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
777 gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
781 ///////////////// Detector itself //////////////////////
783 const Int_t knx = fTOFGeometry->NpadX(); // number of pads along x
784 const Int_t knz = fTOFGeometry->NpadZ(); // number of pads along z
785 const Float_t kPadX = fTOFGeometry->XPad(); // pad length along x
786 const Float_t kPadZ = fTOFGeometry->ZPad(); // pad length along z
788 // new description for strip volume -double stack strip-
789 // -- all constants are expressed in cm
790 // heigth of different layers
791 const Float_t khhony = 1.0 ; // heigth of HONY Layer
792 const Float_t khpcby = 0.08 ; // heigth of PCB Layer
793 const Float_t khrgly = 0.055 ; // heigth of RED GLASS Layer
795 const Float_t khfiliy = 0.125 ; // heigth of FISHLINE Layer
796 const Float_t khglassy = 0.160*0.5; // heigth of GLASS Layer
797 const Float_t khglfy = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE Layer
799 const Float_t khcpcby = 0.16 ; // heigth of PCB Central Layer
800 const Float_t kwhonz = 8.1 ; // z dimension of HONEY Layer
801 const Float_t kwpcbz1 = 10.6 ; // z dimension of PCB Lower Layer
802 const Float_t kwpcbz2 = 11.6 ; // z dimension of PCB Upper Layer
803 const Float_t kwcpcbz = 12.4 ; // z dimension of PCB Central Layer
804 const Float_t kwrglz = 8. ; // z dimension of RED GLASS Layer
805 const Float_t kwglfz = 7. ; // z dimension of GLASS+FISHLN Layer
806 const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
807 const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
808 const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
810 // heigth of the FSTR Volume (the strip volume)
811 const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
813 // width of the FSTR Volume (the strip volume)
814 const Float_t kwstripz = kwcpcbz;
815 // length of the FSTR Volume (the strip volume)
816 const Float_t klstripx = fTOFGeometry->StripLength();
818 Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
819 // Coordinates of the strip center in the strip reference frame;
820 // used for positioning internal strip volumes
821 Float_t posfp[3]={0.,0.,0.};
823 // FSTR volume definition-filling this volume with non sensitive Gas Mixture
824 gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3); // Freon mix
826 //-- HONY Layer definition
827 parfp[1] = khhony*0.5;
828 parfp[2] = kwhonz*0.5;
829 gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3); // honeycomb (Nomex)
830 // positioning 2 HONY Layers on FSTR volume
831 posfp[1] =-khstripy*0.5+parfp[1];
832 gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
833 gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
835 //-- PCB Layer definition
836 parfp[1] = khpcby*0.5;
837 parfp[2] = kwpcbz1*0.5;
838 gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3); // G10
839 parfp[2] = kwpcbz2*0.5;
840 gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3); // G10
841 // positioning 2 PCB Layers on FSTR volume
842 posfp[1] =-khstripy*0.5+khhony+parfp[1];
843 gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
844 gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
846 //-- central PCB layer definition
847 parfp[1] = khcpcby*0.5;
848 parfp[2] = kwcpcbz*0.5;
849 gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3); // G10
850 // positioning the central PCB layer
851 gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
854 Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
855 gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3); // sensitive ...
856 // dividing FSEN along z in knz=2 and along x in knx=48
857 gMC->Gsdvn("FSEZ","FSEN",knz,3);
858 gMC->Gsdvn("FPAD","FSEZ",knx,1);
859 // positioning a Sensitive layer inside FPCB
860 gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
862 //-- RED GLASS Layer definition
863 parfp[1] = khrgly*0.5;
864 parfp[2] = kwrglz*0.5;
865 gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3); // glass
866 // positioning 4 RED GLASS Layers on FSTR volume
867 posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
868 gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
869 gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
870 posfp[1] = (khcpcby+khrgly)*0.5;
871 gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
872 gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
874 //-- GLASS Layer definition
875 parfp[1] = khglassy*0.5;
876 parfp[2] = kwglfz*0.5;
877 gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3); // glass
879 // positioning 4 GLASS Layers on FSTR volume
880 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
881 gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
882 gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
883 posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
884 gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
885 gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
887 //-- FREON Layer definition
888 parfp[1] = khfiliy*0.5;
889 gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3); // freon
891 // positioning 2 FREON Layers on FSTR volume
892 posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
893 gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
894 gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
897 //-- GLASS+FISHLINE Layer definition
898 parfp[1] = khglfy*0.5;
899 parfp[2] = kwglfz*0.5;
900 gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
902 // positioning 2 GLASS+FISHLINE Layers on FSTR volume
903 posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
904 gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
905 gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
908 // Positioning the Strips (FSTR) in the FLT volumes
909 Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
910 fTOFGeometry->NStripB(),
911 fTOFGeometry->NStripA(),
912 fTOFGeometry->NStripB(),
913 fTOFGeometry->NStripC()};
915 Int_t totalStrip = 0;
916 Float_t xpos, zpos, ypos, ang;
917 for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
918 if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
919 for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
921 ang = fTOFGeometry->GetAngles(iplate,istrip);
922 AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
924 if (ang>0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
925 else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
926 else if (ang<0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
929 zpos = fTOFGeometry->GetDistances(iplate,istrip);
930 ypos = fTOFGeometry->GetHeights(iplate,istrip);
932 gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1], "ONLY");
935 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");
936 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");
941 // 1.5 cm Al honeycomb layer between strips and cards
943 par[1] = kHoneycombLayerThickness*0.5;
945 gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3); // Al honeycomb
948 ycoor = kHoneycombLayerThickness*0.5;
950 gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
954 par[1] = kHoneycombLayerThickness*0.5;
955 par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
956 gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3); // Al honeycomb
959 ycoor = kHoneycombLayerThickness*0.5;
960 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
961 gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
962 gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
967 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
969 gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
972 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
974 gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
978 par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
979 par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
980 gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
981 gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
984 ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
985 zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
986 gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
987 gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
990 // start with cards and cooling tubes
991 // finally, cards, cooling tubes and layer for thermal dispersion
994 // see GEOM200 in GEANT manual
998 // card volume definition
999 cardpar[0]= xFLT*0.5;
1002 gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card
1004 //alu plate volume definition
1007 gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
1009 // tube volume definition
1014 gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
1019 gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
1020 // positioning water tube into the steel one
1021 gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
1024 AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
1026 // central module positioning
1027 Float_t cardpos[3], aplpos2;
1028 Float_t stepforcardA = 6.625;
1030 Float_t aplpos1 = -2.;
1035 // tubepos= -53.+tdis;
1037 for (icard=39; icard<54; ++icard) {
1038 cardpos[2]= cardpos[2]+stepforcardA;
1039 aplpos2 = cardpos[2]+0.15;
1040 gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1041 gMC->Gspos("FALP",icard,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1042 gMC->Gspos("FTUB",icard,"FAIA", 0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
1045 // intermediate module positioning
1046 Float_t stepforcardB= 7.05;
1050 for (icard=20; icard<39; ++icard) {
1051 cardpos[2]= cardpos[2]+stepforcardB;
1052 aplpos2 = cardpos[2]+0.15;
1054 gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1055 gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1056 gMC->Gspos("FTUB",icard+34,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1057 gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1058 gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1059 gMC->Gspos("FTUB",58-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1062 gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1063 gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1064 gMC->Gspos("FTUB",icard+34+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1065 gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1066 gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1067 gMC->Gspos("FTUB",58-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1072 // outer module positioning
1073 Float_t stepforcardC= 8.45238;
1076 for (icard=1; icard<20; ++icard) {
1077 cardpos[2]= cardpos[2]+stepforcardC;
1078 aplpos2 = cardpos[2]+0.15;
1080 gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1], cardpos[2], 0,"ONLY");
1081 gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0], aplpos1, aplpos2, 0,"ONLY");
1082 gMC->Gspos("FTUB",icard+72,"FAIA", 0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
1083 gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1], -cardpos[2], 0,"ONLY");
1084 gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0], aplpos1, -aplpos2, 0,"ONLY");
1085 gMC->Gspos("FTUB",20-icard,"FAIA", 0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
1088 gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1], cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1089 gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0], aplpos1, aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1090 gMC->Gspos("FTUB",icard+72+182,"FAIC", 0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1091 gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1], -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1092 gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0], aplpos1, -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5, 0,"ONLY");
1093 gMC->Gspos("FTUB",20-icard+ 91,"FAIB", 0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
1098 //_____________________________________________________________________________
1099 void AliTOFv5T0::DrawModule() const
1102 // Draw a shaded view of the Time Of Flight version 4
1105 // Set everything unseen
1106 gMC->Gsatt("*", "seen", -1);
1109 //Set volumes visible
1112 //Set ALIC mother transparent
1113 gMC->Gsatt("ALIC","SEEN", 0);
1116 // Level 1 for TOF volumes
1117 gMC->Gsatt("B077","seen", 0);
1120 // Level 2 for TOF volumes
1121 gMC->Gsatt("B071","seen", 0);
1122 gMC->Gsatt("B074","seen", 0);
1123 gMC->Gsatt("B075","seen", 0);
1124 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1125 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1128 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1129 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1130 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1131 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1132 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1134 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1135 gMC->Gsatt("BTO1","seen", 0);
1138 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1139 gMC->Gsatt("BTO2","seen", 0);
1142 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1143 gMC->Gsatt("BTO3","seen", 0);
1145 // Level 3 of B071, B074 and B075
1146 gMC->Gsatt("FTOA","SEEN", 0);
1147 if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
1149 // Level 4 of B071, B074 and B075
1150 gMC->Gsatt("FLTA","SEEN", 0);
1151 if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
1152 if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
1154 // Level 5 of B071, B074 and B075
1155 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1156 if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1157 if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1159 gMC->Gsatt("FALA","SEEN", 0);
1160 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1162 gMC->Gsatt("FPEA","SEEN", 1);
1163 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
1165 gMC->Gsatt("FSTR","SEEN",-1); // all FSTR sub-levels skipped -
1167 gMC->Gsatt("FWZ1","SEEN", 0);
1168 gMC->Gsatt("FWZ2","SEEN", 0);
1169 gMC->Gsatt("FWZ3","SEEN", 0);
1170 gMC->Gsatt("FWZ4","SEEN", 0);
1172 gMC->Gsatt("FZ1B","SEEN", 0);
1173 gMC->Gsatt("FZ1C","SEEN", 0);
1174 gMC->Gsatt("FZ2B","SEEN", 0);
1177 gMC->Gdopt("hide", "on");
1178 gMC->Gdopt("shad", "on");
1179 gMC->Gsatt("*", "fill", 7);
1180 gMC->SetClipBox(".");
1181 gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1182 gMC->DefaultRange();
1183 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1184 gMC->Gdhead(1111, "Time Of Flight");
1185 gMC->Gdman(18, 3, "MAN");
1186 gMC->Gdopt("hide","off");
1188 //_____________________________________________________________________________
1189 void AliTOFv5T0::DrawDetectorModules() const
1192 // Draw a shaded view of the TOF detector version 4
1195 // Set everything unseen
1196 gMC->Gsatt("*", "seen", -1);
1199 //Set volumes visible
1202 //Set ALIC mother transparent
1203 gMC->Gsatt("ALIC","SEEN", 0);
1206 // Level 1 for TOF volumes
1207 gMC->Gsatt("B077","seen", 0);
1210 // Level 2 for TOF volumes
1211 gMC->Gsatt("B071","seen", 0);
1212 gMC->Gsatt("B074","seen", 0);
1213 gMC->Gsatt("B075","seen", 0);
1214 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1215 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1218 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1219 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1220 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1221 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1222 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1224 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1225 gMC->Gsatt("BTO1","seen", 0);
1228 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1229 gMC->Gsatt("BTO2","seen", 0);
1232 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1233 gMC->Gsatt("BTO3","seen", 0);
1235 // Level 3 of B071, B075 and B074
1236 gMC->Gsatt("FTOA","seen",-2); // all FTOA sub-levels skipped -
1238 gMC->Gsatt("FTOB","seen",-2); // all FTOB sub-levels skipped -
1239 gMC->Gsatt("FTOC","seen",-2); // all FTOC sub-levels skipped -
1242 gMC->Gdopt("hide","on");
1243 gMC->Gdopt("shad","on");
1244 gMC->Gsatt("*", "fill", 5);
1245 gMC->SetClipBox(".");
1246 gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1247 gMC->DefaultRange();
1248 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1249 gMC->Gdhead(1111,"TOF detector");
1250 gMC->Gdman(18, 3, "MAN");
1251 gMC->Gdopt("hide","off");
1254 //_____________________________________________________________________________
1255 void AliTOFv5T0::DrawDetectorStrips() const
1258 // Draw a shaded view of the TOF strips for version 4
1261 // Set everything unseen
1262 gMC->Gsatt("*", "seen", -1);
1265 //Set volumes visible
1268 //Set ALIC mother transparent
1269 gMC->Gsatt("ALIC","SEEN", 0);
1272 // Level 1 for TOF volumes
1273 gMC->Gsatt("B077","seen", 0);
1276 // Level 2 for TOF volumes
1277 gMC->Gsatt("B071","seen", 0);
1278 gMC->Gsatt("B074","seen", 0);
1279 gMC->Gsatt("B075","seen", 0);
1280 gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1281 gMC->Gsatt("B080","seen", 0); // B080 does not has sub-level
1284 gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped -
1285 gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped -
1286 gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped -
1287 gMC->Gsatt("B056","seen", 0); // B056 does not has sub-levels -
1288 gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped -
1290 gMC->Gsatt("BTR1","seen", 0); // all BTR1 sub-levels skipped -
1291 gMC->Gsatt("BTO1","seen", 0);
1294 gMC->Gsatt("BTR2","seen", 0); // all BTR1 sub-levels skipped -
1295 gMC->Gsatt("BTO2","seen", 0);
1298 gMC->Gsatt("BTR3","seen", 0); // all BTR1 sub-levels skipped -
1299 gMC->Gsatt("BTO3","seen", 0);
1301 // Level 3 of B071, B074 and B075
1302 gMC->Gsatt("FTOA","SEEN", 0);
1304 gMC->Gsatt("FTOB","SEEN", 0);
1305 gMC->Gsatt("FTOC","SEEN", 0);
1308 // Level 4 of B071, B074 and B075
1309 gMC->Gsatt("FLTA","SEEN", 0);
1311 gMC->Gsatt("FLTB","SEEN", 0);
1312 gMC->Gsatt("FLTC","SEEN", 0);
1315 // Level 5 of B071, B074 and B075
1316 gMC->Gsatt("FAIA","SEEN",-1); // all FAIA sub-levels skipped -
1318 gMC->Gsatt("FAIB","SEEN",-1); // all FAIB sub-levels skipped -
1319 gMC->Gsatt("FAIC","SEEN",-1); // all FAIC sub-levels skipped -
1322 gMC->Gsatt("FALA","SEEN", 0);
1323 if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1325 gMC->Gsatt("FPEA","SEEN", 0);
1326 if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1328 gMC->Gsatt("FSTR","SEEN",-2); // all FSTR sub-levels skipped -
1330 gMC->Gsatt("FWZ1","SEEN", 0);
1331 gMC->Gsatt("FWZ2","SEEN", 0);
1332 gMC->Gsatt("FWZ3","SEEN", 0);
1333 gMC->Gsatt("FWZ4","SEEN", 0);
1335 gMC->Gsatt("FZ1B","SEEN", 0);
1336 gMC->Gsatt("FZ1C","SEEN", 0);
1337 gMC->Gsatt("FZ2B","SEEN", 0);
1344 gMC->Gsatt("FALP","SEEN",0);
1345 gMC->Gsatt("FCAR","SEEN",0);
1346 gMC->Gsatt("FTUB","SEEN",-1); // all FTUB sub-levels skipped -
1349 gMC->Gsatt("FITU","SEEN",0);
1354 gMC->Gsatt("FGLF","SEEN",0);
1355 gMC->Gsatt("FHON","SEEN",0);
1356 gMC->Gsatt("FPC1","SEEN",0);
1357 gMC->Gsatt("FPC2","SEEN",0);
1358 gMC->Gsatt("FPCB","SEEN",0);
1359 gMC->Gsatt("FRGL","SEEN",0);
1361 // Level 2 of FPCB => Level 3 of FSTR
1362 gMC->Gsatt("FSEN","SEEN",0);
1363 gMC->Gsatt("FSEZ","SEEN",0);
1364 gMC->Gsatt("FPAD","SEEN",1);
1367 gMC->Gdopt("hide","on");
1368 gMC->Gdopt("shad","on");
1369 gMC->Gsatt("*", "fill", 5);
1370 gMC->SetClipBox(".");
1371 gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1372 gMC->DefaultRange();
1373 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1374 gMC->Gdhead(1111,"TOF Strips");
1375 gMC->Gdman(18, 3, "MAN");
1376 gMC->Gdopt("hide","off");
1379 //_____________________________________________________________________________
1380 void AliTOFv5T0::CreateMaterials()
1383 // Define materials for the Time Of Flight
1386 //AliTOF::CreateMaterials();
1388 AliMagF *magneticField = (AliMagF*)gAlice->Field();
1390 Int_t isxfld = magneticField->Integ();
1391 Float_t sxmgmx = magneticField->Max();
1393 Float_t we[7], ae[7], na[7], fr[7], vl[7];
1396 //--- Quartz (SiO2) to simulate float glass
1397 // density tuned to have correct float glass
1399 Float_t aq[2] = { 28.0855,15.9994 };
1400 Float_t zq[2] = { 14.,8. };
1401 Float_t wq[2] = { 1.,2. };
1402 Float_t dq = 2.55; // std value: 2.2
1406 Float_t anox[4] = {12.01,1.01,16.00,14.01};
1407 Float_t znox[4] = { 6., 1., 8., 7.};
1408 Float_t wnox[4] = {14., 22., 2., 2.};
1409 Float_t dnox = 0.048;
1413 Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1414 Float_t zg10[4] = {14., 6., 1., 8.};
1417 for (i = 0; i < nlmatg10; ++i) {
1433 MaterialMixer(we,ae,na,fr,vl,5);
1439 Float_t densg10 = 1.7;
1442 Float_t awa[2] = { 1., 16. };
1443 Float_t zwa[2] = { 1., 8. };
1444 Float_t wwa[2] = { 2., 1. };
1449 Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1450 Float_t zsteel[4] = { 26.,24.,28.,14. };
1451 Float_t wsteel[4] = { .715,.18,.1,.005 };
1454 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1455 Float_t zAir[4]={6.,7.,8.,18.};
1456 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1457 Float_t dAir = 1.20479E-3;
1460 Float_t afg[4] = {28.09,16.00,12.01,1.01};
1461 Float_t zfg[4] = {14., 8., 6., 1.};
1462 Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1463 Float_t dfg = 1.111;
1466 // --- Freon C2F4H2 + SF6
1467 Float_t afre[4]= {12.01,1.01,19.00,32.07};
1468 Float_t zfre[4]= { 6., 1., 9., 16.};
1469 Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1470 Float_t densfre= 0.00375;
1473 //char namat[15] = " ";
1474 //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1477 AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1478 AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1479 AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1480 AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1481 AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1482 AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1483 AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
1484 AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1486 // get freon and glass
1487 gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1488 gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1491 Float_t wgfr[2]= {0.0011,0.9989};
1492 Float_t dgfr = 1.434;
1494 AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1496 AliMixture ( 9, "Water$", awa, zwa, dwa, nwa, wwa);
1497 AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1499 Float_t epsil, stmin, deemax, stemax;
1502 // EPSIL = 0.1 ! Tracking precision,
1503 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
1504 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
1508 epsil = .001; // Tracking precision,
1509 stemax = -1.; // Maximum displacement for multiple scattering
1510 deemax = -.3; // Maximum fractional energy loss, DLS
1513 AliMedium( 1, "Air$", 0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1514 AliMedium( 2,"Nomex$", 1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1515 AliMedium( 3,"G10$", 2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1516 AliMedium( 4,"fibre glass$", 3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1517 //AliMedium( 5,"glass-freon$", 8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1518 AliMedium( 6,"Al Frame$", 4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1519 AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1520 AliMedium( 8,"Fre$", 6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1521 AliMedium( 9,"PCB-S$", 2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1522 AliMedium(10,"Glass$", 7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1523 AliMedium(11,"Water$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1524 AliMedium(12,"STEEL$", 10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1527 //_____________________________________________________________________________
1528 void AliTOFv5T0::Init()
1531 // Initialise the detector after the geometry has been defined
1533 AliDebug(1, "**************************************"
1535 "**************************************");
1536 AliDebug(1, " Version 4 of TOF initialing, "
1537 "symmetric TOF - Full Coverage version");
1541 fIdFTOA = gMC->VolId("FTOA");
1543 fIdFTOB = gMC->VolId("FTOB");
1544 fIdFTOC = gMC->VolId("FTOC");
1546 fIdFLTA = gMC->VolId("FLTA");
1548 fIdFLTB = gMC->VolId("FLTB");
1549 fIdFLTC = gMC->VolId("FLTC");
1552 AliDebug(1, "**************************************"
1554 "**************************************");
1557 //_____________________________________________________________________________
1558 void AliTOFv5T0::StepManager()
1562 // Procedure called at each step in the Time Of Flight
1565 TLorentzVector mom, pos;
1566 Float_t xm[3],pm[3],xpad[3],ppad[3];
1569 Int_t sector, plate, padx, padz, strip;
1570 Int_t copy, padzid, padxid, stripid, i;
1571 Int_t *idtmed = fIdtmed->GetArray()-499;
1572 Float_t incidenceAngle;
1574 const char* volpath;
1579 gMC->IsTrackEntering()
1580 && gMC->TrackCharge()
1581 //&& gMC->GetMedium()==idtmed[508]
1582 && gMC->CurrentMedium()==idtmed[508]
1583 && gMC->CurrentVolID(copy)==fIdSens
1587 AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1589 AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
1590 //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
1592 // getting information about hit volumes
1594 padzid=gMC->CurrentVolOffID(1,copy);
1598 padxid=gMC->CurrentVolOffID(0,copy);
1602 stripid=gMC->CurrentVolOffID(4,copy);
1606 gMC->TrackPosition(pos);
1607 gMC->TrackMomentum(mom);
1609 Double_t normMom=1./mom.Rho();
1611 // getting the coordinates in pad ref system
1613 xm[0] = (Float_t)pos.X();
1614 xm[1] = (Float_t)pos.Y();
1615 xm[2] = (Float_t)pos.Z();
1617 pm[0] = (Float_t)mom.X()*normMom;
1618 pm[1] = (Float_t)mom.Y()*normMom;
1619 pm[2] = (Float_t)mom.Z()*normMom;
1621 gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1622 gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1625 if (TMath::Abs(ppad[1])>1) {
1626 AliWarning("Abs(ppad) > 1");
1627 ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1629 incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1632 if (strip < fTOFGeometry->NStripC()) {
1636 else if (strip >= fTOFGeometry->NStripC() &&
1637 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1639 strip = strip - fTOFGeometry->NStripC();
1641 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1642 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1644 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1646 else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1647 strip < fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1649 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1653 strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1656 volpath=gMC->CurrentVolOffName(7);
1657 index=atoi(&volpath[4]);
1674 hits[6] = mom.Rho();
1679 hits[11]= incidenceAngle;
1680 hits[12]= gMC->Edep();
1681 hits[13]= gMC->TrackLength();
1689 AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1690 //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
1693 //-------------------------------------------------------------------
1694 void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1696 // a[] atomic weights vector (in)
1697 // (atoms present in more compound appear separately)
1698 // m[] number of corresponding atoms in the mixture (in)
1699 // d[] fraction of the compound relative to the corresponding atoms (in)
1700 // s[] further possible weights " " " " (in)
1702 for (Int_t i = 0; i < n; ++i) {
1703 p[i] = a[i]*m[i]*d[i]*s[i];
1706 for (Int_t i = 0; i < n; ++i) {
1708 // AliInfo(Form((\n weight[%i] = %f (,i,p[i]));