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