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

#include <HECConstructionH62004.h>

Collaboration diagram for LArGeo::HECConstructionH62004:

Public Member Functions

 HECConstructionH62004 ()
 
virtual ~HECConstructionH62004 ()
 
GeoIntrusivePtr< GeoVFullPhysVol > GetEnvelope ()
 

Private Member Functions

 HECConstructionH62004 (const HECConstructionH62004 &)
 
HECConstructionH62004operator= (const HECConstructionH62004 &)
 

Private Attributes

GeoIntrusivePtr< GeoFullPhysVol > m_h6Phys
 

Detailed Description

Definition at line 20 of file HECConstructionH62004.h.

Constructor & Destructor Documentation

◆ HECConstructionH62004() [1/2]

LArGeo::HECConstructionH62004::HECConstructionH62004 ( )

Definition at line 53 of file HECConstructionH62004.cxx.

54  :m_h6Phys(nullptr)
55 {
56  // access source of detector parameters
57  // m_parameters = LArGeo::VDetectorParameters::GetInstance();
58 }

◆ ~HECConstructionH62004()

LArGeo::HECConstructionH62004::~HECConstructionH62004 ( )
virtualdefault

◆ HECConstructionH62004() [2/2]

LArGeo::HECConstructionH62004::HECConstructionH62004 ( const HECConstructionH62004 )
private

Member Function Documentation

◆ GetEnvelope()

GeoIntrusivePtr< GeoVFullPhysVol > LArGeo::HECConstructionH62004::GetEnvelope ( )

Definition at line 65 of file HECConstructionH62004.cxx.

66 {
67 
68  if (m_h6Phys) return (m_h6Phys);
69 
70 
71  ISvcLocator *svcLocator = Gaudi::svcLocator();
72  IMessageSvc * msgSvc;
73  if (svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
74  throw std::runtime_error("Error in HECConstruction, cannot access MessageSvc");
75  }
76  MsgStream log(msgSvc, "HECConstruction");
77  log << MSG::INFO;
78  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
79  log << "+ +" << std::endl;
80  log << "+ Start of HEC TB GeoModel definition +" << std::endl;
81  log << "+ +" << std::endl;
82  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
83 
84 
85  StoreGateSvc *detectorStore;
86  if (svcLocator->service("DetectorStore", detectorStore, false )==StatusCode::FAILURE) {
87  throw std::runtime_error("Error in HECConstruction, cannot access DetectorStore");
88  }
89 
90 
91  StatusCode sc;
92  IRDBAccessSvc *pAccessSvc;
93  sc=svcLocator->service("RDBAccessSvc",pAccessSvc);
94  if (sc != StatusCode::SUCCESS) {
95  throw std::runtime_error ("Cannot locate RDBAccessSvc!!");
96  }
97 
98 
99  StoredMaterialManager* materialManager = nullptr;
100  if (StatusCode::SUCCESS != detectorStore->retrieve(materialManager, std::string("MATERIALS"))) {
101  return nullptr;
102  }
103 
104 
105 
106  //-----------------------------------------------------------------------------------//
107  // Get the materials that we shall use. //
108  // ----------------------------------------------------------------------------------//
109 
110  //const GeoMaterial *air = materialManager->getMaterial("std::Air");
111 
112  const GeoMaterial *LAr = materialManager->getMaterial("std::LiquidArgon");
113  if (!LAr) throw std::runtime_error("Error in HECConstruction, std::LiquidArgon is not found.");
114 
115  const GeoMaterial *Iron = materialManager->getMaterial("std::Iron");
116  if (!Iron) throw std::runtime_error("Error in HECConstruction, std::Iron is not found.");
117 
118  const GeoMaterial *Copper = materialManager->getMaterial("std::Copper");
119  if (!Copper) throw std::runtime_error("Error in HECConstruction, std::Copper is not found.");
120 
121  const GeoMaterial *Kapton = materialManager->getMaterial("std::Kapton");
122  if (!Kapton) throw std::runtime_error("Error in HECConstruction, std::Kapton is not found.");
123 
124 
125  DecodeVersionKey larVersion("LAr");
126  const std::string& detectorKey = larVersion.tag();
127  const std::string& detectorNode = larVersion.node();
128 
129  IRDBRecordset_ptr hadronicEndcap = pAccessSvc->getRecordsetPtr("HadronicEndcap",detectorKey, detectorNode);
130  IRDBRecordset_ptr hecLongitudinalBlock = pAccessSvc->getRecordsetPtr("HecLongitudinalBlock",detectorKey, detectorNode);
131  if(!hadronicEndcap) throw std::runtime_error("Error in HECConstruction: hadronicEendcap not found");
132  if(!hecLongitudinalBlock) throw std::runtime_error("Error in HECConstruction: hecLongitudinalBlock not found");
133 
134  int numberZplane = 6;
135  int depthNumber = 7;
136  double depthSize[7];
137  double kaptonPosition[3];
138  double kaptonWidth[3];
139  double tieRodPositionX[4];
140  double tieRodPositionY[4];
141  double tieRodDiameter[2];
142  double spacerDiameter[2];
143  double firstAbsorber[7];
144  int gapNumber[7];
145 
146  double zCoordinate[6],innerRadius[6],outerRadius[6];
147 
148  double absorberPosY = 1.02*Gaudi::Units::cm;
149  double PosYcorr = 0.005*Gaudi::Units::cm;
150 
151  const double moduleNumber = (*hadronicEndcap)[0]->getInt("NSCT"); // 32 Modules
152  unsigned int TBmoduleNumber = 8;
153  double moduleRinner1 = (*hecLongitudinalBlock)[0]->getDouble("BLRMN")*Gaudi::Units::cm; // 37.2*Gaudi::Units::cm Inner Radius
154  double moduleRinner2 = (*hecLongitudinalBlock)[1]->getDouble("BLRMN")*Gaudi::Units::cm; // 47.5*Gaudi::Units::cm
155  //double moduleRouter = (*hecLongitudinalBlock)[0]->getDouble("BLRMX")*Gaudi::Units::cm; //203.*Gaudi::Units::cm Outer Radius
156  double copperPad = (*hadronicEndcap)[0]->getDouble("COPPER")*Gaudi::Units::cm; // 0.003.*Gaudi::Units::cm
157  double gapSize = (*hadronicEndcap)[0]->getDouble("LARG")*Gaudi::Units::cm; // 8.5*Gaudi::Units::mm
158  double betweenWheel = (*hadronicEndcap)[0]->getDouble("GAPWHL")*Gaudi::Units::cm-0.001*Gaudi::Units::cm; //40.5*Gaudi::Units::mm
159  int indexloop,index;
160  for (indexloop=0; indexloop < depthNumber; ++indexloop){
161  depthSize[indexloop] = (*hecLongitudinalBlock)[indexloop]->getDouble("BLDPTH")*Gaudi::Units::cm;
162  firstAbsorber[indexloop]= (*hecLongitudinalBlock)[indexloop]->getDouble("PLATE0")*Gaudi::Units::cm;
163  gapNumber[indexloop] = (int) (*hecLongitudinalBlock)[indexloop]->getDouble("BLMOD"); // 4 or 8
164  }
165 
166  std::string sidx[4]={"_0","_1","_2","_3"};
167 
168  for (indexloop=0; indexloop < 3; ++indexloop){
169  kaptonPosition[indexloop] = (*hadronicEndcap)[0]->getDouble("KPTPOS" + sidx[indexloop])*Gaudi::Units::cm;
170  kaptonWidth[indexloop] = (*hadronicEndcap)[0]->getDouble("KPTWID" + sidx[indexloop])*Gaudi::Units::cm;
171  }
172 
173  for (indexloop=0; indexloop < 4; ++indexloop){
174  tieRodPositionX[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSX" + sidx[indexloop])*Gaudi::Units::cm;
175  tieRodPositionY[indexloop] = (*hadronicEndcap)[0]->getDouble("RODPOSR" + sidx[indexloop])*Gaudi::Units::cm;
176  }
177 
178  for (indexloop=0; indexloop < 2; ++indexloop){
179  tieRodDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("RODDIM" + sidx[indexloop])*Gaudi::Units::cm;
180  spacerDiameter[indexloop] = (*hadronicEndcap)[0]->getDouble("SPCDIM" + sidx[indexloop])*Gaudi::Units::cm;
181  }
182 
183  double absorberZ1 = (*hadronicEndcap)[0]->getDouble("PLATE_0")*Gaudi::Units::cm; // 2.5*Gaudi::Units::cm;
184  double absorberZ2 = (*hadronicEndcap)[0]->getDouble("PLATE_1")*Gaudi::Units::cm; //5.0*Gaudi::Units::cm;
185 
186  const double moduleDeltaPhi = 2*M_PI/moduleNumber; //11.25*Gaudi::Units::deg;
187  double modulePhistart = -moduleDeltaPhi/2.;
188  //double modulePhistart = 0.0*Gaudi::Units::deg;
189  zCoordinate[0]=0.0*Gaudi::Units::cm;
190  zCoordinate[1]=depthSize[0]; //28.05*Gaudi::Units::cm;
191  zCoordinate[2]=depthSize[0]+0.001*Gaudi::Units::cm; //28.051*Gaudi::Units::cm;
192  zCoordinate[3]=zCoordinate[2]+depthSize[1]+depthSize[2]+betweenWheel/2;
193  zCoordinate[4]=zCoordinate[3]+depthSize[3]+depthSize[4]+betweenWheel/2;
194  zCoordinate[5]=181.8*Gaudi::Units::cm;
195  innerRadius[0]=moduleRinner1;
196  innerRadius[1]=moduleRinner1;
197  for (index=2; index<numberZplane;++index) {innerRadius[index]=moduleRinner2;}
198  for (index=0; index<numberZplane;++index) {outerRadius[index]=innerRadius[0] + 78.7*Gaudi::Units::cm; }
199 
200 
201 //----------------------------------------------------------------
202 // HEC
203 //----------------------------------------------------------------
204 
205 
206  std::string hecName = "LAr::HEC::LiquidArgon";
207  GeoPcon* solidHEC = new GeoPcon(M_PI / 2., TBmoduleNumber*moduleDeltaPhi);
208  for (int i = 0; i < numberZplane - 1; ++i) {
209  solidHEC->addPlane(zCoordinate[i],innerRadius[i]-PosYcorr,outerRadius[i]);
210  }
211  const GeoLogVol *logicHEC = new GeoLogVol(hecName, solidHEC , LAr);
212 
213  m_h6Phys = new GeoFullPhysVol(logicHEC);
214 
215  std::string tag = std::string("HEC_POS");
217 
218  StoredPhysVol *sPhysVol = new StoredPhysVol(m_h6Phys);
219  status=detectorStore->record(sPhysVol,tag);
220  if(!status.isSuccess()) throw std::runtime_error ((std::string("Cannot store")+tag).c_str());
221 
222 
223 // Depth
224  std::array<GeoIntrusivePtr<GeoTubs>, 7> solidDepth{};
225  std::array<GeoIntrusivePtr<GeoLogVol>, 7> logiDepth{};
226  std::array<GeoIntrusivePtr<GeoPhysVol>, 7> physiDepth{};
227 
228 // Slice
229  std::array<GeoIntrusivePtr<GeoTubs>, 3> solidSlice{};
230  std::array<GeoIntrusivePtr<GeoLogVol>, 3> logiSlice{};
231  std::array<GeoIntrusivePtr<GeoPhysVol>, 3> physiSlice{};
232 
233 // EstBoard
234  GeoIntrusivePtr<GeoTubs> solidEstBoard{};
235  GeoIntrusivePtr<GeoLogVol> logiEstBoard{};
236  GeoIntrusivePtr<GeoPhysVol> physiEstBoard{};
237 
238 // PadBoard
239  GeoIntrusivePtr<GeoTubs> solidPadBoard{};
240  GeoIntrusivePtr<GeoLogVol> logiPadBoard{};
241  GeoIntrusivePtr<GeoPhysVol> physiPadBoard{};
242 
243 // TieRod in the gap
244  std::array<GeoIntrusivePtr<GeoTubs>, 2> solidTieRod{};
245  std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiTieRod{};
246  std::array<GeoIntrusivePtr<GeoPhysVol>, 2> physiTieRod{};
247 // TieRod in absorbers
248  std::array<GeoIntrusivePtr<GeoTubs>, 2> solidAbsorberTieRod{};
249  std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiAbsorberTieRod{};
250  std::array<GeoIntrusivePtr<GeoPhysVol>, 2> physiAbsorberTieRod{};
251 // Absorber
252  std::array<GeoIntrusivePtr<GeoTubs>, 3> solidAbsorber{};
253  std::array<GeoIntrusivePtr<GeoLogVol>, 3> logiAbsorber{};
254  std::array<GeoIntrusivePtr<GeoPhysVol>, 3> physiAbsorber{};
255 // First Absorber
256  GeoIntrusivePtr<GeoTubs> solidFirstAbsorber{};
257  GeoIntrusivePtr<GeoLogVol> logiFirstAbsorber{};
258  GeoIntrusivePtr<GeoPhysVol> physiFirstAbsorber{};
259 
260 //----------------------------------------------------------------
261 // HEC Module
262 //----------------------------------------------------------------
263 
264 // Module
265  std::string moduleName = "LAr::HEC::Module";
266  GeoPcon* solidModule = new GeoPcon(modulePhistart, moduleDeltaPhi);
267  for (int i=0; i< numberZplane - 1; ++i){
268  solidModule->addPlane(zCoordinate[i],innerRadius[i]-PosYcorr,outerRadius[i]);
269  }
270  GeoLogVol* logicModule = new GeoLogVol(moduleName, solidModule , LAr);
271  GeoIntrusivePtr<GeoPhysVol> physiModule = new GeoPhysVol(logicModule);
272  {
273  //----------------------------------------------------------------
274  // Place Module in HEC mother
275  //----------------------------------------------------------------
276  GeoSerialIdentifier *sI = new GeoSerialIdentifier(9);
277  GeoGenfun::Variable Index;
278  GeoGenfun::GENFUNCTION ModuleRotationAngle = M_PI/2. + moduleDeltaPhi/2. + moduleDeltaPhi*Index;
279  GeoXF::TRANSFUNCTION t = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngle);
280  GeoSerialTransformer *sT = new GeoSerialTransformer (physiModule,&t,TBmoduleNumber);
281  m_h6Phys->add(sI);
282  m_h6Phys->add(sT);
283  }
284 
285 //----------------------------------------------------------------
286 // Sensitive slicegap
287 //----------------------------------------------------------------
288  int sliceCopyNo=0;
289  std::string depthName = moduleName + "::Depth";
290  std::string sliceName = depthName + "::Slice";
291  double moduleRinner= moduleRinner1 ;
292  int sliceNo;
293  for( sliceNo=0; sliceNo<3; sliceNo++){
294  if (sliceNo>0) moduleRinner = moduleRinner2;
295  solidSlice[sliceNo] = new GeoTubs(moduleRinner-PosYcorr,outerRadius[0],gapSize/2.,modulePhistart,moduleDeltaPhi);
296  logiSlice[sliceNo] = new GeoLogVol(sliceName, solidSlice[sliceNo], LAr);
297  physiSlice[sliceNo] = new GeoPhysVol(logiSlice[sliceNo]);
298  }
299 
300 //----------------------------------------------------------------
301 // Absorbers , the inner and outer Radius are smaller on 1.02*Gaudi::Units::cm
302 // but positionned in the center of depth. this alows
303 // to have 2 Gaudi::Units::mm gap between the copper plates of neighbor Modules
304 //----------------------------------------------------------------
305  std::string absorberName = depthName + "::Absorber";
306  double absorberRinner1 = moduleRinner1-absorberPosY;
307  double absorberRinner2 = moduleRinner2-absorberPosY;
308  double absorberRouter = outerRadius[0] - absorberPosY;
309  solidAbsorber[0] = new GeoTubs(absorberRinner1,absorberRouter,absorberZ1/2.,
310  modulePhistart,moduleDeltaPhi);
311  solidAbsorber[1] = new GeoTubs(absorberRinner2,absorberRouter,absorberZ1/2.,
312  modulePhistart,moduleDeltaPhi);
313  solidAbsorber[2] = new GeoTubs(absorberRinner2,absorberRouter,absorberZ2/2.,
314  modulePhistart,moduleDeltaPhi);
315  int absorberNo;
316  for (absorberNo=0;absorberNo<3;absorberNo++){
317  logiAbsorber[absorberNo] = new GeoLogVol(absorberName, solidAbsorber[absorberNo], Copper);
318  physiAbsorber[absorberNo] = new GeoPhysVol(logiAbsorber[absorberNo]);
319  }
320 //----------------------------------------------------------------
321 // First Absorbers in front of first and third samplings
322 //----------------------------------------------------------------
323  std::string firstAbsorberName = depthName + "::FirstAbsorber";
324  solidFirstAbsorber = new GeoTubs(moduleRinner1-absorberPosY,outerRadius[0]-absorberPosY,firstAbsorber[0]/2.,
325  modulePhistart,moduleDeltaPhi);
326  logiFirstAbsorber = new GeoLogVol(firstAbsorberName, solidFirstAbsorber, Copper);
327  physiFirstAbsorber = new GeoPhysVol(logiFirstAbsorber);
328 
329 //----------------------------------------------------------------
330 // Place 7 depths in 1 Module of HEC
331 // Only 5 depths in TB
332 //----------------------------------------------------------------
333  double depthPositionZ = 0.;
334  for(int indexDepth=0; indexDepth<5; indexDepth++){
335  depthPositionZ +=depthSize[indexDepth]/2.;
336  if (indexDepth==1) depthPositionZ +=0.001*Gaudi::Units::cm;
337  moduleRinner = moduleRinner2;
338  if (indexDepth==0) moduleRinner = moduleRinner1; //for first depth
339  //Absorber size and position
340  double absorberSize = absorberZ2;
341  if (indexDepth < 3) {
342  absorberSize = absorberZ1;
343  }
344  double absorberPositionZ=firstAbsorber[indexDepth]+
345  gapSize+absorberSize/2.0-depthSize[indexDepth]/2.0;
346  // Now depth
347  solidDepth[indexDepth] = new GeoTubs(moduleRinner-PosYcorr,outerRadius[0], depthSize[indexDepth]/2.,
348  modulePhistart,moduleDeltaPhi);
349  logiDepth[indexDepth] = new GeoLogVol(depthName, solidDepth[indexDepth], LAr);
350  physiDepth[indexDepth] = new GeoPhysVol(logiDepth[indexDepth]);
351 
352  physiModule->add(new GeoIdentifierTag(100+indexDepth));
353  physiModule->add(new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));
354  physiModule->add(physiDepth[indexDepth]);
355  depthPositionZ +=depthSize[indexDepth]/2.;
356  if (indexDepth==2) depthPositionZ +=betweenWheel;
357 // Position of 8 (or 4)sensitive gaps and absorbers in 7 depths
358  double slicePositionZ=firstAbsorber[indexDepth] + gapSize/2.0 - depthSize[indexDepth]/2.0;
359  if (indexDepth>0) sliceCopyNo += gapNumber[indexDepth-1];
360  if(indexDepth==0) {
361  sliceNo=0;
362  absorberNo=0;
363  } else {
364  sliceNo=1;
365  absorberNo=1;
366  }
367  if(indexDepth>2) {
368  sliceNo=2;
369  absorberNo=2;
370  }
371 
372  GeoGenfun::Variable Index;
373  GeoXF::TRANSFUNCTION TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (absorberSize+gapSize)*Index);
374  GeoXF::TRANSFUNCTION TA = GeoTrf::TranslateX3D(absorberPosY) * GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),absorberPositionZ + (absorberSize+gapSize)*Index);
375 
376  GeoSerialIdentifier *sI = new GeoSerialIdentifier(sliceCopyNo);
377  GeoSerialTransformer *sTS = new GeoSerialTransformer(physiSlice[sliceNo], &TS, gapNumber[indexDepth]);
378  GeoSerialTransformer *sTA = new GeoSerialTransformer(physiAbsorber[absorberNo],&TA, gapNumber[indexDepth]);
379  physiDepth[indexDepth]->add(sI);
380  physiDepth[indexDepth]->add(sTS);
381  physiDepth[indexDepth]->add(sI);
382  physiDepth[indexDepth]->add(sTA);
383  } //for indexDepth
384 
385  double firstAbsorberPositionZ = firstAbsorber[0]/2.- depthSize[0]/2.0;
386  physiDepth[0]->add(new GeoIdentifierTag(50));
387  physiDepth[0]->add(new GeoTransform(GeoTrf::Translate3D(absorberPosY,0,firstAbsorberPositionZ)));
388  physiDepth[0]->add(physiFirstAbsorber);
389 
390 
391  firstAbsorberPositionZ = firstAbsorber[3]/2.- depthSize[3]/2.0;
392  physiAbsorber[1] = new GeoPhysVol(logiAbsorber[1]);
393  physiDepth[3]->add(new GeoIdentifierTag(51));
394  physiDepth[3]->add(new GeoTransform(GeoTrf::Translate3D(absorberPosY,0,firstAbsorberPositionZ)));
395  physiDepth[3]->add(physiAbsorber[1]);
396 
397 
398 
399 //----------------------------------------------------------------
400 // Electronic boards of Slice
401 //----------------------------------------------------------------
402  std::string electrodeName = sliceName + "::Electrode";
403  std::string copperName = electrodeName + "::Copper";
404  for(int indexBoard=0; indexBoard<3; indexBoard++){
405  if (indexBoard==0) moduleRinner = moduleRinner1;
406  else moduleRinner = moduleRinner2;
407  int indexKapton=1;
408  solidPadBoard = new GeoTubs(moduleRinner,outerRadius[0],copperPad/2.,modulePhistart,moduleDeltaPhi);
409  logiPadBoard = new GeoLogVol(copperName, solidPadBoard, Copper);
410  solidEstBoard = new GeoTubs(moduleRinner,outerRadius[0],(kaptonWidth[indexKapton]/2.+kaptonWidth[0]),
411  modulePhistart,moduleDeltaPhi);
412  logiEstBoard = new GeoLogVol(electrodeName, solidEstBoard, Kapton);
413 //
414  double kaptonPositionZ = kaptonPosition[indexKapton]-gapSize/2.;
415 
416  physiEstBoard = new GeoPhysVol(logiEstBoard);
417  physiSlice[indexBoard]->add(new GeoIdentifierTag(indexKapton));
418  physiSlice[indexBoard]->add(new GeoTransform(GeoTrf::Translate3D(0,0,kaptonPositionZ)));
419  physiSlice[indexBoard]->add(physiEstBoard);
420 
421  if(indexKapton==1) {
422  physiPadBoard = new GeoPhysVol(logiPadBoard);
423  physiEstBoard->add(new GeoIdentifierTag(indexKapton));
424  physiEstBoard->add(new GeoTransform(GeoTrf::Translate3D(0,0,0)));
425  physiEstBoard->add(physiPadBoard);
426  }
427  }//for indexBoard
428 //----------------------------------------------------------------
429 // Tie rods in Slice
430 //----------------------------------------------------------------
431 
432  std::string tieRodName = sliceName + "::TieRod";
433  double ztie[2];
434  ztie[0]=-0.227825*Gaudi::Units::cm;
435  ztie[1]= 0.227825*Gaudi::Units::cm;
436  double rodSize = 0.39435*Gaudi::Units::cm;
437  for (int indexWheel=0; indexWheel<2; indexWheel++) {
438  solidTieRod[indexWheel] = new GeoTubs(0.*Gaudi::Units::cm,spacerDiameter[indexWheel]/2.,rodSize/2.,
439  0.*Gaudi::Units::deg,360.*Gaudi::Units::deg); //size
440  logiTieRod[indexWheel] = new GeoLogVol(tieRodName,solidTieRod[indexWheel], Iron);
441  }
442  for(int numberSlice=0; numberSlice<3; numberSlice++){
443  int numberTie=0;
444  if(numberSlice==2) numberTie=1;
445  int indexRod;
446  for(indexRod=1; indexRod<2; indexRod++){
447  for(int iz=0;iz<2;iz++){
448  physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
449  physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
450  physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod],
451  tieRodPositionX[indexRod],ztie[iz])));
452  physiSlice[numberSlice]->add(physiTieRod[numberTie]);
453 
454  physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
455  physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
456  physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod],
457  -tieRodPositionX[indexRod],ztie[iz])));
458  physiSlice[numberSlice]->add(physiTieRod[numberTie]);
459  }//for iz
460  }
461  for( int iz1=0;iz1<2;iz1++){
462  physiTieRod[numberTie] = new GeoPhysVol(logiTieRod[numberTie]);
463  physiSlice[numberSlice]->add(new GeoIdentifierTag(indexRod));
464  physiSlice[numberSlice]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[0],tieRodPositionX[0],ztie[iz1])));
465  physiSlice[numberSlice]->add(physiTieRod[numberTie]);
466  }//for iz1
467  }
468 
469 //----------------------------------------------------------------
470 // Tie rods in Absorbers
471 //----------------------------------------------------------------
472 
473  solidAbsorberTieRod[0] = new GeoTubs(0.*Gaudi::Units::cm,tieRodDiameter[0]/2.,absorberZ1/2.,0.*Gaudi::Units::deg,360.*Gaudi::Units::deg);
474  solidAbsorberTieRod[1] = new GeoTubs(0.*Gaudi::Units::cm,tieRodDiameter[1]/2.,absorberZ2/2.,0.*Gaudi::Units::deg,360.*Gaudi::Units::deg);
475  logiAbsorberTieRod[0] = new GeoLogVol(tieRodName, solidAbsorberTieRod[0], Iron);
476  logiAbsorberTieRod[1] = new GeoLogVol(tieRodName, solidAbsorberTieRod[1], Iron);
477  for(int indexA=0; indexA<3; indexA++){
478  int indexR=0;
479  if(indexA>1) indexR=1;
480  int indexRod;
481  for(indexRod=1; indexRod<2; indexRod++){
482  physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
483  physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
484  physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
485  tieRodPositionX[indexRod], 0)));
486  physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]);
487 
488  physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
489  physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
490  physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[indexRod]+absorberPosY,
491  -tieRodPositionX[indexRod], 0)));
492  physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]);
493  }
494  physiAbsorberTieRod[indexR] = new GeoPhysVol(logiAbsorberTieRod[indexR]);
495  physiAbsorber[indexA]->add(new GeoIdentifierTag(indexRod));
496  physiAbsorber[indexA]->add(new GeoTransform(GeoTrf::Translate3D(tieRodPositionY[0]+absorberPosY,
497  tieRodPositionX[0],0)));
498  physiAbsorber[indexA]->add(physiAbsorberTieRod[indexR]);
499  }
500 
501 
502  std::cout << " In the H6 2004 HEC Constr. GetEnvelope - about to return m_h6Phys " << std::endl;
503 
504  return m_h6Phys;
505 
506 }

◆ operator=()

HECConstructionH62004& LArGeo::HECConstructionH62004::operator= ( const HECConstructionH62004 )
private

Member Data Documentation

◆ m_h6Phys

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::HECConstructionH62004::m_h6Phys
private

Definition at line 44 of file HECConstructionH62004.h.


The documentation for this class was generated from the following files:
JTC::TS
TS
Definition: IJetTileCorrectionTool.h:27
IRDBAccessSvc::getRecordsetPtr
virtual IRDBRecordset_ptr getRecordsetPtr(const std::string &node, const std::string &tag, const std::string &tag2node="", const std::string &connName="ATLASDD")=0
Provides access to the Recordset object containing HVS-tagged data.
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
LAr
Definition: LArVolumeBuilder.h:36
index
Definition: index.py:1
M_PI
#define M_PI
Definition: ActiveFraction.h:11
deg
#define deg
Definition: SbPolyhedron.cxx:17
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
StoredPhysVol
Definition: StoredPhysVol.h:27
LArGeo::HECConstructionH62004::m_h6Phys
GeoIntrusivePtr< GeoFullPhysVol > m_h6Phys
Definition: HECConstructionH62004.h:44
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
Index
IndexedConstituentUserInfo::Index Index
Definition: IndexedConstituentUserInfo.cxx:12
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:92
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
Atlas.StoreGateSvc
StoreGateSvc
Definition: Atlas.UnixStandardJob.py:25
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
DeMoScan.index
string index
Definition: DeMoScan.py:362
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
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
jet::CombMassComp::TA
@ TA
Definition: UncertaintyEnum.h:198