aa3c856894fe32deea3cc1d45a8d2c57a1ec8588
[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   %d",  xtof));
382   AliDebug(1,Form(" ytof   %d",  ytof));
383   AliDebug(1,Form(" zlenA   %d", zlenA));
384   AliDebug(2,Form(" zlenA*0.5 = %d", 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   Int_t idrotm[1];
898
899   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
900   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
901
902   Float_t xcoor, ycoor, zcoor;
903   xcoor = 0.;
904
905   // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
906   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++){
907     if(fTOFSectors[isec]==-1)continue;
908     char name[16];
909     sprintf(name, "BTOF%d",isec);
910     if (fTOFHoles && (isec==13 || isec==14 || isec==15)) {
911       //xcoor = 0.;
912       ycoor = (zlenA*0.5 + fgkInterCentrModBorder1)*0.5;
913       zcoor = -ytof * 0.25;
914       gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
915       gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
916     }
917     else {
918       //xcoor = 0.;
919       ycoor = 0.;
920       zcoor = -ytof * 0.25;
921       gMC->Gspos("FTOA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
922     }
923   }
924
925 }
926
927 //_____________________________________________________________________________
928 void AliTOFv6T0::MakeCoversInBTOFvolumes() const
929 {
930   //
931   // Fill BTOF_%i (for i=0,...17) volumes
932   // with volumes FPEA (to separate strips from FEA cards)
933   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th)
934   // are filled with FPEB volumes
935   // (to separate MRPC strips from FEA cards)
936   //
937
938   Int_t idrotm[1];
939
940   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
941   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
942
943   Float_t xcoor, ycoor, zcoor;
944   xcoor = 0.;
945   ycoor = 0.;
946   zcoor = fgkModuleCoverThickness*0.5;
947
948   char name[16];
949
950   // Positioning of module covers (FPEA, FPEB)
951   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
952     if(fTOFSectors[isec]==-1)continue;
953     sprintf(name, "BTOF%d",isec);
954     if (fTOFHoles && (isec==13 || isec==14 || isec==15))
955       gMC->Gspos("FPEB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
956     else
957       gMC->Gspos("FPEA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
958   }
959
960 }
961
962 //_____________________________________________________________________________
963 void AliTOFv6T0::MakeBackInBTOFvolumes(Float_t ytof) const
964 {
965   //
966   // Fill BTOF_%i (for i=0,...17) volumes with volumes called FAIA and
967   // FAIC (FEA cards and services container).
968   // In case of TOF holes, three sectors (i.e. 13th, 14th and 15th) are
969   // filled with volumes FAIB (FEA cards and services container).
970   //
971
972   Int_t idrotm[1];
973
974   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
975   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
976
977   Float_t xcoor, ycoor, zcoor;
978   xcoor = 0.;
979   ycoor = 0.;
980   zcoor = fgkModuleCoverThickness + (ytof*0.5 - fgkModuleCoverThickness)*0.5;
981
982   char name[16];
983
984   // Positioning of FEA cards and services containers (FAIA, FAIC and FAIB)
985   for(Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
986     if(fTOFSectors[isec]==-1)continue;
987     sprintf(name, "BTOF%d",isec);
988     if (fgkFEAwithMasks[isec])
989       gMC->Gspos("FAIA", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
990     else {
991       if (fTOFHoles && (isec==13 || isec==14 || isec==15))
992         gMC->Gspos("FAIB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
993       else
994         gMC->Gspos("FAIC", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
995     }
996   }
997
998 }
999
1000 //_____________________________________________________________________________
1001 void AliTOFv6T0::MakeStripsInModules(Float_t ytof, Float_t zlenA) const
1002 {
1003   //
1004   // Define MRPC strip volume, called FSTR
1005   // Insert FSTR volume in FLTA/B/C volumes
1006   //
1007
1008   Float_t yFLT  = ytof*0.5 - fgkModuleWallThickness;
1009
1010   Int_t *idtmed = fIdtmed->GetArray()-499;
1011
1012   ///////////////// Detector itself //////////////////////
1013
1014   const Int_t    knx   = fTOFGeometry->NpadX();  // number of pads along x
1015   const Int_t    knz   = fTOFGeometry->NpadZ();  // number of pads along z
1016   const Float_t  kPadX = fTOFGeometry->XPad();   // pad length along x
1017   const Float_t  kPadZ = fTOFGeometry->ZPad();   // pad length along z
1018
1019   // new description for strip volume -double stack strip-
1020   // -- all constants are expressed in cm
1021   // height of different layers
1022   const Float_t khhony   = 1.0;       // height of HONY Layer
1023   const Float_t khpcby   = 0.08;      // height of PCB Layer
1024   const Float_t khrgly   = 0.055;     // height of RED GLASS Layer
1025
1026   const Float_t khfiliy  = 0.125;     // height of FISHLINE Layer
1027   const Float_t khglassy = 0.160*0.5; // semi-height of GLASS Layer
1028   const Float_t khglfy   = khfiliy+2.*khglassy; // height of GLASS Layer
1029
1030   const Float_t khcpcby  = 0.16;      // height of PCB  Central Layer
1031   const Float_t kwhonz   = 8.1;       // z dimension of HONEY Layer
1032   const Float_t kwpcbz1  = 10.64;     // z dimension of PCB Lower Layer
1033   const Float_t kwpcbz2  = 11.6;      // z dimension of PCB Upper Layer
1034   const Float_t kwcpcbz  = 12.4;      // z dimension of PCB Central Layer
1035
1036   const Float_t kwrglz   = 8.;        // z dimension of RED GLASS Layer
1037   const Float_t kwglfz   = 7.;        // z dimension of GLASS Layer
1038   const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
1039   const Float_t khsensmy = 0.0105;    // height of Sensitive Layer
1040   const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
1041
1042   // height of the FSTR Volume (the strip volume)
1043   const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
1044
1045   // width  of the FSTR Volume (the strip volume)
1046   const Float_t kwstripz = kwcpcbz;
1047   // length of the FSTR Volume (the strip volume)
1048   const Float_t klstripx = fTOFGeometry->StripLength();
1049
1050
1051   // FSTR volume definition-filling this volume with non sensitive Gas Mixture
1052   Float_t parfp[3]={klstripx*0.5, khstripy*0.5, kwstripz*0.5};
1053   gMC->Gsvolu("FSTR", "BOX", idtmed[506], parfp, 3); // Freon mix
1054
1055   Float_t posfp[3]={0.,0.,0.};
1056
1057   // NOMEX (HONEYCOMB) Layer definition
1058   //parfp[0] = klstripx*0.5;
1059   parfp[1] = khhony*0.5;
1060   parfp[2] = kwhonz*0.5;
1061   gMC->Gsvolu("FHON", "BOX", idtmed[501], parfp, 3); // Nomex (Honeycomb)
1062   // positioning 2 NOMEX Layers on FSTR volume
1063   //posfp[0] = 0.;
1064   posfp[1] =-khstripy*0.5 + parfp[1];
1065   //posfp[2] = 0.;
1066   gMC->Gspos("FHON", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1067   gMC->Gspos("FHON", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1068   
1069   // Lower PCB Layer definition
1070   //parfp[0] = klstripx*0.5;
1071   parfp[1] = khpcby*0.5;
1072   parfp[2] = kwpcbz1*0.5;
1073   gMC->Gsvolu("FPC1", "BOX", idtmed[502], parfp, 3); // G10
1074
1075   // Upper PCB Layer definition
1076   //parfp[0] = klstripx*0.5;
1077   //parfp[1] = khpcby*0.5;
1078   parfp[2] = kwpcbz2*0.5;
1079   gMC->Gsvolu("FPC2", "BOX", idtmed[502], parfp, 3); // G10
1080
1081   // positioning 2 external PCB Layers in FSTR volume
1082   //posfp[0] = 0.;
1083   posfp[1] =-khstripy*0.5+khhony+parfp[1];
1084   //posfp[2] = 0.;
1085   gMC->Gspos("FPC1", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1086   gMC->Gspos("FPC2", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1087
1088   // Central PCB layer definition
1089   //parfp[0] = klstripx*0.5;
1090   parfp[1] = khcpcby*0.5;
1091   parfp[2] = kwcpcbz*0.5;
1092   gMC->Gsvolu("FPCB", "BOX", idtmed[502], parfp, 3); // G10
1093   gGeoManager->GetVolume("FPCB")->VisibleDaughters(kFALSE);
1094   // positioning the central PCB layer
1095   gMC->Gspos("FPCB", 1, "FSTR", 0., 0., 0., 0, "ONLY");
1096
1097   // Sensitive volume definition
1098   Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
1099   gMC->Gsvolu("FSEN", "BOX", idtmed[507], parfs, 3); // Cu sensitive
1100   // dividing FSEN along z in knz=2 and along x in knx=48
1101   gMC->Gsdvn("FSEZ", "FSEN", knz, 3);
1102   gMC->Gsdvn("FPAD", "FSEZ", knx, 1);
1103   // positioning sensitive layer inside FPCB
1104   gMC->Gspos("FSEN", 1, "FPCB", 0., 0., 0., 0, "ONLY");
1105
1106   // RED GLASS Layer definition
1107   //parfp[0] = klstripx*0.5;
1108   parfp[1] = khrgly*0.5;
1109   parfp[2] = kwrglz*0.5;
1110   gMC->Gsvolu("FRGL", "BOX", idtmed[508], parfp, 3); // red glass
1111   // positioning 4 RED GLASS Layers in FSTR volume
1112   //posfp[0] = 0.;
1113   posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
1114   //posfp[2] = 0.;
1115   gMC->Gspos("FRGL", 1, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1116   gMC->Gspos("FRGL", 4, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1117   //posfp[0] = 0.;
1118   posfp[1] = (khcpcby+khrgly)*0.5;
1119   //posfp[2] = 0.;
1120   gMC->Gspos("FRGL", 2, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1121   gMC->Gspos("FRGL", 3, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1122
1123   // GLASS Layer definition
1124   //parfp[0] = klstripx*0.5;
1125   parfp[1] = khglassy;
1126   parfp[2] = kwglfz*0.5;
1127   gMC->Gsvolu("FGLF", "BOX", idtmed[508], parfp, 3); // glass
1128   // positioning 2 GLASS Layers in FSTR volume
1129   //posfp[0] = 0.;
1130   posfp[1] = (khcpcby + khglfy)*0.5 + khrgly;
1131   //posfp[2] = 0.;
1132   gMC->Gspos("FGLF", 1, "FSTR", 0.,-posfp[1], 0., 0, "ONLY");
1133   gMC->Gspos("FGLF", 2, "FSTR", 0., posfp[1], 0., 0, "ONLY");
1134
1135   // Positioning the Strips (FSTR volumes) in the FLT volumes
1136   Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
1137                               fTOFGeometry->NStripB(),
1138                               fTOFGeometry->NStripA(),
1139                               fTOFGeometry->NStripB(),
1140                               fTOFGeometry->NStripC()};
1141
1142   Int_t idrotm[91];
1143
1144   Int_t totalStrip = 0;
1145   Float_t xpos, zpos, ypos, ang;
1146   for(Int_t iplate = 0; iplate < fTOFGeometry->NPlates(); iplate++){
1147     if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
1148     for(Int_t istrip = 0; istrip < maxStripNumbers[iplate]; istrip++){
1149
1150       ang = fTOFGeometry->GetAngles(iplate,istrip);
1151       AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
1152  
1153       if (ang>0.)       AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90., ang, 90.);
1154       else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.,90., 0., 0.);
1155       else if (ang<0.)  AliMatrix (idrotm[istrip+totalStrip],90.,0.,90.+ang,90.,-ang,270.);
1156
1157       xpos = 0.;
1158       ypos = fTOFGeometry->GetHeights(iplate,istrip) + yFLT*0.5;
1159       zpos = fTOFGeometry->GetDistances(iplate,istrip);
1160       gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTA", xpos, ypos,-zpos, idrotm[istrip+totalStrip], "ONLY");
1161
1162       if (fTOFHoles) {
1163         if (istrip+totalStrip+1>53)
1164           gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTC", xpos, ypos,-zpos-(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
1165         if (istrip+totalStrip+1<39)
1166           gMC->Gspos("FSTR", istrip+totalStrip+1, "FLTB", xpos, ypos,-zpos+(zlenA*0.5 - 2.*fgkModuleWallThickness + fgkInterCentrModBorder1)*0.5, idrotm[istrip+totalStrip], "ONLY");
1167       }
1168     }
1169   }
1170
1171 }
1172
1173 //_____________________________________________________________________________
1174 void AliTOFv6T0::CreateBackZone(Float_t xtof, Float_t ytof, Float_t zlenA) const
1175 {
1176   //
1177   // Define:
1178   //        - containers for FEA cards, cooling system
1179   //          signal cables and supermodule support structure
1180   //          (volumes called FAIA/B/C),
1181   //        - containers for FEA cards and some cooling
1182   //          elements for a FEA (volumes called FCA1/2).
1183   //
1184
1185   Int_t *idtmed = fIdtmed->GetArray()-499;
1186
1187   Int_t idrotm[1];
1188
1189   // Definition of the air card containers (FAIA, FAIC and FAIB)
1190
1191   Float_t  par[3];
1192   par[0] = xtof*0.5;
1193   par[1] = (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1194   par[2] = zlenA*0.5;
1195   gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
1196   if (fTOFHoles) gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
1197   gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
1198
1199   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1200   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1201   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1202   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1203
1204   // FEA card mother-volume definition
1205   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1206                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1207                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1208   gMC->Gsvolu("FCA1", "BOX ", idtmed[500], carpar, 3); // Air
1209   gMC->Gsvolu("FCA2", "BOX ", idtmed[500], carpar, 3); // Air
1210
1211   // rotation matrix
1212   AliMatrix(idrotm[0],  90.,180., 90., 90.,180., 0.);
1213
1214   // FEA card mother-volume positioning
1215   Float_t rowstep = 6.66;
1216   Float_t rowgap[5] = {13.5, 22.9, 16.94, 23.8, 20.4};
1217   Int_t rowb[5] = {6, 7, 6, 19, 7};
1218   Float_t carpos[3] = {0.,
1219                        -(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1],
1220                        -0.8};
1221   gMC->Gspos("FCA1", 91, "FAIA", carpos[0], carpos[1], carpos[2], 0, "MANY");
1222   gMC->Gspos("FCA2", 91, "FAIC", carpos[0], carpos[1], carpos[2], 0, "MANY");
1223
1224   Int_t row = 1;
1225   Int_t nrow = 0;
1226   for (Int_t sg= -1; sg< 2; sg+= 2) {
1227     carpos[2] = sg*zlenA*0.5 - 0.8;
1228     for (Int_t nb=0; nb<5; ++nb) {
1229       carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
1230       nrow = row + rowb[nb];
1231       for ( ; row < nrow ; ++row) {
1232
1233         carpos[2] -= sg*rowstep;
1234
1235         if (nb==4) {
1236           gMC->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1237           gMC->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1238
1239         }
1240         else {
1241           switch (sg) {
1242           case 1:
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             break;
1246           case -1:
1247             gMC->Gspos("FCA1", row, "FAIA", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1248             gMC->Gspos("FCA2", row, "FAIC", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1249             break;
1250           }
1251
1252         }
1253
1254       }
1255     }
1256   }
1257
1258   if (fTOFHoles) {
1259     row = 1;
1260     for (Int_t sg= -1; sg< 2; sg+= 2) {
1261       carpos[2] = sg*zlenA*0.5 - 0.8;
1262       for (Int_t nb=0; nb<4; ++nb) {
1263         carpos[2] = carpos[2] - sg*(rowgap[nb] - rowstep);
1264         nrow = row + rowb[nb];
1265         for ( ; row < nrow ; ++row) {
1266           carpos[2] -= sg*rowstep;
1267
1268           switch (sg) {
1269           case 1:
1270             gMC->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], 0, "ONLY");
1271             break;
1272           case -1:
1273             gMC->Gspos("FCA1", row, "FAIB", carpos[0], carpos[1], carpos[2], idrotm[0], "ONLY");
1274             break;
1275           }
1276         }
1277       }
1278     }
1279   }
1280
1281 }
1282
1283 //_____________________________________________________________________________
1284 void AliTOFv6T0::MakeFrontEndElectronics(Float_t xtof) const
1285 {
1286   //
1287   // Fill FCA1/2 volumes with FEA cards (FFEA volumes).
1288   //
1289
1290   Int_t *idtmed = fIdtmed->GetArray()-499;
1291
1292   // FEA card volume definition
1293   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1294   gMC->Gsvolu("FFEA", "BOX ", idtmed[502], feaParam, 3); // G10
1295
1296   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1297   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1298   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1299   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1300
1301   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1302                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1303                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1304
1305   // FEA card volume positioning
1306   Float_t xCoor = xtof*0.5 - 25.;
1307   Float_t yCoor =-carpar[1] + feaParam[1];
1308   Float_t zCoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - feaParam[2]);
1309   gMC->Gspos("FFEA", 1, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
1310   gMC->Gspos("FFEA", 4, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
1311   gMC->Gspos("FFEA", 1, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
1312   gMC->Gspos("FFEA", 4, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
1313   xCoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1314   gMC->Gspos("FFEA", 2, "FCA1",-xCoor, yCoor, zCoor, 0, "ONLY");
1315   gMC->Gspos("FFEA", 3, "FCA1", xCoor, yCoor, zCoor, 0, "ONLY");
1316   gMC->Gspos("FFEA", 2, "FCA2",-xCoor, yCoor, zCoor, 0, "ONLY");
1317   gMC->Gspos("FFEA", 3, "FCA2", xCoor, yCoor, zCoor, 0, "ONLY");
1318
1319 }
1320
1321 //_____________________________________________________________________________
1322 void AliTOFv6T0::MakeFEACooling(Float_t xtof) const
1323 {
1324   //
1325   // Make cooling system attached to each FEA card
1326   // (FAL1, FRO1 and FBAR/1/2 volumes)
1327   // in FCA1/2 volume containers.
1328   //
1329
1330   Int_t *idtmed = fIdtmed->GetArray()-499;
1331
1332   // first FEA cooling element definition
1333   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1334   gMC->Gsvolu("FAL1", "BOX ", idtmed[504], al1, 3); // Al
1335
1336   // second FEA cooling element definition
1337   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1338   gMC->Gsvolu("FRO1", "BOX ", idtmed[504], feaRoof1, 3); // Al
1339
1340   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1341   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1342
1343   // definition and positioning of a small air groove in the FRO1 volume
1344   Float_t airHole[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1]*0.5, feaRoof1[2]};
1345   gMC->Gsvolu("FREE", "BOX ", idtmed[500], airHole, 3); // Air
1346   gMC->Gspos("FREE", 1, "FRO1", 0., feaRoof1[1]-airHole[1], 0., 0, "ONLY");
1347   gGeoManager->GetVolume("FRO1")->VisibleDaughters(kFALSE);
1348
1349   // third FEA cooling element definition
1350   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
1351   gMC->Gsvolu("FBAR", "BOX ", idtmed[504], bar, 3); // Al
1352
1353   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1354
1355   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1356                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1357                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1358
1359   // fourth FEA cooling element definition
1360   Float_t bar1[3] = {fgkBar1[0], fgkBar1[1], fgkBar1[2]};
1361   gMC->Gsvolu("FBA1", "BOX ", idtmed[504], bar1, 3); // Al
1362
1363   // fifth FEA cooling element definition
1364   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1365   gMC->Gsvolu("FBA2", "BOX ", idtmed[504], bar2, 3); // Al
1366
1367   // first FEA cooling element positioning
1368   Float_t xcoor = xtof*0.5 - 25.;
1369   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - al1[1];
1370   Float_t zcoor =-carpar[2] + 2.*feaRoof1[2] - al1[2];
1371   gMC->Gspos("FAL1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1372   gMC->Gspos("FAL1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1373   gMC->Gspos("FAL1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1374   gMC->Gspos("FAL1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1375   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1376   gMC->Gspos("FAL1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1377   gMC->Gspos("FAL1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1378   gMC->Gspos("FAL1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1379   gMC->Gspos("FAL1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1380
1381   // second FEA cooling element positioning
1382   xcoor = xtof*0.5 - 25.;
1383   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - feaRoof1[1];
1384   zcoor =-carpar[2] + feaRoof1[2];
1385   gMC->Gspos("FRO1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1386   gMC->Gspos("FRO1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1387   gMC->Gspos("FRO1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1388   gMC->Gspos("FRO1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1389   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1390   gMC->Gspos("FRO1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1391   gMC->Gspos("FRO1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "MANY"); // (AdC)
1392   gMC->Gspos("FRO1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1393   gMC->Gspos("FRO1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1394
1395   // third FEA cooling element positioning
1396   xcoor = xtof*0.5 - 25.;
1397   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
1398   zcoor =-carpar[2] + bar[2];
1399   gMC->Gspos("FBAR", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1400   gMC->Gspos("FBAR", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1401   gMC->Gspos("FBAR", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1402   gMC->Gspos("FBAR", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1403   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1404   gMC->Gspos("FBAR", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1405   gMC->Gspos("FBAR", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1406   gMC->Gspos("FBAR", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1407   gMC->Gspos("FBAR", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1408
1409   // fourth FEA cooling element positioning
1410   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw};
1411   xcoor = xtof*0.5 - 25.;
1412   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar[1];
1413   zcoor =-carpar[2] + 2.*bar[2] + 2.*tubepar[1] + bar1[2];
1414   gMC->Gspos("FBA1", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1415   gMC->Gspos("FBA1", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1416   gMC->Gspos("FBA1", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1417   gMC->Gspos("FBA1", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1418   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1419   gMC->Gspos("FBA1", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1420   gMC->Gspos("FBA1", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1421   gMC->Gspos("FBA1", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1422   gMC->Gspos("FBA1", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1423
1424   // fifth FEA cooling element positioning
1425   xcoor = xtof*0.5 - 25.;
1426   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - bar2[1];
1427   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
1428   gMC->Gspos("FBA2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1429   gMC->Gspos("FBA2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1430   gMC->Gspos("FBA2", 1, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1431   gMC->Gspos("FBA2", 4, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1432   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1433   gMC->Gspos("FBA2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1434   gMC->Gspos("FBA2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1435   gMC->Gspos("FBA2", 2, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1436   gMC->Gspos("FBA2", 3, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1437
1438   xcoor = xtof*0.5 - 25.;
1439   ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - 2.*tubepar[1] - bar2[1];
1440   zcoor =-carpar[2] + 2.*bar[2] + bar2[2];
1441   gMC->Gspos("FBA2", 5, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1442   gMC->Gspos("FBA2", 8, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1443   gMC->Gspos("FBA2", 5, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1444   gMC->Gspos("FBA2", 8, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1445   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1446   gMC->Gspos("FBA2", 6, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1447   gMC->Gspos("FBA2", 7, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1448   gMC->Gspos("FBA2", 6, "FCA2",-xcoor, ycoor, zcoor, 0, "ONLY");
1449   gMC->Gspos("FBA2", 7, "FCA2", xcoor, ycoor, zcoor, 0, "ONLY");
1450
1451 }
1452
1453 //_____________________________________________________________________________
1454 void AliTOFv6T0::MakeNinoMask(Float_t xtof) const
1455 {
1456   //
1457   // Make cooling Nino mask
1458   // for each FEA card (FAL2/3 and FRO2 volumes)
1459   // in FCA1 volume container.
1460   //
1461
1462   Int_t *idtmed = fIdtmed->GetArray()-499;
1463
1464   // first Nino ASIC mask volume definition
1465   Float_t al2[3] = {fgkAl2parameters[0], fgkAl2parameters[1], fgkAl2parameters[2]};
1466   gMC->Gsvolu("FAL2", "BOX ", idtmed[504], al2, 3); // Al
1467
1468   // second Nino ASIC mask volume definition
1469   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1470   gMC->Gsvolu("FAL3", "BOX ", idtmed[504], al3, 3); // Al
1471
1472   // third Nino ASIC mask volume definition
1473   Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1474   gMC->Gsvolu("FRO2", "BOX ", idtmed[504], feaRoof2, 3); // Al
1475
1476   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1477   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1478
1479   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1480                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1481                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1482
1483   // first Nino ASIC mask volume positioning
1484   Float_t xcoor = xtof*0.5 - 25.;
1485   Float_t ycoor = carpar[1] - 2.*al3[1];
1486   Float_t zcoor = carpar[2] - 2.*al3[2] - al2[2];
1487   gMC->Gspos("FAL2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1488   gMC->Gspos("FAL2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1489   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1490   gMC->Gspos("FAL2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1491   gMC->Gspos("FAL2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1492
1493   // second Nino ASIC mask volume positioning
1494   xcoor = xtof*0.5 - 25.;
1495   ycoor = carpar[1] - al3[1];
1496   zcoor = carpar[2] - al3[2];
1497   gMC->Gspos("FAL3", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1498   gMC->Gspos("FAL3", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1499   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1500   gMC->Gspos("FAL3", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1501   gMC->Gspos("FAL3", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1502
1503   // third Nino ASIC mask volume positioning
1504   xcoor = xtof*0.5 - 25.;
1505   ycoor = carpar[1] - fgkRoof2parameters[1];
1506   zcoor = carpar[2] - 2.*al3[2] - fgkRoof2parameters[2];
1507   gMC->Gspos("FRO2", 1, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1508   gMC->Gspos("FRO2", 4, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1509   xcoor = feaParam[0] + (fgkFEAwidth2*0.5 - fgkFEAwidth1);
1510   gMC->Gspos("FRO2", 2, "FCA1",-xcoor, ycoor, zcoor, 0, "ONLY");
1511   gMC->Gspos("FRO2", 3, "FCA1", xcoor, ycoor, zcoor, 0, "ONLY");
1512
1513 }
1514
1515 //_____________________________________________________________________________
1516 void AliTOFv6T0::MakeSuperModuleCooling(Float_t xtof, Float_t ytof, Float_t zlenA) const
1517 {
1518   //
1519   // Make cooling tubes (FTUB volume)
1520   // and cooling bars (FTLN and FLO1/2/3 volumes)
1521   // in FAIA/B/C volume containers.
1522   //
1523
1524   Int_t *idtmed = fIdtmed->GetArray()-499;
1525
1526   Int_t idrotm[1];
1527
1528   // cooling tube volume definition
1529   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw - fgkSawThickness};
1530   gMC->Gsvolu("FTUB", "TUBE", idtmed[512], tubepar, 3); // Cu
1531
1532   // water cooling tube volume definition
1533   Float_t tubeparW[3] = {0., 0.3, tubepar[2]};
1534   gMC->Gsvolu("FITU", "TUBE", idtmed[509], tubeparW, 3); // H2O
1535
1536   // Positioning of the water tube into the steel one
1537   gMC->Gspos("FITU", 1, "FTUB", 0., 0., 0., 0, "ONLY");
1538
1539   // definition of transverse components of SM cooling system
1540   Float_t trapar[3] = {tubepar[2], 6.175/*6.15*/, 0.7};
1541   gMC->Gsvolu("FTLN", "BOX ", idtmed[504], trapar, 3); // Al
1542
1543   // rotation matrix
1544   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1545
1546   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1547   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1548   Float_t bar[3] = {fgkBar[0], fgkBar[1], fgkBar[2]};
1549   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1550   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1551   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1552
1553   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1554                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1555                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1556
1557   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
1558     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1559
1560   // Positioning of tubes for the SM cooling system
1561   Float_t ycoor = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1562   Float_t zcoor =-carpar[2] + 2.*bar[2] + tubepar[1];
1563   gMC->Gspos("FTUB", 1, "FCA1", 0., ycoor, zcoor, idrotm[0], "ONLY");
1564   gMC->Gspos("FTUB", 1, "FCA2", 0., ycoor, zcoor, idrotm[0], "ONLY");
1565   gGeoManager->GetVolume("FTUB")->VisibleDaughters(kFALSE);
1566
1567   Float_t yFLTN = trapar[1] - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1568   for (Int_t sg= -1; sg< 2; sg+= 2) {
1569     // Positioning of transverse components for the SM cooling system
1570     gMC->Gspos("FTLN", 5+4*sg, "FAIA", 0., yFLTN, 369.9*sg, 0, "MANY");
1571     gMC->Gspos("FTLN", 5+3*sg, "FAIA", 0., yFLTN, 366.9*sg, 0, "MANY");
1572     gMC->Gspos("FTLN", 5+2*sg, "FAIA", 0., yFLTN, 198.8*sg, 0, "MANY");
1573     gMC->Gspos("FTLN",   5+sg, "FAIA", 0., yFLTN, 56.82*sg, 0, "MANY");
1574     gMC->Gspos("FTLN", 5+4*sg, "FAIC", 0., yFLTN, 369.9*sg, 0, "MANY");
1575     gMC->Gspos("FTLN", 5+3*sg, "FAIC", 0., yFLTN, 366.9*sg, 0, "MANY");
1576     gMC->Gspos("FTLN", 5+2*sg, "FAIC", 0., yFLTN, 198.8*sg, 0, "MANY");
1577     gMC->Gspos("FTLN",   5+sg, "FAIC", 0., yFLTN, 56.82*sg, 0, "MANY");
1578   }
1579
1580   // definition of longitudinal components of SM cooling system
1581   Float_t lonpar1[3] = {2., 0.5, 56.82 - trapar[2]};
1582   Float_t lonpar2[3] = {lonpar1[0], lonpar1[1], (198.8 - 56.82)*0.5 - trapar[2]};
1583   Float_t lonpar3[3] = {lonpar1[0], lonpar1[1], (366.9 - 198.8)*0.5 - trapar[2]};
1584   gMC->Gsvolu("FLO1", "BOX ", idtmed[504], lonpar1, 3); // Al
1585   gMC->Gsvolu("FLO2", "BOX ", idtmed[504], lonpar2, 3); // Al
1586   gMC->Gsvolu("FLO3", "BOX ", idtmed[504], lonpar3, 3); // Al
1587
1588   // Positioning of longitudinal components for the SM cooling system
1589   ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1590   gMC->Gspos("FLO1",  4, "FAIA",-24., ycoor, 0., 0, "MANY");
1591   gMC->Gspos("FLO1",  2, "FAIA", 24., ycoor, 0., 0, "MANY");
1592   gMC->Gspos("FLO1",  4, "FAIC",-24., ycoor, 0., 0, "MANY");
1593   gMC->Gspos("FLO1",  2, "FAIC", 24., ycoor, 0., 0, "MANY");
1594
1595   zcoor = (198.8 + 56.82)*0.5;
1596   gMC->Gspos("FLO2",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1597   gMC->Gspos("FLO2",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1598   gMC->Gspos("FLO2",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1599   gMC->Gspos("FLO2",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1600   gMC->Gspos("FLO2",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1601   gMC->Gspos("FLO2",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1602   gMC->Gspos("FLO2",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1603   gMC->Gspos("FLO2",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1604
1605   zcoor = (366.9 + 198.8)*0.5;
1606   gMC->Gspos("FLO3",  4, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1607   gMC->Gspos("FLO3",  2, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1608   gMC->Gspos("FLO3",  4, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1609   gMC->Gspos("FLO3",  2, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1610   gMC->Gspos("FLO3",  8, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1611   gMC->Gspos("FLO3",  6, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1612   gMC->Gspos("FLO3",  8, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1613   gMC->Gspos("FLO3",  6, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1614
1615   ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1616   gMC->Gspos("FLO1",  3, "FAIA",-24., ycoor, 0., 0, "MANY");
1617   gMC->Gspos("FLO1",  1, "FAIA", 24., ycoor, 0., 0, "MANY");
1618   gMC->Gspos("FLO1",  3, "FAIC",-24., ycoor, 0., 0, "MANY");
1619   gMC->Gspos("FLO1",  1, "FAIC", 24., ycoor, 0., 0, "MANY");
1620
1621   zcoor = (198.8 + 56.82)*0.5;
1622   gMC->Gspos("FLO2",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1623   gMC->Gspos("FLO2",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1624   gMC->Gspos("FLO2",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1625   gMC->Gspos("FLO2",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1626   gMC->Gspos("FLO2",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1627   gMC->Gspos("FLO2",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1628   gMC->Gspos("FLO2",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1629   gMC->Gspos("FLO2",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1630
1631   zcoor = (366.9 + 198.8)*0.5;
1632   gMC->Gspos("FLO3",  3, "FAIA",-24., ycoor,-zcoor, 0, "MANY");
1633   gMC->Gspos("FLO3",  1, "FAIA", 24., ycoor,-zcoor, 0, "MANY");
1634   gMC->Gspos("FLO3",  3, "FAIC",-24., ycoor,-zcoor, 0, "MANY");
1635   gMC->Gspos("FLO3",  1, "FAIC", 24., ycoor,-zcoor, 0, "MANY");
1636   gMC->Gspos("FLO3",  7, "FAIA",-24., ycoor, zcoor, 0, "MANY");
1637   gMC->Gspos("FLO3",  5, "FAIA", 24., ycoor, zcoor, 0, "MANY");
1638   gMC->Gspos("FLO3",  7, "FAIC",-24., ycoor, zcoor, 0, "MANY");
1639   gMC->Gspos("FLO3",  5, "FAIC", 24., ycoor, zcoor, 0, "MANY");
1640
1641
1642   Float_t carpos[3] = {25. - xtof*0.5,
1643                        (11.5 - (ytof*0.5 - fgkModuleCoverThickness))*0.5,
1644                        0.};
1645   if (fTOFHoles) {
1646     for (Int_t sg= -1; sg< 2; sg+= 2) {
1647       carpos[2] = sg*zlenA*0.5;
1648       gMC->Gspos("FTLN", 5+4*sg, "FAIB", 0., yFLTN, 369.9*sg, 0, "MANY");
1649       gMC->Gspos("FTLN", 5+3*sg, "FAIB", 0., yFLTN, 366.9*sg, 0, "MANY");
1650       gMC->Gspos("FTLN", 5+2*sg, "FAIB", 0., yFLTN, 198.8*sg, 0, "MANY");
1651       gMC->Gspos("FTLN",   5+sg, "FAIB", 0., yFLTN, 56.82*sg, 0, "MANY");
1652     }
1653
1654     ycoor =  ytub + (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1655     zcoor = (198.8 + 56.82)*0.5;
1656     gMC->Gspos("FLO2", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
1657     gMC->Gspos("FLO2", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
1658     zcoor = (366.9 + 198.8)*0.5;
1659     gMC->Gspos("FLO3", 2, "FAIB",-24., ycoor,-zcoor, 0, "MANY");
1660     gMC->Gspos("FLO3", 1, "FAIB",-24., ycoor, zcoor, 0, "MANY");
1661     ycoor =  ytub - (tubepar[1] + 2.*bar2[1] + lonpar1[1]);
1662     zcoor = (198.8 + 56.82)*0.5;
1663     gMC->Gspos("FLO2", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
1664     gMC->Gspos("FLO2", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
1665     zcoor = (366.9 + 198.8)*0.5;
1666     gMC->Gspos("FLO3", 4, "FAIB", 24., ycoor,-zcoor, 0, "MANY");
1667     gMC->Gspos("FLO3", 3, "FAIB", 24., ycoor, zcoor, 0, "MANY");
1668
1669   }
1670
1671   Float_t barS[3] = {fgkBarS[0], fgkBarS[1], fgkBarS[2]};
1672   gMC->Gsvolu("FBAS", "BOX ", idtmed[504], barS, 3); // Al
1673
1674   Float_t barS1[3] = {fgkBarS1[0], fgkBarS1[1], fgkBarS1[2]};
1675   gMC->Gsvolu("FBS1", "BOX ", idtmed[504], barS1, 3); // Al
1676
1677   Float_t barS2[3] = {fgkBarS2[0], fgkBarS2[1], fgkBarS2[2]};
1678   gMC->Gsvolu("FBS2", "BOX ", idtmed[504], barS2, 3); // Al
1679
1680   Float_t ytubBis = carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*barS2[1] - tubepar[1];
1681   ycoor = ytubBis;
1682   zcoor =-carpar[2] + barS[2];
1683   gMC->Gspos("FBAS", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1684   gMC->Gspos("FBAS", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1685   gMC->Gspos("FBAS", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1686   gMC->Gspos("FBAS", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1687
1688   zcoor =-carpar[2] + 2.*barS[2] + 2.*tubepar[1] + barS1[2];
1689   gMC->Gspos("FBS1", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1690   gMC->Gspos("FBS1", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1691   gMC->Gspos("FBS1", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1692   gMC->Gspos("FBS1", 2, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1693
1694   ycoor = ytubBis + (tubepar[1] + barS2[1]);
1695   zcoor =-carpar[2] + 2.*barS[2] + barS2[2];
1696   gMC->Gspos("FBS2", 1, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1697   gMC->Gspos("FBS2", 2, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1698   gMC->Gspos("FBS2", 1, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1699   gMC->Gspos("FBS2", 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", 3, "FCA1",-24., ycoor, zcoor, 0, "ONLY");
1704   gMC->Gspos("FBS2", 4, "FCA1", 24., ycoor, zcoor, 0, "ONLY");
1705   gMC->Gspos("FBS2", 3, "FCA2",-24., ycoor, zcoor, 0, "ONLY");
1706   gMC->Gspos("FBS2", 4, "FCA2", 24., ycoor, zcoor, 0, "ONLY");
1707
1708 }
1709
1710 //_____________________________________________________________________________
1711 void AliTOFv6T0::MakeSuperModuleServices(Float_t xtof, Float_t ytof, Float_t zlenA) const
1712 {
1713   //
1714   // Make signal cables (FCAB/L and FCBL/B volumes),
1715   // supemodule cover (FCOV volume) and wall (FSAW volume)
1716   // in FAIA/B/C volume containers.
1717   //
1718
1719   Int_t *idtmed = fIdtmed->GetArray()-499;
1720
1721   Int_t idrotm[3];
1722
1723   Float_t tubepar[3] = {0., 0.4, xtof*0.5 - fgkCBLw - fgkSawThickness};
1724   Float_t al1[3] = {fgkAl1parameters[0], fgkAl1parameters[1], fgkAl1parameters[2]};
1725   Float_t al3[3] = {fgkAl3parameters[0], fgkAl3parameters[1], fgkAl3parameters[2]};
1726   Float_t feaRoof1[3] = {fgkRoof1parameters[0], fgkRoof1parameters[1], fgkRoof1parameters[2]};
1727   //Float_t feaRoof2[3] = {fgkRoof2parameters[0], fgkRoof2parameters[1], fgkRoof2parameters[2]};
1728   Float_t feaParam[3] = {fgkFEAparameters[0], fgkFEAparameters[1], fgkFEAparameters[2]};
1729
1730   // FEA cables definition
1731   Float_t cbpar[3] = {0., 0.5, (tubepar[2] - (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5};
1732   gMC->Gsvolu("FCAB", "TUBE", idtmed[510], cbpar, 3);    // copper+alu
1733
1734   Float_t cbparS[3] = {cbpar[0], cbpar[1], (tubepar[2] - (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5};
1735   gMC->Gsvolu("FCAL", "TUBE", idtmed[510], cbparS, 3);    // copper+alu
1736
1737   // rotation matrix
1738   AliMatrix(idrotm[0], 180., 90., 90., 90., 90., 0.);
1739
1740   Float_t carpar[3] = {xtof*0.5 - fgkCBLw - fgkSawThickness,
1741                        feaParam[1] + feaRoof1[1] + fgkRoof2parameters[1]*0.5,
1742                        feaRoof1[2] + fgkBetweenLandMask*0.5 + al3[2]};
1743
1744   Float_t bar2[3] = {fgkBar2[0], fgkBar2[1], fgkBar2[2]};
1745   Float_t ytub =-(ytof*0.5 - fgkModuleCoverThickness)*0.5 + carpar[1] +
1746     carpar[1] - 2.*fgkRoof2parameters[1]*0.5 - 2.*feaRoof1[1] - 2.*bar2[1] - tubepar[1];
1747
1748   // FEA cables positioning
1749   Float_t xcoor = (tubepar[2] + (fgkFEAwidth2 - fgkFEAwidth1/6.)*0.5)*0.5;
1750   Float_t ycoor = ytub - 3.;
1751   Float_t zcoor =-carpar[2] + (2.*feaRoof1[2] - 2.*al1[2] - 2.*feaParam[2] - cbpar[1]);
1752   gMC->Gspos("FCAB", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1753   gMC->Gspos("FCAB", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1754   gMC->Gspos("FCAB", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1755   gMC->Gspos("FCAB", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1756   xcoor = (tubepar[2] + (xtof*0.5 - 25. + (fgkFEAwidth1 - fgkFEAwidth1/6.)*0.5))*0.5;
1757   ycoor -= 2.*cbpar[1];
1758   gMC->Gspos("FCAL", 1, "FCA1",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1759   gMC->Gspos("FCAL", 2, "FCA1", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1760   gMC->Gspos("FCAL", 1, "FCA2",-xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1761   gMC->Gspos("FCAL", 2, "FCA2", xcoor, ycoor, zcoor, idrotm[0], "ONLY");
1762
1763
1764   // Cables and tubes on the side blocks
1765   // constants definition
1766   const Float_t kCBLl   = zlenA*0.5; // length of block
1767   const Float_t kCBLlh  = zlenA*0.5 - fgkInterCentrModBorder2; // length  of block in case of holes
1768   //const Float_t fgkCBLw   = 13.5;      // width of block
1769   //const Float_t fgkCBLh1  = 2.;        // min. height of block
1770   //const Float_t fgkCBLh2  = 12.3;      // max. height of block
1771   //const Float_t fgkSawThickness = 1.; // Al wall thickness
1772
1773   // lateral cable and tube volume definition
1774   Float_t tgal =  (fgkCBLh2 - fgkCBLh1)/(2.*kCBLl);
1775   Float_t cblpar[11];
1776   cblpar[0] = fgkCBLw *0.5;
1777   cblpar[1] = 0.;
1778   cblpar[2] = 0.;
1779   cblpar[3] = kCBLl *0.5;
1780   cblpar[4] = fgkCBLh1 *0.5;
1781   cblpar[5] = fgkCBLh2 *0.5;
1782   cblpar[6] = TMath::ATan(tgal)*kRaddeg;
1783   cblpar[7] = kCBLl *0.5;
1784   cblpar[8] = fgkCBLh1 *0.5;
1785   cblpar[9] = fgkCBLh2 *0.5;
1786   cblpar[10]= cblpar[6];
1787   gMC->Gsvolu("FCBL", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix 
1788
1789   // Side Al Walls definition
1790   Float_t sawpar[3] = {fgkSawThickness*0.5, fgkCBLh2*0.5, kCBLl};
1791   gMC->Gsvolu("FSAW", "BOX ", idtmed[504], sawpar,  3); // Al
1792
1793   AliMatrix(idrotm[1], 90., 90., 180., 0., 90., 180.);
1794   AliMatrix(idrotm[2], 90., 90., 0., 0., 90., 0.);
1795
1796   // lateral cable and tube volume positioning
1797   xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
1798   ycoor = (fgkCBLh1 + fgkCBLh2)*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1799   zcoor = kCBLl*0.5;
1800   gMC->Gspos("FCBL", 1, "FAIA", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1801   gMC->Gspos("FCBL", 2, "FAIA",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1802   gMC->Gspos("FCBL", 3, "FAIA", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1803   gMC->Gspos("FCBL", 4, "FAIA",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1804   gMC->Gspos("FCBL", 1, "FAIC", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1805   gMC->Gspos("FCBL", 2, "FAIC",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1806   gMC->Gspos("FCBL", 3, "FAIC", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1807   gMC->Gspos("FCBL", 4, "FAIC",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1808
1809   if (fTOFHoles) {
1810     cblpar[3] = kCBLlh *0.5;
1811     cblpar[5] = fgkCBLh1*0.5 + kCBLlh*tgal;
1812     cblpar[7] = kCBLlh *0.5;
1813     cblpar[9] = cblpar[5];
1814     gMC->Gsvolu("FCBB", "TRAP", idtmed[511], cblpar, 11); // cables and tubes mix
1815
1816     xcoor = (xtof - fgkCBLw)*0.5 - 2.*sawpar[0];
1817     ycoor = (fgkCBLh1 + 2.*cblpar[5])*0.25 - (ytof*0.5 - fgkModuleCoverThickness)*0.5;
1818     zcoor = kCBLl-kCBLlh*0.5;
1819     gMC->Gspos("FCBB", 1, "FAIB", -xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1820     gMC->Gspos("FCBB", 2, "FAIB",  xcoor, ycoor, -zcoor, idrotm[1], "ONLY");
1821     gMC->Gspos("FCBB", 3, "FAIB", -xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1822     gMC->Gspos("FCBB", 4, "FAIB",  xcoor, ycoor,  zcoor, idrotm[2], "ONLY");
1823   }
1824
1825   // lateral cable and tube volume positioning
1826   xcoor = xtof*0.5 - sawpar[0];
1827   ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
1828   zcoor = 0.;
1829   gMC->Gspos("FSAW", 1, "FAIA", -xcoor, ycoor, zcoor, 0, "ONLY");
1830   gMC->Gspos("FSAW", 2, "FAIA",  xcoor, ycoor, zcoor, 0, "ONLY");
1831   gMC->Gspos("FSAW", 1, "FAIC", -xcoor, ycoor, zcoor, 0, "ONLY");
1832   gMC->Gspos("FSAW", 2, "FAIC",  xcoor, ycoor, zcoor, 0, "ONLY");
1833
1834   if (fTOFHoles) {
1835     xcoor = xtof*0.5 - sawpar[0];
1836     ycoor = (fgkCBLh2 - ytof*0.5 + fgkModuleCoverThickness)*0.5;
1837     gMC->Gspos("FSAW", 1, "FAIB", -xcoor, ycoor, 0., 0, "ONLY");
1838     gMC->Gspos("FSAW", 2, "FAIB",  xcoor, ycoor, 0., 0, "ONLY");
1839   }
1840
1841   // TOF Supermodule cover definition and positioning
1842   Float_t covpar[3] = {xtof*0.5, 0.075, zlenA*0.5};
1843   gMC->Gsvolu("FCOV", "BOX ", idtmed[504], covpar, 3); // Al
1844   if (fTOFHoles) {
1845     covpar[2] = (zlenA*0.5 - fgkInterCentrModBorder2)*0.5;
1846     gMC->Gsvolu("FCOB", "BOX ", idtmed[504], covpar, 3); // Al
1847     covpar[2] = fgkInterCentrModBorder2;
1848     gMC->Gsvolu("FCOP", "BOX ", idtmed[513], covpar, 3); // Plastic (CH2)
1849   }
1850
1851   xcoor = 0.;
1852   ycoor = (ytof*0.5 - fgkModuleCoverThickness)*0.5 - covpar[1];
1853   zcoor = 0.;
1854   gMC->Gspos("FCOV", 0, "FAIA", xcoor, ycoor, zcoor, 0, "ONLY");
1855   gMC->Gspos("FCOV", 0, "FAIC", xcoor, ycoor, zcoor, 0, "ONLY");
1856   if (fTOFHoles) {
1857     zcoor = (zlenA*0.5 + fgkInterCentrModBorder2)*0.5;
1858     gMC->Gspos("FCOB", 1, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
1859     gMC->Gspos("FCOB", 2, "FAIB", xcoor, ycoor, -zcoor, 0, "ONLY");
1860     zcoor = 0.;
1861     gMC->Gspos("FCOP", 0, "FAIB", xcoor, ycoor,  zcoor, 0, "ONLY");
1862   }
1863
1864 }
1865
1866 //_____________________________________________________________________________
1867 void AliTOFv6T0::MakeReadoutCrates(Float_t ytof) const
1868 {
1869   // Services Volumes
1870
1871   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
1872   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
1873   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
1874   // + other remaining elements + various supports
1875
1876   // Each FEA card weight + all supports
1877   // (including all bolts and not including the cable connectors)
1878   //  353.1 g.
1879   // Per each strip there are 4 FEA cards, then
1880   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
1881
1882   // Services Volumes
1883
1884   // Empty crate weight: 50 Kg, electronics cards + cables ~ 52 Kg.
1885   // Per each side (A and C) the total weight is: 2x102 ~ 204 Kg.
1886   // ... + weight of the connection pannel for the steel cooling system (Cr 18%, Ni 12%, Fe 70%)
1887   // + other remaining elements + various supports
1888
1889   // Each FEA card weight + all supports
1890   // (including all bolts and not including the cable connectors)
1891   //  353.1 g.
1892   // Per each strip there are 4 FEA cards, then
1893   // the total weight of the front-end electonics section is: 353.1 g x 4 = 1412.4 g.
1894   //
1895
1896   Int_t *idtmed = fIdtmed->GetArray()-499;
1897
1898   Int_t idrotm[18];
1899
1900   // volume definition
1901   Float_t serpar[3] = {29.*0.5, 121.*0.5, 90.*0.5};
1902   gMC->Gsvolu("FTOS", "BOX ", idtmed[514], serpar, 3); // Al + Cu + steel
1903
1904   Float_t xcoor, ycoor, zcoor;
1905   zcoor = (118.-90.)*0.5;
1906   Float_t phi = -10.,  ra = fTOFGeometry->Rmin() + ytof*0.5;
1907   for (Int_t i = 0; i < fTOFGeometry->NSectors(); i++) {
1908     phi += 20.;
1909     xcoor = ra * TMath::Cos(phi * kDegrad);
1910     ycoor = ra * TMath::Sin(phi * kDegrad);
1911     AliMatrix(idrotm[i], 90., phi, 90., phi + 270., 0., 0.);
1912     gMC->Gspos("FTOS", i, "BFMO", xcoor, ycoor, zcoor, idrotm[i], "ONLY");
1913   }
1914
1915   zcoor = (90. - 223.)*0.5;
1916   gMC->Gspos("FTOS", 1, "BBCE", ra, -3., zcoor, 0, "ONLY");
1917
1918 }
1919
1920 //_____________________________________________________________________________
1921 void AliTOFv6T0::DrawModule() const
1922 {
1923   //
1924   // Draw a shaded view of the Time Of Flight version 5
1925   //
1926
1927   // Set everything unseen
1928   gMC->Gsatt("*", "seen", -1);
1929
1930   //
1931   //Set volumes visible
1932   // 
1933
1934   //Set ALIC mother transparent
1935   gMC->Gsatt("ALIC","SEEN", 0);
1936
1937 //=====> Level 1
1938   // Level 1 for TOF volumes
1939   gMC->Gsatt("B077","seen", 0);
1940
1941 //=====> Level 2
1942   // Level 2 for TOF volumes
1943   gMC->Gsatt("B071","seen", 0);
1944   gMC->Gsatt("B074","seen", 0);
1945   gMC->Gsatt("B075","seen", 0);
1946   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1947   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
1948
1949   // Level 2 of B071
1950   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
1951   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
1952   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
1953   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
1954   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
1955
1956   char name[16];
1957   for (Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
1958     sprintf(name, "BREF%d",isec);
1959     gMC->Gsatt(name,"seen", 0);  // all BREF%d sub-levels skipped   -
1960     sprintf(name, "BTRD%d",isec);
1961     gMC->Gsatt(name,"seen", 0);  // all BTRD%d sub-levels skipped   -
1962     sprintf(name, "BTOF%d",isec);
1963     gMC->Gsatt(name,"seen",-2);  // all BTOF%d sub-levels skipped   -
1964   }
1965
1966   gMC->Gdopt("hide", "on");
1967   gMC->Gdopt("shad", "on");
1968   gMC->Gsatt("*", "fill", 7);
1969   gMC->SetClipBox(".");
1970   gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1971   gMC->DefaultRange();
1972   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1973   gMC->Gdhead(1111, "Time Of Flight");
1974   gMC->Gdman(18, 3, "MAN");
1975   gMC->Gdopt("hide","off");
1976 }
1977 //_____________________________________________________________________________
1978 void AliTOFv6T0::DrawDetectorModules() const
1979 {
1980   //
1981   // Draw a shaded view of the TOF detector SuperModules version 5
1982   //
1983  
1984   // Set everything unseen
1985   gMC->Gsatt("*", "seen", -1);
1986
1987   //
1988   //Set volumes visible
1989   // 
1990
1991   //Set ALIC mother transparent
1992   gMC->Gsatt("ALIC","SEEN", 0);
1993
1994 //=====> Level 1
1995   // Level 1 for TOF volumes
1996   gMC->Gsatt("B077","seen", 0);
1997
1998 //=====> Level 2
1999   // Level 2 for TOF volumes
2000   gMC->Gsatt("B071","seen", 0);
2001   gMC->Gsatt("B074","seen", 0);
2002   gMC->Gsatt("B075","seen", 0);
2003   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
2004   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
2005
2006   // Level 2 of B071
2007   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
2008   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
2009   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
2010   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
2011   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
2012
2013   char name[16];
2014   for (Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
2015     sprintf(name, "BREF%d",isec);
2016     gMC->Gsatt(name,"seen", 0);  // all BREF%d sub-levels skipped   -
2017     sprintf(name, "BTRD%d",isec);
2018     gMC->Gsatt(name,"seen", 0);  // all BTRD%d sub-levels skipped   -
2019     sprintf(name, "BTOF%d",isec);
2020     gMC->Gsatt(name,"seen", 0);  // all BTOF%d sub-levels skipped   -
2021   }
2022
2023   // Level 3 of B071, B075 and B074
2024   gMC->Gsatt("FTOA","seen",-2);  // all FTOA sub-levels skipped   -
2025   if (fTOFHoles) gMC->Gsatt("FTOB","seen",-2);  // all FTOB sub-levels skipped   -
2026   if (fTOFHoles) gMC->Gsatt("FTOC","seen",-2);  // all FTOC sub-levels skipped   -
2027
2028   // Level 3 of B071, B075 and B074
2029   gMC->Gsatt("FAIA","seen",-1);  // all FAIA sub-levels skipped   -
2030   gMC->Gsatt("FAIC","seen",-1);  // all FAIC sub-levels skipped   -
2031   if (fTOFHoles) gMC->Gsatt("FAIB","seen",-1);  // all FAIB sub-levels skipped   -
2032
2033   // Level 3 of B071, B075 and B074
2034   gMC->Gsatt("FPEA","seen",-2/*1*/);  // all FPEA sub-levels skipped   -
2035   if (fTOFHoles) gMC->Gsatt("FPEB","seen",-2/*1*/);  // all FPEB sub-levels skipped   -
2036
2037   gMC->Gdopt("hide","on");
2038   gMC->Gdopt("shad","on");
2039   gMC->Gsatt("*", "fill", 5);
2040   gMC->SetClipBox(".");
2041   gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
2042   gMC->DefaultRange();
2043   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
2044   gMC->Gdhead(1111,"TOF detector");
2045   gMC->Gdman(18, 3, "MAN");
2046   gMC->Gdopt("hide","off");
2047 }                                 
2048
2049 //_____________________________________________________________________________
2050 void AliTOFv6T0::DrawDetectorStrips() const
2051 {
2052   //
2053   // Draw a shaded view of the TOF strips for version 5
2054   //
2055
2056   // Set everything unseen
2057   gMC->Gsatt("*", "seen", -1);
2058
2059   //
2060   //Set volumes visible
2061   // 
2062   
2063   //Set ALIC mother transparent
2064   gMC->Gsatt("ALIC","SEEN", 0);
2065   
2066 //=====> Level 1
2067   // Level 1 for TOF volumes
2068   gMC->Gsatt("B077","seen", 0);
2069
2070 //=====> Level 2
2071   // Level 2 for TOF volumes
2072   gMC->Gsatt("B071","seen", 0);
2073   gMC->Gsatt("B074","seen", 0);
2074   gMC->Gsatt("B075","seen", 0);
2075   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
2076   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
2077
2078   // Level 2 of B071
2079   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
2080   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
2081   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
2082   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
2083   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
2084
2085   char name[16];
2086   for (Int_t isec=0; isec<fTOFGeometry->NSectors(); isec++) {
2087     sprintf(name, "BREF%d",isec);
2088     gMC->Gsatt(name,"seen", 0);  // all BREF%d sub-levels skipped   -
2089     sprintf(name, "BTRD%d",isec);
2090     gMC->Gsatt(name,"seen", 0);  // all BTRD%d sub-levels skipped   -
2091     sprintf(name, "BTOF%d",isec);
2092     gMC->Gsatt(name,"seen", 0);  // all BTOF%d sub-levels skipped   -
2093   }
2094
2095   // Level 3 of B071, B074 and B075
2096   gMC->Gsatt("FTOA","SEEN", 0);
2097   if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
2098   if (fTOFHoles) gMC->Gsatt("FTOC","SEEN", 0);
2099
2100   // Level 4 of B071, B074 and B075
2101   gMC->Gsatt("FLTA","SEEN", 0);
2102   if (fTOFHoles) gMC->Gsatt("FLTB","SEEN", 0);
2103   if (fTOFHoles) gMC->Gsatt("FLTC","SEEN", 0);
2104
2105   // Level 5 of B071, B074 and B075
2106   gMC->Gsatt("FAIA","SEEN", 0);
2107   gMC->Gsatt("FAIC","seen",-1);  // all FAIC sub-levels skipped   -
2108   if (fTOFHoles) gMC->Gsatt("FAIB","SEEN", 0);
2109
2110   gMC->Gsatt("FPEA","SEEN", -2/*1*/);
2111   if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", -2/*1*/);
2112
2113   gMC->Gsatt("FSTR","SEEN",-2);  // all FSTR sub-levels skipped   -
2114
2115   gMC->Gsatt("FWZ1","SEEN", 1);
2116   gMC->Gsatt("FWZ2","SEEN", 1);
2117   gMC->Gsatt("FWZ3","SEEN", 1);
2118   gMC->Gsatt("FWZ4","SEEN", 1);
2119   if (fTOFHoles) {
2120     gMC->Gsatt("FWZA","SEEN", 1);
2121     gMC->Gsatt("FWZB","SEEN", 1);
2122     gMC->Gsatt("FWZC","SEEN", 1);
2123   }
2124
2125   // Level 2 of FAIA
2126   // Level 2 of FAIB
2127   // Level 2 of FAIC
2128   gMC->Gsatt("FCA1","SEEN", 0);
2129   gMC->Gsatt("FCA2","SEEN", 0);
2130   gMC->Gsatt("FCAB","SEEN", 0);
2131   gMC->Gsatt("FCAL","SEEN", 0);
2132   gMC->Gsatt("FTUB","SEEN",-1);  // all FTUB sub-levels skipped   -
2133   gMC->Gsatt("FTLN","SEEN", 0);
2134   gMC->Gsatt("FLO1","SEEN", 0);
2135   gMC->Gsatt("FLO2","SEEN", 0);
2136   gMC->Gsatt("FLO3","SEEN", 0);
2137   gMC->Gsatt("FCBL","SEEN", 0);
2138   if (fTOFHoles) gMC->Gsatt("FCBB","SEEN", 0);
2139   gMC->Gsatt("FSAW","SEEN", 0);
2140   gMC->Gsatt("FCOV","SEEN", 0);
2141   if (fTOFHoles) {
2142     gMC->Gsatt("FCOB","SEEN", 0);
2143     gMC->Gsatt("FCOP","SEEN", 0);
2144   }
2145
2146   // Level 2 of FTUB
2147   gMC->Gsatt("FITU","SEEN", 0);
2148
2149   // Level 2 of FSTR
2150   gMC->Gsatt("FHON","SEEN", 1);
2151   gMC->Gsatt("FPC1","SEEN", 1);
2152   gMC->Gsatt("FPC2","SEEN", 1);
2153   gMC->Gsatt("FPCB","SEEN", 1);
2154   gMC->Gsatt("FRGL","SEEN", 1);
2155   gMC->Gsatt("FGLF","SEEN", 1);
2156
2157   // Level 2 of FPCB => Level 3 of FSTR
2158   gMC->Gsatt("FSEN","SEEN", 0);
2159   gMC->Gsatt("FSEZ","SEEN", 0);
2160   gMC->Gsatt("FPAD","SEEN", 1);
2161
2162   gMC->Gdopt("hide","on");
2163   gMC->Gdopt("shad","on");
2164   gMC->Gsatt("*", "fill", 5);
2165   gMC->SetClipBox(".");
2166   gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
2167   gMC->DefaultRange();
2168   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
2169   gMC->Gdhead(1111,"TOF Strips");
2170   gMC->Gdman(18, 3, "MAN");
2171   gMC->Gdopt("hide","off");
2172 }
2173
2174 //_____________________________________________________________________________
2175 void AliTOFv6T0::CreateMaterials()
2176 {
2177   //
2178   // Define materials for the Time Of Flight
2179   //
2180
2181   //AliTOF::CreateMaterials();
2182
2183   AliMagF *magneticField = (AliMagF*)((AliMagF*)TGeoGlobalMagField::Instance()->GetField());
2184
2185   Int_t   isxfld = magneticField->Integ();
2186   Float_t sxmgmx = magneticField->Max();
2187
2188   //--- Quartz (SiO2) ---
2189   Float_t   aq[2] = { 28.0855,15.9994};
2190   Float_t   zq[2] = { 14.,8. };
2191   Float_t   wq[2] = { 1.,2. };
2192   Float_t   dq = 2.7; // (+5.9%)
2193   Int_t nq = -2;
2194
2195   // --- Nomex (C14H22O2N2) ---
2196   Float_t anox[4] = {12.011,1.00794,15.9994,14.00674};
2197   Float_t znox[4] = { 6.,  1.,  8.,  7.};
2198   Float_t wnox[4] = {14., 22., 2., 2.};
2199   //Float_t dnox  = 0.048; //old value
2200   Float_t dnox  = 0.22;    // (x 4.6)
2201   Int_t nnox   = -4;
2202
2203   // --- G10  {Si, O, C, H, O} ---
2204   Float_t we[7], na[7];
2205
2206   Float_t ag10[5] = {28.0855,15.9994,12.011,1.00794,15.9994};
2207   Float_t zg10[5] = {14., 8., 6., 1., 8.};
2208   Float_t wmatg10[5];
2209   Int_t nlmatg10 = 5;
2210   na[0]= 1. ,   na[1]= 2. ,   na[2]= 0. ,   na[3]= 0. ,   na[4]= 0.;
2211   MaterialMixer(we,ag10,na,5);
2212   wmatg10[0]= we[0]*0.6;
2213   wmatg10[1]= we[1]*0.6;
2214   na[0]= 0. ,   na[1]= 0. ,   na[2]= 14. ,   na[3]= 20. ,   na[4]= 3.;
2215   MaterialMixer(we,ag10,na,5);
2216   wmatg10[2]= we[2]*0.4;
2217   wmatg10[3]= we[3]*0.4;
2218   wmatg10[4]= we[4]*0.4;
2219   AliDebug(1,Form("wg10  %f  %f  %f  %f  %f", wmatg10[0], wmatg10[1], wmatg10[2], wmatg10[3], wmatg10[4]));
2220   //Float_t densg10 = 1.7; //old value
2221   Float_t densg10 = 2.0; // (+17.8%)
2222
2223   // --- Water ---
2224   Float_t awa[2] = {  1.00794, 15.9994 };
2225   Float_t zwa[2] = {  1.,  8. };
2226   Float_t wwa[2] = {  2.,  1. };
2227   Float_t dwa    = 1.0;
2228   Int_t nwa = -2;
2229
2230   // --- Air ---
2231   Float_t aAir[4]={12.011,14.00674,15.9994,39.948};
2232   Float_t zAir[4]={6.,7.,8.,18.};
2233   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
2234   Float_t dAir   = 1.20479E-3;
2235
2236   // --- Fibre Glass ---
2237   Float_t afg[4] = {28.0855,15.9994,12.011,1.00794};
2238   Float_t zfg[4] = {14., 8., 6., 1.};
2239   Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
2240   //Float_t dfg    = 1.111;
2241   Float_t dfg    = 2.05; // (x1.845)
2242   Int_t nfg      = 4;
2243
2244   // --- Freon C2F4H2 + SF6 ---
2245   Float_t afre[4] = {12.011,1.00794,18.9984032,32.0065};
2246   Float_t zfre[4] = { 6., 1., 9., 16.};
2247   Float_t wfre[4] = {0.21250,0.01787,0.74827,0.021355};
2248   Float_t densfre = 0.00375;
2249   Int_t nfre     = 4;
2250
2251   // --- Cables and tubes {Al, Cu} ---
2252   Float_t acbt[2] = {26.981539,63.546};
2253   Float_t zcbt[2] = {13., 29.};
2254   Float_t wcbt[2] = {0.407,0.593};
2255   Float_t decbt   = 0.68;
2256
2257   // --- Cable {CH2, Al, Cu} ---
2258   Float_t asc[4] = {12.011, 1.00794, 26.981539,63.546};
2259   Float_t zsc[4] = { 6., 1., 13., 29.};
2260   Float_t wsc[4];
2261   for (Int_t ii=0; ii<4; ii++) wsc[ii]=0.;
2262
2263   Float_t wDummy[4], nDummy[4];
2264   for (Int_t ii=0; ii<4; ii++) wDummy[ii]=0.;
2265   for (Int_t ii=0; ii<4; ii++) nDummy[ii]=0.;
2266   nDummy[0] = 1.;
2267   nDummy[1] = 2.;
2268   MaterialMixer(wDummy,asc,nDummy,2);
2269   wsc[0] = 0.4375*wDummy[0];
2270   wsc[1] = 0.4375*wDummy[1];
2271   wsc[2] = 0.3244;
2272   wsc[3] = 0.2381;
2273   Float_t dsc = 1.223;
2274
2275   // --- Crates boxes {Al, Cu, Fe, Cr, Ni} ---
2276   Float_t acra[5]= {26.981539,63.546,55.845,51.9961,58.6934};
2277   Float_t zcra[5]= {13., 29., 26., 24., 28.};
2278   Float_t wcra[5]= {0.7,0.2,0.07,0.018,0.012};
2279   Float_t dcra   = 0.77;
2280
2281   // --- Polietilene CH2 ---
2282   Float_t aPlastic[2] = {12.011, 1.00794};
2283   Float_t zPlastic[2] = { 6., 1.};
2284   Float_t wPlastic[2] = { 1., 2.};
2285   //Float_t dPlastic = 0.92; // PDB value
2286   Float_t dPlastic = 0.93; // (~+1.1%)
2287   Int_t nwPlastic = -2;
2288
2289   AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
2290   AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
2291   AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
2292   AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
2293   AliMaterial( 4, "Al $", 26.981539, 13., 2.7, -8.9, 999.);
2294   Float_t factor = 0.4/1.5*2./3.;
2295   AliMaterial( 5, "Al honeycomb$", 26.981539, 13., 2.7*factor, -8.9/factor, 999.);
2296   AliMixture ( 6, "Freon$", afre, zfre, densfre, nfre, wfre);
2297   AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
2298   AliMixture ( 8, "Water$",  awa, zwa, dwa, nwa, wwa);
2299   AliMixture ( 9, "cables+tubes$", acbt, zcbt, decbt, 2, wcbt);
2300   AliMaterial(10, "Cu $", 63.546, 29., 8.96, -1.43, 999.);
2301   AliMixture (11, "cable$", asc, zsc, dsc, 4, wsc);
2302   AliMixture (12, "Al+Cu+steel$", acra, zcra, dcra, 5, wcra);
2303   AliMixture (13, "plastic$", aPlastic, zPlastic, dPlastic, nwPlastic, wPlastic);
2304   Float_t factorHoles = 1./36.5;
2305   AliMaterial(14, "Al honey for holes$", 26.981539, 13., 2.7*factorHoles, -8.9/factorHoles, 999.);
2306
2307   Float_t epsil, stmin, deemax, stemax;
2308
2309   //   STD data
2310   //  EPSIL  = 0.1   ! Tracking precision,
2311   //  STEMAX = 0.1   ! Maximum displacement for multiple scattering
2312   //  DEEMAX = 0.1   ! Maximum fractional energy loss, DLS
2313   //  STMIN  = 0.1
2314
2315   // TOF data
2316   epsil  = .001;  // Tracking precision,
2317   stemax = -1.;   // Maximum displacement for multiple scattering
2318   deemax = -.3;   // Maximum fractional energy loss, DLS
2319   stmin  = -.8;
2320
2321   AliMedium( 1,"Air$",          0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2322   AliMedium( 2,"Nomex$",        1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2323   AliMedium( 3,"G10$",          2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2324   AliMedium( 4,"fibre glass$",  3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2325   AliMedium( 5,"Al Frame$",     4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2326   AliMedium( 6,"honeycomb$",    5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2327   AliMedium( 7,"Fre$",          6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2328   AliMedium( 8,"Cu-S$",        10, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2329   AliMedium( 9,"Glass$",        7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2330   AliMedium(10,"Water$",        8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2331   AliMedium(11,"Cable$",       11, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2332   AliMedium(12,"Cables+Tubes$", 9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2333   AliMedium(13,"Copper$",      10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2334   AliMedium(14,"Plastic$",     13, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2335   AliMedium(15,"Crates$",      12, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2336   AliMedium(16,"honey_holes$", 14, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
2337
2338 }
2339 //_____________________________________________________________________________
2340 void AliTOFv6T0::Init()
2341 {
2342   //
2343   // Initialise the detector after the geometry has been defined
2344   //
2345   AliDebug(1, "**************************************"
2346            "  TOF  "
2347            "**************************************");
2348   AliDebug(1, "  Version 4 of TOF initialing, "
2349            "symmetric TOF - Full Coverage version");
2350   
2351   AliTOF::Init();
2352   
2353   fIdFTOA = gMC->VolId("FTOA");
2354   if (fTOFHoles) {
2355     fIdFTOB = gMC->VolId("FTOB");
2356     fIdFTOC = gMC->VolId("FTOC");
2357   }
2358   fIdFLTA = gMC->VolId("FLTA");
2359   if (fTOFHoles) {
2360     fIdFLTB = gMC->VolId("FLTB");
2361     fIdFLTC = gMC->VolId("FLTC");
2362   }
2363
2364   AliDebug(1, "**************************************"
2365            "  TOF  "
2366            "**************************************");
2367 }
2368  
2369 //_____________________________________________________________________________
2370 void AliTOFv6T0::StepManager()
2371 {
2372
2373   //
2374   // Procedure called at each step in the Time Of Flight
2375   //
2376
2377   TLorentzVector mom, pos;
2378   Float_t xm[3],pm[3],xpad[3],ppad[3];
2379   Float_t hits[14];
2380   Int_t   vol[5];
2381   Int_t   sector, plate, padx, padz, strip;
2382   Int_t   copy, padzid, padxid, stripid, i;
2383   Int_t   *idtmed = fIdtmed->GetArray()-499;
2384   Float_t incidenceAngle;
2385
2386   const char* volpath;
2387
2388   Int_t index = 0;
2389
2390   if(
2391      gMC->IsTrackEntering()
2392      && gMC->TrackCharge()
2393      //&& gMC->GetMedium()==idtmed[507]
2394      && gMC->CurrentMedium()==idtmed[507]
2395      && gMC->CurrentVolID(copy)==fIdSens
2396      )
2397   {
2398
2399     AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
2400
2401     AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kTOF);
2402     //AddTrackReference(mcApplication->GetCurrentTrackNumber());
2403
2404     // getting information about hit volumes
2405     
2406     padzid=gMC->CurrentVolOffID(1,copy);
2407     padz=copy;
2408     padz--;
2409
2410     padxid=gMC->CurrentVolOffID(0,copy);
2411     padx=copy; 
2412     padx--;
2413     
2414     stripid=gMC->CurrentVolOffID(4,copy);
2415     strip=copy; 
2416     strip--;
2417
2418     gMC->TrackPosition(pos);
2419     gMC->TrackMomentum(mom);
2420
2421     Double_t normMom=1./mom.Rho();
2422
2423     //  getting the coordinates in pad ref system
2424
2425     xm[0] = (Float_t)pos.X();
2426     xm[1] = (Float_t)pos.Y();
2427     xm[2] = (Float_t)pos.Z();
2428
2429     pm[0] = (Float_t)mom.X()*normMom;
2430     pm[1] = (Float_t)mom.Y()*normMom;
2431     pm[2] = (Float_t)mom.Z()*normMom;
2432  
2433     gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
2434     gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
2435
2436
2437     if (TMath::Abs(ppad[1])>1) {
2438       AliWarning("Abs(ppad) > 1");
2439       ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
2440     }
2441     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
2442
2443     plate = -1;
2444     if      (strip <  fTOFGeometry->NStripC()) {
2445       plate = 0;
2446       //strip = strip;
2447     }
2448     else if (strip >= fTOFGeometry->NStripC() && 
2449              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
2450       plate = 1;
2451       strip = strip - fTOFGeometry->NStripC();
2452     }
2453     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
2454              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
2455       plate = 2;
2456       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
2457     }
2458     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
2459              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
2460       plate = 3;
2461       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
2462     }
2463     else                                {
2464       plate = 4;
2465       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
2466     }
2467
2468     volpath=gMC->CurrentVolOffName(7);
2469     index=atoi(&volpath[4]);
2470     sector=-1;
2471     sector=index;
2472
2473     //Old 6h convention
2474     // if(index<5){
2475     //   sector=index+13;
2476     //  }
2477     // else{
2478     //   sector=index-5;
2479     // } 
2480  
2481     for(i=0;i<3;++i) {
2482       hits[i]   = pos[i];
2483       hits[i+3] = pm[i];
2484     }
2485
2486     hits[6] = mom.Rho();
2487     hits[7] = pos[3];
2488     hits[8] = xpad[0];
2489     hits[9] = xpad[1];
2490     hits[10]= xpad[2];
2491     hits[11]= incidenceAngle;
2492     hits[12]= gMC->Edep();
2493     hits[13]= gMC->TrackLength();
2494     
2495     vol[0]= sector;
2496     vol[1]= plate;
2497     vol[2]= strip;
2498     vol[3]= padx;
2499     vol[4]= padz;    
2500
2501     AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
2502     //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
2503   }
2504 }
2505 //-------------------------------------------------------------------
2506 void AliTOFv6T0::MaterialMixer(Float_t * p, const Float_t * const a,
2507                                const Float_t * const m, Int_t n) const
2508 {
2509   // a[] atomic weights vector      (in)
2510   //     (atoms present in more compound appear separately)
2511   // m[] number of corresponding atoms in the compound  (in)
2512   Float_t t = 0.;
2513   for (Int_t i = 0; i < n; ++i) {
2514     p[i] = a[i]*m[i];
2515     t  += p[i];
2516   }
2517   for (Int_t i = 0; i < n; ++i) {
2518     p[i] = p[i]/t;
2519     //AliDebug(1,Form((\n weight[%i] = %f (,i,p[i]));
2520   }
2521 }