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