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