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