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