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