]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TOF/AliTOFv6T0.cxx
Changes for #82873: Module debugging broken (Christian)
[u/mrichter/AliRoot.git] / TOF / AliTOFv6T0.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 Revision 1.11  2007/10/08 17:52:55  decaro
19 hole region in front of PHOS detector: update of sectors' numbers
20
21 Revision 1.10  2007/10/07 19:40:46  decaro
22 right handling of l2t matrices and alignable entries in case of TOF staging geometry
23
24 Revision 1.9  2007/10/07 19:36:29  decaro
25 TOF materials and volumes description: update
26
27 Revision 1.8  2007/10/04 13:15:37  arcelli
28 updates to comply with AliTOFGeometryV5 becoming AliTOFGeometry
29
30 Revision 1.7  2007/10/03 18:07:26  arcelli
31 right handling of l2t matrices and alignable entries in case of TOF holes (Annalisa)
32
33 Revision 1.6  2007/10/03 10:41:16  arcelli
34 adding tracking-to-local matrices for new AliTOFcluster
35
36 Revision 1.5  2007/07/27 08:14:48  morsch
37 Write all track references into the same branch.
38
39 Revision 1.4  2007/05/29 16:51:05  decaro
40 Update of the front-end electronics and cooling system description
41
42 Revision 1.3.2  2007/05/29  decaro
43 FEA+cooling zone description: update
44      FEA+cooling orientation (side A/ side C) -> correction
45 Revision 1.3.1  2007/05/24  decaro
46 Change the FEA+cooling zone description:
47      - FCA1/FCA2, air boxes, contain:
48                  FFEA volume, G10 box,
49                  FAL1/FAL2/FAL3 volumes, aluminium boxes;
50      - FRO1/FRO2/FRO3/FRO4/FBAR, aluminum boxes;
51      - changed FTUB positions;
52
53 Revision 1.3  2007/05/04 14:05:42  decaro
54 Ineffective comment cleanup
55
56 Revision 1.2  2007/05/04 12:59:22  arcelli
57 Change the TOF SM paths for misalignment (one layer up)
58
59 Revision 1.1  2007/05/02 17:32:58  decaro
60 TOF geometry description as installed (G. Cara Romeo, A. De Caro)
61
62 Revision 0.1 2007 March G. Cara Romeo and A. De Caro
63         Implemented a more realistic TOF geometry description,
64         in terms of:
65            - material badget,
66            - services and front end electronics description,
67            - TOF crate readout modules
68              (added volume FTOS in ALIC_1/BBMO_1/BBCE_%i -for i=1,...,18-,
69               and in ALIC_1/BFMO_%i -for i=19,...,36- volumes)
70         As the 5th version in terms of geometrical positioning of volumes.
71
72 */
73
74 ///////////////////////////////////////////////////////////////////////////////
75 //                                                                           //
76 //  This class contains the functions for version 6 of the Time Of Flight    //
77 //  detector.                                                                //
78 //                                                                           //
79 //  VERSION WITH 6 MODULES AND TILTED STRIPS                                 //
80 //                                                                           //
81 //  FULL COVERAGE VERSION + OPTION for PHOS holes                            //
82 //                                                                           //
83 //                                                                           //
84 //Begin_Html                                                                 //
85 /*                                                                           //
86 <img src="picts/AliTOFv6T0Class.gif">                                        //
87 */                                                                           //
88 //End_Html                                                                   //
89 //                                                                           //
90 ///////////////////////////////////////////////////////////////////////////////
91
92 #include <TDirectory.h>
93 #include <TGeoGlobalMagField.h>
94 #include <TGeoManager.h>
95 #include <TGeoMatrix.h>
96 #include <TGeoPhysicalNode.h>
97 #include <TGeoVolume.h>
98 #include <TLorentzVector.h>
99 #include <TVirtualMC.h>
100
101 #include "AliConst.h"
102 #include "AliGeomManager.h"
103 #include "AliLog.h"
104 #include "AliMagF.h"
105 #include "AliMC.h"
106 #include "AliRun.h"
107 #include "AliTrackReference.h"
108
109 #include "AliTOFGeometry.h"
110 #include "AliTOFv6T0.h"
111
112 extern TDirectory *gDirectory;
113 extern TVirtualMC *gMC;
114 extern TGeoManager *gGeoManager;
115
116 extern AliRun *gAlice;
117
118 ClassImp(AliTOFv6T0)
119
120 // TOF sectors with Nino masks: 0, 8, 9, 10, 16
121 const Bool_t AliTOFv6T0::fgkFEAwithMasks[18] = 
122 {kTRUE , kFALSE, kFALSE, kFALSE, kFALSE, kFALSE,
123  kFALSE, kFALSE, kTRUE , kTRUE , kTRUE , kFALSE,
124  kFALSE, kFALSE, kFALSE, kFALSE, kTRUE , kFALSE};
125 const Float_t AliTOFv6T0::fgkModuleWallThickness   =   0.33; // cm
126 const Float_t AliTOFv6T0::fgkInterCentrModBorder1  =  49.5 ; // cm
127 const Float_t AliTOFv6T0::fgkInterCentrModBorder2  =  57.5 ; // cm
128 const Float_t AliTOFv6T0::fgkExterInterModBorder1  = 196.0 ; // cm
129 const Float_t AliTOFv6T0::fgkExterInterModBorder2  = 203.5 ; // cm
130 //const Float_t AliTOFv6T0::fgkLengthInCeModBorder   =   7.2 ; // cm // it was 4.7 cm (AdC)
131 const Float_t AliTOFv6T0::fgkLengthInCeModBorderU  =   5.0 ; // cm
132 const Float_t AliTOFv6T0::fgkLengthInCeModBorderD  =   7.0 ; // cm
133 const Float_t AliTOFv6T0::fgkLengthExInModBorder   =   5.0 ; // cm // it was 7.0 cm (AdC)
134 const Float_t AliTOFv6T0::fgkModuleCoverThickness  =   2.0 ; // cm
135 const Float_t AliTOFv6T0::fgkFEAwidth1    = 19.0; // cm
136 const Float_t AliTOFv6T0::fgkFEAwidth2    = 39.5;//38.5; // cm
137 const Float_t AliTOFv6T0::fgkSawThickness =  1.0; // cm
138 const Float_t AliTOFv6T0::fgkCBLw  = 13.5; // cm
139 const Float_t AliTOFv6T0::fgkCBLh1 =  2.0; // cm
140 const Float_t AliTOFv6T0::fgkCBLh2 = 12.3; // cm
141 const Float_t AliTOFv6T0::fgkBetweenLandMask = 0.1; // cm
142 const Float_t AliTOFv6T0::fgkAl1parameters[3] = {fgkFEAwidth1*0.5, 0.4, 0.2}; // cm
143 const Float_t AliTOFv6T0::fgkAl2parameters[3] = {7.25, 0.75, 0.25}; // cm
144 const Float_t AliTOFv6T0::fgkAl3parameters[3] = {3., 4., 0.1}; // cm
145 const Float_t AliTOFv6T0::fgkRoof1parameters[3] = {fgkAl1parameters[0], fgkAl1parameters[2], 1.45}; // cm
146 const Float_t AliTOFv6T0::fgkRoof2parameters[3] = {fgkAl3parameters[0], 0.1, 1.15}; // cm
147 const Float_t AliTOFv6T0::fgkFEAparameters[3] = {fgkFEAwidth1*0.5, 5.6, 0.1}; // cm
148 const Float_t AliTOFv6T0::fgkBar[3] = {8.575, 0.6, 0.25}; // cm
149 const Float_t AliTOFv6T0::fgkBar1[3] = {fgkBar[0], fgkBar[1], 0.1}; // cm
150 const Float_t AliTOFv6T0::fgkBar2[3] = {fgkBar[0], 0.1, fgkBar[1] - 2.*fgkBar1[2]}; // cm
151 const Float_t AliTOFv6T0::fgkBarS[3] = {2., fgkBar[1], fgkBar[2]}; // cm
152 const Float_t AliTOFv6T0::fgkBarS1[3] = {fgkBarS[0], fgkBar1[1], fgkBar1[2]}; // cm
153 const Float_t AliTOFv6T0::fgkBarS2[3] = {fgkBarS[0], fgkBar2[1], fgkBar2[2]}; // cm
154
155 //_____________________________________________________________________________
156   AliTOFv6T0::AliTOFv6T0():
157   fIdFTOA(-1),
158   fIdFTOB(-1),
159   fIdFTOC(-1),
160   fIdFLTA(-1),
161   fIdFLTB(-1),
162   fIdFLTC(-1)//,
163 //fTOFHoles(kFALSE)
164 {
165   //
166   // Default constructor
167   //
168
169 }
170  
171 //_____________________________________________________________________________
172 AliTOFv6T0::AliTOFv6T0(const char *name, const char *title):
173   AliTOF(name,title,"tzero"),
174   fIdFTOA(-1),
175   fIdFTOB(-1),
176   fIdFTOC(-1),
177   fIdFLTA(-1),
178   fIdFLTB(-1),
179   fIdFLTC(-1)//,
180   //fTOFHoles(kFALSE)
181 {
182   //
183   // Standard constructor
184   //
185
186   //
187   // Check that FRAME is there otherwise we have no place where to
188   // put TOF
189
190   /*
191   AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
192
193   if(!frame) {
194     AliFatal("TOF needs FRAME to be present");
195   } else {
196     if (fTOFGeometry) delete fTOFGeometry;
197     fTOFGeometry = new AliTOFGeometry();
198
199     if(frame->IsVersion()==1) {
200       AliDebug(1,Form("Frame version %d", frame->IsVersion())); 
201       AliDebug(1,"Full Coverage for TOF");
202       fTOFHoles=false;}
203     else {
204       AliDebug(1,Form("Frame version %d", frame->IsVersion())); 
205       AliDebug(1,"TOF with Holes for PHOS");
206       fTOFHoles=true;}
207
208   }
209   */
210
211   if (fTOFGeometry) delete fTOFGeometry;
212   fTOFGeometry = new AliTOFGeometry();
213   fTOFGeometry->SetHoles(fTOFHoles);
214
215   //AliTOF::fTOFGeometry = fTOFGeometry;
216
217   // Save the geometry
218   TDirectory* saveDir = gDirectory;
219   AliRunLoader::Instance()->CdGAFile();
220   fTOFGeometry->Write("TOFgeometry");
221   saveDir->cd();
222
223
224
225 //_____________________________________________________________________________
226 void AliTOFv6T0::AddAlignableVolumes() const
227 {
228   //
229   // Create entries for alignable volumes associating the symbolic volume
230   // name with the corresponding volume path. Needs to be syncronized with
231   // eventual changes in the geometry.
232   //
233
234   AliGeomManager::ELayerID idTOF = AliGeomManager::kTOF;
235   Int_t modUID, modnum=0;
236
237   TString volPath;
238   TString symName;
239
240   TString vpL0  = "ALIC_1/B077_1/BSEGMO";
241   TString vpL1 = "_1/BTOF";
242   TString vpL2 = "_1";
243   TString vpL3 = "/FTOA_0";
244   TString vpL4 = "/FLTA_0/FSTR_";
245
246   TString snSM  = "TOF/sm";
247   TString snSTRIP = "/strip";
248
249   Int_t nSectors=fTOFGeometry->NSectors();
250   Int_t nStrips =fTOFGeometry->NStripA()+
251                  2*fTOFGeometry->NStripB()+
252                  2*fTOFGeometry->NStripC();
253
254   //
255   // The TOF MRPC Strips
256   // The symbolic names are: TOF/sm00/strip01
257   //                           ...
258   //                         TOF/sm17/strip91
259  
260   Int_t imod=0;
261
262   for (Int_t isect = 0; isect < nSectors; isect++) {
263     for (Int_t istr = 1; istr <= nStrips; istr++) {
264
265       modUID = AliGeomManager::LayerToVolUID(idTOF, modnum++);
266       if (fTOFSectors[isect]==-1) continue;
267
268       if (fTOFHoles && (isect==13 || isect==14 || isect==15)) {
269         if (istr<39) {
270           vpL3 = "/FTOB_0";
271           vpL4 = "/FLTB_0/FSTR_";
272         }
273         else if (istr>53) {
274           vpL3 = "/FTOC_0";
275           vpL4 = "/FLTC_0/FSTR_";
276         }
277         else continue;
278       }
279       else {
280         vpL3 = "/FTOA_0";
281         vpL4 = "/FLTA_0/FSTR_";
282       }
283
284       volPath  = vpL0;
285       volPath += isect;
286       volPath += vpL1;
287       volPath += isect;
288       volPath += vpL2;
289       volPath += vpL3;
290       volPath += vpL4;
291       volPath += istr;
292
293       
294       symName  = snSM;
295       symName += Form("%02d",isect);
296       symName += snSTRIP;
297       symName += Form("%02d",istr);
298             
299       AliDebug(2,"--------------------------------------------"); 
300       AliDebug(2,Form("Alignable object %d", imod)); 
301       AliDebug(2,Form("volPath=%s\n",volPath.Data()));
302       AliDebug(2,Form("symName=%s\n",symName.Data()));
303       AliDebug(2,"--------------------------------------------"); 
304               
305       if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data(),modUID))
306         AliError(Form("Alignable entry %s not set",symName.Data()));
307
308       //T2L matrices for alignment
309       TGeoPNEntry *e = gGeoManager->GetAlignableEntryByUID(modUID);
310       if (e) {
311         TGeoHMatrix *globMatrix = e->GetGlobalOrig();
312         Double_t phi = 20.0 * (isect % 18) + 10.0;
313         TGeoHMatrix *t2l  = new TGeoHMatrix();
314         t2l->RotateZ(phi);
315         t2l->MultiplyLeft(&(globMatrix->Inverse()));
316         e->SetMatrix(t2l);
317       }
318       else {
319         AliError(Form("Alignable entry %s is not valid!",symName.Data()));
320       }
321       imod++;
322     }
323   }
324
325
326   //
327   // The TOF supermodules
328   // The symbolic names are: TOF/sm00
329   //                           ...
330   //                         TOF/sm17
331   //
332   for (Int_t isect = 0; isect < nSectors; isect++) {
333
334     volPath  = vpL0;
335     volPath += isect;
336     volPath += vpL1;
337     volPath += isect;
338     volPath += vpL2;
339
340     symName  = snSM;
341     symName += Form("%02d",isect);
342
343     AliDebug(2,"--------------------------------------------"); 
344     AliDebug(2,Form("Alignable object %d", isect+imod)); 
345     AliDebug(2,Form("volPath=%s\n",volPath.Data()));
346     AliDebug(2,Form("symName=%s\n",symName.Data()));
347     AliDebug(2,"--------------------------------------------"); 
348
349     gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
350
351   }
352   
353 }
354
355 //_____________________________________________________________________________
356 void AliTOFv6T0::CreateGeometry()
357 {
358   //
359   // Create geometry for Time Of Flight version 0
360   //
361   //Begin_Html
362   /*
363     <img src="picts/AliTOFv6T0.gif">
364   */
365   //End_Html
366   //
367   // Creates common geometry
368   //
369   AliTOF::CreateGeometry();
370 }
371  
372
373 //_____________________________________________________________________________
374 void AliTOFv6T0::TOFpc(Float_t xtof, Float_t ytof, Float_t zlenA)
375 {
376   //
377   // Definition of the Time Of Fligh Resistive Plate Chambers
378   //
379
380   AliDebug(1, "************************* TOF geometry **************************");
381   AliDebug(1,Form(" xtof   %f",  xtof));
382   AliDebug(1,Form(" ytof   %f",  ytof));
383   AliDebug(1,Form(" zlenA   %f", zlenA));
384   AliDebug(2,Form(" zlenA*0.5 = %f", zlenA*0.5));
385
386   Float_t xFLT, yFLT, zFLTA;
387   xFLT  = xtof     - 2.*fgkModuleWallThickness;
388   yFLT  = ytof*0.5 -    fgkModuleWallThickness;
389   zFLTA = zlenA    - 2.*fgkModuleWallThickness;
390
391   CreateModules(xtof, ytof, zlenA, xFLT, yFLT, zFLTA);
392   MakeStripsInModules(ytof, zlenA);
393
394   CreateModuleCovers(xtof, zlenA);
395
396   CreateBackZone(xtof, ytof, zlenA);
397   MakeFrontEndElectronics(xtof);
398   MakeFEACooling(xtof);
399   MakeNinoMask(xtof);
400   MakeSuperModuleCooling(xtof, ytof, zlenA);
401   MakeSuperModuleServices(xtof, ytof, zlenA);
402
403   MakeModulesInBTOFvolumes(ytof, zlenA);
404   MakeCoversInBTOFvolumes();
405   MakeBackInBTOFvolumes(ytof);
406
407   MakeReadoutCrates(ytof);
408
409 }
410
411 //_____________________________________________________________________________
412 void AliTOFv6T0::CreateModules(Float_t xtof,  Float_t ytof, Float_t zlenA,
413                                Float_t xFLT,  Float_t yFLT, Float_t zFLTA) const
414 {
415   //
416   // Create supermodule volume
417   // and wall volumes to separate 5 modules
418   //
419
420   const Float_t kPi = TMath::Pi();
421
422   Int_t *idtmed = fIdtmed->GetArray()-499;
423
424   Int_t idrotm[8];
425
426   // Definition of the of fibre glass modules (FTOA, FTOB and FTOC)
427   Float_t  par[3];
428   par[0] = xtof * 0.5;
429   par[1] = ytof * 0.25;
430   par[2] = zlenA * 0.5;
431   gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3);  // Fibre glass
432
433   if (fTOFHoles) {
434     par[0] =  xtof * 0.5;
435     par[1] =  ytof * 0.25;
436     par[2] = (zlenA*0.5 - fgkInterCentrModBorder1)*0.5;
437     gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3);  // Fibre glass
438     gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3);  // Fibre glass
439   }
440
441
442   // Definition and positioning
443   // of the not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
444   par[0] = xFLT*0.5;
445   par[1] = yFLT*0.5;
446   par[2] = zFLTA*0.5;
447   gMC->Gsvolu("FLTA", "BOX ", idtmed[506], par, 3); // Freon mix
448
449   Float_t xcoor, ycoor, zcoor;
450   xcoor = 0.;
451   ycoor = fgkModuleWallThickness*0.5;
452   zcoor = 0.;
453   gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
454
455   if (fTOFHoles) {
456     par[2] = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5;
457     gMC->Gsvolu("FLTB", "BOX ", idtmed[506], par, 3); // Freon mix
458     gMC->Gsvolu("FLTC", "BOX ", idtmed[506], par, 3); // Freon mix
459
460     //xcoor = 0.;
461     //ycoor = fgkModuleWallThickness*0.5;
462     zcoor = fgkModuleWallThickness;
463     gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
464     gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
465   }
466
467   // Definition and positioning
468   // of the fibre glass walls between central and intermediate modules (FWZ1 and FWZ2)
469   Float_t alpha, tgal, beta, tgbe, trpa[11];
470   //tgal  = (yFLT - 2.*fgkLengthInCeModBorder)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
471   tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
472   alpha = TMath::ATan(tgal);
473   beta  = (kPi*0.5 - alpha)*0.5;
474   tgbe  = TMath::Tan(beta);
475   trpa[0]  = xFLT*0.5;
476   trpa[1]  = 0.;
477   trpa[2]  = 0.;
478   trpa[3]  = 2.*fgkModuleWallThickness;
479   //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
480   //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
481   trpa[4]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
482   trpa[5]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
483   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
484   trpa[7]  = 2.*fgkModuleWallThickness;
485   trpa[8]  = (fgkLengthInCeModBorderD - 2.*fgkModuleWallThickness*tgbe)*0.5;
486   trpa[9]  = (fgkLengthInCeModBorderD + 2.*fgkModuleWallThickness*tgbe)*0.5;
487   //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
488   //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
489   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
490   gMC->Gsvolu("FWZ1D", "TRAP", idtmed[503], trpa, 11); // Fibre glass
491
492   AliMatrix (idrotm[0],90., 90.,180.,0.,90.,180.);
493   AliMatrix (idrotm[1],90., 90.,  0.,0.,90.,  0.);
494
495   //xcoor = 0.;
496   //ycoor = -(yFLT - fgkLengthInCeModBorder)*0.5;
497   ycoor = -(yFLT - fgkLengthInCeModBorderD)*0.5;
498   zcoor = fgkInterCentrModBorder1;
499   gMC->Gspos("FWZ1D", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
500   gMC->Gspos("FWZ1D", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
501
502   Float_t y0B, ycoorB, zcoorB;
503
504   if (fTOFHoles) {
505     //y0B = fgkLengthInCeModBorder - fgkModuleWallThickness*tgbe;
506     y0B = fgkLengthInCeModBorderD - fgkModuleWallThickness*tgbe;
507     trpa[0]  = xFLT*0.5;
508     trpa[1]  = 0.;
509     trpa[2]  = 0.;
510     trpa[3]  = fgkModuleWallThickness;
511     trpa[4]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
512     trpa[5]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
513     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
514     trpa[7]  = fgkModuleWallThickness;
515     trpa[8]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
516     trpa[9]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
517     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
518     //xcoor = 0.;
519     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
520     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 - 2.*fgkModuleWallThickness;
521     gMC->Gsvolu("FWZAD", "TRAP", idtmed[503], trpa, 11); // Fibre glass
522     gMC->Gspos("FWZAD", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[1], "ONLY");
523     gMC->Gspos("FWZAD", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[0], "ONLY");
524   }
525
526
527
528   tgal  = (yFLT - fgkLengthInCeModBorderU - fgkLengthInCeModBorderD)/(fgkInterCentrModBorder2 - fgkInterCentrModBorder1);
529   alpha = TMath::ATan(tgal);
530   beta  = (kPi*0.5 - alpha)*0.5;
531   tgbe  = TMath::Tan(beta);
532   trpa[0]  = xFLT*0.5;
533   trpa[1]  = 0.;
534   trpa[2]  = 0.;
535   trpa[3]  = 2.*fgkModuleWallThickness;
536   //trpa[4]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
537   //trpa[5]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
538   trpa[4]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
539   trpa[5]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
540   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
541   trpa[7]  = 2.*fgkModuleWallThickness;
542   trpa[8]  = (fgkLengthInCeModBorderU - 2.*fgkModuleWallThickness*tgbe)*0.5;
543   trpa[9]  = (fgkLengthInCeModBorderU + 2.*fgkModuleWallThickness*tgbe)*0.5;
544   //trpa[8]  = (fgkLengthInCeModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
545   //trpa[9]  = (fgkLengthInCeModBorder + 2.*fgkModuleWallThickness*tgbe)*0.5;
546   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
547   gMC->Gsvolu("FWZ1U", "TRAP", idtmed[503], trpa, 11); // Fibre glass
548
549
550   AliMatrix (idrotm[2],90.,270.,  0.,0.,90.,180.);
551   AliMatrix (idrotm[3],90.,270.,180.,0.,90.,  0.);
552
553   //xcoor = 0.;
554   //ycoor = (yFLT - fgkLengthInCeModBorder)*0.5;
555   ycoor = (yFLT - fgkLengthInCeModBorderU)*0.5;
556   zcoor = fgkInterCentrModBorder2;
557   gMC->Gspos("FWZ1U", 1, "FLTA", xcoor, ycoor, zcoor,idrotm[2], "ONLY");
558   gMC->Gspos("FWZ1U", 2, "FLTA", xcoor, ycoor,-zcoor,idrotm[3], "ONLY");
559
560   if (fTOFHoles) {
561     //y0B = fgkLengthInCeModBorder + fgkModuleWallThickness*tgbe;
562     y0B = fgkLengthInCeModBorderU + fgkModuleWallThickness*tgbe;
563     trpa[0]  = xFLT*0.5;
564     trpa[1]  = 0.;
565     trpa[2]  = 0.;
566     trpa[3]  = fgkModuleWallThickness;
567     trpa[4]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
568     trpa[5]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
569     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
570     trpa[7]  = fgkModuleWallThickness;
571     trpa[8]  = (y0B - fgkModuleWallThickness*tgbe)*0.5;
572     trpa[9]  = (y0B + fgkModuleWallThickness*tgbe)*0.5;
573     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
574     gMC->Gsvolu("FWZBU", "TRAP", idtmed[503], trpa, 11); // Fibre glass
575     //xcoor = 0.;
576     ycoorB = ycoor - fgkModuleWallThickness*0.5*tgbe;
577     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 -
578       (fgkInterCentrModBorder2 - fgkInterCentrModBorder1) - 2.*fgkModuleWallThickness;
579     gMC->Gspos("FWZBU", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[3], "ONLY");
580     gMC->Gspos("FWZBU", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[2], "ONLY");
581   }
582
583   trpa[0] = 0.5*(fgkInterCentrModBorder2 - fgkInterCentrModBorder1)/TMath::Cos(alpha);
584   trpa[1] = 2.*fgkModuleWallThickness;
585   trpa[2] = xFLT*0.5;
586   trpa[3] = -beta*kRaddeg;
587   trpa[4] = 0.;
588   trpa[5] = 0.;
589   gMC->Gsvolu("FWZ2", "PARA", idtmed[503], trpa, 6); // Fibre glass
590
591   AliMatrix (idrotm[4],     alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
592   AliMatrix (idrotm[5],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,  0.);
593
594   //xcoor = 0.;
595   //ycoor = 0.;
596   ycoor = (fgkLengthInCeModBorderD - fgkLengthInCeModBorderU)*0.5;
597   zcoor = (fgkInterCentrModBorder2 + fgkInterCentrModBorder1)*0.5;
598   gMC->Gspos("FWZ2", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[4], "ONLY");
599   gMC->Gspos("FWZ2", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[5], "ONLY");
600
601   if (fTOFHoles) {
602     trpa[0] = 0.5*(fgkInterCentrModBorder2 - fgkInterCentrModBorder1)/TMath::Cos(alpha);
603     trpa[1] = fgkModuleWallThickness;
604     trpa[2] = xFLT*0.5;
605     trpa[3] = -beta*kRaddeg;
606     trpa[4] = 0.;
607     trpa[5] = 0.;
608     gMC->Gsvolu("FWZC", "PARA", idtmed[503], trpa, 6); // Fibre glass
609     //xcoor = 0.;
610     ycoorB = ycoor - fgkModuleWallThickness*tgbe;
611     zcoorB = (zlenA*0.5 - 2.*fgkModuleWallThickness - fgkInterCentrModBorder1)*0.5 -
612       (fgkInterCentrModBorder2 - fgkInterCentrModBorder1)*0.5 - 2.*fgkModuleWallThickness;
613     gMC->Gspos("FWZC", 1, "FLTB", xcoor, ycoorB, zcoorB, idrotm[5], "ONLY");
614     gMC->Gspos("FWZC", 2, "FLTC", xcoor, ycoorB,-zcoorB, idrotm[4], "ONLY");
615   }
616
617
618   // Definition and positioning
619   // of the fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
620   tgal  = (yFLT - 2.*fgkLengthExInModBorder)/(fgkExterInterModBorder2 - fgkExterInterModBorder1);
621   alpha = TMath::ATan(tgal);
622   beta  = (kPi*0.5 - alpha)*0.5;
623   tgbe  = TMath::Tan(beta);
624   trpa[0]  = xFLT*0.5;
625   trpa[1]  = 0.;
626   trpa[2]  = 0.;
627   trpa[3]  = 2.*fgkModuleWallThickness;
628   trpa[4]  = (fgkLengthExInModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
629   trpa[5]  = (fgkLengthExInModBorder + 2.*fgkModuleWallThickness*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]  = 2.*fgkModuleWallThickness;
632   trpa[8]  = (fgkLengthExInModBorder - 2.*fgkModuleWallThickness*tgbe)*0.5;
633   trpa[9]  = (fgkLengthExInModBorder + 2.*fgkModuleWallThickness*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("FWZ3", "TRAP", idtmed[503], trpa, 11); // Fibre glass
636
637   //xcoor = 0.;
638   ycoor = (yFLT - fgkLengthExInModBorder)*0.5;
639   zcoor = fgkExterInterModBorder1;
640   gMC->Gspos("FWZ3", 1, "FLTA", xcoor, ycoor, zcoor,idrotm[3], "ONLY");
641   gMC->Gspos("FWZ3", 2, "FLTA", xcoor, ycoor,-zcoor,idrotm[2], "ONLY");
642
643   if (fTOFHoles) {
644     //xcoor = 0.;
645     //ycoor = (yFLT - fgkLengthExInModBorder)*0.5;
646     zcoor = -fgkExterInterModBorder1 + (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
647     gMC->Gspos("FWZ3", 5, "FLTB", xcoor, ycoor, zcoor, idrotm[2], "ONLY");
648     gMC->Gspos("FWZ3", 6, "FLTC", xcoor, ycoor,-zcoor, idrotm[3], "ONLY");
649   }
650
651   //xcoor = 0.;
652   ycoor = -(yFLT - fgkLengthExInModBorder)*0.5;
653   zcoor = fgkExterInterModBorder2;
654   gMC->Gspos("FWZ3", 3, "FLTA", xcoor, ycoor, zcoor, idrotm[1], "ONLY");
655   gMC->Gspos("FWZ3", 4, "FLTA", xcoor, ycoor,-zcoor, idrotm[0], "ONLY");
656
657   if (fTOFHoles) {
658     //xcoor = 0.;
659     //ycoor = -(yFLT - fgkLengthExInModBorder)*0.5;
660     zcoor = -fgkExterInterModBorder2 + (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
661     gMC->Gspos("FWZ3", 7, "FLTB", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
662     gMC->Gspos("FWZ3", 8, "FLTC", xcoor, ycoor,-zcoor, idrotm[1], "ONLY");
663   }
664
665   trpa[0] = 0.5*(fgkExterInterModBorder2 - fgkExterInterModBorder1)/TMath::Cos(alpha);
666   trpa[1] = 2.*fgkModuleWallThickness;
667   trpa[2] = xFLT*0.5;
668   trpa[3] = -beta*kRaddeg;
669   trpa[4] = 0.;
670   trpa[5] = 0.;
671   gMC->Gsvolu("FWZ4", "PARA", idtmed[503], trpa, 6); // Fibre glass
672
673   AliMatrix (idrotm[6],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
674   AliMatrix (idrotm[7],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
675
676   //xcoor = 0.;
677   ycoor = 0.;
678   zcoor = (fgkExterInterModBorder2 + fgkExterInterModBorder1)*0.5;
679   gMC->Gspos("FWZ4", 1, "FLTA", xcoor, ycoor, zcoor, idrotm[7], "ONLY");
680   gMC->Gspos("FWZ4", 2, "FLTA", xcoor, ycoor,-zcoor, idrotm[6], "ONLY");
681
682   if (fTOFHoles) {
683     //xcoor = 0.;
684     //ycoor = 0.;
685     zcoor = -(fgkExterInterModBorder2 + fgkExterInterModBorder1)*0.5 +
686       (zlenA*0.5 + fgkInterCentrModBorder1 - 2.*fgkModuleWallThickness)*0.5;
687     gMC->Gspos("FWZ4", 3, "FLTB", xcoor, ycoor, zcoor, idrotm[6], "ONLY");
688     gMC->Gspos("FWZ4", 4, "FLTC", xcoor, ycoor,-zcoor, idrotm[7], "ONLY");
689   }
690
691 }
692
693 //_____________________________________________________________________________
694 void AliTOFv6T0::CreateModuleCovers(Float_t xtof, Float_t zlenA) const
695 {
696   //
697   // Create covers for module:
698   //   per each module zone, defined according to
699   //   fgkInterCentrModBorder2, fgkExterInterModBorder1 and zlenA+2 values,
700   //   there is a frame of thickness 2cm in Al
701   //   and the contained zones in honeycomb of Al.
702   //   There is also an interface layer (1.6mm thichness)
703   //   and plastic and Cu corresponding to the flat cables.
704   //
705
706   Int_t  *idtmed = fIdtmed->GetArray()-499;
707
708   Float_t par[3];
709   par[0] = xtof*0.5 + 2.;
710   par[1] = fgkModuleCoverThickness*0.5;
711   par[2] = zlenA*0.5 + 2.;
712   gMC->Gsvolu("FPEA", "BOX ", idtmed[500], par, 3); // Air
713   if (fTOFHoles) gMC->Gsvolu("FPEB", "BOX ", idtmed[500], par, 3); // Air
714
715   const Float_t kAlCoverThickness = 1.5;
716   const Float_t kInterfaceCardThickness = 0.16;
717   const Float_t kAlSkinThickness = 0.1;
718
719   //par[0] = xtof*0.5 + 2.;
720   par[1] = kAlCoverThickness*0.5;
721   //par[2] = zlenA*0.5 + 2.;
722   gMC->Gsvolu("FALT", "BOX ", idtmed[504], par, 3); // Al
723   if (fTOFHoles) gMC->Gsvolu("FALB", "BOX ", idtmed[504], par, 3); // Al
724   Float_t  xcoor, ycoor, zcoor;
725   xcoor = 0.;
726   ycoor = 0.;
727   zcoor = 0.;
728   gMC->Gspos("FALT", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
729   if (fTOFHoles) gMC->Gspos("FALB", 0, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
730
731   par[0] = xtof*0.5;
732   //par[1] = kAlCoverThickness*0.5;
733   par[2] = fgkInterCentrModBorder2 - 2.;
734   gMC->Gsvolu("FPE1", "BOX ", idtmed[505], par, 3); // Al honeycomb
735   //xcoor = 0.;
736   //ycoor = 0.;
737   //zcoor = 0.;
738   gMC->Gspos("FPE1", 0, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
739
740   if (fTOFHoles) {
741     //par[0] = xtof*0.5;
742     par[1] = kAlCoverThickness*0.5 - kAlSkinThickness;
743     //par[2] = fgkInterCentrModBorder2 - 2.;
744     gMC->Gsvolu("FPE4", "BOX ", idtmed[515], par, 3); // Al honeycomb for holes
745     //xcoor = 0.;
746     //ycoor = 0.;
747     //zcoor = 0.;
748     gMC->Gspos("FPE4", 0, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
749   }
750
751   //par[0] = xtof*0.5;
752   //par[1] = kAlCoverThickness*0.5;
753   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
754   gMC->Gsvolu("FPE2", "BOX ", idtmed[505], par, 3); // Al honeycomb
755   //xcoor = 0.;
756   //ycoor = 0.;
757   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
758   gMC->Gspos("FPE2", 1, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
759   gMC->Gspos("FPE2", 2, "FALT", xcoor, ycoor,-zcoor, 0, "ONLY");
760
761   if (fTOFHoles) {
762     //xcoor = 0.;
763     //ycoor = 0.;
764     //zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
765     gMC->Gspos("FPE2", 1, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
766     gMC->Gspos("FPE2", 2, "FALB", xcoor, ycoor,-zcoor, 0, "ONLY");
767   }
768
769   //par[0] = xtof*0.5;
770   //par[1] = kAlCoverThickness*0.5;
771   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
772   gMC->Gsvolu("FPE3", "BOX ", idtmed[505], par, 3); // Al honeycomb
773   //xcoor = 0.;
774   //ycoor = 0.;
775   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
776   gMC->Gspos("FPE3", 1, "FALT", xcoor, ycoor, zcoor, 0, "ONLY");
777   gMC->Gspos("FPE3", 2, "FALT", xcoor, ycoor,-zcoor, 0, "ONLY");
778
779   if (fTOFHoles) {
780     //xcoor = 0.;
781     //ycoor = 0.;
782     zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
783     gMC->Gspos("FPE3", 1, "FALB", xcoor, ycoor, zcoor, 0, "ONLY");
784     gMC->Gspos("FPE3", 2, "FALB", xcoor, ycoor,-zcoor, 0, "ONLY");
785   }
786
787   // volumes for Interface cards
788   par[0] = xtof*0.5;
789   par[1] = kInterfaceCardThickness*0.5;
790   par[2] = fgkInterCentrModBorder2 - 2.;
791   gMC->Gsvolu("FIF1", "BOX ", idtmed[502], par, 3); // G10
792   //xcoor = 0.;
793   ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
794   zcoor = 0.;
795   gMC->Gspos("FIF1", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
796
797   //par[0] = xtof*0.5;
798   //par[1] = kInterfaceCardThickness*0.5;
799   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
800   gMC->Gsvolu("FIF2", "BOX ", idtmed[502], par, 3); // G10
801   //xcoor = 0.;
802   //ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
803   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
804   gMC->Gspos("FIF2", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
805   gMC->Gspos("FIF2", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
806   if (fTOFHoles) {
807     gMC->Gspos("FIF2", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
808     gMC->Gspos("FIF2", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
809   }
810
811   //par[0] = xtof*0.5;
812   //par[1] = kInterfaceCardThickness*0.5;
813   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
814   gMC->Gsvolu("FIF3", "BOX ", idtmed[502], par, 3); // G10
815   //xcoor = 0.;
816   //ycoor = kAlCoverThickness*0.5 + kInterfaceCardThickness*0.5;
817   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
818   gMC->Gspos("FIF3", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
819   gMC->Gspos("FIF3", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
820   if (fTOFHoles) {
821     gMC->Gspos("FIF3", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
822     gMC->Gspos("FIF3", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
823   }
824
825   // volumes for flat cables
826   // plastic
827   const Float_t kPlasticFlatCableThickness = 0.25;
828   par[0] = xtof*0.5;
829   par[1] = kPlasticFlatCableThickness*0.5;
830   par[2] = fgkInterCentrModBorder2 - 2.;
831   gMC->Gsvolu("FFC1", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
832   //xcoor = 0.;
833   ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
834   zcoor = 0.;
835   gMC->Gspos("FFC1", 0, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
836
837   //par[0] = xtof*0.5;
838   //par[1] = kPlasticFlatCableThickness*0.5;
839   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
840   gMC->Gsvolu("FFC2", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
841   //xcoor = 0.;
842   //ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
843   zcoor = (fgkExterInterModBorder1 + fgkInterCentrModBorder2)*0.5;
844   gMC->Gspos("FFC2", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
845   gMC->Gspos("FFC2", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
846   if (fTOFHoles) {
847     gMC->Gspos("FFC2", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
848     gMC->Gspos("FFC2", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
849   }
850
851   //par[0] = xtof*0.5;
852   //par[1] = kPlasticFlatCableThickness*0.5;
853   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
854   gMC->Gsvolu("FFC3", "BOX ", idtmed[513], par, 3); // Plastic (CH2)
855   //xcoor = 0.;
856   //ycoor = -kAlCoverThickness*0.5 - kPlasticFlatCableThickness*0.5;
857   zcoor = (zlenA*0.5 + 2. + fgkExterInterModBorder1)*0.5;
858   gMC->Gspos("FFC3", 1, "FPEA", xcoor, ycoor, zcoor, 0, "ONLY");
859   gMC->Gspos("FFC3", 2, "FPEA", xcoor, ycoor,-zcoor, 0, "ONLY");
860   if (fTOFHoles) {
861     gMC->Gspos("FFC3", 1, "FPEB", xcoor, ycoor, zcoor, 0, "ONLY");
862     gMC->Gspos("FFC3", 2, "FPEB", xcoor, ycoor,-zcoor, 0, "ONLY");
863   }
864
865   // Cu
866   const Float_t kCopperFlatCableThickness = 0.01;
867   par[0] = xtof*0.5;
868   par[1] = kCopperFlatCableThickness*0.5;
869   par[2] = fgkInterCentrModBorder2 - 2.;
870   gMC->Gsvolu("FCC1", "BOX ", idtmed[512], par, 3); // Cu
871   gMC->Gspos("FCC1", 0, "FFC1", 0., 0., 0., 0, "ONLY");
872
873   //par[0] = xtof*0.5;
874   //par[1] = kCopperFlatCableThickness*0.5;
875   par[2] = (fgkExterInterModBorder1 - fgkInterCentrModBorder2)*0.5 - 2.;
876   gMC->Gsvolu("FCC2", "BOX ", idtmed[512], par, 3); // Cu
877   gMC->Gspos("FCC2", 0, "FFC2", 0., 0., 0., 0, "ONLY");
878
879   //par[0] = xtof*0.5;
880   //par[1] = kCopperFlatCableThickness*0.5;
881   par[2] = (zlenA*0.5 + 2. - fgkExterInterModBorder1)*0.5 - 2.;
882   gMC->Gsvolu("FCC3", "BOX ", idtmed[512], par, 3); // Cu
883   gMC->Gspos("FCC3", 0, "FFC3", 0., 0., 0., 0, "ONLY");
884
885 }
886
887 //_____________________________________________________________________________
888 void AliTOFv6T0::MakeModulesInBTOFvolumes(Float_t ytof, Float_t zlenA) const
889 {
890   //
891   // Fill BTOF_%i (for i=0,...17) volumes
892   // with volumes FTOA (MRPC strip container),
893   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th)
894   // are filled with volumes: FTOB and FTOC (MRPC containers),
895   //
896
897   const Int_t kSize=16;
898
899   Int_t idrotm[1];
900
901   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
902   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
903
904   Float_t xcoor, ycoor, zcoor;
905   xcoor = 0.;
906
907   // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
908   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++){
909     if(fTOFSectors[isec]==-1)continue;
910
911     char name[kSize];
912     snprintf(name, kSize, "BTOF%d",isec);
913     if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
914       //xcoor = 0.;
915       ycoor = (zlenA*0.5 + fgkInterCentrModBorder1)*0.5;
916       zcoor = -ytof * 0.25;
917       gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
918       gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
919     }
920     else {
921       //xcoor = 0.;
922       ycoor = 0.;
923       zcoor = -ytof * 0.25;
924       gMC->Gspos("FTOA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
925     }
926   }
927
928 }
929
930 //_____________________________________________________________________________
931 void AliTOFv6T0::MakeCoversInBTOFvolumes() const
932 {
933   //
934   // Fill BTOF_%i (for i=0,...17) volumes
935   // with volumes FPEA (to separate strips from FEA cards)
936   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th)
937   // are filled with FPEB volumes
938   // (to separate MRPC strips from FEA cards)
939   //
940
941   const Int_t kSize=16;
942
943   Int_t idrotm[1];
944
945   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
946   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
947
948   Float_t xcoor, ycoor, zcoor;
949   xcoor = 0.;
950   ycoor = 0.;
951   zcoor = fgkModuleCoverThickness*0.5;
952
953   char name[kSize];
954
955   // Positioning of module covers (FPEA, FPEB)
956   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
957     if(fTOFSectors[isec]==-1)continue;
958     snprintf(name, kSize, "BTOF%d",isec);
959     if (fTOFHoles && (isec==13 || isec==14 || isec==15))
960       gMC->Gspos("FPEB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
961     else
962       gMC->Gspos("FPEA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
963   }
964
965 }
966
967 //_____________________________________________________________________________
968 void AliTOFv6T0::MakeBackInBTOFvolumes(Float_t ytof) const
969 {
970   //
971   // Fill BTOF_%i (for i=0,...17) volumes with volumes called FAIA and
972   // FAIC (FEA cards and services container).
973   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th) are
974   // filled with volumes FAIB (FEA cards and services container).
975   //
976
977   const Int_t kSize=16;
978
979   Int_t idrotm[1];
980
981   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
982   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
983
984   Float_t xcoor, ycoor, zcoor;
985   xcoor = 0.;
986   ycoor = 0.;
987   zcoor = fgkModuleCoverThickness + (ytof*0.5 - fgkModuleCoverThickness)*0.5;
988
989   char name[kSize];
990
991   // Positioning of FEA cards and services containers (FAIA, FAIC and FAIB)
992   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
993     if(fTOFSectors[isec]==-1)continue;
994     snprintf(name, kSize, "BTOF%d",isec);
995     if (fgkFEAwithMasks[isec])
996       gMC->Gspos("FAIA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
997     else {
998       if (fTOFHoles && (isec==13 || isec==14 || isec==15))
999         gMC->Gspos("FAIB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1000       else
1001         gMC->Gspos("FAIC", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1002     }
1003   }
1004
1005 }
1006
1007 //_____________________________________________________________________________
1008 void AliTOFv6T0::MakeStripsInModules(Float_t ytof, Float_t zlenA) const
1009 {
1010   //
1011   // Define MRPC strip volume, called FSTR
1012   // Insert FSTR volume in FLTA/B/C volumes
1013   //
1014
1015   Float_t yFLT  = ytof*0.5 - fgkModuleWallThickness;
1016
1017   Int_t *idtmed = fIdtmed->GetArray()-499;
1018
1019   ///////////////// Detector itself //////////////////////
1020
1021   const Int_t    knx   = fTOFGeometry->NpadX();  // number of pads along x
1022   const Int_t    knz   = fTOFGeometry->NpadZ();  // number of pads along z
1023   const Float_t  kPadX = fTOFGeometry->XPad();   // pad length along x
1024   const Float_t  kPadZ = fTOFGeometry->ZPad();   // pad length along z
1025
1026   // new description for strip volume -double stack strip-
1027   // -- all constants are expressed in cm
1028   // height of different layers
1029   const Float_t khhony   = 1.0;       // height of HONY Layer
1030   const Float_t khpcby   = 0.08;      // height of PCB Layer
1031   const Float_t khrgly   = 0.055;     // height of RED GLASS Layer
1032
1033   const Float_t khfiliy  = 0.125;     // height of FISHLINE Layer
1034   const Float_t khglassy = 0.160*0.5; // semi-height of GLASS Layer
1035   const Float_t khglfy   = khfiliy+2.*khglassy; // height of GLASS Layer
1036
1037   const Float_t khcpcby  = 0.16;      // height of PCB  Central Layer
1038   const Float_t kwhonz   = 8.1;       // z dimension of HONEY Layer
1039   const Float_t kwpcbz1  = 10.64;     // z dimension of PCB Lower Layer
1040   const Float_t kwpcbz2  = 11.6;      // z dimension of PCB Upper Layer
1041   const Float_t kwcpcbz  = 12.4;      // z dimension of PCB Central Layer
1042
1043   const Float_t kwrglz   = 8.;        // z dimension of RED GLASS Layer
1044   const Float_t kwglfz   = 7.;        // z dimension of GLASS Layer
1045   const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
1046   const Float_t khsensmy = 0.0105;    // height of Sensitive Layer
1047   const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
1048
1049   // height of the FSTR Volume (the strip volume)
1050   const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
1051
1052   // width  of the FSTR Volume (the strip volume)
1053   const Float_t kwstripz = kwcpcbz;
1054   // length of the FSTR Volume (the strip volume)
1055   const Float_t klstripx = fTOFGeometry->StripLength();
1056
1057
1058   // FSTR volume definition-filling this volume with non sensitive Gas Mixture
1059   Float_t parfp[3]={klstripx*0.5, khstripy*0.5, kwstripz*0.5};
1060   gMC->Gsvolu("FSTR", "BOX", idtmed[506], parfp, 3); // Freon mix
1061
1062   Float_t posfp[3]={0.,0.,0.};
1063
1064   // NOMEX (HONEYCOMB) Layer definition
1065   //parfp[0] = klstripx*0.5;
1066   parfp[1] = khhony*0.5;
1067   parfp[2] = kwhonz*0.5;
1068   gMC->Gsvolu("FHON", "BOX", idtmed[501], parfp, 3); // Nomex (Honeycomb)
1069   // positioning 2 NOMEX Layers on FSTR volume
1070   //posfp[0] = 0.;
1071   posfp[1] =-khstripy*0.5 + parfp[1];
1072   //posfp[2] = 0.;
1073   gMC->Gspos("FHON", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1074   gMC->Gspos("FHON", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1075   
1076   // Lower PCB Layer definition
1077   //parfp[0] = klstripx*0.5;
1078   parfp[1] = khpcby*0.5;
1079   parfp[2] = kwpcbz1*0.5;
1080   gMC->Gsvolu("FPC1", "BOX", idtmed[502], parfp, 3); // G10
1081
1082   // Upper PCB Layer definition
1083   //parfp[0] = klstripx*0.5;
1084   //parfp[1] = khpcby*0.5;
1085   parfp[2] = kwpcbz2*0.5;
1086   gMC->Gsvolu("FPC2", "BOX", idtmed[502], parfp, 3); // G10
1087
1088   // positioning 2 external PCB Layers in FSTR volume
1089   //posfp[0] = 0.;
1090   posfp[1] =-khstripy*0.5+khhony+parfp[1];
1091   //posfp[2] = 0.;
1092   gMC->Gspos("FPC1", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1093   gMC->Gspos("FPC2", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1094
1095   // Central PCB layer definition
1096   //parfp[0] = klstripx*0.5;
1097   parfp[1] = khcpcby*0.5;
1098   parfp[2] = kwcpcbz*0.5;
1099   gMC->Gsvolu("FPCB", "BOX", idtmed[502], parfp, 3); // G10
1100   gGeoManager->GetVolume("FPCB")->VisibleDaughters(kFALSE);
1101   // positioning the central PCB layer
1102   gMC->Gspos("FPCB", 1, "FSTR", 0., 0., 0., 0, "ONLY");
1103
1104   // Sensitive volume definition
1105   Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
1106   gMC->Gsvolu("FSEN", "BOX", idtmed[507], parfs, 3); // Cu sensitive
1107   // dividing FSEN along z in knz=2 and along x in knx=48
1108   gMC->Gsdvn("FSEZ", "FSEN", knz, 3);
1109   gMC->Gsdvn("FPAD", "FSEZ", knx, 1);
1110   // positioning sensitive layer inside FPCB
1111   gMC->Gspos("FSEN", 1, "FPCB", 0., 0., 0., 0, "ONLY");
1112
1113   // RED GLASS Layer definition
1114   //parfp[0] = klstripx*0.5;
1115   parfp[1] = khrgly*0.5;
1116   parfp[2] = kwrglz*0.5;
1117   gMC->Gsvolu("FRGL", "BOX", idtmed[508], parfp, 3); // red glass
1118   // positioning 4 RED GLASS Layers in FSTR volume
1119   //posfp[0] = 0.;
1120   posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
1121   //posfp[2] = 0.;
1122   gMC->Gspos("FRGL", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1123   gMC->Gspos("FRGL", 4, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1124   //posfp[0] = 0.;
1125   posfp[1] = (khcpcby+khrgly)*0.5;
1126   //posfp[2] = 0.;
1127   gMC->Gspos("FRGL", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1128   gMC->Gspos("FRGL", 3, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1129
1130   // GLASS Layer definition
1131   //parfp[0] = klstripx*0.5;
1132   parfp[1] = khglassy;
1133   parfp[2] = kwglfz*0.5;
1134   gMC->Gsvolu("FGLF", "BOX", idtmed[508], parfp, 3); // glass
1135   // positioning 2 GLASS Layers in FSTR volume
1136   //posfp[0] = 0.;
1137   posfp[1] = (khcpcby + khglfy)*0.5 + khrgly;
1138   //posfp[2] = 0.;
1139   gMC->Gspos("FGLF", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1140   gMC->Gspos("FGLF", 2, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1141
1142   // Positioning the Strips (FSTR volumes) in the FLT volumes
1143   Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
1144                               fTOFGeometry->NStripB(),
1145                               fTOFGeometry->NStripA(),
1146                               fTOFGeometry->NStripB(),
1147                               fTOFGeometry->NStripC()};
1148
1149   Int_t idrotm[91];
1150
1151   Int_t totalStrip = 0;
1152   Float_t xpos, zpos, ypos, ang;
1153   for(Int_t iplate = 0; iplate < fTOFGeometry->NPlates(); iplate++){
1154     if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
1155     for(Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++){
1156
1157       ang = fTOFGeometry->GetAngles(iplate,istrip);
1158       AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
1159  
1160       if (ang>0.)       AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90., ang, 90.);
1161       else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.,90., 0., 0.);
1162       else if (ang<0.)  AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90.,-ang,270.);
1163
1164       xpos = 0.;
1165       ypos = fTOFGeometry->GetHeights(iplate,istrip) + yFLT*0.5;
1166       zpos = fTOFGeometry->GetDistances(iplate,istrip);
1167       gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTA", xpos, ypos,-zpos, idrotm[istrip+totalStrip], "ONLY");
1168
1169       if (fTOFHoles) {
1170         if (istrip+totalStrip+1>53)
1171           gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTC", xpos, ypos,-zpos-(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
1172         if (istrip+totalStrip+1<39)
1173           gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTB", xpos, ypos,-zpos+(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
1174       }
1175     }
1176   }
1177
1178 }
1179
1180 //_____________________________________________________________________________
1181 void AliTOFv6T0::CreateBackZone(Float_t xtof, Float_t ytof, Float_t zlenA) const
1182 {
1183   //
1184   // Define:
1185   //        - containers for FEA cards, cooling system
1186   //          signal cables and supermodule support structure
1187   //          (volumes called FAIA/B/C),
1188   //        - containers for FEA cards and some cooling
1189   //          elements for a FEA (volumes called FCA1/2).
1190   //
1191
1192   Int_t *idtmed = fIdtmed->GetArray()-499;
1193
1194   Int_t idrotm[1];
1195
1196   // Definition of the air card containers (FAIA, FAIC and FAIB)
1197
1198   Float_t  par[3];
1199   par[0] = xtof*0.5;
1200   par[1] = (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1201   par[2] = zlenA*0.5;
1202   gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
1203   if (fTOFHoles) gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
1204   gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
1205
1206   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1207   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1208   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1209   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1210
1211   // FEA card mother-volume definition
1212   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1213                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1214                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1215   gMC->Gsvolu("FCA1", "BOX ", idtmed[500], carpar, 3); // Air
1216   gMC->Gsvolu("FCA2", "BOX ", idtmed[500], carpar, 3); // Air
1217
1218   // rotation matrix
1219   AliMatrix(idrotm[0],  90.,180., 90., 90.,180., 0.);
1220
1221   // FEA card mother-volume positioning
1222   Float_t rowstep = 6.66;
1223   Float_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
1224   Int_t rowb[5] = {6, 7, 6, 19, 7};
1225   Float_t carpos[3] = {0.,
1226                        -(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1],
1227                        -0.8};
1228   gMC->Gspos("FCA1", 91, "FAIA", carpos[0], carpos[1], carpos[2], 0, "MANY");
1229   gMC->Gspos("FCA2", 91, "FAIC", carpos[0], carpos[1], carpos[2], 0, "MANY");
1230
1231   Int_t row = 1;
1232   Int_t nrow = 0;
1233   for (Int_t sg= -1; sg< 2; sg+= 2) {
1234     carpos[2] = sg*zlenA*0.5 - 0.8;
1235     for (Int_t nb=0; nb<5; ++nb) {
1236       carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
1237       nrow = row + rowb[nb];
1238       for ( ; row < nrow ; ++row) {
1239
1240         carpos[2] -= sg*rowstep;
1241
1242         if (nb==4) {
1243           gMC->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1244           gMC->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1245
1246         }
1247         else {
1248           switch (sg) {
1249           case 1:
1250             gMC->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1251             gMC->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1252             break;
1253           case -1:
1254             gMC->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1255             gMC->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1256             break;
1257           }
1258
1259         }
1260
1261       }
1262     }
1263   }
1264
1265   if (fTOFHoles) {
1266     row = 1;
1267     for (Int_t sg= -1; sg< 2; sg+= 2) {
1268       carpos[2] = sg*zlenA*0.5 - 0.8;
1269       for (Int_t nb=0; nb<4; ++nb) {
1270         carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
1271         nrow = row + rowb[nb];
1272         for ( ; row < nrow ; ++row) {
1273           carpos[2] -= sg*rowstep;
1274
1275           switch (sg) {
1276           case 1:
1277             gMC->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1278             break;
1279           case -1:
1280             gMC->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1281             break;
1282           }
1283         }
1284       }
1285     }
1286   }
1287
1288 }
1289
1290 //_____________________________________________________________________________
1291 void AliTOFv6T0::MakeFrontEndElectronics(Float_t xtof) const
1292 {
1293   //
1294   // Fill FCA1/2 volumes with FEA cards (FFEA volumes).
1295   //
1296
1297   Int_t *idtmed = fIdtmed->GetArray()-499;
1298
1299   // FEA card volume definition
1300   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1301   gMC->Gsvolu("FFEA", "BOX ", idtmed[502], feaParam, 3); // G10
1302
1303   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1304   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1305   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1306   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1307
1308   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1309                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1310                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1311
1312   // FEA card volume positioning
1313   Float_t xCoor = xtof*0.5 - 25.;
1314   Float_t yCoor =-carpar[1] + feaParam[1];
1315   Float_t zCoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - feaParam[2]);
1316   gMC->Gspos("FFEA", 1, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
1317   gMC->Gspos("FFEA", 4, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
1318   gMC->Gspos("FFEA", 1, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
1319   gMC->Gspos("FFEA", 4, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
1320   xCoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1321   gMC->Gspos("FFEA", 2, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
1322   gMC->Gspos("FFEA", 3, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
1323   gMC->Gspos("FFEA", 2, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
1324   gMC->Gspos("FFEA", 3, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
1325
1326 }
1327
1328 //_____________________________________________________________________________
1329 void AliTOFv6T0::MakeFEACooling(Float_t xtof) const
1330 {
1331   //
1332   // Make cooling system attached to each FEA card
1333   // (FAL1, FRO1 and FBAR/1/2 volumes)
1334   // in FCA1/2 volume containers.
1335   //
1336
1337   Int_t *idtmed = fIdtmed->GetArray()-499;
1338
1339   // first FEA cooling element definition
1340   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1341   gMC->Gsvolu("FAL1", "BOX ", idtmed[504], al1, 3); // Al
1342
1343   // second FEA cooling element definition
1344   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1345   gMC->Gsvolu("FRO1", "BOX ", idtmed[504], feaRoof1, 3); // Al
1346
1347   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1348   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1349
1350   // definition and positioning of a small air groove in the FRO1 volume
1351   Float_t airHole[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1]*0.5, feaRoof1[2]};
1352   gMC->Gsvolu("FREE", "BOX ", idtmed[500], airHole, 3); // Air
1353   gMC->Gspos("FREE", 1, "FRO1", 0., feaRoof1[1]-airHole[1], 0., 0, "ONLY");
1354   gGeoManager->GetVolume("FRO1")->VisibleDaughters(kFALSE);
1355
1356   // third FEA cooling element definition
1357   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
1358   gMC->Gsvolu("FBAR", "BOX ", idtmed[504], bar, 3); // Al
1359
1360   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1361
1362   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1363                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1364                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1365
1366   // fourth FEA cooling element definition
1367   Float_t bar1[3] = {fgkBar1[0], fgkBar1[1], fgkBar1[2]};
1368   gMC->Gsvolu("FBA1", "BOX ", idtmed[504], bar1, 3); // Al
1369
1370   // fifth FEA cooling element definition
1371   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1372   gMC->Gsvolu("FBA2", "BOX ", idtmed[504], bar2, 3); // Al
1373
1374   // first FEA cooling element positioning
1375   Float_t xcoor = xtof*0.5 - 25.;
1376   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - al1[1];
1377   Float_t zcoor =-carpar[2] + 2.*feaRoof1[2] - al1[2];
1378   gMC->Gspos("FAL1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1379   gMC->Gspos("FAL1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1380   gMC->Gspos("FAL1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1381   gMC->Gspos("FAL1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1382   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1383   gMC->Gspos("FAL1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1384   gMC->Gspos("FAL1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1385   gMC->Gspos("FAL1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1386   gMC->Gspos("FAL1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1387
1388   // second FEA cooling element positioning
1389   xcoor = xtof*0.5 - 25.;
1390   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - feaRoof1[1];
1391   zcoor =-carpar[2] + feaRoof1[2];
1392   gMC->Gspos("FRO1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1393   gMC->Gspos("FRO1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1394   gMC->Gspos("FRO1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1395   gMC->Gspos("FRO1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1396   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1397   gMC->Gspos("FRO1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1398   gMC->Gspos("FRO1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1399   gMC->Gspos("FRO1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1400   gMC->Gspos("FRO1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1401
1402   // third FEA cooling element positioning
1403   xcoor = xtof*0.5 - 25.;
1404   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
1405   zcoor =-carpar[2] + bar[2];
1406   gMC->Gspos("FBAR", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1407   gMC->Gspos("FBAR", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1408   gMC->Gspos("FBAR", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1409   gMC->Gspos("FBAR", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1410   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1411   gMC->Gspos("FBAR", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1412   gMC->Gspos("FBAR", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1413   gMC->Gspos("FBAR", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1414   gMC->Gspos("FBAR", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1415
1416   // fourth FEA cooling element positioning
1417   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw};
1418   xcoor = xtof*0.5 - 25.;
1419   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
1420   zcoor =-carpar[2] + 2.*bar[2] + 2.*tubepar[1] + bar1[2];
1421   gMC->Gspos("FBA1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1422   gMC->Gspos("FBA1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1423   gMC->Gspos("FBA1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1424   gMC->Gspos("FBA1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1425   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1426   gMC->Gspos("FBA1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1427   gMC->Gspos("FBA1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1428   gMC->Gspos("FBA1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1429   gMC->Gspos("FBA1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1430
1431   // fifth FEA cooling element positioning
1432   xcoor = xtof*0.5 - 25.;
1433   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar2[1];
1434   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
1435   gMC->Gspos("FBA2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1436   gMC->Gspos("FBA2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1437   gMC->Gspos("FBA2", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1438   gMC->Gspos("FBA2", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1439   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1440   gMC->Gspos("FBA2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1441   gMC->Gspos("FBA2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1442   gMC->Gspos("FBA2", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1443   gMC->Gspos("FBA2", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1444
1445   xcoor = xtof*0.5 - 25.;
1446   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - 2.*tubepar[1] - bar2[1];
1447   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
1448   gMC->Gspos("FBA2", 5, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1449   gMC->Gspos("FBA2", 8, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1450   gMC->Gspos("FBA2", 5, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1451   gMC->Gspos("FBA2", 8, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1452   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1453   gMC->Gspos("FBA2", 6, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1454   gMC->Gspos("FBA2", 7, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1455   gMC->Gspos("FBA2", 6, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1456   gMC->Gspos("FBA2", 7, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1457
1458 }
1459
1460 //_____________________________________________________________________________
1461 void AliTOFv6T0::MakeNinoMask(Float_t xtof) const
1462 {
1463   //
1464   // Make cooling Nino mask
1465   // for each FEA card (FAL2/3 and FRO2 volumes)
1466   // in FCA1 volume container.
1467   //
1468
1469   Int_t *idtmed = fIdtmed->GetArray()-499;
1470
1471   // first Nino ASIC mask volume definition
1472   Float_t al2[3] = {fgkAl2parameters[0], fgkAl2parameters[1], fgkAl2parameters[2]};
1473   gMC->Gsvolu("FAL2", "BOX ", idtmed[504], al2, 3); // Al
1474
1475   // second Nino ASIC mask volume definition
1476   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1477   gMC->Gsvolu("FAL3", "BOX ", idtmed[504], al3, 3); // Al
1478
1479   // third Nino ASIC mask volume definition
1480   Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1481   gMC->Gsvolu("FRO2", "BOX ", idtmed[504], feaRoof2, 3); // Al
1482
1483   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1484   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1485
1486   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1487                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1488                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1489
1490   // first Nino ASIC mask volume positioning
1491   Float_t xcoor = xtof*0.5 - 25.;
1492   Float_t ycoor = carpar[1] - 2.*al3[1];
1493   Float_t zcoor = carpar[2] - 2.*al3[2] - al2[2];
1494   gMC->Gspos("FAL2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1495   gMC->Gspos("FAL2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1496   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1497   gMC->Gspos("FAL2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1498   gMC->Gspos("FAL2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1499
1500   // second Nino ASIC mask volume positioning
1501   xcoor = xtof*0.5 - 25.;
1502   ycoor = carpar[1] - al3[1];
1503   zcoor = carpar[2] - al3[2];
1504   gMC->Gspos("FAL3", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1505   gMC->Gspos("FAL3", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1506   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1507   gMC->Gspos("FAL3", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1508   gMC->Gspos("FAL3", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1509
1510   // third Nino ASIC mask volume positioning
1511   xcoor = xtof*0.5 - 25.;
1512   ycoor = carpar[1] - fgkRoof2parameters[1];
1513   zcoor = carpar[2] - 2.*al3[2] - fgkRoof2parameters[2];
1514   gMC->Gspos("FRO2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1515   gMC->Gspos("FRO2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1516   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1517   gMC->Gspos("FRO2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1518   gMC->Gspos("FRO2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1519
1520 }
1521
1522 //_____________________________________________________________________________
1523 void AliTOFv6T0::MakeSuperModuleCooling(Float_t xtof, Float_t ytof, Float_t zlenA) const
1524 {
1525   //
1526   // Make cooling tubes (FTUB volume)
1527   // and cooling bars (FTLN and FLO1/2/3 volumes)
1528   // in FAIA/B/C volume containers.
1529   //
1530
1531   Int_t *idtmed = fIdtmed->GetArray()-499;
1532
1533   Int_t idrotm[1];
1534
1535   // cooling tube volume definition
1536   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw - fgkSawThickness};
1537   gMC->Gsvolu("FTUB", "TUBE", idtmed[512], tubepar, 3); // Cu
1538
1539   // water cooling tube volume definition
1540   Float_t tubeparW[3] = {0., 0.3, tubepar[2]};
1541   gMC->Gsvolu("FITU", "TUBE", idtmed[509], tubeparW, 3); // H2O
1542
1543   // Positioning of the water tube into the steel one
1544   gMC->Gspos("FITU", 1, "FTUB", 0., 0., 0., 0, "ONLY");
1545
1546   // definition of transverse components of SM cooling system
1547   Float_t trapar[3] = {tubepar[2], 6.175/*6.15*/, 0.7};
1548   gMC->Gsvolu("FTLN", "BOX ", idtmed[504], trapar, 3); // Al
1549
1550   // rotation matrix
1551   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1552
1553   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1554   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1555   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
1556   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1557   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1558   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1559
1560   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1561                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1562                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1563
1564   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
1565     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1566
1567   // Positioning of tubes for the SM cooling system
1568   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1569   Float_t zcoor =-carpar[2] + 2.*bar[2] + tubepar[1];
1570   gMC->Gspos("FTUB", 1, "FCA1", 0., ycoor, zcoor, idrotm[0], "ONLY");
1571   gMC->Gspos("FTUB", 1, "FCA2", 0., ycoor, zcoor, idrotm[0], "ONLY");
1572   gGeoManager->GetVolume("FTUB")->VisibleDaughters(kFALSE);
1573
1574   Float_t yFLTN = trapar[1] - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1575   for (Int_t sg= -1; sg< 2; sg+= 2) {
1576     // Positioning of transverse components for the SM cooling system
1577     gMC->Gspos("FTLN", 5+4*sg, "FAIA", 0., yFLTN, 369.9*sg, 0, "MANY");
1578     gMC->Gspos("FTLN", 5+3*sg, "FAIA", 0., yFLTN, 366.9*sg, 0, "MANY");
1579     gMC->Gspos("FTLN", 5+2*sg, "FAIA", 0., yFLTN, 198.8*sg, 0, "MANY");
1580     gMC->Gspos("FTLN",   5+sg, "FAIA", 0., yFLTN, 56.82*sg, 0, "MANY");
1581     gMC->Gspos("FTLN", 5+4*sg, "FAIC", 0., yFLTN, 369.9*sg, 0, "MANY");
1582     gMC->Gspos("FTLN", 5+3*sg, "FAIC", 0., yFLTN, 366.9*sg, 0, "MANY");
1583     gMC->Gspos("FTLN", 5+2*sg, "FAIC", 0., yFLTN, 198.8*sg, 0, "MANY");
1584     gMC->Gspos("FTLN",   5+sg, "FAIC", 0., yFLTN, 56.82*sg, 0, "MANY");
1585   }
1586
1587   // definition of longitudinal components of SM cooling system
1588   Float_t lonpar1[3] = {2., 0.5, 56.82 - trapar[2]};
1589   Float_t lonpar2[3] = {lonpar1[0], lonpar1[1], (198.8 - 56.82)*0.5 - trapar[2]};
1590   Float_t lonpar3[3] = {lonpar1[0], lonpar1[1], (366.9 - 198.8)*0.5 - trapar[2]};
1591   gMC->Gsvolu("FLO1", "BOX ", idtmed[504], lonpar1, 3); // Al
1592   gMC->Gsvolu("FLO2", "BOX ", idtmed[504], lonpar2, 3); // Al
1593   gMC->Gsvolu("FLO3", "BOX ", idtmed[504], lonpar3, 3); // Al
1594
1595   // Positioning of longitudinal components for the SM cooling system
1596   ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1597   gMC->Gspos("FLO1",  4, "FAIA",-24., ycoor, 0., 0, "MANY");
1598   gMC->Gspos("FLO1",  2, "FAIA", 24., ycoor, 0., 0, "MANY");
1599   gMC->Gspos("FLO1",  4, "FAIC",-24., ycoor, 0., 0, "MANY");
1600   gMC->Gspos("FLO1",  2, "FAIC", 24., ycoor, 0., 0, "MANY");
1601
1602   zcoor = (198.8 + 56.82)*0.5;
1603   gMC->Gspos("FLO2",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1604   gMC->Gspos("FLO2",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1605   gMC->Gspos("FLO2",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1606   gMC->Gspos("FLO2",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1607   gMC->Gspos("FLO2",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1608   gMC->Gspos("FLO2",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1609   gMC->Gspos("FLO2",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1610   gMC->Gspos("FLO2",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1611
1612   zcoor = (366.9 + 198.8)*0.5;
1613   gMC->Gspos("FLO3",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1614   gMC->Gspos("FLO3",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1615   gMC->Gspos("FLO3",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1616   gMC->Gspos("FLO3",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1617   gMC->Gspos("FLO3",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1618   gMC->Gspos("FLO3",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1619   gMC->Gspos("FLO3",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1620   gMC->Gspos("FLO3",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1621
1622   ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1623   gMC->Gspos("FLO1",  3, "FAIA",-24., ycoor, 0., 0, "MANY");
1624   gMC->Gspos("FLO1",  1, "FAIA", 24., ycoor, 0., 0, "MANY");
1625   gMC->Gspos("FLO1",  3, "FAIC",-24., ycoor, 0., 0, "MANY");
1626   gMC->Gspos("FLO1",  1, "FAIC", 24., ycoor, 0., 0, "MANY");
1627
1628   zcoor = (198.8 + 56.82)*0.5;
1629   gMC->Gspos("FLO2",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1630   gMC->Gspos("FLO2",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1631   gMC->Gspos("FLO2",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1632   gMC->Gspos("FLO2",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1633   gMC->Gspos("FLO2",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1634   gMC->Gspos("FLO2",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1635   gMC->Gspos("FLO2",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1636   gMC->Gspos("FLO2",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1637
1638   zcoor = (366.9 + 198.8)*0.5;
1639   gMC->Gspos("FLO3",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1640   gMC->Gspos("FLO3",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1641   gMC->Gspos("FLO3",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1642   gMC->Gspos("FLO3",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1643   gMC->Gspos("FLO3",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1644   gMC->Gspos("FLO3",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1645   gMC->Gspos("FLO3",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1646   gMC->Gspos("FLO3",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1647
1648
1649   Float_t carpos[3] = {25. - xtof*0.5,
1650                        (11.5 - (ytof*0.5 - fgkModuleCoverThickness))*0.5,
1651                        0.};
1652   if (fTOFHoles) {
1653     for (Int_t sg= -1; sg< 2; sg+= 2) {
1654       carpos[2] = sg*zlenA*0.5;
1655       gMC->Gspos("FTLN", 5+4*sg, "FAIB", 0., yFLTN, 369.9*sg, 0, "MANY");
1656       gMC->Gspos("FTLN", 5+3*sg, "FAIB", 0., yFLTN, 366.9*sg, 0, "MANY");
1657       gMC->Gspos("FTLN", 5+2*sg, "FAIB", 0., yFLTN, 198.8*sg, 0, "MANY");
1658       gMC->Gspos("FTLN",   5+sg, "FAIB", 0., yFLTN, 56.82*sg, 0, "MANY");
1659     }
1660
1661     ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1662     zcoor = (198.8 + 56.82)*0.5;
1663     gMC->Gspos("FLO2", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
1664     gMC->Gspos("FLO2", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
1665     zcoor = (366.9 + 198.8)*0.5;
1666     gMC->Gspos("FLO3", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
1667     gMC->Gspos("FLO3", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
1668     ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1669     zcoor = (198.8 + 56.82)*0.5;
1670     gMC->Gspos("FLO2", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
1671     gMC->Gspos("FLO2", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
1672     zcoor = (366.9 + 198.8)*0.5;
1673     gMC->Gspos("FLO3", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
1674     gMC->Gspos("FLO3", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
1675
1676   }
1677
1678   Float_t barS[3] = {fgkBarS[0], fgkBarS[1], fgkBarS[2]};
1679   gMC->Gsvolu("FBAS", "BOX ", idtmed[504], barS, 3); // Al
1680
1681   Float_t barS1[3] = {fgkBarS1[0], fgkBarS1[1], fgkBarS1[2]};
1682   gMC->Gsvolu("FBS1", "BOX ", idtmed[504], barS1, 3); // Al
1683
1684   Float_t barS2[3] = {fgkBarS2[0], fgkBarS2[1], fgkBarS2[2]};
1685   gMC->Gsvolu("FBS2", "BOX ", idtmed[504], barS2, 3); // Al
1686
1687   Float_t ytubBis = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*barS2[1] - tubepar[1];
1688   ycoor = ytubBis;
1689   zcoor =-carpar[2] + barS[2];
1690   gMC->Gspos("FBAS", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1691   gMC->Gspos("FBAS", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1692   gMC->Gspos("FBAS", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1693   gMC->Gspos("FBAS", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1694
1695   zcoor =-carpar[2] + 2.*barS[2] + 2.*tubepar[1] + barS1[2];
1696   gMC->Gspos("FBS1", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1697   gMC->Gspos("FBS1", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1698   gMC->Gspos("FBS1", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1699   gMC->Gspos("FBS1", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1700
1701   ycoor = ytubBis + (tubepar[1] + barS2[1]);
1702   zcoor =-carpar[2] + 2.*barS[2] + barS2[2];
1703   gMC->Gspos("FBS2", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1704   gMC->Gspos("FBS2", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1705   gMC->Gspos("FBS2", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1706   gMC->Gspos("FBS2", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1707
1708   ycoor = ytubBis - (tubepar[1] + barS2[1]);
1709   //zcoor =-carpar[2] + 2.*barS[2] + barS2[2];
1710   gMC->Gspos("FBS2", 3, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1711   gMC->Gspos("FBS2", 4, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1712   gMC->Gspos("FBS2", 3, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1713   gMC->Gspos("FBS2", 4, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1714
1715 }
1716
1717 //_____________________________________________________________________________
1718 void AliTOFv6T0::MakeSuperModuleServices(Float_t xtof, Float_t ytof, Float_t zlenA) const
1719 {
1720   //
1721   // Make signal cables (FCAB/L and FCBL/B volumes),
1722   // supemodule cover (FCOV volume) and wall (FSAW volume)
1723   // in FAIA/B/C volume containers.
1724   //
1725
1726   Int_t *idtmed = fIdtmed->GetArray()-499;
1727
1728   Int_t idrotm[3];
1729
1730   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw - fgkSawThickness};
1731   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1732   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1733   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1734   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1735   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1736
1737   // FEA cables definition
1738   Float_t cbpar[3] = {0., 0.5, (tubepar[2] - (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5};
1739   gMC->Gsvolu("FCAB", "TUBE", idtmed[510], cbpar, 3);    // copper+alu
1740
1741   Float_t cbparS[3] = {cbpar[0], cbpar[1], (tubepar[2] - (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5};
1742   gMC->Gsvolu("FCAL", "TUBE", idtmed[510], cbparS, 3);    // copper+alu
1743
1744   // rotation matrix
1745   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1746
1747   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1748                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1749                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1750
1751   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1752   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
1753     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1754
1755   // FEA cables positioning
1756   Float_t xcoor = (tubepar[2] + (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5;
1757   Float_t ycoor = ytub - 3.;
1758   Float_t zcoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - 2.*feaParam[2] - cbpar[1]);
1759   gMC->Gspos("FCAB", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1760   gMC->Gspos("FCAB", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1761   gMC->Gspos("FCAB", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1762   gMC->Gspos("FCAB", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1763   xcoor = (tubepar[2] + (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5;
1764   ycoor -= 2.*cbpar[1];
1765   gMC->Gspos("FCAL", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1766   gMC->Gspos("FCAL", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1767   gMC->Gspos("FCAL", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1768   gMC->Gspos("FCAL", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1769
1770
1771   // Cables and tubes on the side blocks
1772   // constants definition
1773   const Float_t kCBLl   = zlenA*0.5; // length of block
1774   const Float_t kCBLlh  = zlenA*0.5 - fgkInterCentrModBorder2; // length  of block in case of holes
1775   //const Float_t fgkCBLw   = 13.5;      // width of block
1776   //const Float_t fgkCBLh1  = 2.;        // min. height of block
1777   //const Float_t fgkCBLh2  = 12.3;      // max. height of block
1778   //const Float_t fgkSawThickness = 1.; // Al wall thickness
1779
1780   // lateral cable and tube volume definition
1781   Float_t tgal =  (fgkCBLh2 - fgkCBLh1)/(2.*kCBLl);
1782   Float_t cblpar[11];
1783   cblpar[0] = fgkCBLw *0.5;
1784   cblpar[1] = 0.;
1785   cblpar[2] = 0.;
1786   cblpar[3] = kCBLl *0.5;
1787   cblpar[4] = fgkCBLh1 *0.5;
1788   cblpar[5] = fgkCBLh2 *0.5;
1789   cblpar[6] = TMath::ATan(tgal)*kRaddeg;
1790   cblpar[7] = kCBLl *0.5;
1791   cblpar[8] = fgkCBLh1 *0.5;
1792   cblpar[9] = fgkCBLh2 *0.5;
1793   cblpar[10]= cblpar[6];
1794   gMC->Gsvolu("FCBL", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix 
1795
1796   // Side Al Walls definition
1797   Float_t sawpar[3] = {fgkSawThickness*0.5, fgkCBLh2*0.5, kCBLl};
1798   gMC->Gsvolu("FSAW", "BOX ", idtmed[504], sawpar,  3); // Al
1799
1800   AliMatrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
1801   AliMatrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
1802
1803   // lateral cable and tube volume positioning
1804   xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
1805   ycoor = (fgkCBLh1 + fgkCBLh2)*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1806   zcoor = kCBLl*0.5;
1807   gMC->Gspos("FCBL", 1, "FAIA", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1808   gMC->Gspos("FCBL", 2, "FAIA",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1809   gMC->Gspos("FCBL", 3, "FAIA", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1810   gMC->Gspos("FCBL", 4, "FAIA",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1811   gMC->Gspos("FCBL", 1, "FAIC", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1812   gMC->Gspos("FCBL", 2, "FAIC",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1813   gMC->Gspos("FCBL", 3, "FAIC", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1814   gMC->Gspos("FCBL", 4, "FAIC",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1815
1816   if (fTOFHoles) {
1817     cblpar[3] = kCBLlh *0.5;
1818     cblpar[5] = fgkCBLh1*0.5 + kCBLlh*tgal;
1819     cblpar[7] = kCBLlh *0.5;
1820     cblpar[9] = cblpar[5];
1821     gMC->Gsvolu("FCBB", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix
1822
1823     xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
1824     ycoor = (fgkCBLh1 + 2.*cblpar[5])*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1825     zcoor = kCBLl-kCBLlh*0.5;
1826     gMC->Gspos("FCBB", 1, "FAIB", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1827     gMC->Gspos("FCBB", 2, "FAIB",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1828     gMC->Gspos("FCBB", 3, "FAIB", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1829     gMC->Gspos("FCBB", 4, "FAIB",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1830   }
1831
1832   // lateral cable and tube volume positioning
1833   xcoor = xtof*0.5 - sawpar[0];
1834   ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
1835   zcoor = 0.;
1836   gMC->Gspos("FSAW", 1, "FAIA", -xcoor, ycoor, zcoor, 0, "ONLY");
1837   gMC->Gspos("FSAW", 2, "FAIA",  xcoor, ycoor, zcoor, 0, "ONLY");
1838   gMC->Gspos("FSAW", 1, "FAIC", -xcoor, ycoor, zcoor, 0, "ONLY");
1839   gMC->Gspos("FSAW", 2, "FAIC",  xcoor, ycoor, zcoor, 0, "ONLY");
1840
1841   if (fTOFHoles) {
1842     xcoor = xtof*0.5 - sawpar[0];
1843     ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
1844     gMC->Gspos("FSAW", 1, "FAIB", -xcoor, ycoor, 0., 0, "ONLY");
1845     gMC->Gspos("FSAW", 2, "FAIB",  xcoor, ycoor, 0., 0, "ONLY");
1846   }
1847
1848   // TOF Supermodule cover definition and positioning
1849   Float_t covpar[3] = {xtof*0.5, 0.075, zlenA*0.5};
1850   gMC->Gsvolu("FCOV", "BOX ", idtmed[504], covpar, 3); // Al
1851   if (fTOFHoles) {
1852     covpar[2] = (zlenA*0.5 - fgkInterCentrModBorder2)*0.5;
1853     gMC->Gsvolu("FCOB", "BOX ", idtmed[504], covpar, 3); // Al
1854     covpar[2] = fgkInterCentrModBorder2;
1855     gMC->Gsvolu("FCOP", "BOX ", idtmed[513], covpar, 3); // Plastic (CH2)
1856   }
1857
1858   xcoor = 0.;
1859   ycoor = (ytof*0.5 - fgkModuleCoverThickness)*0.5 - covpar[1];
1860   zcoor = 0.;
1861   gMC->Gspos("FCOV", 0, "FAIA", xcoor, ycoor, zcoor, 0, "ONLY");
1862   gMC->Gspos("FCOV", 0, "FAIC", xcoor, ycoor, zcoor, 0, "ONLY");
1863   if (fTOFHoles) {
1864     zcoor = (zlenA*0.5 + fgkInterCentrModBorder2)*0.5;
1865     gMC->Gspos("FCOB", 1, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
1866     gMC->Gspos("FCOB", 2, "FAIB", xcoor, ycoor, -zcoor, 0, "ONLY");
1867     zcoor = 0.;
1868     gMC->Gspos("FCOP", 0, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
1869   }
1870
1871 }
1872
1873 //_____________________________________________________________________________
1874 void AliTOFv6T0::MakeReadoutCrates(Float_t ytof) const
1875 {
1876   // Services Volumes
1877
1878   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
1879   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
1880   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
1881   // + other remaining elements + various supports
1882
1883   // Each FEA card weight + all supports
1884   // (including all bolts and not including the cable connectors)
1885   //  353.1 g.
1886   // Per each strip there are 4 FEA cards, then
1887   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
1888
1889   // Services Volumes
1890
1891   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
1892   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
1893   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
1894   // + other remaining elements + various supports
1895
1896   // Each FEA card weight + all supports
1897   // (including all bolts and not including the cable connectors)
1898   //  353.1 g.
1899   // Per each strip there are 4 FEA cards, then
1900   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
1901   //
1902
1903   Int_t *idtmed = fIdtmed->GetArray()-499;
1904
1905   Int_t idrotm[18];
1906
1907   // volume definition
1908   Float_t serpar[3] = {29.*0.5, 121.*0.5, 90.*0.5};
1909   gMC->Gsvolu("FTOS", "BOX ", idtmed[514], serpar, 3); // Al + Cu + steel
1910
1911   Float_t xcoor, ycoor, zcoor;
1912   zcoor = (118.-90.)*0.5;
1913   Float_t phi = -10.,  ra = fTOFGeometry->Rmin() + ytof*0.5;
1914   for (Int_t i = 0; i < fTOFGeometry->NSectors(); i++) {
1915     phi += 20.;
1916     xcoor = ra * TMath::Cos(phi * kDegrad);
1917     ycoor = ra * TMath::Sin(phi * kDegrad);
1918     AliMatrix(idrotm[i], 90., phi, 90., phi + 270., 0., 0.);
1919     gMC->Gspos("FTOS", i, "BFMO", xcoor, ycoor, zcoor, idrotm[i], "ONLY");
1920   }
1921
1922   zcoor = (90. - 223.)*0.5;
1923   gMC->Gspos("FTOS", 1, "BBCE", ra, -3., zcoor, 0, "ONLY");
1924
1925 }
1926
1927 //_____________________________________________________________________________
1928 void AliTOFv6T0::CreateMaterials()
1929 {
1930   //
1931   // Define materials for the Time Of Flight
1932   //
1933
1934   //AliTOF::CreateMaterials();
1935
1936   AliMagF *magneticField = (AliMagF*)((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
1937
1938   Int_t   isxfld = magneticField->Integ();
1939   Float_t sxmgmx = magneticField->Max();
1940
1941   //--- Quartz (SiO2) ---
1942   Float_t   aq[2] = { 28.0855,15.9994};
1943   Float_t   zq[2] = { 14.,8. };
1944   Float_t   wq[2] = { 1.,2. };
1945   Float_t   dq = 2.7; // (+5.9%)
1946   Int_t nq = -2;
1947
1948   // --- Nomex (C14H22O2N2) ---
1949   Float_t anox[4] = {12.011,1.00794,15.9994,14.00674};
1950   Float_t znox[4] = { 6.,  1.,  8.,  7.};
1951   Float_t wnox[4] = {14., 22., 2., 2.};
1952   //Float_t dnox  = 0.048; //old value
1953   Float_t dnox  = 0.22;    // (x 4.6)
1954   Int_t nnox   = -4;
1955
1956   // --- G10  {Si, O, C, H, O} ---
1957   Float_t we[7], na[7];
1958
1959   Float_t ag10[5] = {28.0855,15.9994,12.011,1.00794,15.9994};
1960   Float_t zg10[5] = {14., 8., 6., 1., 8.};
1961   Float_t wmatg10[5];
1962   Int_t nlmatg10 = 5;
1963   na[0]= 1. ,   na[1]= 2. ,   na[2]= 0. ,   na[3]= 0. ,   na[4]= 0.;
1964   MaterialMixer(we,ag10,na,5);
1965   wmatg10[0]= we[0]*0.6;
1966   wmatg10[1]= we[1]*0.6;
1967   na[0]= 0. ,   na[1]= 0. ,   na[2]= 14. ,   na[3]= 20. ,   na[4]= 3.;
1968   MaterialMixer(we,ag10,na,5);
1969   wmatg10[2]= we[2]*0.4;
1970   wmatg10[3]= we[3]*0.4;
1971   wmatg10[4]= we[4]*0.4;
1972   AliDebug(1,Form("wg10  %f  %f  %f  %f  %f", wmatg10[0], wmatg10[1], wmatg10[2], wmatg10[3], wmatg10[4]));
1973   //Float_t densg10 = 1.7; //old value
1974   Float_t densg10 = 2.0; // (+17.8%)
1975
1976   // --- Water ---
1977   Float_t awa[2] = {  1.00794, 15.9994 };
1978   Float_t zwa[2] = {  1.,  8. };
1979   Float_t wwa[2] = {  2.,  1. };
1980   Float_t dwa    = 1.0;
1981   Int_t nwa = -2;
1982
1983   // --- Air ---
1984   Float_t aAir[4]={12.011,14.00674,15.9994,39.948};
1985   Float_t zAir[4]={6.,7.,8.,18.};
1986   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1987   Float_t dAir   = 1.20479E-3;
1988
1989   // --- Fibre Glass ---
1990   Float_t afg[4] = {28.0855,15.9994,12.011,1.00794};
1991   Float_t zfg[4] = {14., 8., 6., 1.};
1992   Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1993   //Float_t dfg    = 1.111;
1994   Float_t dfg    = 2.05; // (x1.845)
1995   Int_t nfg      = 4;
1996
1997   // --- Freon C2F4H2 + SF6 ---
1998   Float_t afre[4] = {12.011,1.00794,18.9984032,32.0065};
1999   Float_t zfre[4] = { 6., 1., 9., 16.};
2000   Float_t wfre[4] = {0.21250,0.01787,0.74827,0.021355};
2001   Float_t densfre = 0.00375;
2002   Int_t nfre     = 4;
2003
2004   // --- Cables and tubes {Al, Cu} ---
2005   Float_t acbt[2] = {26.981539,63.546};
2006   Float_t zcbt[2] = {13., 29.};
2007   Float_t wcbt[2] = {0.407,0.593};
2008   Float_t decbt   = 0.68;
2009
2010   // --- Cable {CH2, Al, Cu} ---
2011   Float_t asc[4] = {12.011, 1.00794, 26.981539,63.546};
2012   Float_t zsc[4] = { 6., 1., 13., 29.};
2013   Float_t wsc[4];
2014   for (Int_t ii=0; ii<4; ii++) wsc[ii]=0.;
2015
2016   Float_t wDummy[4], nDummy[4];
2017   for (Int_t ii=0; ii<4; ii++) wDummy[ii]=0.;
2018   for (Int_t ii=0; ii<4; ii++) nDummy[ii]=0.;
2019   nDummy[0] = 1.;
2020   nDummy[1] = 2.;
2021   MaterialMixer(wDummy,asc,nDummy,2);
2022   wsc[0] = 0.4375*wDummy[0];
2023   wsc[1] = 0.4375*wDummy[1];
2024   wsc[2] = 0.3244;
2025   wsc[3] = 0.2381;
2026   Float_t dsc = 1.223;
2027
2028   // --- Crates boxes {Al, Cu, Fe, Cr, Ni} ---
2029   Float_t acra[5]= {26.981539,63.546,55.845,51.9961,58.6934};
2030   Float_t zcra[5]= {13., 29., 26., 24., 28.};
2031   Float_t wcra[5]= {0.7,0.2,0.07,0.018,0.012};
2032   Float_t dcra   = 0.77;
2033
2034   // --- Polietilene CH2 ---
2035   Float_t aPlastic[2] = {12.011, 1.00794};
2036   Float_t zPlastic[2] = { 6., 1.};
2037   Float_t wPlastic[2] = { 1., 2.};
2038   //Float_t dPlastic = 0.92; // PDB value
2039   Float_t dPlastic = 0.93; // (~+1.1%)
2040   Int_t nwPlastic = -2;
2041
2042   AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
2043   AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
2044   AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
2045   AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
2046   AliMaterial( 4, "Al $", 26.981539, 13., 2.7, -8.9, 999.);
2047   Float_t factor = 0.4/1.5*2./3.;
2048   AliMaterial( 5, "Al honeycomb$", 26.981539, 13., 2.7*factor, -8.9/factor, 999.);
2049   AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
2050   AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
2051   AliMixture ( 8, "Water$",  awa, zwa, dwa, nwa, wwa);
2052   AliMixture ( 9, "cables+tubes$", acbt, zcbt, decbt, 2, wcbt);
2053   AliMaterial(10, "Cu $", 63.546, 29., 8.96, -1.43, 999.);
2054   AliMixture (11, "cable$", asc, zsc, dsc, 4, wsc);
2055   AliMixture (12, "Al+Cu+steel$", acra, zcra, dcra, 5, wcra);
2056   AliMixture (13, "plastic$", aPlastic, zPlastic, dPlastic, nwPlastic, wPlastic);
2057   Float_t factorHoles = 1./36.5;
2058   AliMaterial(14, "Al honey for holes$", 26.981539, 13., 2.7*factorHoles, -8.9/factorHoles, 999.);
2059
2060   Float_t epsil, stmin, deemax, stemax;
2061
2062   //   STD data
2063   //  EPSIL  = 0.1   ! Tracking precision,
2064   //  STEMAX = 0.1   ! Maximum displacement for multiple scattering
2065   //  DEEMAX = 0.1   ! Maximum fractional energy loss, DLS
2066   //  STMIN  = 0.1
2067
2068   // TOF data
2069   epsil  = .001;  // Tracking precision,
2070   stemax = -1.;   // Maximum displacement for multiple scattering
2071   deemax = -.3;   // Maximum fractional energy loss, DLS
2072   stmin  = -.8;
2073
2074   AliMedium( 1,"Air$",          0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2075   AliMedium( 2,"Nomex$",        1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2076   AliMedium( 3,"G10$",          2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2077   AliMedium( 4,"fibre glass$",  3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2078   AliMedium( 5,"Al Frame$",     4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2079   AliMedium( 6,"honeycomb$",    5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2080   AliMedium( 7,"Fre$",          6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2081   AliMedium( 8,"Cu-S$",        10, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2082   AliMedium( 9,"Glass$",        7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2083   AliMedium(10,"Water$",        8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2084   AliMedium(11,"Cable$",       11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2085   AliMedium(12,"Cables+Tubes$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2086   AliMedium(13,"Copper$",      10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2087   AliMedium(14,"Plastic$",     13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2088   AliMedium(15,"Crates$",      12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2089   AliMedium(16,"honey_holes$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2090
2091 }
2092 //_____________________________________________________________________________
2093 void AliTOFv6T0::Init()
2094 {
2095   //
2096   // Initialise the detector after the geometry has been defined
2097   //
2098   AliDebug(1, "**************************************"
2099            "  TOF  "
2100            "**************************************");
2101   AliDebug(1, "  Version 4 of TOF initialing, "
2102            "symmetric TOF - Full Coverage version");
2103   
2104   AliTOF::Init();
2105   
2106   fIdFTOA = gMC->VolId("FTOA");
2107   if (fTOFHoles) {
2108     fIdFTOB = gMC->VolId("FTOB");
2109     fIdFTOC = gMC->VolId("FTOC");
2110   }
2111   fIdFLTA = gMC->VolId("FLTA");
2112   if (fTOFHoles) {
2113     fIdFLTB = gMC->VolId("FLTB");
2114     fIdFLTC = gMC->VolId("FLTC");
2115   }
2116
2117   AliDebug(1, "**************************************"
2118            "  TOF  "
2119            "**************************************");
2120 }
2121  
2122 //_____________________________________________________________________________
2123 void AliTOFv6T0::StepManager()
2124 {
2125
2126   //
2127   // Procedure called at each step in the Time Of Flight
2128   //
2129
2130   TLorentzVector mom, pos;
2131   Float_t xm[3],pm[3],xpad[3],ppad[3];
2132   Float_t hits[14];
2133   Int_t   vol[5];
2134   Int_t   sector, plate, padx, padz, strip;
2135   Int_t   copy, padzid, padxid, stripid, i;
2136   Int_t   *idtmed = fIdtmed->GetArray()-499;
2137   Float_t incidenceAngle;
2138
2139   const char* volpath;
2140
2141   Int_t index = 0;
2142
2143   if(
2144      gMC->IsTrackEntering()
2145      && gMC->TrackCharge()
2146      //&& gMC->GetMedium()==idtmed[507]
2147      && gMC->CurrentMedium()==idtmed[507]
2148      && gMC->CurrentVolID(copy)==fIdSens
2149      )
2150   {
2151
2152     AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
2153
2154     AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
2155     //AddTrackReference(mcApplication->GetCurrentTrackNumber());
2156
2157     // getting information about hit volumes
2158     
2159     padzid=gMC->CurrentVolOffID(1,copy);
2160     padz=copy;
2161     padz--;
2162
2163     padxid=gMC->CurrentVolOffID(0,copy);
2164     padx=copy; 
2165     padx--;
2166     
2167     stripid=gMC->CurrentVolOffID(4,copy);
2168     strip=copy; 
2169     strip--;
2170
2171     gMC->TrackPosition(pos);
2172     gMC->TrackMomentum(mom);
2173
2174     Double_t normMom=1./mom.Rho();
2175
2176     //  getting the coordinates in pad ref system
2177
2178     xm[0] = (Float_t)pos.X();
2179     xm[1] = (Float_t)pos.Y();
2180     xm[2] = (Float_t)pos.Z();
2181
2182     pm[0] = (Float_t)mom.X()*normMom;
2183     pm[1] = (Float_t)mom.Y()*normMom;
2184     pm[2] = (Float_t)mom.Z()*normMom;
2185  
2186     gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
2187     gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
2188
2189
2190     if (TMath::Abs(ppad[1])>1) {
2191       AliWarning("Abs(ppad) > 1");
2192       ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
2193     }
2194     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
2195
2196     plate = -1;
2197     if      (strip <  fTOFGeometry->NStripC()) {
2198       plate = 0;
2199       //strip = strip;
2200     }
2201     else if (strip >= fTOFGeometry->NStripC() && 
2202              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
2203       plate = 1;
2204       strip = strip - fTOFGeometry->NStripC();
2205     }
2206     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
2207              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
2208       plate = 2;
2209       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
2210     }
2211     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
2212              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
2213       plate = 3;
2214       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
2215     }
2216     else                                {
2217       plate = 4;
2218       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
2219     }
2220
2221     volpath=gMC->CurrentVolOffName(7);
2222     index=atoi(&volpath[4]);
2223     sector=-1;
2224     sector=index;
2225
2226     //Old 6h convention
2227     // if(index<5){
2228     //   sector=index+13;
2229     //  }
2230     // else{
2231     //   sector=index-5;
2232     // } 
2233  
2234     for(i=0;i<3;++i) {
2235       hits[i]   = pos[i];
2236       hits[i+3] = pm[i];
2237     }
2238
2239     hits[6] = mom.Rho();
2240     hits[7] = pos[3];
2241     hits[8] = xpad[0];
2242     hits[9] = xpad[1];
2243     hits[10]= xpad[2];
2244     hits[11]= incidenceAngle;
2245     hits[12]= gMC->Edep();
2246     hits[13]= gMC->TrackLength();
2247     
2248     vol[0]= sector;
2249     vol[1]= plate;
2250     vol[2]= strip;
2251     vol[3]= padx;
2252     vol[4]= padz;    
2253
2254     AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
2255     //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
2256   }
2257 }
2258 //-------------------------------------------------------------------
2259 void AliTOFv6T0::MaterialMixer(Float_t * p, const Float_t * const a,
2260                                const Float_t * const m, Int_t n) const
2261 {
2262   // a[] atomic weights vector      (in)
2263   //     (atoms present in more compound appear separately)
2264   // m[] number of corresponding atoms in the compound  (in)
2265   Float_t t = 0.;
2266   for (Int_t i = 0; i < n; ++i) {
2267     p[i] = a[i]*m[i];
2268     t  += p[i];
2269   }
2270   for (Int_t i = 0; i < n; ++i) {
2271     p[i] = p[i]/t;
2272     //AliDebug(1,Form((\n weight[%i] = %f (,i,p[i]));
2273   }
2274 }