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