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