]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TOF/AliTOFv5T0.cxx
removal of effective c++ warnings (C.Zampolli)
[u/mrichter/AliRoot.git] / TOF / AliTOFv5T0.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  2006/07/12 16:03:44  arcelli
19 updates to match the new numbering of the TOF/TRD mother volumes in FRAME (ALICE convention)
20
21 Revision 1.10  2006/05/10 18:40:17  hristov
22 Larger strings for the names
23
24 Revision 1.9  2006/05/04 19:41:42  hristov
25 Possibility for partial TOF geometry (S.Arcelli)
26
27 Revision 1.8  2006/04/20 22:30:50  hristov
28 Coding conventions (Annalisa)
29
30 Revision 1.7  2006/04/16 22:29:05  hristov
31 Coding conventions (Annalisa)
32
33 Revision 1.6  2006/03/20 08:20:35  decaro
34 Al layer: positioning correction
35
36 Revision 1.5  2006/03/20 07:54:20  decaro
37 Correction of some layer thickness
38
39 Revision 1.4  2006/03/13 12:35:44  decaro
40 Suppression of fractional Z warning
41
42 Revision 1.3  2006/02/28 10:38:00  decaro
43 AliTOFGeometry::fAngles, AliTOFGeometry::fHeights,
44 AliTOFGeometry::fDistances arrays: dimension definition in the right
45 location
46
47 Revision 1.2  2006/02/27 18:12:14  decaro
48 Remove in StepManager the dependence of hit indexes from parametrized
49 TOF position
50
51 Revision 1.1  2005/12/15 08:55:33  decaro
52 New TOF geometry description (V5) -G. Cara Romeo and A. De Caro
53
54
55 Revision 0.1 2004 November G. Cara Romeo and A. De Caro
56         Implement new TOF geometry version
57         in order to
58            suppress few volume overlaps
59                 (in the 4th TOF geometry version),
60            insert the realistic strip numbers and positions
61
62 */
63
64 ///////////////////////////////////////////////////////////////////////////////
65 //                                                                           //
66 //  This class contains the functions for version 5 of the Time Of Flight    //
67 //  detector.                                                                //
68 //                                                                           //
69 //  VERSION WITH 5 MODULES AND TILTED STRIPS                                 //
70 //                                                                           //
71 //  FULL COVERAGE VERSION + OPTION for PHOS holes                            //
72 //                                                                           //
73 //                                                                           //
74 //Begin_Html                                                                 //
75 /*                                                                           //
76 <img src="picts/AliTOFv5T0Class.gif">                                        //
77 */                                                                           //
78 //End_Html                                                                   //
79 //                                                                           //
80 ///////////////////////////////////////////////////////////////////////////////
81
82 #include "TBRIK.h"
83 #include "TGeometry.h"
84 #include "TLorentzVector.h"
85 #include "TNode.h"
86 #include "TVirtualMC.h"
87
88 #include "AliConst.h"
89 #include "AliLog.h"
90 #include "AliMagF.h"
91 #include "AliMC.h"
92 #include "AliRun.h"
93
94 #include "AliTOFGeometry.h"
95 #include "AliTOFGeometryV5.h"
96 #include "AliTOFv5T0.h"
97
98 extern TDirectory *gDirectory;
99 extern TVirtualMC *gMC;
100
101 extern AliRun *gAlice;
102
103 ClassImp(AliTOFv5T0)
104
105 //_____________________________________________________________________________
106   AliTOFv5T0::AliTOFv5T0():
107   fIdFTOA(-1),
108   fIdFTOB(-1),
109   fIdFTOC(-1),
110   fIdFLTA(-1),
111   fIdFLTB(-1),
112   fIdFLTC(-1),
113   fTOFHoles(kFALSE)
114 {
115   //
116   // Default constructor
117   //
118 }
119  
120 //_____________________________________________________________________________
121 AliTOFv5T0::AliTOFv5T0(const char *name, const char *title):
122   AliTOF(name,title,"tzero"),
123   fIdFTOA(-1),
124   fIdFTOB(-1),
125   fIdFTOC(-1),
126   fIdFLTA(-1),
127   fIdFLTB(-1),
128   fIdFLTC(-1),
129   fTOFHoles(kFALSE)
130 {
131   //
132   // Standard constructor
133   //
134   //
135   // Check that FRAME is there otherwise we have no place where to
136   // put TOF
137
138
139   AliModule* frame = (AliModule*)gAlice->GetModule("FRAME");
140   if(!frame) {
141     AliFatal("TOF needs FRAME to be present");
142   } else{
143     
144     if (fTOFGeometry) delete fTOFGeometry;
145     fTOFGeometry = new AliTOFGeometryV5();
146
147     if(frame->IsVersion()==1) {
148       AliInfo(Form("Frame version %d", frame->IsVersion())); 
149       AliInfo("Full Coverage for TOF");
150       fTOFHoles=false;}    
151     else {
152       AliInfo(Form("Frame version %d", frame->IsVersion())); 
153       AliInfo("TOF with Holes for PHOS");
154       fTOFHoles=true;}      
155   }
156   fTOFGeometry->SetHoles(fTOFHoles);
157
158   //AliTOF::fTOFGeometry = fTOFGeometry;
159
160   // Save the geometry
161   TDirectory* saveDir = gDirectory;
162   gAlice->GetRunLoader()->CdGAFile();
163   fTOFGeometry->Write("TOFgeometry");
164   saveDir->cd();
165
166
167
168 //____________________________________________________________________________
169 void AliTOFv5T0::BuildGeometry()
170 {
171   //
172   // Build TOF ROOT geometry for the ALICE event display
173   //
174   TNode *node, *top;
175   const int kColorTOF  = 27;
176   
177   TGeometry *globalGeometry = (TGeometry*)gAlice->GetGeometry();
178
179   // Find top TNODE
180   top = globalGeometry->GetNode("alice");
181   
182   // Position the different copies
183   const Float_t krTof  =(fTOFGeometry->Rmax()+fTOFGeometry->Rmin())/2.;
184   const Float_t khTof  = fTOFGeometry->Rmax()-fTOFGeometry->Rmin();
185   const Int_t   kNTof  = fTOFGeometry->NSectors();
186   const Float_t kangle = k2PI/kNTof;
187
188   const Float_t kInterCentrModBorder1 = 49.5;
189   const Float_t kInterCentrModBorder2 = 57.5;
190
191   Float_t ang;
192   
193   // define offset for nodes
194   Float_t zOffsetB = (fTOFGeometry->ZlenA()*0.5 + (kInterCentrModBorder1+kInterCentrModBorder2)*0.5)*0.5;
195   Float_t zOffsetA = 0.;
196   // Define TOF basic volume
197   
198   char nodeName0[16], nodeName1[16], nodeName2[16];
199   char nodeName3[16], nodeName4[16], rotMatNum[16];
200
201   if (fTOFHoles) {
202     new TBRIK("S_TOF_B","TOF box","void",
203               fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
204     new TBRIK("S_TOF_C","TOF box","void",
205               fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenB()*0.5);
206   }
207   new TBRIK("S_TOF_A","TOF box","void",
208             fTOFGeometry->StripLength()*0.5, khTof*0.5, fTOFGeometry->ZlenA()*0.5);
209   
210   for (Int_t nodeNum=1;nodeNum<19;nodeNum++){
211     
212     if (nodeNum<10) {
213       sprintf(rotMatNum,"rot50%i",nodeNum);
214       sprintf(nodeName0,"FTO00%i",nodeNum);
215       sprintf(nodeName1,"FTO10%i",nodeNum);
216       sprintf(nodeName2,"FTO20%i",nodeNum);
217       sprintf(nodeName3,"FTO30%i",nodeNum);
218       sprintf(nodeName4,"FTO40%i",nodeNum);
219     }
220     if (nodeNum>9) {
221       sprintf(rotMatNum,"rot5%i",nodeNum);
222       sprintf(nodeName0,"FTO0%i",nodeNum);
223       sprintf(nodeName1,"FTO1%i",nodeNum);
224       sprintf(nodeName2,"FTO2%i",nodeNum);
225       sprintf(nodeName3,"FTO3%i",nodeNum);
226       sprintf(nodeName4,"FTO4%i",nodeNum);
227     }
228     
229     new TRotMatrix(rotMatNum,rotMatNum,90,-20*nodeNum,90,90-20*nodeNum,0,0);
230     ang = (4.5-nodeNum) * kangle;
231
232     if (fTOFHoles) {   
233       top->cd();
234       node = new TNode(nodeName2,nodeName2,"S_TOF_B", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetB,rotMatNum);
235       node->SetLineColor(kColorTOF);
236       fNodes->Add(node);
237       
238       top->cd();
239       node = new TNode(nodeName3,nodeName3,"S_TOF_C", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang),-zOffsetB,rotMatNum);
240       node->SetLineColor(kColorTOF);
241       fNodes->Add(node);
242     }
243
244     top->cd();
245     node = new TNode(nodeName4,nodeName4,"S_TOF_A", krTof*TMath::Cos(ang), krTof*TMath::Sin(ang), zOffsetA,rotMatNum);
246     node->SetLineColor(kColorTOF);
247     fNodes->Add(node);
248   } // end loop on nodeNum
249
250 }
251
252 //_____________________________________________________________________________
253 void AliTOFv5T0::CreateGeometry()
254 {
255   //
256   // Create geometry for Time Of Flight version 0
257   //
258   //Begin_Html
259   /*
260     <img src="picts/AliTOFv5T0.gif">
261   */
262   //End_Html
263   //
264   // Creates common geometry
265   //
266   AliTOF::CreateGeometry();
267 }
268  
269
270 //_____________________________________________________________________________
271 void AliTOFv5T0::TOFpc(Float_t xtof,  Float_t ytof, Float_t zlenA,
272                        Float_t zlenB)
273 {
274   //
275   // Definition of the Time Of Fligh Resistive Plate Chambers
276   //
277
278   const Float_t kPi = TMath::Pi();
279
280   const Float_t kInterCentrModBorder1 = 49.5;
281   const Float_t kInterCentrModBorder2 = 57.5;
282   const Float_t kExterInterModBorder1 = 196.0;
283   const Float_t kExterInterModBorder2 = 203.5;
284
285   const Float_t kLengthExInModBorder  = 4.7;
286   const Float_t kLengthInCeModBorder  = 7.0;
287
288   // Al layers over all internal module walls (cm)
289   const Float_t khAlWall = 0.03;
290
291   // module wall thickness (cm)
292   const Float_t kModuleWallThickness = 0.3;
293
294   // Al honeycomb layer between strips and cards (cm)
295   const Float_t kHoneycombLayerThickness = 1.5;
296
297   AliDebug(2,Form("zlenA*0.5 = %d", zlenA*0.5));
298   AliDebug(1, "************************* TOF geometry **************************");
299   
300   // Definition of the Time Of Fligh Resistive Plate Chambers
301   // xFLT, yFLT, zFLT - sizes of TOF modules (large)
302   
303   Float_t  xcoor, ycoor, zcoor;
304   Float_t  par[3];
305   Int_t    *idtmed = fIdtmed->GetArray()-499;
306   Int_t    idrotm[100];
307
308   par[0] =  xtof * 0.5;
309   par[1] =  ytof * 0.5;
310   par[2] = zlenA * 0.5;
311   gMC->Gsvolu("FTOA", "BOX ", idtmed[503], par, 3);  // fibre glass
312   
313   if (fTOFHoles) {
314     par[0] =  xtof * 0.5;
315     par[1] =  ytof * 0.5;
316     par[2] = (zlenA*0.5 - kInterCentrModBorder1)*0.5;
317     gMC->Gsvolu("FTOB", "BOX ", idtmed[503], par, 3);  // fibre glass
318     gMC->Gsvolu("FTOC", "BOX ", idtmed[503], par, 3);  // fibre glass
319   }
320
321   // Positioning of fibre glass modules (FTOA, FTOB and FTOC)
322   
323   //AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,-90.);
324   AliMatrix(idrotm[0], 90.,  0., 0., 0., 90.,270.);
325
326   xcoor = 0.;
327   ycoor = 0.;
328   zcoor = 0.;
329   for(Int_t isec=0;isec<18;isec++){
330     if(fTOFSectors[isec]==-1)continue;
331     char name[16];
332     sprintf(name, "BTOF%d",isec);
333     if (fTOFHoles && (isec==11||isec==12)) {
334     //    if (fTOFHoles && (isec==16||isec==17)) { \\Old 6h convention
335       xcoor = 0.;
336       ycoor = (zlenA*0.5 + kInterCentrModBorder1)*0.5;
337       zcoor = 0.;
338       gMC->Gspos("FTOB", 0, name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
339       gMC->Gspos("FTOC", 0, name, xcoor,-ycoor, zcoor, idrotm[0], "ONLY");
340     }
341     else gMC->Gspos("FTOA", 0,name, xcoor, ycoor, zcoor, idrotm[0], "ONLY");
342   }
343   // Large not sensitive volumes with Insensitive Freon (FLTA, FLTB and FLTC)
344   
345   Float_t xFLT, yFLT, zFLTA;
346   
347   xFLT  = xtof  - kModuleWallThickness*2.;
348   yFLT  = ytof  - kModuleWallThickness*2.;
349   zFLTA = zlenA - kModuleWallThickness*2.;
350   
351   par[0] = xFLT*0.5;
352   par[1] = yFLT*0.5;
353   par[2] = zFLTA*0.5;
354   gMC->Gsvolu("FLTA", "BOX ", idtmed[507], par, 3); //  Freon mix
355
356   xcoor = 0.;
357   ycoor = 0.;
358   zcoor = 0.;
359   gMC->Gspos ("FLTA", 0, "FTOA", xcoor, ycoor, zcoor, 0, "ONLY");
360
361   if (fTOFHoles) {
362     par[0] = xFLT*0.5;
363     par[1] = yFLT*0.5;
364     par[2] = (zlenA*0.5 - kInterCentrModBorder1-kModuleWallThickness)*0.5;
365     gMC->Gsvolu("FLTB", "BOX ", idtmed[507], par, 3); // Freon mix
366     gMC->Gsvolu("FLTC", "BOX ", idtmed[507], par, 3); // Freon mix
367
368     xcoor = 0.;
369     ycoor = 0.;
370     zcoor = kModuleWallThickness*0.5;
371     gMC->Gspos ("FLTB", 0, "FTOB", xcoor, ycoor, zcoor, 0, "ONLY");
372     gMC->Gspos ("FLTC", 0, "FTOC", xcoor, ycoor,-zcoor, 0, "ONLY");
373   }
374
375   // Layer of Aluminum before detector (FALA, FALB and FALC)
376
377   par[0] = xFLT*0.5;
378   par[1] = khAlWall*0.5;
379   par[2] = kInterCentrModBorder1 - (kModuleWallThickness + khAlWall);
380   gMC->Gsvolu("FALA", "BOX ", idtmed[505], par, 3); // Alluminium
381
382   xcoor = 0.;
383   ycoor = (-yFLT + khAlWall)*0.5;
384   zcoor = 0.;
385   gMC->Gspos ("FALA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
386
387   par[0] = xFLT*0.5;
388   par[1] = khAlWall*0.5;
389   par[2] = (kExterInterModBorder2 - kInterCentrModBorder1 - 2.*(kModuleWallThickness + khAlWall))*0.5;
390   gMC->Gsvolu("FALB", "BOX ", idtmed[505], par, 3); // Alluminium
391
392   xcoor = 0.;
393   ycoor = (-yFLT + khAlWall)*0.5;
394   zcoor = (kExterInterModBorder2 + kInterCentrModBorder1)*0.5;
395   gMC->Gspos ("FALB", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
396   gMC->Gspos ("FALB", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
397
398   par[0] = xFLT*0.5;
399   par[1] = khAlWall*0.5;
400   par[2] = (zlenA*0.5 - kExterInterModBorder2 - 2.*(kModuleWallThickness + khAlWall))*0.5;
401   gMC->Gsvolu("FALC", "BOX ", idtmed[505], par, 3); // Alluminium
402
403   xcoor = 0.;
404   ycoor = (-yFLT + khAlWall)*0.5;
405   zcoor = (kExterInterModBorder2+zlenA*0.5)*0.5;
406   gMC->Gspos ("FALC", 1, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
407   gMC->Gspos ("FALC", 2, "FLTA", xcoor, ycoor,-zcoor, 0, "ONLY");
408
409   if (fTOFHoles) {
410     xcoor = 0.;
411     ycoor = (-yFLT + khAlWall)*0.5;
412     zcoor = (zlenA*0.5 - kExterInterModBorder2)*0.5 - kModuleWallThickness*0.5;
413     gMC->Gspos ("FALB", 1, "FLTB", xcoor, ycoor, zcoor, 0, "ONLY");
414     gMC->Gspos ("FALB", 2, "FLTC", xcoor, ycoor,-zcoor, 0, "ONLY");
415
416     xcoor = 0.;
417     ycoor = (-yFLT + khAlWall)*0.5;
418     zcoor = (kExterInterModBorder2 - kInterCentrModBorder1)*0.5 + kModuleWallThickness*0.5;
419     gMC->Gspos ("FALC", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
420     gMC->Gspos ("FALC", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
421   }
422
423   Float_t y0, alpha, tgal, beta, tgbe, trpa[11];
424
425   // Fibre glass walls between central and intermediate modules (FWZ1 and FWZ2; holes -> FZ1B, FZ1C, FZ2B)
426
427   tgal = (yFLT*0.5 - 2.*kLengthInCeModBorder)/(kInterCentrModBorder2 - kInterCentrModBorder1);
428   alpha = TMath::ATan(tgal);
429   beta = (kPi*0.5 - alpha)*0.5;
430   tgbe = TMath::Tan(beta);
431   trpa[0]  = xFLT*0.5;
432   trpa[1]  = 0.;
433   trpa[2]  = 0.;
434   trpa[3]  = kModuleWallThickness;
435   trpa[4]  = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
436   trpa[5]  = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
437   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
438   trpa[7]  = kModuleWallThickness;
439   trpa[8]  = (kLengthInCeModBorder - kModuleWallThickness*tgbe)*0.5;
440   trpa[9]  = (kLengthInCeModBorder + kModuleWallThickness*tgbe)*0.5;
441   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
442   gMC->Gsvolu("FWZ1","TRAP", idtmed[503], trpa, 11);   // fibre glass
443
444   AliMatrix (idrotm[1],90., 90.,180.,0.,90.,180.);
445   AliMatrix (idrotm[4],90., 90.,  0.,0.,90.,  0.);
446
447   xcoor = 0.;
448   ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5;
449   zcoor = kInterCentrModBorder1;
450   gMC->Gspos("FWZ1", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
451   gMC->Gspos("FWZ1", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
452
453   if (fTOFHoles) {
454     y0 = kLengthInCeModBorder - kModuleWallThickness*0.5*tgbe;
455     trpa[0]  = xFLT*0.5;
456     trpa[1]  = 0.;
457     trpa[2]  = 0.;
458     trpa[3]  = kModuleWallThickness*0.5;
459     trpa[4]  = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
460     trpa[5]  = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
461     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
462     trpa[7]  = kModuleWallThickness*0.5;
463     trpa[8]  = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
464     trpa[9]  = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
465     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
466     gMC->Gsvolu("FZ1B","TRAP", idtmed[503], trpa, 11);   // fibre glass
467
468     xcoor = 0.;
469     ycoor = -yFLT*0.5 + kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
470     zcoor = -kInterCentrModBorder1 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
471     gMC->Gspos("FZ1B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
472     gMC->Gspos("FZ1B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
473   }
474
475   AliMatrix (idrotm[2],90.,270.,  0.,0.,90.,180.);
476   AliMatrix (idrotm[5],90.,270.,180.,0.,90.,  0.);
477
478   xcoor = 0.;
479   ycoor = -kLengthInCeModBorder*0.5;
480   zcoor = kInterCentrModBorder2;
481   gMC->Gspos("FWZ1", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
482   gMC->Gspos("FWZ1", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
483
484   if (fTOFHoles) {
485     y0 = kLengthInCeModBorder + kModuleWallThickness*0.5*tgbe;
486     trpa[0]  = xFLT*0.5;
487     trpa[1]  = 0.;
488     trpa[2]  = 0.;
489     trpa[3]  = kModuleWallThickness*0.5;
490     trpa[4]  = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
491     trpa[5]  = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
492     trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
493     trpa[7]  = kModuleWallThickness*0.5;
494     trpa[8]  = (y0 - kModuleWallThickness*0.5*tgbe)*0.5;
495     trpa[9]  = (y0 + kModuleWallThickness*0.5*tgbe)*0.5;
496     trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
497     gMC->Gsvolu("FZ1C","TRAP", idtmed[503], trpa, 11);   // fibre glass
498
499     xcoor = 0.;
500     ycoor = -kLengthInCeModBorder*0.5 - kModuleWallThickness*0.25*tgbe;
501     zcoor = -kInterCentrModBorder2 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
502     gMC->Gspos("FZ1C", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
503     gMC->Gspos("FZ1C", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
504   }
505
506   trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
507   trpa[1] = kModuleWallThickness;
508   trpa[2] = xFLT*0.5;
509   trpa[3] = -beta*kRaddeg;
510   trpa[4] = 0.;
511   trpa[5] = 0.;
512   gMC->Gsvolu("FWZ2","PARA", idtmed[503], trpa, 6);    // fibre glass
513
514   AliMatrix (idrotm[3],     alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
515   AliMatrix (idrotm[6],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,  0.);
516
517   xcoor = 0.;
518   ycoor = -yFLT*0.25;
519   zcoor = (kInterCentrModBorder2 + kInterCentrModBorder1)*0.5;
520   gMC->Gspos("FWZ2", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[3],"ONLY");
521   gMC->Gspos("FWZ2", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[6],"ONLY");
522
523   if (fTOFHoles) {
524     trpa[0] = 0.5*(kInterCentrModBorder2 - kInterCentrModBorder1)/TMath::Cos(alpha);
525     trpa[1] = kModuleWallThickness*0.5;
526     trpa[2] = xFLT*0.5;
527     trpa[3] = -beta*kRaddeg;
528     trpa[4] = 0.;
529     trpa[5] = 0.;
530     gMC->Gsvolu("FZ2B","PARA", idtmed[503], trpa, 6);    // fibre glass
531
532     xcoor = 0.;
533     ycoor = -yFLT*0.25 - kModuleWallThickness*0.5*tgbe;
534     zcoor = -(kInterCentrModBorder2 + kInterCentrModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1)*0.5 - kModuleWallThickness;
535     gMC->Gspos("FZ2B", 1,"FLTB", xcoor, ycoor, zcoor,idrotm[6],"ONLY");
536     gMC->Gspos("FZ2B", 2,"FLTC", xcoor, ycoor,-zcoor,idrotm[3],"ONLY");
537   }
538
539   // Fibre glass walls between intermediate and lateral modules (FWZ3 and FWZ4)
540
541   tgal = (yFLT*0.5 - 2.*kLengthExInModBorder)/(kExterInterModBorder2 - kExterInterModBorder1);
542   alpha = TMath::ATan(tgal);
543   beta = (kPi*0.5 - alpha)*0.5;
544   tgbe = TMath::Tan(beta);
545   trpa[0]  = xFLT*0.5;
546   trpa[1]  = 0.;
547   trpa[2]  = 0.;
548   trpa[3]  = kModuleWallThickness;
549   trpa[4]  = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
550   trpa[5]  = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
551   trpa[6]  = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
552   trpa[7]  = kModuleWallThickness;
553   trpa[8]  = (kLengthExInModBorder - kModuleWallThickness*tgbe)*0.5;
554   trpa[9]  = (kLengthExInModBorder + kModuleWallThickness*tgbe)*0.5;
555   trpa[10] = TMath::ATan(tgbe*0.5)*kRaddeg; //TMath::ATan((trpa[5] - trpa[4])/(2.*trpa[3]))*kRaddeg;
556   gMC->Gsvolu("FWZ3","TRAP", idtmed[503], trpa, 11);    // fibre glass
557
558   xcoor = 0.;
559   ycoor = -kLengthExInModBorder*0.5;
560   zcoor = kExterInterModBorder1;
561   gMC->Gspos("FWZ3", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[5],"ONLY");
562   gMC->Gspos("FWZ3", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[2],"ONLY");
563
564   if (fTOFHoles) {
565     xcoor = 0.;
566     ycoor = -kLengthExInModBorder*0.5;
567     zcoor = -kExterInterModBorder1 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
568     gMC->Gspos("FWZ3", 5,"FLTB", xcoor, ycoor, zcoor,idrotm[2],"ONLY");
569     gMC->Gspos("FWZ3", 6,"FLTC", xcoor, ycoor,-zcoor,idrotm[5],"ONLY");
570   }
571
572   xcoor = 0.;
573   ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
574   zcoor = kExterInterModBorder2;
575   gMC->Gspos("FWZ3", 3,"FLTA", xcoor, ycoor, zcoor,idrotm[4],"ONLY");
576   gMC->Gspos("FWZ3", 4,"FLTA", xcoor, ycoor,-zcoor,idrotm[1],"ONLY");
577
578   if (fTOFHoles) {
579     xcoor = 0.;
580     ycoor = -yFLT*0.5 + kLengthExInModBorder*0.5;
581     zcoor = -kExterInterModBorder2 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
582     gMC->Gspos("FWZ3", 7,"FLTB", xcoor, ycoor, zcoor,idrotm[1],"ONLY");
583     gMC->Gspos("FWZ3", 8,"FLTC", xcoor, ycoor,-zcoor,idrotm[4],"ONLY");
584   }
585
586   trpa[0] = 0.5*(kExterInterModBorder2 - kExterInterModBorder1)/TMath::Cos(alpha);
587   trpa[1] = kModuleWallThickness;
588   trpa[2] = xFLT*0.5;
589   trpa[3] = -beta*kRaddeg;
590   trpa[4] = 0.;
591   trpa[5] = 0.;
592   gMC->Gsvolu("FWZ4","PARA", idtmed[503], trpa, 6);    // fibre glass
593
594   AliMatrix (idrotm[13],alpha*kRaddeg,90.,90.+alpha*kRaddeg,90.,90.,180.);
595   AliMatrix (idrotm[16],180.-alpha*kRaddeg,90.,90.-alpha*kRaddeg,90.,90.,0.);
596
597   xcoor = 0.;
598   ycoor = -yFLT*0.25;
599   zcoor = (kExterInterModBorder2 + kExterInterModBorder1)*0.5;
600   gMC->Gspos("FWZ4", 1,"FLTA", xcoor, ycoor, zcoor,idrotm[16],"ONLY");
601   gMC->Gspos("FWZ4", 2,"FLTA", xcoor, ycoor,-zcoor,idrotm[13],"ONLY");
602
603   if (fTOFHoles) {
604     xcoor = 0.;
605     ycoor = -yFLT*0.25;
606     zcoor = -(kExterInterModBorder2 + kExterInterModBorder1)*0.5 + (zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5;
607     gMC->Gspos("FWZ4", 3,"FLTB", xcoor, ycoor, zcoor,idrotm[13],"ONLY");
608     gMC->Gspos("FWZ4", 4,"FLTC", xcoor, ycoor,-zcoor,idrotm[16],"ONLY");
609   }
610
611
612   ///////////////// Detector itself //////////////////////
613
614   const Int_t    knx   = fTOFGeometry->NpadX();  // number of pads along x
615   const Int_t    knz   = fTOFGeometry->NpadZ();  // number of pads along z
616   const Float_t  kPadX = fTOFGeometry->XPad();   // pad length along x
617   const Float_t  kPadZ = fTOFGeometry->ZPad();   // pad length along z
618
619   // new description for strip volume -double stack strip-
620   // -- all constants are expressed in cm
621   // heigth of different layers
622   const Float_t khhony   = 1.0    ;   // heigth of HONY  Layer
623   const Float_t khpcby   = 0.08   ;   // heigth of PCB   Layer
624   const Float_t khrgly   = 0.055  ;   // heigth of RED GLASS  Layer
625
626   const Float_t khfiliy  = 0.125  ;   // heigth of FISHLINE  Layer
627   const Float_t khglassy = 0.160*0.5; // heigth of GLASS  Layer
628   const Float_t khglfy   = khfiliy+2.*khglassy;// heigth of GLASS+FISHLINE  Layer
629
630   const Float_t khcpcby  = 0.16   ;   // heigth of PCB  Central Layer
631   const Float_t kwhonz   = 8.1    ;   // z dimension of HONEY  Layer
632   const Float_t kwpcbz1  = 10.6   ;   // z dimension of PCB  Lower Layer
633   const Float_t kwpcbz2  = 11.6   ;   // z dimension of PCB  Upper Layer
634   const Float_t kwcpcbz  = 12.4   ;   // z dimension of PCB  Central Layer
635   const Float_t kwrglz   = 8.     ;   // z dimension of RED GLASS  Layer
636   const Float_t kwglfz   = 7.     ;   // z dimension of GLASS+FISHLN Layer
637   const Float_t klsensmx = knx*kPadX; // length of Sensitive Layer
638   const Float_t khsensmy = 0.05;//0.11;//0.16;// heigth of Sensitive Layer
639   const Float_t kwsensmz = knz*kPadZ; // width of Sensitive Layer
640   
641   // heigth of the FSTR Volume (the strip volume)
642   const Float_t khstripy = 2.*khhony+2.*khpcby+4.*khrgly+2.*khglfy+khcpcby;
643
644   // width  of the FSTR Volume (the strip volume)
645   const Float_t kwstripz = kwcpcbz;
646   // length of the FSTR Volume (the strip volume)
647   const Float_t klstripx = fTOFGeometry->StripLength();
648   
649   Float_t parfp[3]={klstripx*0.5,khstripy*0.5,kwstripz*0.5};
650   // Coordinates of the strip center in the strip reference frame;
651   // used for positioning internal strip volumes
652   Float_t posfp[3]={0.,0.,0.};  
653
654   // FSTR volume definition-filling this volume with non sensitive Gas Mixture
655   gMC->Gsvolu("FSTR","BOX",idtmed[507],parfp,3);     // Freon mix
656
657   //-- HONY Layer definition
658   parfp[1] = khhony*0.5;
659   parfp[2] = kwhonz*0.5;
660   gMC->Gsvolu("FHON","BOX",idtmed[501],parfp,3);     // honeycomb (Nomex)
661   // positioning 2 HONY Layers on FSTR volume
662   posfp[1] =-khstripy*0.5+parfp[1];
663   gMC->Gspos("FHON",1,"FSTR",0., posfp[1],0.,0,"ONLY");
664   gMC->Gspos("FHON",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
665   
666   //-- PCB Layer definition
667   parfp[1] = khpcby*0.5;
668   parfp[2] = kwpcbz1*0.5;
669   gMC->Gsvolu("FPC1","BOX",idtmed[502],parfp,3);     // G10
670   parfp[2] = kwpcbz2*0.5;
671   gMC->Gsvolu("FPC2","BOX",idtmed[502],parfp,3);     // G10
672   // positioning 2 PCB Layers on FSTR volume
673   posfp[1] =-khstripy*0.5+khhony+parfp[1];
674   gMC->Gspos("FPC1",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
675   gMC->Gspos("FPC2",1,"FSTR",0., posfp[1],0.,0,"ONLY");
676
677   //-- central PCB layer definition
678   parfp[1] = khcpcby*0.5;
679   parfp[2] = kwcpcbz*0.5;
680   gMC->Gsvolu("FPCB","BOX",idtmed[502],parfp,3);     // G10
681   // positioning the central PCB layer
682   gMC->Gspos("FPCB",1,"FSTR",0.,0.,0.,0,"ONLY");
683   
684   //      Sensitive volume
685   Float_t parfs[3] = {klsensmx*0.5, khsensmy*0.5, kwsensmz*0.5};
686   gMC->Gsvolu("FSEN","BOX",idtmed[508],parfs,3);     // sensitive ...
687   // dividing FSEN along z in knz=2 and along x in knx=48
688   gMC->Gsdvn("FSEZ","FSEN",knz,3);
689   gMC->Gsdvn("FPAD","FSEZ",knx,1);
690   // positioning a Sensitive layer inside FPCB
691   gMC->Gspos("FSEN",1,"FPCB",0.,0.,0.,0,"ONLY");
692
693   //-- RED GLASS Layer definition
694   parfp[1] = khrgly*0.5;
695   parfp[2] = kwrglz*0.5;
696   gMC->Gsvolu("FRGL","BOX",idtmed[509],parfp,3);     // glass
697   // positioning 4 RED GLASS Layers on FSTR volume
698   posfp[1] = -khstripy*0.5+khhony+khpcby+parfp[1];
699   gMC->Gspos("FRGL",1,"FSTR",0., posfp[1],0.,0,"ONLY");
700   gMC->Gspos("FRGL",4,"FSTR",0.,-posfp[1],0.,0,"ONLY");
701   posfp[1] = (khcpcby+khrgly)*0.5;
702   gMC->Gspos("FRGL",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
703   gMC->Gspos("FRGL",3,"FSTR",0., posfp[1],0.,0,"ONLY");
704
705   //-- GLASS Layer definition
706   parfp[1] = khglassy*0.5;
707   parfp[2] = kwglfz*0.5;
708   gMC->Gsvolu("FGLA","BOX",idtmed[509],parfp,3);     // glass
709
710   // positioning 4 GLASS Layers on FSTR volume
711   posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+parfp[1];
712   gMC->Gspos("FGLA",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
713   gMC->Gspos("FGLA",4,"FSTR",0., posfp[1],0.,0,"ONLY");
714   posfp[1] = khcpcby*0.5+khrgly+khglassy*0.5;
715   gMC->Gspos("FGLA",2,"FSTR",0.,-posfp[1],0.,0,"ONLY");
716   gMC->Gspos("FGLA",3,"FSTR",0., posfp[1],0.,0,"ONLY");
717
718   //-- FREON Layer definition
719   parfp[1] = khfiliy*0.5;
720   gMC->Gsvolu("FFIS","BOX",idtmed[507],parfp,3);     // freon
721
722   // positioning 2 FREON Layers on FSTR volume
723   posfp[1] = -khstripy*0.5+khhony+khpcby+khrgly+khglassy+parfp[1];
724   gMC->Gspos("FFIS",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
725   gMC->Gspos("FFIS",2,"FSTR",0., posfp[1],0.,0,"ONLY");
726
727   /*
728   //-- GLASS+FISHLINE Layer definition
729   parfp[1] = khglfy*0.5;
730   parfp[2] = kwglfz*0.5;
731   gMC->Gsvolu("FGLF","BOX",idtmed[504],parfp,3);
732
733   // positioning 2 GLASS+FISHLINE Layers on FSTR volume
734   posfp[1] = (khcpcby+khglfy)*0.5+khrgly;
735   gMC->Gspos("FGLF",1,"FSTR",0.,-posfp[1],0.,0,"ONLY");
736   gMC->Gspos("FGLF",2,"FSTR",0., posfp[1],0.,0,"ONLY");
737   */
738
739   //  Positioning the Strips  (FSTR) in the FLT volumes
740   Int_t maxStripNumbers [5] ={fTOFGeometry->NStripC(),
741                               fTOFGeometry->NStripB(),
742                               fTOFGeometry->NStripA(),
743                               fTOFGeometry->NStripB(),
744                               fTOFGeometry->NStripC()};
745
746   Int_t totalStrip = 0;
747   Float_t xpos, zpos, ypos, ang;
748   for(Int_t iplate =0; iplate < fTOFGeometry->NPlates(); iplate++){
749     if (iplate>0) totalStrip += maxStripNumbers[iplate-1];
750     for(Int_t istrip =0; istrip < maxStripNumbers[iplate]; istrip++){
751
752       ang = fTOFGeometry->GetAngles(iplate,istrip);
753       AliDebug(1, Form(" iplate = %1i, istrip = %2i ---> ang = %f", iplate, istrip, ang));
754  
755       if (ang>0.)       AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90., ang, 90.);
756       else if (ang==0.) AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.,90., 0., 0.);
757       else if (ang<0.)  AliMatrix (idrotm[istrip+totalStrip+1],90.,0.,90.+ang,90.,-ang,270.);
758
759       xpos = 0.;
760       zpos = fTOFGeometry->GetDistances(iplate,istrip);
761       ypos = fTOFGeometry->GetHeights(iplate,istrip);
762
763       gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTA", xpos, ypos,-zpos,idrotm[istrip+totalStrip+1],  "ONLY");
764
765       if (fTOFHoles) {
766         if (istrip+totalStrip+1>53) gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTC", xpos, ypos,-zpos-(zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5,idrotm[istrip+totalStrip+1],"ONLY");
767         if (istrip+totalStrip+1<39) gMC->Gspos("FSTR",istrip+totalStrip+1,"FLTB", xpos, ypos,-zpos+(zlenA*0.5 + kInterCentrModBorder1 - kModuleWallThickness)*0.5,idrotm[istrip+totalStrip+1],"ONLY");
768       }
769     }
770   }
771
772   //  1.5 cm Al honeycomb layer between strips and cards
773   par[0] = xFLT*0.5;
774   par[1] = kHoneycombLayerThickness*0.5;
775   par[2] = zFLTA*0.5;
776   gMC->Gsvolu("FPEA", "BOX ", idtmed[506], par, 3);   // Al honeycomb
777
778   xcoor = 0.;
779   ycoor = kHoneycombLayerThickness*0.5;
780   zcoor = 0.;
781   gMC->Gspos ("FPEA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
782
783   if (fTOFHoles) {
784     par[0] = xFLT*0.5;
785     par[1] = kHoneycombLayerThickness*0.5;
786     par[2] = (zlenA*0.5 - kInterCentrModBorder2-kModuleWallThickness)*0.5;
787     gMC->Gsvolu("FPEB", "BOX ", idtmed[506], par, 3);   // Al honeycomb
788
789     xcoor = 0.;
790     ycoor = kHoneycombLayerThickness*0.5;
791     zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
792     gMC->Gspos ("FPEB", 1, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
793     gMC->Gspos ("FPEB", 2, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
794   }
795
796   // frame of Air
797   par[0] = xFLT*0.5;
798   par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
799   par[2] = zFLTA *0.5;
800   gMC->Gsvolu("FAIA", "BOX ", idtmed[500], par, 3); // Air
801
802   xcoor = 0.;
803   ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
804   zcoor = 0.;
805   gMC->Gspos ("FAIA", 0, "FLTA", xcoor, ycoor, zcoor, 0, "ONLY");
806
807   if (fTOFHoles) {
808     par[0] = xFLT*0.5;
809     par[1] = (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
810     par[2] = (zlenA*0.5 - kInterCentrModBorder2 - kModuleWallThickness)*0.5;
811     gMC->Gsvolu("FAIB", "BOX ", idtmed[500], par, 3); // Air
812     gMC->Gsvolu("FAIC", "BOX ", idtmed[500], par, 3); // Air
813
814     xcoor = 0.;
815     ycoor = kHoneycombLayerThickness + (yFLT*0.5 - kHoneycombLayerThickness)*0.5;
816     zcoor = (kInterCentrModBorder2-kInterCentrModBorder1)*0.5;
817     gMC->Gspos ("FAIB", 0, "FLTB", xcoor, ycoor,-zcoor, 0, "ONLY");
818     gMC->Gspos ("FAIC", 0, "FLTC", xcoor, ycoor, zcoor, 0, "ONLY");
819   }
820
821   // start with cards and cooling tubes
822   // finally, cards, cooling tubes and layer for thermal dispersion
823   // 3 volumes
824   
825   // see GEOM200 in GEANT manual
826
827   Float_t cardpar[3];
828
829   // card volume definition
830   cardpar[0]= xFLT*0.5;
831   cardpar[1]= 5.;
832   cardpar[2]= 0.1;
833   gMC->Gsvolu("FCAR", "BOX ", idtmed[502], cardpar, 3); // PCB Card 
834
835   //alu plate volume definition
836   cardpar[1]= 3.5;
837   cardpar[2]= 0.05;
838   gMC->Gsvolu("FALP", "BOX ", idtmed[505], cardpar, 3); // Alu Plate
839
840   // tube volume definition
841   Float_t tubepar[3];
842   tubepar[0]= 0.;
843   tubepar[1]= 0.4;
844   tubepar[2]= 61.;
845   gMC->Gsvolu("FTUB", "TUBE", idtmed[511], tubepar, 3); // cooling tubes (steel)
846
847   //tubepar[0]= 0.;
848   tubepar[1]= 0.35;
849   //tubepar[2]= 61.;
850   gMC->Gsvolu("FITU", "TUBE", idtmed[510], tubepar, 3); // cooling water
851   // positioning water tube into the steel one
852   gMC->Gspos("FITU",1,"FTUB",0.,0.,0.,0,"ONLY");
853
854   // rotation matrix
855   AliMatrix(idrotm[99], 180., 90., 90., 90., 90., 0.);
856
857   // central module positioning
858   Float_t cardpos[3], aplpos2;
859   Float_t stepforcardA = 6.625;
860   Float_t tdis = 0.6;
861   Float_t aplpos1 = -2.;
862
863   cardpos[0]= 0.;
864   cardpos[1]= -0.5;
865   cardpos[2]= -53.;
866   //  tubepos= -53.+tdis;
867   Int_t icard;
868   for (icard=39; icard<54; ++icard) {
869     cardpos[2]= cardpos[2]+stepforcardA;
870     aplpos2 = cardpos[2]+0.15;
871     gMC->Gspos("FCAR",icard,"FAIA",cardpos[0],cardpos[1],     cardpos[2],         0,"ONLY"); 
872     gMC->Gspos("FALP",icard,"FAIA",cardpos[0],   aplpos1,        aplpos2,         0,"ONLY");
873     gMC->Gspos("FTUB",icard,"FAIA",        0.,cardpos[1],cardpos[2]+tdis,idrotm[99],"ONLY");
874   }
875   
876   // intermediate module positioning
877   Float_t stepforcardB= 7.05;
878   Float_t offs = 53.;
879
880   cardpos[2]= offs;
881   for (icard=20; icard<39; ++icard) {
882     cardpos[2]= cardpos[2]+stepforcardB;
883     aplpos2 = cardpos[2]+0.15;
884
885     gMC->Gspos("FCAR",icard+34,"FAIA",cardpos[0],cardpos[1],      cardpos[2],         0,"ONLY");
886     gMC->Gspos("FALP",icard+34,"FAIA",cardpos[0],   aplpos1,         aplpos2,         0,"ONLY");
887     gMC->Gspos("FTUB",icard+34,"FAIA",        0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
888     gMC->Gspos("FCAR",58-icard,"FAIA",cardpos[0],cardpos[1],     -cardpos[2],         0,"ONLY");
889     gMC->Gspos("FALP",58-icard,"FAIA",cardpos[0],   aplpos1,        -aplpos2,         0,"ONLY");
890     gMC->Gspos("FTUB",58-icard,"FAIA",        0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
891
892     if (fTOFHoles) {
893       gMC->Gspos("FCAR",icard+34+182,"FAIC",cardpos[0],cardpos[1],      cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
894       gMC->Gspos("FALP",icard+34+182,"FAIC",cardpos[0],   aplpos1,         aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
895       gMC->Gspos("FTUB",icard+34+182,"FAIC",        0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
896       gMC->Gspos("FCAR",58-icard+ 91,"FAIB",cardpos[0],cardpos[1],     -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
897       gMC->Gspos("FALP",58-icard+ 91,"FAIB",cardpos[0],   aplpos1,        -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
898       gMC->Gspos("FTUB",58-icard+ 91,"FAIB",        0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
899     }
900     
901   }
902
903   // outer module positioning
904   Float_t stepforcardC= 8.45238;
905   offs += zlenB;
906   cardpos[2]= offs;
907   for (icard=1; icard<20; ++icard) {
908     cardpos[2]= cardpos[2]+stepforcardC;
909     aplpos2 = cardpos[2]+0.15;
910
911     gMC->Gspos("FCAR",icard+72,"FAIA",cardpos[0],cardpos[1],      cardpos[2],         0,"ONLY"); 
912     gMC->Gspos("FALP",icard+72,"FAIA",cardpos[0],   aplpos1,         aplpos2,         0,"ONLY");
913     gMC->Gspos("FTUB",icard+72,"FAIA",        0.,cardpos[1], cardpos[2]+tdis,idrotm[99],"ONLY");
914     gMC->Gspos("FCAR",20-icard,"FAIA",cardpos[0],cardpos[1],     -cardpos[2],         0,"ONLY");
915     gMC->Gspos("FALP",20-icard,"FAIA",cardpos[0],   aplpos1,        -aplpos2,         0,"ONLY");
916     gMC->Gspos("FTUB",20-icard,"FAIA",        0.,cardpos[1],-cardpos[2]-tdis,idrotm[99],"ONLY");
917
918     if (fTOFHoles) {
919       gMC->Gspos("FCAR",icard+72+182,"FAIC",cardpos[0],cardpos[1],      cardpos[2]-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
920       gMC->Gspos("FALP",icard+72+182,"FAIC",cardpos[0],   aplpos1,         aplpos2-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
921       gMC->Gspos("FTUB",icard+72+182,"FAIC",        0.,cardpos[1], cardpos[2]+tdis-(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
922       gMC->Gspos("FCAR",20-icard+ 91,"FAIB",cardpos[0],cardpos[1],     -cardpos[2]+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
923       gMC->Gspos("FALP",20-icard+ 91,"FAIB",cardpos[0],   aplpos1,        -aplpos2+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,         0,"ONLY");
924       gMC->Gspos("FTUB",20-icard+ 91,"FAIB",        0.,cardpos[1],-cardpos[2]-tdis+(zlenA*0.5 + kInterCentrModBorder2 - kModuleWallThickness)*0.5,idrotm[99],"ONLY");
925     }
926   }
927
928 }
929 //_____________________________________________________________________________
930 void AliTOFv5T0::DrawModule() const
931 {
932   //
933   // Draw a shaded view of the Time Of Flight version 4
934   //
935
936   // Set everything unseen
937   gMC->Gsatt("*", "seen", -1);
938
939   //
940   //Set volumes visible
941   // 
942
943   //Set ALIC mother transparent
944   gMC->Gsatt("ALIC","SEEN", 0);
945
946 //=====> Level 1
947   // Level 1 for TOF volumes
948   gMC->Gsatt("B077","seen", 0);
949
950 //=====> Level 2
951   // Level 2 for TOF volumes
952   gMC->Gsatt("B071","seen", 0);
953   gMC->Gsatt("B074","seen", 0);
954   gMC->Gsatt("B075","seen", 0);
955   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
956   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
957
958   // Level 2 of B071
959   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
960   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
961   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
962   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
963   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
964
965   gMC->Gsatt("BTR1","seen", 0);  // all BTR1 sub-levels skipped   -
966   gMC->Gsatt("BTO1","seen", 0);
967
968   // Level 2 of B074
969   gMC->Gsatt("BTR2","seen", 0);  // all BTR1 sub-levels skipped   -
970   gMC->Gsatt("BTO2","seen", 0);
971
972   // Level 2 of B075
973   gMC->Gsatt("BTR3","seen", 0);  // all BTR1 sub-levels skipped   -
974   gMC->Gsatt("BTO3","seen", 0);
975
976   // Level 3 of B071, B074 and B075
977   gMC->Gsatt("FTOA","SEEN", 0);
978   if (fTOFHoles) gMC->Gsatt("FTOB","SEEN", 0);
979
980   // Level 4 of B071, B074 and B075
981   gMC->Gsatt("FLTA","SEEN", 0);
982   if (fTOFHoles) gMC->Gsatt("FLTB","SEEN",0);
983   if (fTOFHoles) gMC->Gsatt("FLTC","SEEN",0);
984
985   // Level 5 of B071, B074 and B075
986   gMC->Gsatt("FAIA","SEEN",-1);  // all FAIA sub-levels skipped   -
987   if (fTOFHoles) gMC->Gsatt("FAIB","SEEN",-1);  // all FAIB sub-levels skipped   -
988   if (fTOFHoles) gMC->Gsatt("FAIC","SEEN",-1);  // all FAIC sub-levels skipped   -
989
990   gMC->Gsatt("FALA","SEEN", 0);
991   if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
992
993   gMC->Gsatt("FPEA","SEEN", 1);
994   if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 1);
995
996   gMC->Gsatt("FSTR","SEEN",-1);  // all FSTR sub-levels skipped   -
997
998   gMC->Gsatt("FWZ1","SEEN", 0);
999   gMC->Gsatt("FWZ2","SEEN", 0);
1000   gMC->Gsatt("FWZ3","SEEN", 0);
1001   gMC->Gsatt("FWZ4","SEEN", 0);
1002   if (fTOFHoles) {
1003     gMC->Gsatt("FZ1B","SEEN", 0);
1004     gMC->Gsatt("FZ1C","SEEN", 0);
1005     gMC->Gsatt("FZ2B","SEEN", 0);
1006   }
1007
1008   gMC->Gdopt("hide", "on");
1009   gMC->Gdopt("shad", "on");
1010   gMC->Gsatt("*", "fill", 7);
1011   gMC->SetClipBox(".");
1012   gMC->SetClipBox("*", 100, 1000, 100, 1000, 100, 1000);
1013   gMC->DefaultRange();
1014   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1015   gMC->Gdhead(1111, "Time Of Flight");
1016   gMC->Gdman(18, 3, "MAN");
1017   gMC->Gdopt("hide","off");
1018 }
1019 //_____________________________________________________________________________
1020 void AliTOFv5T0::DrawDetectorModules() const
1021 {
1022   //
1023   // Draw a shaded view of the TOF detector version 4
1024   //
1025  
1026   // Set everything unseen
1027   gMC->Gsatt("*", "seen", -1);
1028
1029   //
1030   //Set volumes visible
1031   // 
1032
1033   //Set ALIC mother transparent
1034   gMC->Gsatt("ALIC","SEEN", 0);
1035
1036 //=====> Level 1
1037   // Level 1 for TOF volumes
1038   gMC->Gsatt("B077","seen", 0);
1039
1040 //=====> Level 2
1041   // Level 2 for TOF volumes
1042   gMC->Gsatt("B071","seen", 0);
1043   gMC->Gsatt("B074","seen", 0);
1044   gMC->Gsatt("B075","seen", 0);
1045   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1046   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
1047
1048   // Level 2 of B071
1049   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
1050   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
1051   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
1052   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
1053   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
1054
1055   gMC->Gsatt("BTR1","seen", 0);  // all BTR1 sub-levels skipped   -
1056   gMC->Gsatt("BTO1","seen", 0);
1057
1058   // Level 2 of B074
1059   gMC->Gsatt("BTR2","seen", 0);  // all BTR1 sub-levels skipped   -
1060   gMC->Gsatt("BTO2","seen", 0);
1061
1062   // Level 2 of B075
1063   gMC->Gsatt("BTR3","seen", 0);  // all BTR1 sub-levels skipped   -
1064   gMC->Gsatt("BTO3","seen", 0);
1065
1066   // Level 3 of B071, B075 and B074
1067   gMC->Gsatt("FTOA","seen",-2);  // all FTOA sub-levels skipped   -
1068   if (fTOFHoles) {
1069     gMC->Gsatt("FTOB","seen",-2);  // all FTOB sub-levels skipped   -
1070     gMC->Gsatt("FTOC","seen",-2);  // all FTOC sub-levels skipped   -
1071   }
1072
1073   gMC->Gdopt("hide","on");
1074   gMC->Gdopt("shad","on");
1075   gMC->Gsatt("*", "fill", 5);
1076   gMC->SetClipBox(".");
1077   gMC->SetClipBox("*", 100, 1000, 100, 1000, 0, 1000);
1078   gMC->DefaultRange();
1079   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1080   gMC->Gdhead(1111,"TOF detector");
1081   gMC->Gdman(18, 3, "MAN");
1082   gMC->Gdopt("hide","off");
1083 }                                 
1084
1085 //_____________________________________________________________________________
1086 void AliTOFv5T0::DrawDetectorStrips() const
1087 {
1088   //
1089   // Draw a shaded view of the TOF strips for version 4
1090   //
1091
1092   // Set everything unseen
1093   gMC->Gsatt("*", "seen", -1);
1094
1095   //
1096   //Set volumes visible
1097   // 
1098   
1099   //Set ALIC mother transparent
1100   gMC->Gsatt("ALIC","SEEN", 0);
1101   
1102 //=====> Level 1
1103   // Level 1 for TOF volumes
1104   gMC->Gsatt("B077","seen", 0);
1105
1106 //=====> Level 2
1107   // Level 2 for TOF volumes
1108   gMC->Gsatt("B071","seen", 0);
1109   gMC->Gsatt("B074","seen", 0);
1110   gMC->Gsatt("B075","seen", 0);
1111   gMC->Gsatt("B076","seen",-1); // all B076 sub-levels skipped -
1112   gMC->Gsatt("B080","seen", 0);  // B080 does not has sub-level                
1113
1114   // Level 2 of B071
1115   gMC->Gsatt("B063","seen",-1); // all B063 sub-levels skipped   -
1116   gMC->Gsatt("B065","seen",-1); // all B065 sub-levels skipped   -
1117   gMC->Gsatt("B067","seen",-1); // all B067 sub-levels skipped   -
1118   gMC->Gsatt("B056","seen", 0);  // B056 does not has sub-levels  -
1119   gMC->Gsatt("B072","seen",-1); // all B072 sub-levels skipped   -
1120
1121   gMC->Gsatt("BTR1","seen", 0);  // all BTR1 sub-levels skipped   -
1122   gMC->Gsatt("BTO1","seen", 0);
1123
1124   // Level 2 of B074
1125   gMC->Gsatt("BTR2","seen", 0);  // all BTR1 sub-levels skipped   -
1126   gMC->Gsatt("BTO2","seen", 0);
1127
1128   // Level 2 of B075
1129   gMC->Gsatt("BTR3","seen", 0);  // all BTR1 sub-levels skipped   -
1130   gMC->Gsatt("BTO3","seen", 0);
1131
1132   // Level 3 of B071, B074 and B075
1133   gMC->Gsatt("FTOA","SEEN", 0);
1134   if (fTOFHoles) {
1135     gMC->Gsatt("FTOB","SEEN", 0);
1136     gMC->Gsatt("FTOC","SEEN", 0);
1137   }
1138
1139   // Level 4 of B071, B074 and B075
1140   gMC->Gsatt("FLTA","SEEN", 0);
1141   if (fTOFHoles) {
1142     gMC->Gsatt("FLTB","SEEN", 0);
1143     gMC->Gsatt("FLTC","SEEN", 0);
1144   }
1145
1146   // Level 5 of B071, B074 and B075
1147   gMC->Gsatt("FAIA","SEEN",-1);  // all FAIA sub-levels skipped   -
1148   if (fTOFHoles) {
1149     gMC->Gsatt("FAIB","SEEN",-1);  // all FAIB sub-levels skipped   -
1150     gMC->Gsatt("FAIC","SEEN",-1);  // all FAIC sub-levels skipped   -
1151   }
1152
1153   gMC->Gsatt("FALA","SEEN", 0);
1154   if (fTOFHoles) gMC->Gsatt("FALB","SEEN", 0);
1155
1156   gMC->Gsatt("FPEA","SEEN", 0);
1157   if (fTOFHoles) gMC->Gsatt("FPEB","SEEN", 0);
1158
1159   gMC->Gsatt("FSTR","SEEN",-2);  // all FSTR sub-levels skipped   -
1160
1161   gMC->Gsatt("FWZ1","SEEN", 0);
1162   gMC->Gsatt("FWZ2","SEEN", 0);
1163   gMC->Gsatt("FWZ3","SEEN", 0);
1164   gMC->Gsatt("FWZ4","SEEN", 0);
1165   if (fTOFHoles){
1166     gMC->Gsatt("FZ1B","SEEN", 0);
1167     gMC->Gsatt("FZ1C","SEEN", 0);
1168     gMC->Gsatt("FZ2B","SEEN", 0);
1169   }
1170
1171   /*
1172   // Level 2 of FAIA
1173   // Level 2 of FAIB
1174   // Level 2 of FAIC
1175   gMC->Gsatt("FALP","SEEN",0);
1176   gMC->Gsatt("FCAR","SEEN",0);
1177   gMC->Gsatt("FTUB","SEEN",-1);  // all FTUB sub-levels skipped   -
1178
1179   // Level 2 of FTUB
1180   gMC->Gsatt("FITU","SEEN",0);
1181   */
1182
1183   /*
1184   // Level 2 of FSTR
1185   gMC->Gsatt("FGLF","SEEN",0);
1186   gMC->Gsatt("FHON","SEEN",0);
1187   gMC->Gsatt("FPC1","SEEN",0);
1188   gMC->Gsatt("FPC2","SEEN",0);
1189   gMC->Gsatt("FPCB","SEEN",0);
1190   gMC->Gsatt("FRGL","SEEN",0);
1191
1192   // Level 2 of FPCB => Level 3 of FSTR
1193   gMC->Gsatt("FSEN","SEEN",0);
1194   gMC->Gsatt("FSEZ","SEEN",0);
1195   gMC->Gsatt("FPAD","SEEN",1);
1196   */
1197
1198   gMC->Gdopt("hide","on");
1199   gMC->Gdopt("shad","on");
1200   gMC->Gsatt("*", "fill", 5);
1201   gMC->SetClipBox(".");
1202   gMC->SetClipBox("*", 0, 1000, 0, 1000, 0, 1000);
1203   gMC->DefaultRange();
1204   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .018, .018);
1205   gMC->Gdhead(1111,"TOF Strips");
1206   gMC->Gdman(18, 3, "MAN");
1207   gMC->Gdopt("hide","off");
1208 }
1209
1210 //_____________________________________________________________________________
1211 void AliTOFv5T0::CreateMaterials()
1212 {
1213   //
1214   // Define materials for the Time Of Flight
1215   //
1216
1217   //AliTOF::CreateMaterials();
1218
1219   AliMagF *magneticField = (AliMagF*)gAlice->Field();
1220
1221   Int_t   isxfld = magneticField->Integ();
1222   Float_t sxmgmx = magneticField->Max();
1223
1224   Float_t we[7], ae[7], na[7], fr[7], vl[7];
1225   Int_t i;
1226
1227   //--- Quartz (SiO2) to simulate float glass
1228   //    density tuned to have correct float glass 
1229   //    radiation length
1230   Float_t   aq[2] = { 28.0855,15.9994 };
1231   Float_t   zq[2] = { 14.,8. };
1232   Float_t   wq[2] = { 1.,2. };
1233   Float_t   dq = 2.55; // std value: 2.2
1234   Int_t nq = -2;
1235
1236   // --- Nomex
1237   Float_t anox[4] = {12.01,1.01,16.00,14.01};
1238   Float_t znox[4] = { 6.,  1.,  8.,  7.};
1239   Float_t wnox[4] = {14., 22., 2., 2.};
1240   Float_t dnox  = 0.048;
1241   Int_t nnox   = -4;
1242
1243   //  { Si, C, H, O }
1244   Float_t ag10[4] = {28.09,12.01,1.01,16.00};
1245   Float_t zg10[4] = {14.,  6.,  1.,  8.};
1246   Float_t wmatg10[4];
1247   Int_t nlmatg10  = 4;
1248   for (i = 0; i < nlmatg10; ++i) {
1249     ae[i] = ag10[i];
1250     vl[i] = 1.;
1251   }
1252   ae[4] = 16.00;
1253   vl[4] = 1.;
1254   na[0] = 1.; 
1255   na[1] = 14.;
1256   na[2] = 20.;
1257   na[3] = 2.;
1258   na[4] = 3.;
1259   fr[0] = 0.6;
1260   fr[1] = 0.4;
1261   fr[2] = 0.4;
1262   fr[3] = 0.6;
1263   fr[4] = 0.4;
1264   MaterialMixer(we,ae,na,fr,vl,5);
1265   we[3] += we[4];
1266   wmatg10[0]= we[0];
1267   wmatg10[1]= we[1];
1268   wmatg10[2]= we[2];
1269   wmatg10[3]= we[3];
1270   Float_t densg10 = 1.7;
1271
1272   // -- Water
1273   Float_t awa[2] = {  1., 16. };
1274   Float_t zwa[2] = {  1.,  8. };
1275   Float_t wwa[2] = {  2.,  1. };
1276   Float_t dwa    = 1.0;
1277   Int_t nwa = -2;
1278
1279   // stainless steel
1280   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1281   Float_t zsteel[4] = { 26.,24.,28.,14. };
1282   Float_t wsteel[4] = { .715,.18,.1,.005 };
1283
1284   // AIR
1285   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1286   Float_t zAir[4]={6.,7.,8.,18.};
1287   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1288   Float_t dAir = 1.20479E-3;
1289
1290   // --- fibre glass
1291   Float_t afg[4] = {28.09,16.00,12.01,1.01};
1292   Float_t zfg[4] = {14., 8., 6., 1.};
1293   Float_t wfg[4] = {0.12906,0.29405,0.51502,0.06187};
1294   Float_t dfg  = 1.111;
1295   Int_t nfg   = 4;
1296
1297   // --- Freon C2F4H2 + SF6
1298   Float_t afre[4]= {12.01,1.01,19.00,32.07};
1299   Float_t zfre[4]= { 6., 1., 9., 16.};
1300   Float_t wfre[4]= {0.21250,0.01787,0.74827,0.021355};
1301   Float_t densfre= 0.00375;
1302   Int_t nfre  = 4;
1303
1304   //char namat[15] = "            ";
1305   //Float_t ama[2], zma[2], dma, radl, absl, buf[1];
1306   //Int_t nbuf;
1307
1308   AliMixture ( 0, "Air$", aAir, zAir, dAir, 4, wAir);
1309   AliMixture ( 1, "Nomex$", anox, znox, dnox, nnox, wnox);
1310   AliMixture ( 2, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
1311   AliMixture ( 3, "fibre glass$", afg, zfg, dfg, nfg, wfg);
1312   AliMaterial( 4, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
1313   AliMaterial( 5, "Al honeycomb$", 26.98, 13., 0.0496, 483., 2483.);
1314   AliMixture ( 6, "Freon$",  afre, zfre, densfre, nfre, wfre);
1315   AliMixture ( 7, "Glass$", aq, zq, dq, nq, wq);
1316   /*
1317   // get freon and glass
1318   gMC->Gfmate((*fIdmate)[6],namat,ama[0],zma[0],dma,radl,absl,buf,nbuf);
1319   gMC->Gfmate((*fIdmate)[7],namat,ama[1],zma[1],dma,radl,absl,buf,nbuf);
1320
1321   // --- glass-freon
1322   Float_t wgfr[2]= {0.0011,0.9989};
1323   Float_t dgfr = 1.434;
1324   Int_t ngfr  = 2;
1325   AliMixture ( 8, "glass-freon$", ama, zma, dgfr, ngfr, wgfr);
1326   */
1327   AliMixture ( 9, "Water$",  awa, zwa, dwa, nwa, wwa);
1328   AliMixture (10, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1329
1330   Float_t epsil, stmin, deemax, stemax;
1331  
1332   //   Previous data
1333   //       EPSIL  = 0.1   ! Tracking precision,
1334   //       STEMAX = 0.1   ! Maximum displacement for multiple scattering
1335   //       DEEMAX = 0.1   ! Maximum fractional energy loss, DLS
1336   //       STMIN  = 0.1
1337
1338   //   New data
1339   epsil  = .001;  // Tracking precision,
1340   stemax = -1.;   // Maximum displacement for multiple scattering
1341   deemax = -.3;   // Maximum fractional energy loss, DLS
1342   stmin  = -.8;
1343
1344   AliMedium( 1, "Air$",         0, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1345   AliMedium( 2,"Nomex$",        1, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1346   AliMedium( 3,"G10$",          2, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1347   AliMedium( 4,"fibre glass$",  3, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1348   //AliMedium( 5,"glass-freon$",  8, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1349   AliMedium( 6,"Al Frame$",     4, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1350   AliMedium( 7,"Al honeycomb$", 5, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1351   AliMedium( 8,"Fre$",          6, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1352   AliMedium( 9,"PCB-S$",        2, 1, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1353   AliMedium(10,"Glass$",        7, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1354   AliMedium(11,"Water$",        9, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1355   AliMedium(12,"STEEL$",       10, 0, isxfld, sxmgmx, 10., stemax, deemax, epsil, stmin);
1356
1357 }
1358 //_____________________________________________________________________________
1359 void AliTOFv5T0::Init()
1360 {
1361   //
1362   // Initialise the detector after the geometry has been defined
1363   //
1364   AliDebug(1, "**************************************"
1365            "  TOF  "
1366            "**************************************");
1367   AliDebug(1, "  Version 4 of TOF initialing, "
1368            "symmetric TOF - Full Coverage version");
1369   
1370   AliTOF::Init();
1371   
1372   fIdFTOA = gMC->VolId("FTOA");
1373   if (fTOFHoles) {
1374     fIdFTOB = gMC->VolId("FTOB");
1375     fIdFTOC = gMC->VolId("FTOC");
1376   }
1377   fIdFLTA = gMC->VolId("FLTA");
1378   if (fTOFHoles) {
1379     fIdFLTB = gMC->VolId("FLTB");
1380     fIdFLTC = gMC->VolId("FLTC");
1381   }
1382
1383   AliDebug(1, "**************************************"
1384            "  TOF  "
1385            "**************************************");
1386 }
1387  
1388 //_____________________________________________________________________________
1389 void AliTOFv5T0::StepManager()
1390 {
1391
1392   //
1393   // Procedure called at each step in the Time Of Flight
1394   //
1395
1396   TLorentzVector mom, pos;
1397   Float_t xm[3],pm[3],xpad[3],ppad[3];
1398   Float_t hits[14];
1399   Int_t   vol[5];
1400   Int_t   sector, plate, padx, padz, strip;
1401   Int_t   copy, padzid, padxid, stripid, i;
1402   Int_t   *idtmed = fIdtmed->GetArray()-499;
1403   Float_t incidenceAngle;
1404
1405   const char* volpath;
1406
1407   Int_t index = 0;
1408
1409   if(
1410      gMC->IsTrackEntering()
1411      && gMC->TrackCharge()
1412      //&& gMC->GetMedium()==idtmed[508]
1413      && gMC->CurrentMedium()==idtmed[508]
1414      && gMC->CurrentVolID(copy)==fIdSens
1415      )
1416   {
1417
1418     AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
1419
1420     AddTrackReference(mcApplication->GetCurrentTrackNumber());
1421     //AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber());
1422
1423     // getting information about hit volumes
1424     
1425     padzid=gMC->CurrentVolOffID(1,copy);
1426     padz=copy;
1427     padz--;
1428
1429     padxid=gMC->CurrentVolOffID(0,copy);
1430     padx=copy; 
1431     padx--;
1432     
1433     stripid=gMC->CurrentVolOffID(4,copy);
1434     strip=copy; 
1435     strip--;
1436
1437     gMC->TrackPosition(pos);
1438     gMC->TrackMomentum(mom);
1439
1440     Double_t normMom=1./mom.Rho();
1441
1442     //  getting the coordinates in pad ref system
1443
1444     xm[0] = (Float_t)pos.X();
1445     xm[1] = (Float_t)pos.Y();
1446     xm[2] = (Float_t)pos.Z();
1447
1448     pm[0] = (Float_t)mom.X()*normMom;
1449     pm[1] = (Float_t)mom.Y()*normMom;
1450     pm[2] = (Float_t)mom.Z()*normMom;
1451  
1452     gMC->Gmtod(xm,xpad,1); // from MRS to DRS: coordinates convertion
1453     gMC->Gmtod(pm,ppad,2); // from MRS to DRS: direction cosinus convertion
1454
1455
1456     if (TMath::Abs(ppad[1])>1) {
1457       AliWarning("Abs(ppad) > 1");
1458       ppad[1]=TMath::Sign((Float_t)1,ppad[1]);
1459     }
1460     incidenceAngle = TMath::ACos(ppad[1])*kRaddeg;
1461
1462     plate = -1;
1463     if      (strip <  fTOFGeometry->NStripC()) {
1464       plate = 0;
1465       //strip = strip;
1466     }
1467     else if (strip >= fTOFGeometry->NStripC() && 
1468              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB()) {
1469       plate = 1;
1470       strip = strip - fTOFGeometry->NStripC();
1471     }
1472     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() &&
1473              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA()) {
1474       plate = 2;
1475       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB();
1476     }
1477     else if (strip >= fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() &&
1478              strip <  fTOFGeometry->NStripC() + fTOFGeometry->NStripB() + fTOFGeometry->NStripA() + fTOFGeometry->NStripB()) {
1479       plate = 3;
1480       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA();
1481     }
1482     else                                {
1483       plate = 4;
1484       strip = strip - fTOFGeometry->NStripC() - fTOFGeometry->NStripB() - fTOFGeometry->NStripA() - fTOFGeometry->NStripB();
1485     }
1486
1487     volpath=gMC->CurrentVolOffName(7);
1488     index=atoi(&volpath[4]);
1489     sector=-1;
1490     sector=index;
1491
1492     //Old 6h convention
1493     // if(index<5){
1494     //   sector=index+13;
1495     //  }
1496     // else{
1497     //   sector=index-5;
1498     // } 
1499  
1500     for(i=0;i<3;++i) {
1501       hits[i]   = pos[i];
1502       hits[i+3] = pm[i];
1503     }
1504
1505     hits[6] = mom.Rho();
1506     hits[7] = pos[3];
1507     hits[8] = xpad[0];
1508     hits[9] = xpad[1];
1509     hits[10]= xpad[2];
1510     hits[11]= incidenceAngle;
1511     hits[12]= gMC->Edep();
1512     hits[13]= gMC->TrackLength();
1513     
1514     vol[0]= sector;
1515     vol[1]= plate;
1516     vol[2]= strip;
1517     vol[3]= padx;
1518     vol[4]= padz;    
1519
1520     AddT0Hit(mcApplication->GetCurrentTrackNumber(),vol, hits);
1521     //AddT0Hit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
1522   }
1523 }
1524 //-------------------------------------------------------------------
1525 void AliTOFv5T0::MaterialMixer(Float_t* p,Float_t* a,Float_t* m,Float_t* d,Float_t* s,Int_t n) const
1526 {
1527   // a[] atomic weights vector  (in)
1528   //     (atoms present in more compound appear separately)
1529   // m[] number of corresponding atoms in the mixture  (in)
1530   // d[] fraction of the compound relative to the corresponding atoms  (in)
1531   // s[] further possible weights     "        "        "        "     (in)
1532   Float_t t = 0.;
1533   for (Int_t i = 0; i < n; ++i) {
1534     p[i] = a[i]*m[i]*d[i]*s[i];
1535     t  += p[i];
1536   }
1537   for (Int_t i = 0; i < n; ++i) {
1538     p[i] = p[i]/t;
1539     //    AliInfo(Form((\n weight[%i] = %f (,i,p[i]));
1540   }
1541 }