AliRoot Core  edcc906 (edcc906)
AliEMCALv0.cxx
Go to the documentation of this file.
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 // --- Standard library ---
17 //#include <stdio.h>
18 #include <cassert>
19 
20 // --- ROOT system ---
21 #include <TGeometry.h>
22 #include <TGeoPhysicalNode.h>
23 #include <TGeoManager.h>
24 #include <TGeoMatrix.h>
25 #include <TVirtualMC.h>
26 #include <TArrayI.h>
27 #include <TROOT.h>
28 #include <TList.h>
29 #include <TVector2.h>
30 
31 // --- AliRoot header files ---
32 #include "AliRun.h"
33 #include "AliLog.h"
34 #include "AliGeomManager.h"
35 
36 //--- EMCAL system---
38 #include "AliEMCALv0.h"
39 #include "AliEMCALGeometry.h"
40 #include "AliEMCALSpaceFrame.h"
41 
43 ClassImp(AliEMCALv0) ;
45 
47 enum
48  {
49  kIdAIR = 1599,
50  kIdPB = 1600,
51  kIdSC = 1601,
52  kIdAL = 1602,
53  kIdSTEEL = 1603,
54  kIdPAPER = 1604
55  };
56 
59 //______________________________________________________________________
61  : AliEMCAL(),
62  fShishKebabModules(),fEnvelop1(0),fIdRotm(0),fIdTmedArr(0),
63  fSampleWidth(0),fSmodPar0(0),fSmodPar1(0),fSmodPar2(0),
64  fInnerEdge(0),fCalFrame(0)
65 {
66  for(Int_t i = 0; i < 5 ; i++) fParEMOD[i]=0.0;
67 }
68 
75 //______________________________________________________________________
76 AliEMCALv0::AliEMCALv0(const char *name, const char *title,
77  const Bool_t checkGeoAndRun)
78  : AliEMCAL(name,title,checkGeoAndRun),
81  fInnerEdge(0),fCalFrame(0)
82 {
83  for(Int_t i = 0; i < 5 ; i++) fParEMOD[i]=0.0;
84 
85  TString ntmp(GetTitle());
86  ntmp.ToUpper();
87 
88  fGeometry = GetGeometry() ;
89 
90  TString gn(fGeometry->GetName());
91  gn.ToUpper();
92 
94 
96 
97  if(gn.Contains("V1")) fSampleWidth += 2.*fGeometry->GetTrd1BondPaperThick();
98 
99  AliDebug(2,Form("fGeometry %p : TVirtualMC::GetMC() %p : fSampleWidth %5.4f\n",
100  fGeometry, TVirtualMC::GetMC(), fSampleWidth));
101 
102  // Set geometry name again, in case it was changed during the initialization of the geometry.
103  SetTitle(fGeometry->GetEMCGeometry()->GetName());
104 }
105 
109 //______________________________________________________________________
111 {
113  TString gn(geom->GetName());
114  gn.ToUpper();
115 
116  if(!(geom->IsInitialized()))
117  {
118  Error("CreateGeometry","EMCAL Geometry class has not been set up.");
119  }
120 
121  // Get pointer to the array containing media indices
122  fIdTmedArr = fIdtmed->GetArray() - 1599 ;
123 
124  fIdRotm = 1;
125  // TVirtualMC::GetMC()->Matrix(nmat, theta1, phi1, theta2, phi2, theta3, phi3) - see AliModule
126  AliMatrix(fIdRotm, 90.0, 0., 90.0, 90.0, 0.0, 0.0) ;
127 
128  // Create the EMCAL Mother Volume (a polygone) within which to place the Detector and named XEN1
129 
130  Float_t envelopA[10];
131  if(gn.Contains("WSUC") )
132  { // TRD1 for WSUC facility
133  // Nov 25,2010
134  envelopA[0] = 30.;
135  envelopA[1] = 30;
136  envelopA[2] = 20;
137 
138  TVirtualMC::GetMC()->Gsvolu("XEN1", "BOX", fIdTmedArr[kIdSC], envelopA, 3) ;
139  fEnvelop1.Set(3);
140 
141  for(Int_t i=0; i<3; i++) fEnvelop1[i] = envelopA[i]; // 23-may-05
142  // Position the EMCAL Mother Volume (XEN1) in WSUC.
143  // Look to AliEMCALWsuCosmicRaySetUp.
144  TVirtualMC::GetMC()->Gspos("XEN1", 1, "WSUC", 0.0, 0.0, + 265., fIdRotm, "ONLY") ;
145  }
146  else
147  {
148  envelopA[0] = geom->GetArm1PhiMin(); // minimum phi angle
149  envelopA[1] = geom->GetArm1PhiMax() - geom->GetArm1PhiMin(); // angular range in phi
150  envelopA[2] = envelopA[1]/geom->GetEMCGeometry()->GetPhiSuperModule(); // Section of that
151  envelopA[3] = 2; // 2: z coordinates
152  envelopA[4] = -geom->GetEnvelop(2)/2.; // zmin - includes padding
153  envelopA[5] = geom->GetEnvelop(0) ; // rmin at z1 - includes padding
154  envelopA[6] = geom->GetEnvelop(1) ; // rmax at z1 - includes padding
155  envelopA[7] = geom->GetEnvelop(2)/2.; // zmax includes padding
156 
157  envelopA[8] = envelopA[5] ; // radii are the same.
158  envelopA[9] = envelopA[6] ; // radii are the same.
159 
160  TVirtualMC::GetMC()->Gsvolu("XEN1", "PGON", fIdTmedArr[kIdAIR], envelopA, 10) ; // Polygone filled with air
161  fEnvelop1.Set(10, envelopA);
162 
163  if (gDebug==2)
164  {
165  printf("CreateGeometry: XEN1 = %f, %f\n", envelopA[5], envelopA[6]);
166  printf("CreateGeometry: XU0 = %f, %f\n", envelopA[5], envelopA[6]);
167  }
168 
169  // Position the EMCAL Mother Volume (XEN1) in Alice (ALIC)
170  TVirtualMC::GetMC()->Gspos(geom->GetNameOfEMCALEnvelope(), 1, "ALIC", 0.0, 0.0, 0.0, fIdRotm, "ONLY") ;
171  }
172 
173  // COMPACT, TRD1
174  AliDebug(2,Form("Shish-Kebab geometry : %s", GetTitle()));
176 
177  if(gn.Contains("WSUC")==0)
178  { // Nov 24,2010 for TB
179  // Space Frame
180  AliDebug(2,"Creating EMCAL Space Frame");
183  }
184 
185  // Set the sampling fraction used at creation hit level
186  // Previously called in AliEMCALEMCGeometry::Init(), put it here for proper initialization by Geant3/4
187  geom->GetEMCGeometry()->DefineSamplingFraction(TVirtualMC::GetMC()->GetName(),TVirtualMC::GetMC()->GetTitle());
188 }
189 
193 //______________________________________________________________________
195 {
196  AliEMCAL::Init();
197 
199  {
200  TString message("\n") ;
201  message += "*****************************************\n" ;
202 
204 
205  if (geom!=0)
206  {
207  message += "AliEMCAL " ;
208  message += Version() ;
209  message += "EMCAL geometry initialized for " ;
210  message += geom->GetName() ;
211  }
212  else
213  {
214  message += "AliEMCAL " ;
215  message += Version() ;
216  message += "EMCAL geometry initialization failed !" ;
217  }
218  message += "\n*****************************************" ;
219  printf("%s",message.Data() ) ;
220  }
221 }
222 
225 //______________________________________________________________________
227 {
228  // TRD1
229  AliEMCALGeometry * g = GetGeometry();
230  TString gn(g->GetName()); gn.ToUpper();
231  Double_t trd1Angle = g->GetTrd1Angle()*TMath::DegToRad(), tanTrd1 = TMath::Tan(trd1Angle/2.);
232  // see AliModule::fFIdTmedArr
233  // fIdTmedArr = fIdtmed->GetArray() - 1599 ; // see AliEMCAL::::CreateMaterials()
234  // Int_t kIdAIR=1599, kIdPB = 1600, kIdSC = 1601, kIdSTEEL = 1603;
235  // idAL = 1602;
236  Double_t par[10], xpos=0., ypos=0., zpos=0.;
237 
239 
240  Int_t * SMTypeList = g->GetEMCSystem();
241  Int_t tmpType = -1;
242  for(Int_t i = 0 ; i < g->GetNumberOfSuperModules(); i++)
243  {
244  if( SMTypeList[i] == tmpType) continue;
245  else tmpType = SMTypeList[i];
246 
247  if ( tmpType == AliEMCALGeometry::kEMCAL_Standard ) CreateEmod("SMOD","EMOD"); // 18-may-05
248  else if( tmpType == AliEMCALGeometry::kEMCAL_Half ) CreateEmod("SM10","EMOD"); // Nov 1,2006 1/2 SM
249  else if( tmpType == AliEMCALGeometry::kEMCAL_3rd ) CreateEmod("SM3rd","EMOD"); // Feb 1,2012 1/3 SM
250  else if( tmpType == AliEMCALGeometry::kDCAL_Standard ) CreateEmod("DCSM","EMOD"); // Mar 13, 2012, 6 or 10 DCSM
251  else if( tmpType == AliEMCALGeometry::kDCAL_Ext ) CreateEmod("DCEXT","EMOD"); // Mar 13, 2012, DCAL extension SM
252  else AliError("Unkown SM Type!!");
253  }
254 
255  // Sensitive SC (2x2 tiles)
256  Double_t parSCM0[5]={0,0,0,0}, *dummy = 0, parTRAP[11];
257 
258  if(!gn.Contains("V1"))
259  {
260  Double_t wallThickness = g->GetPhiModuleSize()/g->GetNPHIdiv() - g->GetPhiTileSize();
261  for(Int_t i=0; i<3; i++) parSCM0[i] = fParEMOD[i] - wallThickness;
262  parSCM0[3] = fParEMOD[3];
263  TVirtualMC::GetMC()->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
264  TVirtualMC::GetMC()->Gspos("SCM0", 1, "EMOD", 0., 0., 0., 0, "ONLY") ;
265  }
266  else
267  {
268  Double_t wTh = g->GetLateralSteelStrip();
269  parSCM0[0] = fParEMOD[0] - wTh + tanTrd1*g->GetTrd1AlFrontThick();
270  parSCM0[1] = fParEMOD[1] - wTh;
271  parSCM0[2] = fParEMOD[2] - wTh;
272  parSCM0[3] = fParEMOD[3] - g->GetTrd1AlFrontThick()/2.;
273  TVirtualMC::GetMC()->Gsvolu("SCM0", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
274  Double_t zshift = g->GetTrd1AlFrontThick()/2.;
275  TVirtualMC::GetMC()->Gspos("SCM0", 1, "EMOD", 0., 0., zshift, 0, "ONLY");
276  //
277  CreateAlFrontPlate("EMOD","ALFP");
278  }
279 
280  if(g->GetNPHIdiv()==2 && g->GetNETAdiv()==2)
281  {
282  // Division to tile size - 1-oct-04
283  AliDebug(2,Form(" Divide SCM0 on y-axis %i\n", g->GetNETAdiv()));
284  TVirtualMC::GetMC()->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
285 
286  // Trapesoid 2x2
287  parTRAP[0] = parSCM0[3]; // dz
288  parTRAP[1] = TMath::ATan2((parSCM0[1]-parSCM0[0])/2.,2.*parSCM0[3])*180./TMath::Pi(); // theta
289  parTRAP[2] = 0.; // phi
290 
291  // bottom
292  parTRAP[3] = parSCM0[2]/2.; // H1
293  parTRAP[4] = parSCM0[0]/2.; // BL1
294  parTRAP[5] = parTRAP[4]; // TL1
295  parTRAP[6] = 0.0; // ALP1
296 
297  // top
298  parTRAP[7] = parSCM0[2]/2.; // H2
299  parTRAP[8] = parSCM0[1]/2.; // BL2
300  parTRAP[9] = parTRAP[8]; // TL2
301  parTRAP[10]= 0.0; // ALP2
302 
303  AliDebug(2,Form(" ** TRAP ** \n"));
304  for(Int_t i=0; i<11; i++) AliDebug(3, Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
305 
306  TVirtualMC::GetMC()->Gsvolu("SCMX", "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
307  xpos = +(parSCM0[1]+parSCM0[0])/4.;
308  TVirtualMC::GetMC()->Gspos("SCMX", 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
309 
310  // Using rotation because SCMX should be the same due to Pb tiles
311  xpos = -xpos;
312  AliMatrix(fIdRotm, 90.0,180., 90.0, 270.0, 0.0,0.0) ;
313  TVirtualMC::GetMC()->Gspos("SCMX", 2, "SCMY", xpos, 0.0, 0.0, fIdRotm, "ONLY");
314 
315  // put LED to the SCM0
317  Double_t tanBetta = mod->GetTanBetta();
318 
319  Int_t nr=0;
320  ypos = 0.0;
321  Double_t xCenterSCMX = (parTRAP[4] + parTRAP[8])/2.;
322  if(!gn.Contains("V1"))
323  {
324  par[1] = parSCM0[2]/2; // y
325  par[2] = g->GetECPbRadThick()/2.; // z
326  TVirtualMC::GetMC()->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
327 
328  zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
329  AliDebug(2,Form(" Pb tiles \n"));
330 
331  for(Int_t iz=0; iz<g->GetNECLayers(); iz++)
332  {
333  par[0] = (parSCM0[0] + tanBetta*fSampleWidth*iz)/2.;
334  xpos = par[0] - xCenterSCMX;
335  TVirtualMC::GetMC()->Gsposp("PBTI", ++nr, "SCMX", xpos, ypos, zpos, 0, "ONLY", par, 3) ;
336  AliDebug(3,Form(" %i xpos %f zpos %f par[0] %f \n", iz+1, xpos, zpos, par[0]));
337  zpos += fSampleWidth;
338  }
339 
340  AliDebug(2,Form(" Number of Pb tiles in SCMX %i \n", nr));
341  }
342  else
343  {
344  // Oct 26, 2010
345  // First sheet of paper
346  par[1] = parSCM0[2]/2.; // y
347  par[2] = g->GetTrd1BondPaperThick()/2.; // z
348  par[0] = parSCM0[0]/2.; // x
349  TVirtualMC::GetMC()->Gsvolu("PAP1", "BOX", fIdTmedArr[kIdPAPER], par, 3);
350 
351  xpos = par[0] - xCenterSCMX;
352  zpos = -parSCM0[3] + g->GetTrd1BondPaperThick()/2.;
353  TVirtualMC::GetMC()->Gspos("PAP1", 1, "SCMX", xpos, ypos, zpos, 0, "ONLY");
354 
355  for(Int_t iz=0; iz<g->GetNECLayers()-1; iz++)
356  {
357  nr = iz + 1;
358  Double_t dz = g->GetECScintThick() + g->GetTrd1BondPaperThick() + fSampleWidth*iz;
359 
360  // PB + 2 paper sheets
361  par[2] = g->GetECPbRadThick()/2. + g->GetTrd1BondPaperThick(); // z
362  par[0] = (parSCM0[0] + tanBetta*dz)/2.;
363  TString pa(Form("PA%2.2i",nr));
364  TVirtualMC::GetMC()->Gsvolu(pa.Data(), "BOX", fIdTmedArr[kIdPAPER], par, 3);
365 
366  xpos = par[0] - xCenterSCMX;
367  zpos = -parSCM0[3] + dz + par[2];
368  TVirtualMC::GetMC()->Gspos(pa.Data(), 1, "SCMX", xpos, ypos, zpos, 0, "ONLY") ;
369 
370  // Pb
371  TString pb(Form("PB%2.2i",nr));
372  par[2] = g->GetECPbRadThick()/2.; // z
373  TVirtualMC::GetMC()->Gsvolu(pb.Data(), "BOX", fIdTmedArr[kIdPB], par, 3);
374  TVirtualMC::GetMC()->Gspos(pb.Data(), 1, pa.Data(), 0.0, 0.0, 0.0, 0, "ONLY") ;
375  }
376  }
377 
378  }
379  //
380  // Remove? Next too cases seem early prototype studies
381  //
382  else if(g->GetNPHIdiv()==3 && g->GetNETAdiv()==3)
383  {
384  printf(" before AliEMCALv0::Trd1Tower3X3() : parSCM0");
385  for(Int_t i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
386  printf("\n");
387  Trd1Tower3X3(parSCM0);
388  }
389  else if(g->GetNPHIdiv()==1 && g->GetNETAdiv()==1)
390  {
391  // no division in SCM0
392  Trd1Tower1X1(parSCM0);
393  }
394 }
395 
398 //______________________________________________________________________
399 void AliEMCALv0::CreateSmod(const char* mother)
400 {
401  // 18-may-05; mother="XEN1";
402  // child="SMOD" from first to 10th, "SM10" (11th and 12th)
403  // "DCSM" from 13th to 18/22th (TRD1 case), "DCEXT"(18th and 19th) adapted for DCAL, Oct-23-2012
404  AliEMCALGeometry * g = GetGeometry();
405  TString gn(g->GetName()); gn.ToUpper();
406 
407  Double_t par[3], xpos=0., ypos=0., zpos=0., rpos=0., dphi=0., phi=0.0, phiRad=0.;
408  Double_t parC[3] = {0};
409  TString smName;
410  Int_t tmpType = -1;
411 
412  // ===== define Super Module from air - 14x30 module ==== ;
413  AliDebug(2,Form("\n ## Super Module | fSampleWidth %5.3f ## %s \n", fSampleWidth, gn.Data()));
414  par[0] = g->GetShellThickness()/2.;
415  par[1] = g->GetPhiModuleSize()*g->GetNPhi()/2.;
416  par[2] = g->GetEtaModuleSize()*g->GetNEta()/2.;
417  fIdRotm=0;
418 
419  Int_t nSMod = g->GetNumberOfSuperModules();
420  Int_t nphism = nSMod/2; // 20-may-05
421  if(nphism > 0)
422  {
423  dphi = g->GetEMCGeometry()->GetPhiSuperModule();
424  rpos = (g->GetEnvelop(0) + g->GetEnvelop(1))/2.;
425  AliDebug(2,Form(" rpos %8.2f : dphi %6.1f degree \n", rpos, dphi));
426  }
427 
428  if(gn.Contains("WSUC"))
429  {
430  Int_t nr=0;
431  par[0] = g->GetPhiModuleSize()*g->GetNPhi()/2.;
432  par[1] = g->GetShellThickness()/2.;
433  par[2] = g->GetEtaModuleSize()*g->GetNZ()/2. + 5;
434 
435  TVirtualMC::GetMC()->Gsvolu("SMOD", "BOX", fIdTmedArr[kIdAIR], par, 3);
436 
437  AliDebug(2,Form("SMOD in WSUC : tmed %i | dx %7.2f dy %7.2f dz %7.2f (SMOD, BOX)\n",
438  fIdTmedArr[kIdAIR], par[0],par[1],par[2]));
439  fSmodPar0 = par[0];
440  fSmodPar1 = par[1];
441  fSmodPar2 = par[2];
442  nphism = g->GetNumberOfSuperModules();
443  for(Int_t i=0; i<nphism; i++) {
444  xpos = ypos = zpos = 0.0;
445  fIdRotm = 0;
446  TVirtualMC::GetMC()->Gspos("SMOD", 1, mother, xpos, ypos, zpos, fIdRotm, "ONLY") ;
447 
448  printf(" fIdRotm %3i phi %6.1f(%5.3f) xpos %7.2f ypos %7.2f zpos %7.2f \n",
449  fIdRotm, phi, phiRad, xpos, ypos, zpos);
450 
451  nr++;
452  }
453  }
454  else
455  {// ALICE
456  AliDebug(2,Form(" par[0] %7.2f (old) \n", par[0]));
457  for(Int_t i=0; i<3; i++) par[i] = g->GetSuperModulesPar(i);
458  fSmodPar0 = par[0];
459  fSmodPar2 = par[2];
460 
461  Int_t SMOrder = -1;
462  tmpType = -1;
463  for (Int_t smodnum = 0; smodnum < nSMod; ++smodnum)
464  {
465  for(Int_t i=0; i<3; i++) parC[i] = par[i];
466  if(g->GetSMType(smodnum) == tmpType)
467  {
468  SMOrder++;
469  }
470  else
471  {
472  tmpType = g->GetSMType(smodnum);
473  SMOrder = 1;
474  }
475 
476  phiRad = g->GetPhiCenterOfSMSec(smodnum); // NEED phi= 90, 110, 130, 150, 170, 190(not center)...
477  phi = phiRad *180./TMath::Pi();
478  Double_t phiy = 90. + phi;
479  Double_t phiz = 0.;
480 
481  xpos = rpos * TMath::Cos(phiRad);
482  ypos = rpos * TMath::Sin(phiRad);
483  zpos = fSmodPar2; // 21-sep-04
484  if( tmpType == AliEMCALGeometry::kEMCAL_Standard )
485  {
486  smName="SMOD";
487  }
488  else if( tmpType == AliEMCALGeometry::kEMCAL_Half )
489  {
490  smName="SM10";
491  parC[1] /= 2.;
492  xpos += (par[1]/2. * TMath::Sin(phiRad));
493  ypos -= (par[1]/2. * TMath::Cos(phiRad));
494  }
495  else if( tmpType == AliEMCALGeometry::kEMCAL_3rd )
496  {
497  smName="SM3rd";
498  parC[1] /= 3.;
499  xpos += (2.*par[1]/3. * TMath::Sin(phiRad));
500  ypos -= (2.*par[1]/3. * TMath::Cos(phiRad));
501  }
502  else if( tmpType == AliEMCALGeometry::kDCAL_Standard )
503  {
504  smName="DCSM";
505  parC[2] *= 2./3.;
506  zpos = fSmodPar2 + g->GetDCALInnerEdge()/2.; // 21-sep-04
507  }
508  else if( tmpType == AliEMCALGeometry::kDCAL_Ext )
509  {
510  smName="DCEXT";
511  parC[1] /= 3.;
512  xpos += (2.*par[1]/3. * TMath::Sin(phiRad));
513  ypos -= (2.*par[1]/3. * TMath::Cos(phiRad));
514  }
515  else AliError("Unkown SM Type!!");
516 
517  if(SMOrder == 1)
518  {//first time, create the SM
519  TVirtualMC::GetMC()->Gsvolu(smName.Data(), "BOX", fIdTmedArr[kIdAIR], parC, 3);
520 
521  AliDebug(2,Form(" Super module with name \"%s\" was created in \"box\" with: par[0] = %f, par[1] = %f, par[2] = %f\n", smName.Data(), parC[0], parC[1], parC[2]));
522  }
523 
524  if( smodnum%2 == 1 )
525  {
526  phiy += 180.;
527  if(phiy>=360.) phiy -= 360.;
528  phiz = 180.;
529  zpos *= -1.;
530  }
531 
532  AliMatrix(fIdRotm, 90.0, phi, 90.0, phiy, phiz, 0.0);
533  TVirtualMC::GetMC()->Gspos(smName.Data(), SMOrder, mother, xpos, ypos, zpos, fIdRotm, "ONLY") ;
534 
535  AliDebug(3, Form(" %s : %2i, fIdRotm %3i phi %6.1f(%5.3f) xpos %7.2f ypos %7.2f zpos %7.2f : i %i \n",
536  smName.Data(), SMOrder, fIdRotm, phi, phiRad, xpos, ypos, zpos, smodnum));
537  }
538  }
539 
540  AliDebug(2,Form(" Number of Super Modules %i \n", nSMod));
541 
542  // Steel plate
543  if(g->GetSteelFrontThickness() > 0.0)
544  { // 28-mar-05
545  par[0] = g->GetSteelFrontThickness()/2.;
546  TVirtualMC::GetMC()->Gsvolu("STPL", "BOX", fIdTmedArr[kIdSTEEL], par, 3);
547 
548  printf("tmed %i | dx %7.2f dy %7.2f dz %7.2f (STPL) \n", fIdTmedArr[kIdSTEEL], par[0],par[1],par[2]);
549 
550  xpos = -(g->GetShellThickness() - g->GetSteelFrontThickness())/2.;
551  TVirtualMC::GetMC()->Gspos("STPL", 1, "SMOD", xpos, 0.0, 0.0, 0, "ONLY") ;
552  }
553 }
554 
557 //______________________________________________________________________
558 void AliEMCALv0::CreateEmod(const char* mother, const char* child)
559 {
560  // 17-may-05; mother="SMOD"; child="EMOD"
561  // Oct 26,2010
562  AliEMCALGeometry * g = GetGeometry();
563  TString gn(g->GetName()); gn.ToUpper();
564 
565  // Module definition
566  Double_t xpos=0., ypos=0., zpos=0.;
567  //Double_t trd1Angle = g->GetTrd1Angle()*TMath::DegToRad();tanTrd1 = TMath::Tan(trd1Angle/2.);
568 
569  if(strcmp(mother,"SMOD")==0)
570  {
571  fParEMOD[0] = g->GetEtaModuleSize()/2.; // dx1
572  fParEMOD[1] = g->Get2Trd1Dx2()/2.; // dx2
573  fParEMOD[2] = g->GetPhiModuleSize()/2.;; // dy
574  fParEMOD[3] = g->GetLongModuleSize()/2.; // dz
575  TVirtualMC::GetMC()->Gsvolu(child, "TRD1", fIdTmedArr[kIdSTEEL], fParEMOD, 4);
576  }
577 
578  Int_t nr=0;
579  fIdRotm=0;
580  // X->Z(0, 0); Y->Y(90, 90); Z->X(90, 0)
581  AliEMCALShishKebabTrd1Module *mod=0; // current module
582 
583  for(Int_t iz=0; iz<g->GetNZ(); iz++)
584  {
585  Double_t angle=90., phiOK=0;
587  angle = mod->GetThetaInDegree();
588 
589  if(!gn.Contains("WSUC"))
590  { // ALICE
591  AliMatrix(fIdRotm, 90.-angle,180., 90.0,90.0, angle, 0.);
592  phiOK = mod->GetCenterOfModule().Phi()*180./TMath::Pi();
593  AliDebug(4,Form(" %2i | angle | %6.3f - %6.3f = %6.3f(eta %5.3f)\n",
594  iz+1, angle, phiOK, angle-phiOK, mod->GetEtaOfCenterOfModule()));
595  xpos = mod->GetPosXfromR() + g->GetSteelFrontThickness() - fSmodPar0;
596  zpos = mod->GetPosZ() - fSmodPar2;
597 
598  Int_t iyMax = g->GetNPhi();
599  if(strcmp(mother,"SM10") == 0 )
600  {
601  iyMax /= 2;
602  }
603  else if(strcmp(mother,"SM3rd") == 0 )
604  {
605  iyMax /= 3;
606  }
607  else if(strcmp(mother,"DCEXT") == 0 )
608  {
609  iyMax /= 3;
610  }
611  else if(strcmp(mother,"DCSM") == 0 )
612  {
613  if(iz < 8 ) continue;
614  zpos = mod->GetPosZ() - fSmodPar2 - g->GetDCALInnerEdge()/2.;
615  }
616  else if(strcmp(mother,"SMOD") != 0 )
617  AliError("Unknown super module Type!!");
618 
619  for(Int_t iy=0; iy<iyMax; iy++)
620  { // flat in phi
621  ypos = g->GetPhiModuleSize()*(2*iy+1 - iyMax)/2.;
622  TVirtualMC::GetMC()->Gspos(child, ++nr, mother, xpos, ypos, zpos, fIdRotm, "ONLY") ;
623 
624  //printf(" %2i xpos %7.2f ypos %7.2f zpos %7.2f fIdRotm %i\n", nr, xpos, ypos, zpos, fIdRotm);
625  AliDebug(3,Form("%3.3i(%2.2i,%2.2i) ", nr,iy+1,iz+1));
626  }
627  //PH printf("\n");
628  }
629  else
630  { //WSUC
631  if(iz == 0) AliMatrix(fIdRotm, 0.,0., 90.,0., 90.,90.); // (x')z; y'(x); z'(y)
632  else AliMatrix(fIdRotm, 90-angle,270., 90.0,0.0, angle,90.);
633 
634  phiOK = mod->GetCenterOfModule().Phi()*180./TMath::Pi();
635 
636  AliDebug(4,Form(" %2i | angle -phiOK | %6.3f - %6.3f = %6.3f(eta %5.3f)\n",
637  iz+1, angle, phiOK, angle-phiOK, mod->GetEtaOfCenterOfModule()));
638 
639  zpos = mod->GetPosZ() - fSmodPar2;
640  ypos = mod->GetPosXfromR() - fSmodPar1;
641 
642  //printf(" zpos %7.2f ypos %7.2f fIdRotm %i\n xpos ", zpos, xpos, fIdRotm);
643 
644  for(Int_t ix=0; ix<g->GetNPhi(); ix++)
645  { // flat in phi
646  xpos = g->GetPhiModuleSize()*(2*ix+1 - g->GetNPhi())/2.;
647  TVirtualMC::GetMC()->Gspos(child, ++nr, mother, xpos, ypos, zpos, fIdRotm, "ONLY") ;
648  //printf(" %7.2f ", xpos);
649  }
650  //printf("\n");
651  }
652  }
653 
654  AliDebug(2,Form(" Number of modules in Super Module(%s) %i \n", mother, nr));
655 }
656 
659 //______________________________________________________________________
660 void AliEMCALv0::CreateAlFrontPlate(const char* mother, const char* child)
661 {
662  // Oct 26,2010 : Al front plate : ALFP
663  AliEMCALGeometry * g = GetGeometry();
664 
665  TString gn(g->GetName()); gn.ToUpper();
666  Double_t trd1Angle = g->GetTrd1Angle()*TMath::DegToRad(), tanTrd1 = TMath::Tan(trd1Angle/2.);
667  Double_t parALFP[5], zposALFP=0.;
668 
669  parALFP[0] = g->GetEtaModuleSize()/2. - g->GetLateralSteelStrip(); // dx1
670  parALFP[1] = parALFP[0] + tanTrd1*g->GetTrd1AlFrontThick(); // dx2
671  parALFP[2] = g->GetPhiModuleSize()/2. - g->GetLateralSteelStrip(); // dy
672  parALFP[3] = g->GetTrd1AlFrontThick()/2.; // dz
673 
674  TVirtualMC::GetMC()->Gsvolu(child, "TRD1", fIdTmedArr[kIdAL], parALFP, 4);
675 
676  zposALFP = -fParEMOD[3] + g->GetTrd1AlFrontThick()/2.;
677  TVirtualMC::GetMC()->Gspos (child, 1, mother, 0.0, 0.0, zposALFP, 0, "ONLY");
678 }
679 
683 //______________________________________________________________________
684 void AliEMCALv0::Trd1Tower3X3(const Double_t *parSCM0)
685 {
686  // Started Dec 8,2004 by PAI
687  // Fixed Nov 13,2006
688  printf(" AliEMCALv0::Trd1Tower3X3() : parSCM0");
689  for(Int_t i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
690  printf("\n");
691 
692  // Nov 10, 2006 - different name of SCMX
693  Double_t parTRAP[11], *dummy=0;
694  AliEMCALGeometry * g = GetGeometry();
695 
696  TString gn(g->GetName()), scmx;
697  gn.ToUpper();
698 
699  // Division to tile size
700  AliDebug(2,Form("Trd1Tower3X3() : Divide SCM0 on y-axis %i", g->GetNETAdiv()));
701 
702  TVirtualMC::GetMC()->Gsdvn("SCMY","SCM0", g->GetNETAdiv(), 2); // y-axis
703  Double_t dx1=parSCM0[0], dx2=parSCM0[1], dy=parSCM0[2], dz=parSCM0[3];
704  Double_t ndiv=3., xpos=0.0;
705 
706  // should be defined once
707  TVirtualMC::GetMC()->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
708 
709  for(Int_t ix=1; ix<=3; ix++)
710  { // 3X3
711  scmx = "SCX"; // Nov 10,2006
712  // ix=1
713  parTRAP[0] = dz;
714  Double_t xCentBot = 2.*dx1/3.;
715  Double_t xCentTop = 2.*(dx2/4. + dx1/12.);
716  parTRAP[1] = TMath::ATan2((xCentTop-xCentBot),2.*dz)*TMath::RadToDeg(); // theta
717  parTRAP[2] = 0.; // phi
718  // bottom
719  parTRAP[3] = dy/ndiv; // H1
720  parTRAP[4] = dx1/ndiv; // BL1
721  parTRAP[5] = parTRAP[4]; // TL1
722  parTRAP[6] = 0.0; // ALP1
723  // top
724  parTRAP[7] = dy/ndiv; // H2
725  parTRAP[8] = dx2/2 - dx1/6.;// BL2
726  parTRAP[9] = parTRAP[8]; // TL2
727  parTRAP[10]= 0.0; // ALP2
728  xpos = (xCentBot+xCentTop)/2.;
729 
730  if (ix==3)
731  {
732  parTRAP[1] = -parTRAP[1];
733  xpos = -xpos;
734  }
735  else if(ix==2)
736  { // central part is box but we treat as trapesoid due to numbering
737  parTRAP[1] = 0.;
738  parTRAP[8] = dx1/ndiv; // BL2
739  parTRAP[9] = parTRAP[8]; // TL2
740  xpos = 0.0;
741  }
742 
743  AliDebug(2,Form(" ** TRAP ** xpos %9.3f\n", xpos));
744  for(Int_t i=0; i<11; i++) AliDebug(2,Form(" par[%2.2i] %9.4f\n", i, parTRAP[i]));
745 
746  scmx += ix;
747  TVirtualMC::GetMC()->Gsvolu(scmx.Data(), "TRAP", fIdTmedArr[kIdSC], parTRAP, 11);
748  TVirtualMC::GetMC()->Gspos(scmx.Data(), 1, "SCMY", xpos, 0.0, 0.0, 0, "ONLY") ;
749 
750  PbInTrap(parTRAP, scmx);
751  }
752 
753  AliDebug(2,"Trd1Tower3X3 - Ver. 1.0 : was tested.");
754 }
755 
759 //______________________________________________________________________
760 void AliEMCALv0::PbInTrap(const Double_t parTRAP[11], TString n)
761 {
762  // 8-dec-04 by PAI
763  // see for example CreateShishKebabGeometry(); just for case TRD1
764  static Int_t nr=0;
765  AliDebug(2,Form(" Pb tiles : nrstart %i\n", nr));
766  AliEMCALGeometry * g = GetGeometry();
767 
768  Double_t par[3];
769  Double_t xpos = 0.0, ypos = 0.0;
770  Double_t zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
771 
772  Double_t coef = (parTRAP[8] - parTRAP[4]) / (2.*parTRAP[0]);
773  Double_t xCenterSCMX = (parTRAP[4] + parTRAP[8])/2.; // ??
774  // Double_t tan = TMath::Tan(parTRAP[1]*TMath::DegToRad());
775 
776  par[1] = parTRAP[3]; // y
777  par[2] = g->GetECPbRadThick()/2.; // z
778 
779  for(Int_t iz=0; iz<g->GetNECLayers(); iz++)
780  {
781  par[0] = parTRAP[4] + coef*fSampleWidth*iz;
782  xpos = par[0] - xCenterSCMX;
783  if(parTRAP[1] < 0.) xpos = -xpos;
784 
785  TVirtualMC::GetMC()->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
786 
787  AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
788 
789  zpos += fSampleWidth;
790  if(iz%2>0) printf("\n");
791  }
792 
793  AliDebug(2,Form(" Number of Pb tiles in SCMX %i coef %9.7f \n", nr, coef));
794  AliDebug(2,Form(" par[1] %9.3f par[2] %9.3f ypos %9.3f \n", par[1], par[2], ypos));
795  AliDebug(2,Form(" PbInTrap Ver. 1.0 : was tested."));
796 }
797 
801 //______________________________________________________________________
802 void AliEMCALv0::Trd1Tower1X1(Double_t *parSCM0)
803 {
804  // Started Nov 22,2006 by PAI
805  AliDebug(1," AliEMCALv0::Trd1Tower1X1() : parSCM0");
806  for(Int_t i=0; i<4; i++) printf(" %7.4f ", parSCM0[i]);
807  printf("\n");
808 
809  // No division - keeping the same volume logic
810  // and as consequence the same abs is scheme
811  AliDebug(2,"Trd1Tower1X1() : Create SCMX(SCMY) as SCM0");
812 
813  TVirtualMC::GetMC()->Gsvolu("SCMY", "TRD1", fIdTmedArr[kIdAIR], parSCM0, 4);
814  TVirtualMC::GetMC()->Gspos("SCMY", 1, "SCM0", 0.0, 0.0, 0.0, 0, "ONLY");
815  TVirtualMC::GetMC()->Gsvolu("SCMX", "TRD1", fIdTmedArr[kIdSC], parSCM0, 4);
816  TVirtualMC::GetMC()->Gspos("SCMX", 1, "SCMY", 0.0, 0.0, 0.0, 0, "ONLY");
817 
818  // should be defined once
819  Double_t *dummy=0;
820  TVirtualMC::GetMC()->Gsvolu("PBTI", "BOX", fIdTmedArr[kIdPB], dummy, 0);
821 
822  PbInTrd1(parSCM0, "SCMX");
823 
824  AliDebug(1,"Trd1Tower1X1() : Ver. 0.1 : was tested.");
825 }
826 
830 //______________________________________________________________________
831 void AliEMCALv0::PbInTrd1(const Double_t *parTrd1, TString n)
832 {
833  // see PbInTrap(const Double_t parTrd1[11], TString n)
834  static Int_t nr=0, ndeb=2;
835  AliDebug(ndeb,Form(" Pb tiles : nrstart %i\n", nr));
836  AliEMCALGeometry * g = GetGeometry();
837 
838  Double_t par[3];
839  Double_t xpos = 0.0, ypos = 0.0;
840  Double_t zpos = -fSampleWidth*g->GetNECLayers()/2. + g->GetECPbRadThick()/2.;
841  Double_t coef = (parTrd1[1] - parTrd1[0]) / (2.*parTrd1[3]);
842 
843  par[1] = parTrd1[2]; // y
844  par[2] = g->GetECPbRadThick()/2.; // z
845 
846  for(Int_t iz=0; iz<g->GetNECLayers(); iz++)
847  {
848  par[0] = parTrd1[0] + coef*fSampleWidth*iz;
849  TVirtualMC::GetMC()->Gsposp("PBTI", ++nr, n.Data(), xpos, ypos, zpos, 0, "ONLY", par, 3) ;
850 
851  AliDebug(2,Form(" %i xpos %9.3f zpos %9.3f par[0] %9.3f |", iz+1, xpos, zpos, par[0]));
852 
853  zpos += fSampleWidth;
854  if(iz%2>0) printf("\n");
855  }
856 
857  AliDebug(ndeb,Form(" Number of Pb tiles in SCMX %i coef %9.7f ", nr, coef));
858  AliDebug(ndeb,Form(" PbInTrd1 Ver. 0.1 : was tested."));
859 }
860 
861 //______________________________________________________________________
863 {
865 
866  if(fShishKebabModules && neta>=0 && neta<fShishKebabModules->GetSize())
868 
869  return trd1;
870 }
871 
874 //_____________________________________________________________________________
876 {
877  TString ntmp(GetTitle()); // name of EMCAL geometry
878 
879  if(ntmp.Contains("WSUC"))
880  {
881  AddAlignableVolumesInWSUC(); // WSUC case
882  }
883  else
884  {
885  AddAlignableVolumesInALICE(); // ALICE case
886  }
887 }
888 
894 //______________________________________________________________________
896 {
897  Float_t pars[] =
898  {
902  };
903 
904  Double_t rpos = (GetGeometry()->GetEnvelop(0) + GetGeometry()->GetEnvelop(1))/2.;
905  Double_t phi, phiRad, xpos, ypos, zpos;
906 
908  Int_t modUID, modnum = 0;
909  TString volpath, symname;
910 
912  Int_t nSMod = geom->GetNumberOfSuperModules();
913  TString SMPathName;
914  TString SMName;
915  Int_t tmpType = -1;
916  Int_t SMOrder = 0;
917 
918  for (Int_t smodnum = 0; smodnum < nSMod; ++smodnum)
919  {
920  modUID = AliGeomManager::LayerToVolUID(idEMCAL,modnum++);
921  if (geom->GetSMType(smodnum) == AliEMCALGeometry::kEMCAL_Standard )
922  { SMPathName = "SMOD"; SMName = "FullSupermodule";}
923  else if(geom->GetSMType(smodnum) == AliEMCALGeometry::kEMCAL_Half )
924  { SMPathName = "SM10"; SMName = "HalfSupermodule";}
925  else if(geom->GetSMType(smodnum) == AliEMCALGeometry::kEMCAL_3rd )
926  { SMPathName = "SM3rd"; SMName = "OneThrdSupermodule";}
927  else if( geom->GetSMType(smodnum) == AliEMCALGeometry::kDCAL_Standard )
928  { SMPathName = "DCSM"; SMName = "DCALSupermodule";}
929  else if( geom->GetSMType(smodnum) == AliEMCALGeometry::kDCAL_Ext )
930  { SMPathName = "DCEXT"; SMName = "DCALExtensionSM";}
931  else AliError("Unkown SM Type!!");
932 
933  if(geom->GetSMType(smodnum) == tmpType)
934  {
935  SMOrder++;
936  }
937  else
938  {
939  tmpType = geom->GetSMType(smodnum);
940  SMOrder = 1;
941  }
942 
943  volpath.Form("ALIC_1/XEN1_1/%s_%d",SMPathName.Data(), SMOrder);
944  symname.Form("EMCAL/%s%d",SMName.Data(), SMOrder);
945 
946  if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data(),modUID))
947  AliFatal(Form("AliEMCALv0::Unable to set alignable entry!!\nName: %s\t Path: %s\t ModuleID: %d\n",
948  symname.Data(),volpath.Data(), modUID));
949 
950  // Creates the Tracking to Local transformation matrix for EMCAL
951  // modules
952  TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(modUID) ;
953 
954  phiRad = GetGeometry()->GetPhiCenterOfSM(smodnum); //comes in radians, not degrees
955  phi = phiRad*180./TMath::Pi(); //need degrees for rot. matrix
956  xpos = rpos * TMath::Cos(phiRad);
957  ypos = rpos * TMath::Sin(phiRad);
958  zpos = pars[2];
959 
960  if( geom->GetSMType(smodnum) == AliEMCALGeometry::kEMCAL_Half )
961  {
962  xpos += (pars[1]/2. * TMath::Sin(phiRad)); // half SM!
963  ypos -= (pars[1]/2. * TMath::Cos(phiRad));
964  }
965  else if ( geom->GetSMType(smodnum) == AliEMCALGeometry::kEMCAL_3rd ||
966  geom->GetSMType(smodnum) == AliEMCALGeometry::kDCAL_Ext )
967  {
968  xpos += (pars[1]/3. * TMath::Sin(phiRad)); // one_third SM !
969  ypos -= (pars[1]/3. * TMath::Cos(phiRad));
970  }
971  else if( geom->GetSMType(smodnum) == AliEMCALGeometry::kDCAL_Standard )
972  {
973  zpos = pars[2]*2./3. + GetGeometry()->GetDCALInnerEdge()/2.;
974  }
975 
976  AliDebug(3, Form(" fIdRotm %3i phi %6.13f(%5.3f) xpos %7.2f ypos %7.2f zpos %7.2f : smodnum %i \n",
977  fIdRotm, phi, phiRad, xpos, ypos, zpos, smodnum));
978 
979  TGeoHMatrix *matTtoL;
980  TGeoHMatrix *globMatrix = alignableEntry->GetGlobalOrig();
981 
982  if(smodnum%2 == 0)
983  {
984  // pozitive z
985  TGeoTranslation geoTran0(xpos, ypos, zpos);
986  TGeoRotation geoRot0("geoRot0", 90.0, phi, 90.0, 90.0+phi, 0.0, 0.0);
987  TGeoCombiTrans mat0(geoTran0, geoRot0);
988  matTtoL = new TGeoHMatrix(mat0);
989 
990  matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
991  alignableEntry->SetMatrix(matTtoL);
992  }
993  else
994  {
995  // negative z
996  Double_t phiy = 90. + phi + 180.;
997  if(phiy>=360.) phiy -= 360.;
998  TGeoTranslation geoTran1(xpos,ypos,-zpos);
999  TGeoRotation geoRot1("geoRot1", 90.0, phi, 90.0, phiy, 180.0, 0.0);
1000  TGeoCombiTrans mat1(geoTran1, geoRot1);
1001  matTtoL = new TGeoHMatrix(mat1);
1002 
1003  matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
1004  alignableEntry->SetMatrix(matTtoL);
1005  }
1006 
1007  }
1008 
1009 }
1010 
1016 //______________________________________________________________________
1018 {
1019  TString vpstr1 = "WSUC_1/XEN1_1/SMOD_";
1020  TString snstr1 = "EMCAL/CosmicTestSupermodule";
1021  TString volpath, symname;
1022 
1023  // #SM is just one
1024  for (Int_t smodnum=0; smodnum < 1; smodnum++)
1025  {
1026  symname = snstr1;
1027  symname += (smodnum+1);
1028  volpath = vpstr1;
1029  volpath += (smodnum+1);
1030 
1031  if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
1032  AliFatal("Unable to set alignable entry!!");
1033  }
1034 }
Float_t GetDCALInnerEdge(void) const
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
Float_t GetLongModuleSize(void) const
void AliMatrix(Int_t &nmat, Double_t theta1, Double_t phi1, Double_t theta2, Double_t phi2, Double_t theta3, Double_t phi3) const
Definition: AliModule.cxx:331
virtual void Init(void)
Definition: AliEMCALv0.cxx:194
Double_t fSmodPar1
! y size of super module
Definition: AliEMCALv0.h:89
Double_t GetEtaOfCenterOfModule() const
Add comment.
Float_t GetArm1PhiMax(void) const
Float_t GetArm1PhiMin(void) const
TList * fShishKebabModules
! list of modules
Definition: AliEMCALv0.h:79
Int_t GetNECLayers(void) const
Float_t GetShellThickness(void) const
Double_t fSmodPar2
! z size of super module
Definition: AliEMCALv0.h:90
Int_t GetNETAdiv(void) const
Int_t GetNumberOfSuperModules(void) const
Int_t * fIdTmedArr
! fIdtmed->GetArray() - 1599;
Definition: AliEMCALv0.h:85
Float_t GetEnvelop(Int_t index) const
Float_t GetPhiTileSize(void) const
Float_t GetTrd1BondPaperThick() const
Float_t GetSteelFrontThickness(void) const
void PbInTrap(const Double_t parTRAP[11], TString n)
Definition: AliEMCALv0.cxx:760
EMCal simulation manager class v0.
Definition: AliEMCALv0.h:39
Int_t GetNPhi(void) const
Float_t GetPhiModuleSize(void) const
virtual void AddAlignableVolumes() const
Add volumes which are alignable (?)
Definition: AliEMCALv0.cxx:875
const Char_t * GetNameOfEMCALEnvelope(void) const
Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const
Float_t GetTrd1Angle(void) const
static Int_t GetGlobalDebugLevel()
Definition: AliLog.cxx:476
Double_t fParEMOD[5]
! parameters of EMCAL module (TRD1,2)
Definition: AliEMCALv0.h:92
Float_t GetEtaModuleSize(void) const
Int_t fIdRotm
! number of rotation matrix (working variable)
Definition: AliEMCALv0.h:84
virtual const TString Version(void) const
Definition: AliEMCALv0.h:58
Bool_t checkGeoAndRun
check or not the year to configure the detector
Definition: Config.C:97
Double_t fSmodPar0
! x size of super module
Definition: AliEMCALv0.h:88
void Trd1Tower1X1(Double_t *parSCM0)
Definition: AliEMCALv0.cxx:802
virtual void AddAlignableVolumesInALICE() const
Definition: AliEMCALv0.cxx:895
TGeoManager * gGeoManager
Int_t GetNPHIdiv(void) const
Float_t GetECScintThick(void) const
Double_t GetPhiCenterOfSM(Int_t nsupmod) const
virtual void Init()
Init (not needed)
Definition: AliEMCAL.cxx:288
AliEMCALv0()
Default constructor.
Definition: AliEMCALv0.cxx:60
void CreateEmod(const char *mother="SMOD", const char *child="EMOD")
Generate module geometry (2x2 towers)
Definition: AliEMCALv0.cxx:558
TArrayF fEnvelop1
! parameters of EMCAL envelop for TRD1(2) case
Definition: AliEMCALv0.h:83
void CreateSmod(const char *mother="XEN1")
Generate super module geometry.
Definition: AliEMCALv0.cxx:399
virtual AliEMCALGeometry * GetGeometry() const
Definition: AliEMCAL.cxx:466
Int_t GetSMType(Int_t nSupMod) const
Double_t fSampleWidth
! sample width = double(g->GetECPbRadThick()+g->GetECScintThick());
Definition: AliEMCALv0.h:87
Int_t GetNZ(void) const
Float_t GetTrd1AlFrontThick() const
AliEMCALShishKebabTrd1Module * GetShishKebabModule(Int_t neta=0)
Definition: AliEMCALv0.cxx:862
Base Class for EMCAL description.
Definition: AliEMCAL.h:35
#define AliFatal(message)
Definition: AliLog.h:640
Float_t GetLateralSteelStrip(void) const
Double_t fInnerEdge
! Inner edge of DCAL super module
Definition: AliEMCALv0.h:91
virtual void AddAlignableVolumesInWSUC() const
void Trd1Tower3X3(const Double_t *parSCM0)
Definition: AliEMCALv0.cxx:684
#define AliDebug(logLevel, message)
Definition: AliLog.h:300
TArrayI * fIdtmed
cached MC instance (to avoid calls to thread_local gMC=TVirtualMC::GetMC())
Definition: AliModule.h:157
Int_t GetNEta(void) const
AliEMCALSpaceFrame * fCalFrame
EMCAL Space frame object.
Definition: AliEMCALv0.h:94
AliEMCALEMCGeometry * GetEMCGeometry() const
Double_t GetThetaInDegree() const
Add comment.
void PbInTrd1(const Double_t *parTrd1, TString n)
Definition: AliEMCALv0.cxx:831
void CreateAlFrontPlate(const char *mother="EMOD", const char *child="ALFP")
Generate aluminium plates geometry.
Definition: AliEMCALv0.cxx:660
void CreateShishKebabGeometry()
Generate tower geometry.
Definition: AliEMCALv0.cxx:226
virtual void CreateGeometry()
Definition: AliEMCALv0.cxx:110
Float_t Get2Trd1Dx2(void) const
static UShort_t LayerToVolUID(ELayerID layerId, Int_t modId)
Float_t GetECPbRadThick(void) const
Float_t GetPhiSuperModule() const
Float_t GetSuperModulesPar(Int_t ipar) const
#define AliError(message)
Definition: AliLog.h:591
Int_t * GetEMCSystem() const
TEveGeoShape * geom
Definition: tpc_tracks.C:10
static Bool_t IsInitialized(void)
TList * GetShishKebabTrd1Modules() const
EMCal geometry, singleton.
Space Frame implementation.
Main class for TRD1 geometry of Shish-Kebab case.
void DefineSamplingFraction(const Text_t *mcname="", const Text_t *mctitle="")
AliEMCALGeometry * fGeometry
! EMCal geometry access
Definition: AliEMCAL.h:85