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