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