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