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