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