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