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