ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
LArGeo::TBBarrelCryostatConstruction Class Reference

#include <TBBarrelCryostatConstruction.h>

Collaboration diagram for LArGeo::TBBarrelCryostatConstruction:

Public Member Functions

 TBBarrelCryostatConstruction ()
 
virtual ~TBBarrelCryostatConstruction ()
 
virtual GeoIntrusivePtr< GeoFullPhysVol > GetEnvelope (const VDetectorParameters *params)
 
void setBarrelSagging (bool flag)
 
void setBarrelCellVisLimit (int maxCell)
 

Private Attributes

bool _barrelSagging
 
int _barrelVisLimit
 
GeoIntrusivePtr< GeoFullPhysVol > cryoMotherPhysical
 

Detailed Description

Definition at line 18 of file TBBarrelCryostatConstruction.h.

Constructor & Destructor Documentation

◆ TBBarrelCryostatConstruction()

LArGeo::TBBarrelCryostatConstruction::TBBarrelCryostatConstruction ( )

Definition at line 50 of file TBBarrelCryostatConstruction.cxx.

50  :
51  _barrelSagging(0),
52  _barrelVisLimit(-1),
53  cryoMotherPhysical(nullptr)
54 {}

◆ ~TBBarrelCryostatConstruction()

LArGeo::TBBarrelCryostatConstruction::~TBBarrelCryostatConstruction ( )
virtualdefault

Member Function Documentation

◆ GetEnvelope()

GeoIntrusivePtr< GeoFullPhysVol > LArGeo::TBBarrelCryostatConstruction::GetEnvelope ( const VDetectorParameters params)
virtual

Definition at line 59 of file TBBarrelCryostatConstruction.cxx.

60 {
61 
63 
64 // Get access to the material manager
65 
66  ISvcLocator *svcLocator = Gaudi::svcLocator();
67  IMessageSvc * msgSvc;
68  if (svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
69  throw std::runtime_error("Error in EMBConstruction, cannot access MessageSvc");
70  }
71 
72  MsgStream log(msgSvc, "LAr::DetectorFactory");
73 
74  log <<MSG::INFO << "++++++++++++++++++++++++++++++++++++++++++++++++++++i++" << endmsg;
75  log <<MSG::INFO << "+ +" << endmsg;
76  log <<MSG::INFO << "+ HELLO from LArGeo::TBBarrelCryostatConstruction +" << endmsg;
77  log <<MSG::INFO << "+ +" << endmsg;
78  log <<MSG::INFO << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endmsg;
79 
80 
82  if (svcLocator->service("DetectorStore", detStore, false )==StatusCode::FAILURE) {
83  throw std::runtime_error("Error in LArDetectorFactory, cannot access DetectorStore");
84  }
85 
86 // Get the materials from the material manager:---------------------------------------------------
87 //
88 
89  StoredMaterialManager* materialManager = nullptr;
90  if (StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string("MATERIALS"))) return nullptr;
91 
92  const GeoMaterial *Air = materialManager->getMaterial("std::Air");
93  if (!Air) {
94  throw std::runtime_error("Error in TBBarrelCryostatConstruction, std::Air is not found.");
95  }
96 
97  const GeoMaterial *Aluminium = materialManager->getMaterial("std::Aluminium");
98  if (!Aluminium) {
99  throw std::runtime_error("Error in TBBarrelCryostatConstruction, std::Aluminium is not found.");
100  }
101 
102  const GeoMaterial *LAr = materialManager->getMaterial("std::LiquidArgon");
103  if (!LAr) {
104  throw std::runtime_error("Error in TBBarrelCryostatConstruction, std::LiquidArgon is not found.");
105  }
106 
107  const GeoMaterial* Iron = materialManager->getMaterial("std::Iron");
108  if (!Iron) {
109  throw std::runtime_error("Error in TBBarrelCryostatConstruction, std::Iron is not found.");
110  }
111 
112  const GeoElement* Hydrogen = materialManager->getElement("Hydrogen");
113  if (!Hydrogen) {
114  throw std::runtime_error("Error in TBBarrelCryostatConstruction, hydrogen not found.");
115  }
116 
117  const GeoElement* Carbon = materialManager->getElement("Carbon");
118  if (!Carbon) {
119  throw std::runtime_error("Error in TBBarrelCryostatConstruction, carbon not found.");
120  }
121 
122  const GeoElement* Oxygen = materialManager->getElement("Oxygen");
123  if (!Oxygen) {
124  throw std::runtime_error("Error in TBBarrelCryostatConstruction, oxygen not found.");
125  }
126 
127  GeoMaterial *Vacuum = new GeoMaterial("Vacuum",Gaudi::Units::universe_mean_density );
128  Vacuum->add(Hydrogen,1.);
129  Vacuum->lock();
130 
131 // define material for FOAM (C5H8O2)
132 // latest density value from P.Puzo (october 2003)
133 //
134  double density = 0.058*GeoModelKernelUnits::g/Gaudi::Units::cm3;
135  GeoMaterial* Foam = new GeoMaterial("Foam", density);
136  double fraction=8*1.01/(5*12.01+8*1.01+2.*16.0);
137  Foam->add(Hydrogen,fraction);
138  fraction=5.*12.01/(5*12.01+8*1.01+2.*16.0);
139  Foam->add(Carbon,fraction);
140  fraction=2.*16.0/(5*12.01+8*1.01+2.*16.0);
141  Foam->add(Oxygen,fraction);
142  Foam->lock();
143 #ifdef DEBUGGEO
144  std::cout << " Foam density,rad length from GeoModel " << density << " " << Foam->getRadLength() << std::endl;
145 #endif
146 
147 
148  std::string baseName = "LAr::TBBarrel::Cryostat::";
149 
151 // Define geometry
153 
154 // Big mother volume to be included in transparent way in Calo Ctb envelope
155 
156  double zp[3] ={-1050.,0.,3810.};
157  double ri[3] ={965.,965.,965.};
158  double ro[3] ={2270.,2270.,2270.};
159 #ifdef DEBUG_GEO
160  std::cout << " " << std::endl;
161  std::cout << " Pcone volume for overall envelope " << std::endl;
162  std::cout << " phi0=-25deg, Dphi=50deg " << std::endl;
163  for (int i=0;i<3;i++) {
164  std::cout << " Plane zp/ri/ro " << zp[i] << " " << ri[i] << " " << ro[i] << std::endl;
165  }
166 #endif
167  GeoPcon* Em_pcone = new GeoPcon(-25.*Gaudi::Units::deg,50.*Gaudi::Units::deg);
168  for (int i=0; i < 3; i++) Em_pcone->addPlane(zp[i],ri[i],ro[i]);
169 
170  const GeoLogVol* cryoMotherLogical =
171  new GeoLogVol(baseName+"Envelope",Em_pcone, Air);
172 
173  cryoMotherPhysical = new GeoFullPhysVol(cryoMotherLogical);
174 
175 
176 // Cryostat geometry
177 
178  double Cryo_Distz = 483.5*Gaudi::Units::cm; // total size in z
179  double Cryo_z0 = 103.0*Gaudi::Units::cm; // eta=0 position wrt cryosta edge at z<0
180 
181  double DeltaR_cold = 4.1*Gaudi::Units::cm; // thickness cold vessel before calo
182  double DeltaRout_cold = 5.0*Gaudi::Units::cm; // thickness cold vessel after calo
183 
184  double DeltaR_warm= 3.86*Gaudi::Units::cm; // thickness warm vessel before calo
185  double DeltaRout_warm = 4.0*Gaudi::Units::cm; // thickness warm vessel after calo
186 
187  double DeltaRout_vac = 3.0*Gaudi::Units::cm; // vacuum space cryo after calo
188 
189  double Dz_end_warm = 7.0*Gaudi::Units::cm; // thickness of end plate at high z
190  double Dz_end_vac = 8.0*Gaudi::Units::cm;
191  double Dz_end_cold = 7.0*Gaudi::Units::cm;
192 
193  double Dz_end_tot = Dz_end_warm + Dz_end_vac + Dz_end_cold;
194 
195 // position of center of curvature of cryostat before calo
196  double Cryo_Xcent = 3363.;
197 
198  double Cryo_Rmax_C = 2326.;
199  double Cryo_Rmin_C = Cryo_Rmax_C - DeltaR_cold;
200 
201  double Cryo_Rmax_W = 2396.;
202  double Cryo_Rmin_W = Cryo_Rmax_W - DeltaR_warm;
203 
204 // recompute vacuum space cryoastat before calo
205 // double DeltaR_vac = Cryo_Rmin_W - Cryo_Rmax_C;
206 
207  double Rmin_mother = Cryo_Xcent-Cryo_Rmax_W;
208  double Rmax_mother = 2270.;
209 
210  double Phi_Min = -5.0 * Gaudi::Units::deg;
211  double Phi_Span = 32.5 * Gaudi::Units::deg;
212 // GU 10/09/2004
213 // For cryostat mother volume, sligthly larger phi range
214 // to avoid clash with front cryostat
215  double Phi_Min_Moth=-9.0*Gaudi::Units::deg;
216  double Phi_Span_Moth=38.5*Gaudi::Units::deg;
217 
218 // -----------------------------------------------------------------
219 // Mother volume for Cryostat, filled with foam
220 // ------------------------------------------------------------------
221 
222 #ifdef DEBUG_GEO
223  std::cout << " " << std::endl;
224  std::cout << "** Mother Volume for TB cryostat (Tubs) " << std::endl;
225  std::cout << " (matter = foam) " << std::endl;
226  std::cout << " Rmin/Rmax " << Rmin_mother << " " << Rmax_mother << std::endl;
227  std::cout << " Dz/2 " << Cryo_Distz/2. << std::endl;
228  std::cout << " PhiMin, Span " << Phi_Min_Moth*(1./Gaudi::Units::deg) << " "
229  << Phi_Span_Moth*(1./Gaudi::Units::deg) << std::endl;
230 #endif
231 
232  GeoTubs* Cent_tube = new GeoTubs(Rmin_mother,
233  Rmax_mother,
234  Cryo_Distz/2.,
235  Phi_Min_Moth,
236  Phi_Span_Moth);
237  GeoLogVol* Cent_log = new GeoLogVol(baseName+"Mother",Cent_tube,Foam);
238 // position in Pcon mother envelope (which has Atlas reference frame)
239  double zpos = Cryo_Distz/2.-Cryo_z0;
240  double phi = -1.*360.*Gaudi::Units::deg/16/2.; // to have x axis in middle of volume
241 
242  GeoIntrusivePtr<GeoPhysVol> Cent_phys = new GeoPhysVol(Cent_log);
243  cryoMotherPhysical->add(new GeoTransform(GeoTrf::RotateZ3D(phi)));
244  cryoMotherPhysical->add(new GeoTransform(GeoTrf::TranslateZ3D(zpos)));
245  cryoMotherPhysical->add(Cent_phys);
246 
247 // ----------------------------------------------------------------------
248 // Cryostat before calo
249 // ----------------------------------------------------------------------
250 #ifdef BUILD_TBCRYO1
251 
252 // Warm vessel
253 
254 #ifdef DEBUG_GEO
255  std::cout << " " << std::endl;
256  std::cout << " ** Cryostat before LAr (shape=Tubs)" << std::endl;
257  std::cout << " center in x = " << Cryo_Xcent << std::endl;
258  std::cout << " angle 180-11 deg, span = 14 deg" << std::endl;
259  std::cout << " R warm vessel " << Cryo_Rmin_W << " "
260  << Cryo_Rmax_W << std::endl;
261  std::cout << " R vacuum " << Cryo_Rmax_C << " "
262  << Cryo_Rmin_W << std::endl;
263  std::cout << " R cold vessel " << Cryo_Rmin_C << " "
264  << Cryo_Rmax_C << std::endl;
265  std::cout << " Half size in z " << (Cryo_Distz-Dz_end_tot)/2. << std::endl;
266  std::cout << " position in z in mother " << -Dz_end_tot/2. << std::endl;
267 #endif
268 
269  GeoTubs* CryoW_tube = new GeoTubs(
270  Cryo_Rmin_W,
271  Cryo_Rmax_W,
272  (Cryo_Distz-Dz_end_tot)/2.,
273  (180.-11.)*Gaudi::Units::deg,
274  14.*Gaudi::Units::deg);
275 
276  GeoLogVol* CryoW_log = new GeoLogVol(baseName+"WarmTube",
277  CryoW_tube,
278  Aluminium);
279 
280  GeoIntrusivePtr<GeoPhysVol> CryoW_phys = new GeoPhysVol(CryoW_log);
281  Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
282  Cent_phys->add(CryoW_phys);
283 
284 // Waccum between warm and cold vessels
285 
286  GeoTubs* CryoV_tube = new GeoTubs(
287  Cryo_Rmax_C,
288  Cryo_Rmin_W,
289  (Cryo_Distz-Dz_end_tot)/2.,
290  (180.-11.)*Gaudi::Units::deg,
291  14.*Gaudi::Units::deg);
292 
293  GeoLogVol *CryoV_log = new GeoLogVol(baseName+"VacTube",
294  CryoV_tube,
295  Vacuum);
296 
297  GeoIntrusivePtr<GeoPhysVol> CryoV_phys = new GeoPhysVol(CryoV_log);
298  Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
299  Cent_phys->add(CryoV_phys);
300 
301 // Cold vessel
302 
303  GeoTubs* CryoC_tube = new GeoTubs(
304  Cryo_Rmin_C,
305  Cryo_Rmax_C,
306  (Cryo_Distz-Dz_end_tot)/2.,
307  (180.-11.)*Gaudi::Units::deg,
308  14.*Gaudi::Units::deg);
309 
310  GeoLogVol *CryoC_log = new GeoLogVol(baseName+"ColdTube",
311  CryoC_tube,
312  Aluminium);
313 
314  GeoIntrusivePtr<GeoPhysVol> CryoC_phys = new GeoPhysVol(CryoC_log);
315  Cent_phys->add(new GeoTransform(GeoTrf::Translate3D(Cryo_Xcent, 0., -Dz_end_tot/2.)));
316  Cent_phys->add(CryoC_phys);
317 
318 #endif
319 
320 // ----------------------------------------------------------------------
321 // ACCB Mother volume for all the LAr
322 // including PS + Accordion
323 // the LAr start at r=1410mm (end of foam) and go to the beginning of the
324 // cold vessel of the cryostat after calo
325 //-----------------------------------------------------------------------
326 
327  double LAr_inner_radius=141.00*Gaudi::Units::cm; // min radius of PS
328  double LAr_outer_radius=Rmax_mother-DeltaRout_warm-DeltaRout_cold
329  -DeltaRout_vac;
330 
331  double LAr_z_max = Cryo_Distz-Dz_end_tot;
332 
333 #ifdef DEBUG_GEO
334  std::cout << " " << std::endl;
335  std::cout << " *** LAr volume (tubs put in foam)" << std::endl;
336  std::cout << "Rmin/Rmax " << LAr_inner_radius << " "
337  << LAr_outer_radius << std::endl;
338  std::cout << "PhiMin,Span " << Phi_Min*(1./Gaudi::Units::deg) << " "
339  << Phi_Span*(1./Gaudi::Units::deg) << std::endl;
340  std::cout << "DeltaZ/2 " << LAr_z_max/2. << std::endl;
341  std::cout << "Position in z in mother " << (LAr_z_max-Cryo_Distz)/2. << std::endl;
342 #endif
343 
344 // ACCB mother is a tube
345 
346  GeoTubs* moth_tube = new GeoTubs( LAr_inner_radius,
347  LAr_outer_radius,
348  LAr_z_max/2.,
349  Phi_Min,
350  Phi_Span);
351 
352  GeoLogVol* moth_log = new GeoLogVol(baseName+"LAr",moth_tube,LAr);
353 
354  GeoIntrusivePtr<GeoPhysVol> moth_phys = new GeoPhysVol(moth_log);
355 
356  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
357  Cent_phys->add(moth_phys);
358 
359 // Adjust LAR volumes at the end of foam, such as to have
360 // 18.5mm before PS at top
361 // 12.5mm before PS at mid top
362 // 14.5mm before PS at mid
363 // 7.5mm before PS at mid bottom
364 // 9.5mm before PS at bottom
365 // takes into account that for 1 PS sector r at the middle is 1412 and
366 // at the edges is 1419. (middle of PS sectors=mid top and mid bottom)
367 // therefore compared to r=1410mm (LAr above) to get the correct Ar space
368 // one needs to add ~9.5mm at the top, 10mm at mid top, 5.5mm at mid,
369 // 5.5mm at mid bottom and 0.5 mm at bottom
370 
371 // modified 17-Aug-05
372 // the measured thickness are at 0, 22.5/4, 22.5/2, 3*22.5/4 and 22.5 deg
373 // so define the regions in phi to be better centered on the measurements
374 // and to cover:
375 // - 0 to 22.5/8 deg = bottom thickness => need 9.5 - 9mm = 0.5mm Ar
376 // - 22.5/8 to 3*22.5/8 deg = mid bottom => need 7.5-2mm = 5.5mm Ar
377 // - 3*22.5/8 to 5*22.5/8 deg = mid => need 14.5-9 = 5.5 mm Ar
378 // - 5*22.5/8 to 7*22.5/8 deg = mid top => need 12.5-2mm = 10.5mm Ar
379 // - 7*22.5/8 to 22.5/8 deg = top => need 18.5-9 = 9.5 mm Ar
380 
381 #ifdef BUILD_LARFOAM
382 
383  double delta_LAr[5]={0.5*Gaudi::Units::mm,5.5*Gaudi::Units::mm,5.5*Gaudi::Units::mm,10.5*Gaudi::Units::mm,9.5*Gaudi::Units::mm};
384  double Phi1[5]={0.*Gaudi::Units::deg,22.5/8.*Gaudi::Units::deg,3.*22.5/8*Gaudi::Units::deg,5.*22.5/8*Gaudi::Units::deg,7.*22.5/8*Gaudi::Units::deg};
385  double Delta_phi[5]={22.5/8*Gaudi::Units::deg, 2.*22.5/8.*Gaudi::Units::deg,2.*22.5/8.*Gaudi::Units::deg,2.*22.5/8.*Gaudi::Units::deg,22.5/8.*Gaudi::Units::deg};
386 
387 // GU 08-dec-2005
388 // additionnal LAr fudged before presampler to get better agreement
389 // waiting for Rhoacell measurement to know if this is reasonnable or not
390 // this should be now considered as a systematics
391 // 25mm LAr ~ 0.18 X0
392 // double fudge_lar_gap = 25.*mm;
393 // GU 28--feb-2006 removed this fudge 25mm, not supported by measurements of Rohacell
394 
395  for (int ilar=0;ilar<5;ilar++) {
396  double r1=LAr_inner_radius-delta_LAr[ilar];
397  double r2=LAr_inner_radius;
398 
399 #ifdef DEBUG_GEO
400  std::cout << " Ar additionnal volume before PS " << r1 << " "
401  << r2 << " " << Phi1[ilar]*(1./Gaudi::Units::deg) << " " << Delta_phi[ilar]*(1./Gaudi::Units::deg) << std::endl;
402 #endif
403 
404  GeoTubs* lar_tube = new GeoTubs(r1,
405  r2,
406  LAr_z_max/2.,
407  Phi1[ilar],
408  Delta_phi[ilar]);
409 
410  GeoLogVol* lar_log = new GeoLogVol(baseName+"LAr2",lar_tube,LAr);
411 
412  GeoIntrusivePtr<GeoPhysVol> lar_phys = new GeoPhysVol(lar_log);
413  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D((LAr_z_max-Cryo_Distz)/2.)));
414  Cent_phys->add(lar_phys);
415 
416  }
417 #endif
418 
419 // Outer support rings: 6 steel rings, starting just
420 // after Barrel volume (G10 bars) (r=2003.6)
421 // DZ=80mm for DR=12mm, then DZ=10mm for DR=757mm then DZ=80mm for DR=12mm
422 // at locations z=397,805,1255,1750,2316,2868 mm
423 #ifdef BUILD_SUPPORTRING
424 
425  double R_ring = 2003.6;
426  double DeltaR1_ring = 12.0;
427  double DeltaZ1_ring = 80.0;
428  double DeltaR2_ring = 75.7;
429  double DeltaZ2_ring = 10.0;
430  double DeltaR3_ring = 12.0;
431  double DeltaZ3_ring = 80.0;
432 
433 #ifdef DEBUG_GEO
434  std::cout << " " << std::endl;
435  std::cout << " *** Support Ring1: R/DR/DZ " << R_ring << " "
436  << DeltaR1_ring << " " << DeltaZ1_ring << std::endl;
437  std::cout << " Ring2: R/DR/DZ " << R_ring+DeltaR1_ring << " "
438  << DeltaR2_ring << " " << DeltaZ2_ring << std::endl;
439  std::cout << " Ring3: R/DR/DZ " << R_ring+DeltaR1_ring+DeltaR2_ring << " "
440  << DeltaR3_ring << " " << DeltaZ3_ring << std::endl;
441 #endif
442 
443 
444  GeoTubs* ring1_shape = new GeoTubs(
445  R_ring,
446  R_ring+DeltaR1_ring,
447  DeltaZ1_ring/2.,
448  Phi_Min,
449  Phi_Span);
450  GeoLogVol* ring1_log = new GeoLogVol(baseName+"Ring1",ring1_shape,Iron);
451  GeoIntrusivePtr<GeoPhysVol> ring1_phys = new GeoPhysVol(ring1_log);
452 
453  GeoTubs* ring2_shape = new GeoTubs(
454  R_ring+DeltaR1_ring,
455  R_ring+DeltaR1_ring+DeltaR2_ring,
456  DeltaZ2_ring/2.,
457  Phi_Min,
458  Phi_Span);
459  GeoLogVol* ring2_log = new GeoLogVol(baseName+"Ring2",ring2_shape,Iron);
460  GeoIntrusivePtr<GeoPhysVol> ring2_phys = new GeoPhysVol(ring2_log);
461 
462  GeoTubs* ring3_shape = new GeoTubs(
463  R_ring+DeltaR1_ring+DeltaR2_ring,
464  R_ring+DeltaR1_ring+DeltaR2_ring+DeltaR3_ring,
465  DeltaZ3_ring/2.,
466  Phi_Min,
467  Phi_Span);
468  GeoLogVol* ring3_log = new GeoLogVol(baseName+"Ring3",ring3_shape,Iron);
469  GeoIntrusivePtr<GeoPhysVol> ring3_phys = new GeoPhysVol(ring3_log);
470 
471  static const double zring[6] = {397.,805.,1255.,1750.,2316.,2868.};
472  for (int iring=0; iring < 6; iring++)
473  {
474  double Zcd = zring[iring]-LAr_z_max/2.+Cryo_z0;
475 #ifdef DEBUG_GEO
476  std::cout << " Position ring in LAr mother volume at z = "
477  << Zcd << " (z atlas= " << zring[iring] << std::endl;
478 #endif
479  moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
480  moth_phys->add(ring1_phys);
481  moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
482  moth_phys->add(ring2_phys);
483  moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
484  moth_phys->add(ring3_phys);
485  }
486 #endif
487 
488 // -----------------------------------------------------------------
489 // Cryostat after LAr
490 // -----------------------------------------------------------------
491 #ifdef BUILD_TBCRYO2
492  double rmin,rmax;
493 
494 // Cold vessel
495  rmin = LAr_outer_radius;
496  rmax = LAr_outer_radius + DeltaRout_cold;
497 #ifdef DEBUG_GEO
498  std::cout << " " << std::endl;
499  std::cout << "** Cryostat after calo " << std::endl;
500  std::cout << "cold vessel from " << rmin << " to " << rmax << std::endl;
501  std::cout << " position in mother in z " << -Dz_end_tot/2. << std::endl;
502 #endif
503  GeoTubs * CryoC2_tube = new GeoTubs(
504  rmin,
505  rmax,
506  (Cryo_Distz-Dz_end_tot)/2.,
507  Phi_Min,
508  Phi_Span);
509  GeoLogVol* CryoC2_log = new GeoLogVol(baseName+"ColdTube2",CryoC2_tube,Aluminium);
510  GeoIntrusivePtr<GeoPhysVol> CryoC2_phys = new GeoPhysVol(CryoC2_log);
511  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
512  Cent_phys->add(CryoC2_phys);
513 
514 // vacuum between warn and cold vessel
515  rmin = rmax;
516  rmax = rmin + DeltaRout_vac;
517 #ifdef DEBUG_GEO
518  std::cout << "vacuum from " << rmin << " to " << rmax << std::endl;
519 #endif
520  GeoTubs* CryoV2_tube = new GeoTubs(
521  rmin,
522  rmax,
523  (Cryo_Distz-Dz_end_tot)/2.,
524  Phi_Min,
525  Phi_Span);
526  GeoLogVol* CryoV2_log = new GeoLogVol(baseName+"VacTube2",CryoV2_tube,Vacuum);
527  GeoIntrusivePtr<GeoPhysVol> CryoV2_phys = new GeoPhysVol(CryoV2_log);
528  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
529  Cent_phys->add(CryoV2_phys);
530 
531 // warm vessel
532  rmin = rmax;
533  rmax = rmin + DeltaRout_warm;
534 #ifdef DEBUG_GEO
535  std::cout << "warm vessel from " << rmin << " to " << rmax << std::endl;
536 #endif
537  GeoTubs* CryoW2_tube = new GeoTubs(
538  rmin,
539  rmax,
540  (Cryo_Distz-Dz_end_tot)/2.,
541  Phi_Min,
542  Phi_Span);
543  GeoLogVol* CryoW2_log = new GeoLogVol(baseName+"WarmTube2",CryoW2_tube,Aluminium);
544  GeoIntrusivePtr<GeoPhysVol> CryoW2_phys = new GeoPhysVol(CryoW2_log);
545  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(-Dz_end_tot/2.)));
546  Cent_phys->add(CryoW2_phys);
547 #endif
548 
549 // Cryostat end plates at high z
550 #ifdef BUILD_ENDCRYO
551 
552 
553 // warm vessel
554 #ifdef DEBUG_GEO
555  std::cout << "End plate for warm vessel Rmin,Rmax " << Rmin_mother << " "
556  << Rmax_mother << std::endl;
557  std::cout << " half size in z " << Dz_end_warm/2. << std::endl;
558 #endif
559  GeoTubs* CryoEndW_tube = new GeoTubs(
560  Rmin_mother,
561  Rmax_mother,
562  Dz_end_warm/2.,
563  Phi_Min,
564  Phi_Span);
565  GeoLogVol* CryoEndW_log = new GeoLogVol(baseName+"EndWarm",CryoEndW_tube,Aluminium);
566  GeoIntrusivePtr<GeoPhysVol> CryoEndW_phys = new GeoPhysVol(CryoEndW_log);
567  double zwarm = Cryo_Distz/2. - Dz_end_warm/2.;
568 #ifdef DEBUG_GEO
569  std::cout << " position in mother at z " << zwarm << std::endl;
570 #endif
571  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zwarm)));
572  Cent_phys->add(CryoEndW_phys);
573 
574 // vaccum part
575 #ifdef DEBUG_GEO
576  std::cout << "End plate for vacuum Rmin,Rmax " << Rmin_mother << " "
577  << Rmax_mother << std::endl;
578  std::cout << " half size in z " << Dz_end_vac/2. << std::endl;
579 #endif
580  GeoTubs* CryoEndV_tube = new GeoTubs(
581  Rmin_mother,
582  Rmax_mother,
583  Dz_end_vac/2.,
584  Phi_Min,
585  Phi_Span);
586  GeoLogVol* CryoEndV_log = new GeoLogVol(baseName+"EndVac",CryoEndV_tube,Vacuum);
587  GeoIntrusivePtr<GeoPhysVol> CryoEndV_phys = new GeoPhysVol(CryoEndV_log);
588  double zvac = Cryo_Distz/2. - Dz_end_warm - Dz_end_vac/2.;
589 #ifdef DEBUG_GEO
590  std::cout << " position in mother at z " << zvac << std::endl;
591 #endif
592  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zvac)));
593  Cent_phys->add(CryoEndV_phys);
594 
595 // cold vessel
596 #ifdef DEBUG_GEO
597  std::cout << "End plate for cold vessel Rmin,Rmax " << Rmin_mother << " "
598  << Rmax_mother << std::endl;
599  std::cout << " half size in z " << Dz_end_cold/2. << std::endl;
600 #endif
601  GeoTubs* CryoEndC_tube = new GeoTubs(
602  Rmin_mother,
603  Rmax_mother,
604  Dz_end_cold/2.,
605  Phi_Min,
606  Phi_Span);
607  GeoLogVol* CryoEndC_log = new GeoLogVol(baseName+"EndCold",CryoEndC_tube,Aluminium);
608  GeoIntrusivePtr<GeoPhysVol> CryoEndC_phys = new GeoPhysVol(CryoEndC_log);
609  double zcold = Cryo_Distz/2. - Dz_end_warm - Dz_end_vac -Dz_end_cold/2.;
610 #ifdef DEBUG_GEO
611  std::cout << " position in mother at z " << zcold << std::endl;
612 #endif
613  Cent_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(zcold)));
614  Cent_phys->add(CryoEndC_phys);
615 
616 #endif
617 
618 // --------------------------------------------------------------------
619 // Place the barrel test module inside the LAR volume (moth_phys)
620 // --------------------------------------------------------------------
621 
622 #ifdef BUILD_LARMODULE
623  BarrelConstruction barrelConstruction(true, params); // full geometry
624  barrelConstruction.setBarrelSagging(_barrelSagging);
625  barrelConstruction.setBarrelCellVisLimit(_barrelVisLimit);
626  GeoIntrusivePtr<GeoFullPhysVol> barrelEnvelope = barrelConstruction.GetPositiveEnvelope();
627 
628 //z=0 of ECAM is z=0 of Atlas
629 //z=0 of moth_phys is at + LAr_z_max/2.-Cryo_z0 in atlas frame
630 
631  double Zcd = -LAr_z_max/2.+Cryo_z0;
632 
633 #ifdef DEBUG_GEO
634  std::cout << " " << std::endl;
635  std::cout << " Position ECAM volume in mother LAr at z " << Zcd << std::endl;
636 #endif
637 
638  if (barrelEnvelope ) {
639  moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
640  moth_phys->add(barrelEnvelope);
641  }
642 #endif
643 
644 // ------------------------------------------------------------------------
645 // Place the Presampler test module inside the LAr volume (moth_phys)
646 // ------------------------------------------------------------------------
647 #ifdef BUILD_PRESAMPLER
648  BarrelPresamplerConstruction barrelPSConstruction(1, params);
649  GeoIntrusivePtr<GeoFullPhysVol> barrelPSEnvelope = barrelPSConstruction.GetPositiveEnvelope();
650 // PS lenght = 2*1582.5
651 // start should be a z=0 in Atlas => z = -LAr_z_max/2.+Cryo_z0 in moth_phys
652 // center of PS in moth phys should be at 1582.5-Cryo_Distz+Cryo_z0 in moth_phys
653 
654 // Zcd = 1582.5-LAr_z_max/2.+Cryo_z0;
655 // new value of PS mother lenght
656 // Zcd = 1550.0*mm-LAr_z_max/2.+Cryo_z0;
657 // also the PS is shifted by 3mm to start at z=3mm in Atlas equivalent frame
658  double PresamplerMother_length=1549.*Gaudi::Units::mm;
659  double presamplerShift = 3.*Gaudi::Units::mm;
660  Zcd = presamplerShift+PresamplerMother_length-LAr_z_max/2.+Cryo_z0;
661 
662 #ifdef DEBUG_GEO
663  std::cout << " " << std::endl;
664  std::cout << " Position PS volume in mother LAr at z " << Zcd << std::endl;
665 #endif
666 
667  if (barrelPSEnvelope ) {
668  moth_phys->add(new GeoTransform(GeoTrf::TranslateZ3D(Zcd)));
669  moth_phys->add(barrelPSEnvelope);
670  StoredPhysVol *sPhysVol = new StoredPhysVol(barrelPSEnvelope);
671  StatusCode status=detStore->record(sPhysVol,"PRESAMPLER_B_POS");
672  if(!status.isSuccess()) throw std::runtime_error ("Cannot store PRESAMPLER_B_POS");
673  }
674 
675 #endif
676 
677  return cryoMotherPhysical;
678 
679 }

◆ setBarrelCellVisLimit()

void LArGeo::TBBarrelCryostatConstruction::setBarrelCellVisLimit ( int  maxCell)
inline

Definition at line 28 of file TBBarrelCryostatConstruction.h.

◆ setBarrelSagging()

void LArGeo::TBBarrelCryostatConstruction::setBarrelSagging ( bool  flag)
inline

Definition at line 27 of file TBBarrelCryostatConstruction.h.

Member Data Documentation

◆ _barrelSagging

bool LArGeo::TBBarrelCryostatConstruction::_barrelSagging
private

Definition at line 31 of file TBBarrelCryostatConstruction.h.

◆ _barrelVisLimit

int LArGeo::TBBarrelCryostatConstruction::_barrelVisLimit
private

Definition at line 32 of file TBBarrelCryostatConstruction.h.

◆ cryoMotherPhysical

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::TBBarrelCryostatConstruction::cryoMotherPhysical
private

Definition at line 33 of file TBBarrelCryostatConstruction.h.


The documentation for this class was generated from the following files:
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
LAr
Definition: LArVolumeBuilder.h:36
StoredMaterialManager::getElement
virtual const GeoElement * getElement(const std::string &name)=0
cm3
#define cm3
deg
#define deg
Definition: SbPolyhedron.cxx:17
MCP::ScaleSmearParam::r2
@ r2
LArGeo::TBBarrelCryostatConstruction::_barrelVisLimit
int _barrelVisLimit
Definition: TBBarrelCryostatConstruction.h:32
StoredPhysVol
Definition: StoredPhysVol.h:27
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:92
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
master.flag
bool flag
Definition: master.py:29
LArGeo::TBBarrelCryostatConstruction::_barrelSagging
bool _barrelSagging
Definition: TBBarrelCryostatConstruction.h:31
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
python.PhysicalConstants.universe_mean_density
int universe_mean_density
Definition: PhysicalConstants.py:126
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name)=0
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
merge.status
status
Definition: merge.py:17
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
MCP::ScaleSmearParam::r1
@ r1
maxCell
#define maxCell
LArGeo::TBBarrelCryostatConstruction::cryoMotherPhysical
GeoIntrusivePtr< GeoFullPhysVol > cryoMotherPhysical
Definition: TBBarrelCryostatConstruction.h:33