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