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

#include <FCALConstructionH62004.h>

Collaboration diagram for LArGeo::FCALConstructionH62004:

Public Member Functions

 FCALConstructionH62004 ()
 
virtual ~FCALConstructionH62004 ()
 
GeoIntrusivePtr< GeoVFullPhysVol > GetEnvelope ()
 
void setFCALVisLimit (int maxCell)
 

Private Member Functions

 FCALConstructionH62004 (const FCALConstructionH62004 &)
 
FCALConstructionH62004operator= (const FCALConstructionH62004 &)
 

Private Attributes

GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical1 {}
 
GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical2 {}
 
GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical3 {}
 
int m_VisLimit
 
ISvcLocator * m_svcLocator
 
IRDBRecordset_ptr m_fcalElectrode
 
IRDBRecordset_ptr m_fcalMod
 

Detailed Description

Definition at line 20 of file FCALConstructionH62004.h.

Constructor & Destructor Documentation

◆ FCALConstructionH62004() [1/2]

LArGeo::FCALConstructionH62004::FCALConstructionH62004 ( )

Definition at line 69 of file FCALConstructionH62004.cxx.

69  :
70  m_absPhysical1(nullptr),
71  m_absPhysical2(nullptr),
72  m_absPhysical3(nullptr),
73  m_VisLimit(0)
74 {
75  m_svcLocator = Gaudi::svcLocator();
76  IRDBAccessSvc* rdbAccess;
77 
78  if(m_svcLocator->service ("RDBAccessSvc",rdbAccess) == StatusCode::FAILURE)
79  throw std::runtime_error("Error in FCALConstructionH62004, cannot access RDBAccessSvc");
80  DecodeVersionKey larVersionKey("LAr");
81 
82  m_fcalElectrode = rdbAccess->getRecordsetPtr("LArFCalElectrodes","LArFCalElectrodes-H6-00");
83  if (m_fcalElectrode->size()==0)
84  throw std::runtime_error("Error getting FCAL electrode from database");
85 
86  m_fcalMod = rdbAccess->getRecordsetPtr("FCalMod", larVersionKey.tag(),larVersionKey.node());
87  if (m_fcalMod->size()==0) {
88  m_fcalMod=rdbAccess->getRecordsetPtr("FCalMod", "FCalMod-00");
89  if (m_fcalMod->size()==0) {
90  throw std::runtime_error("Error getting FCAL Module parameters from database");
91  }
92  }
93 
94 }

◆ ~FCALConstructionH62004()

LArGeo::FCALConstructionH62004::~FCALConstructionH62004 ( )
virtualdefault

◆ FCALConstructionH62004() [2/2]

LArGeo::FCALConstructionH62004::FCALConstructionH62004 ( const FCALConstructionH62004 )
private

Member Function Documentation

◆ GetEnvelope()

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

Definition at line 104 of file FCALConstructionH62004.cxx.

105 {
106 
107  // Flags to turn on volumes.
108  const bool F1=true,F2=true,F3=true; // F3 is a cold tail-catcher here
109  /*
110  struct Electrode_t {
111  std::string name;
112  unsigned int id;
113  int i;
114  int j;
115  double x;
116  double y;
117  };
118  */
119 
120  struct FCALData_t
121  {
122  double innerModuleRadius;
123  double outerModuleRadius;
124  double fullModuleDepth;
125  double innerGapRadius;
126  double outerGapRadius;
127  double fullGapDepth;
128  int FCalSampling;
129  };
130 
131 
132  IMessageSvc * msgSvc;
133  if (m_svcLocator->service("MessageSvc", msgSvc, true )==StatusCode::FAILURE) {
134  throw std::runtime_error("Error in FCALConstructionH62004, cannot access MessageSvc");
135  }
136  MsgStream log(msgSvc, "FCALConstructionH62004");
137 
138  log << MSG::INFO;
139 
140  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
141  log << "+ +" << std::endl;
142  log << "+ Start of FCAL GeoModel definition +" << std::endl;
143  log << "+ +" << std::endl;
144  log << "++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
145 
147  if (m_svcLocator->service("DetectorStore", detStore, false )==StatusCode::FAILURE) {
148  throw std::runtime_error("Error in FCALConstructionH62004, cannot access DetectorStore");
149  }
150 
151 
152 
153 
154  StoredMaterialManager* materialManager = nullptr;
155  if (StatusCode::SUCCESS != detStore->retrieve(materialManager, std::string("MATERIALS"))) return nullptr;
156 
157  const GeoMaterial *Copper = materialManager->getMaterial("std::Copper");
158  if (!Copper) throw std::runtime_error("Error in FCALConstructionH62004, std::Copper is not found.");
159 
160  const GeoMaterial *Iron = materialManager->getMaterial("std::Iron");
161  if (!Iron) throw std::runtime_error("Error in FCALConstructionH62004, std::Iron is not found.");
162 
163  const GeoMaterial *Lead = materialManager->getMaterial("std::Lead");
164  if (!Lead) throw std::runtime_error("Error in FCALConstructionH62004, std::Lead is not found.");
165 
166  const GeoMaterial *LAr = materialManager->getMaterial("std::LiquidArgon");
167  if (!LAr) throw std::runtime_error("Error in FCALConstructionH62004, std::LiquidArgon is not found.");
168 
169  const GeoMaterial *Air = materialManager->getMaterial("std::Air");
170  if (!Air) throw std::runtime_error("Error in FCALConstructionH62004, std::Air is not found.");
171 
172  const GeoMaterial *Kapton = materialManager->getMaterial("std::Kapton");
173  if (!Kapton) throw std::runtime_error("Error in FCALConstructionH62004, std::Kapton is not found.");
174 
175  const GeoMaterial *Glue = materialManager->getMaterial("LAr::Glue");
176  if (!Glue) throw std::runtime_error("Error in FCALConstructionH62004, LAr::Glue is not found.");
177 
178  const GeoMaterial *G10 = materialManager->getMaterial("LAr::G10");
179  if (!G10) throw std::runtime_error("Error in FCALConstructionH62004, LAr::G10 is not found.");
180 
181 
182  const GeoMaterial *FCal1Absorber = materialManager->getMaterial("LAr::FCal1Absorber");
183  if (!FCal1Absorber) throw std::runtime_error("Error in FCALConstructionH62004, LAr::FCal1Absorber is not found.");
184 
185  const GeoMaterial *FCal23Absorber = materialManager->getMaterial("LAr::FCal23Absorber");
186  if (!FCal23Absorber) throw std::runtime_error("Error in FCALConstructionH62004, LAr::FCal23Absorber is not found.");
187 
188  const GeoMaterial *FCalCableHarness = materialManager->getMaterial("LAr::FCalCableHarness");
189  if (!FCalCableHarness) throw std::runtime_error("Error in FCALConstructionH62004, LAr::FCalCableHarness is not found.");
190 
191  const GeoMaterial *FCal23Slugs = materialManager->getMaterial("LAr::FCal23Slugs");
192  if (!FCal23Slugs) throw std::runtime_error("Error in FCALConstructionH62004, LAr::FCal23Slugs is not found.");
193 
194 
195  FCALData_t fcalData[3];
196  for(int i=0; i<3; ++i) {
197  fcalData[i].innerModuleRadius = (*m_fcalMod)[i]->getDouble("INNERMODULERADIUS");
198  fcalData[i].outerModuleRadius = (*m_fcalMod)[i]->getDouble("OUTERMODULERADIUS");
199  fcalData[i].fullModuleDepth = (*m_fcalMod)[i]->getDouble("FULLMODULEDEPTH");
200  fcalData[i].innerGapRadius = (*m_fcalMod)[i]->getDouble("INNERGAPRADIUS");
201  fcalData[i].outerGapRadius = (*m_fcalMod)[i]->getDouble("OUTERGAPRADIUS");
202  fcalData[i].fullGapDepth = (*m_fcalMod)[i]->getDouble("FULLGAPDEPTH");
203  fcalData[i].FCalSampling = (*m_fcalMod)[i]->getInt("FCALSAMPLING");
204  }
205 
206  FCAL_ChannelMap *cmap = new FCAL_ChannelMap(0);
207 
208  GeoIntrusivePtr<GeoFullPhysVol>fcalPhysical(nullptr);
209 
210  std::string baseName = "LAr::FCAL::";
211 
212  double fcalHalfDepth=0;
213  double startZFCal1 = (*m_fcalMod)[0]->getDouble("STARTPOSITION"); //466.85 * Gaudi::Units::cm;
214  double startZFCal2 = (*m_fcalMod)[1]->getDouble("STARTPOSITION"); //512.83 * Gaudi::Units::cm;
215  double startZFCal3 = (*m_fcalMod)[2]->getDouble("STARTPOSITION"); //560.28 * Gaudi::Units::cm;
216 
217  // Should go to Db (change FCalNominals ????)
218  double fcalstartPhi = 90.*Gaudi::Units::deg;
219  double fcaldeltaPhi = 90.*Gaudi::Units::deg;
220  // FCAL VOLUME. IT DOES NOT INCLUDE THE COPPER PLUG, ONLY THE LAR AND MODS 1-3
221  {
222 
223  double outerRadius = std::max(fcalData[0].outerModuleRadius,std::max(fcalData[1].outerModuleRadius,fcalData[2].outerModuleRadius));
224  double innerRadius = std::min(fcalData[0].innerModuleRadius,std::min(fcalData[1].innerModuleRadius,fcalData[2].innerModuleRadius));
225  double depthZFCal3 = fcalData[2].fullModuleDepth;
226  double stopZFCal3 = startZFCal3 + depthZFCal3;
227 
228  double totalDepth = stopZFCal3 - startZFCal1;
229  double halfDepth = totalDepth/2.;
230 
231  std::string name = baseName + "LiquidArgonC";
232  GeoTubs *tubs = new GeoTubs(innerRadius,outerRadius,halfDepth, 0.99*fcalstartPhi, 1.01*fcaldeltaPhi);
233  GeoLogVol *logVol= new GeoLogVol(name, tubs, LAr);
234  fcalPhysical = new GeoFullPhysVol(logVol);
235 
236  fcalHalfDepth = halfDepth;
237  }
238 
239 
240  if (F1)
241  {
242  // Module 1
243  GeoIntrusivePtr<GeoFullPhysVol>modPhysical =nullptr;
244  {
245  double halfDepth = fcalData[0].fullModuleDepth/2;
246  double innerRadius = fcalData[0].innerModuleRadius;
247  double outerRadius = fcalData[0].outerModuleRadius;
248  GeoIntrusivePtr<GeoFullPhysVol>physVol;
249 
250  if(m_absPhysical1)
251  physVol = m_absPhysical1->clone();
252  else
253  {
254  GeoTubs *tubs = new GeoTubs( innerRadius, outerRadius, halfDepth, fcalstartPhi, fcaldeltaPhi);
255  GeoLogVol *logVol = new GeoLogVol(baseName + "Module1::Absorber", tubs, FCal1Absorber);
256  physVol = new GeoFullPhysVol(logVol);
257  }
258 
259  fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,-(fcalHalfDepth-halfDepth))));
260  fcalPhysical->add(physVol);
261  modPhysical = physVol;
262 
263  std::string tag = std::string("FCAL1") ;
265 
266  StoredPhysVol *sPhysVol = new StoredPhysVol(physVol);
267  status=detStore->record(sPhysVol,tag);
268  if(!status.isSuccess()) throw std::runtime_error ((std::string("Cannot store")+tag).c_str());
269 
270  }
271  // 16 Troughs representing Cable Harnesses:
272  if(m_absPhysical1==nullptr)
273  {
274  double troughDepth = 0.9999 * Gaudi::Units::cm;
275  double outerRadius = fcalData[0].outerModuleRadius;
276  double innerRadius = outerRadius - troughDepth;
277  double halfLength = fcalData[0].fullModuleDepth/ 2.0;
278  double deltaPhi = 5.625 * Gaudi::Units::deg;
279  double startPhi = 11.25 * Gaudi::Units::deg - deltaPhi/2.0;
280  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
281  GeoLogVol *logVol = new GeoLogVol(baseName+"Module1::CableTrough",tubs,FCalCableHarness);
282  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
283  GeoGenfun::Variable i;
284  GeoGenfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*Gaudi::Units::deg*i;
285  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
286  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,4);
287  modPhysical->add(st);
288  }
289 
290  if (m_absPhysical1==nullptr) // Until fixed. (m_absPhysical1==0)
291  {
292  double halfDepth = fcalData[0].fullGapDepth/2.0;
293  double innerRadius = fcalData[0].innerGapRadius;
294  double outerRadius = fcalData[0].outerGapRadius;
295  GeoTubs *tubs = new GeoTubs(innerRadius,outerRadius,halfDepth, 0.*Gaudi::Units::deg, 360.*Gaudi::Units::deg);
296  GeoLogVol *logVol = new GeoLogVol(baseName + "Module1::Gap",tubs, LAr);
297  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
298 
299  int counter=0;
300  modPhysical->add(new GeoSerialIdentifier(0));
301 
302 
303  // Electrodes:
304  int myGroup=1;
305  if ((*m_fcalElectrode).size()>0) {
306  for (unsigned int i=0;i<(*m_fcalElectrode).size();i++) {
307  const IRDBRecord * record = (*m_fcalElectrode)[i];
308 
309  int thisGroup=record->getInt("MODNUMBER");
310  if (thisGroup!=myGroup) continue;
311  double thisTubeX= record->getDouble("X");
312  double thisTubeY= record->getDouble("Y");
313  if (thisTubeX>=0. || thisTubeY<=0.) continue;
314 
315  std::string thisTileStr=record->getString("TILENAME");
316  int thisTubeI=record->getInt("I");
317  int thisTubeJ= record->getInt("J");
318  int thisTubeID = record->getInt("ID");
319  int thisTubeMod = record->getInt("MODNUMBER");
320 
321  cmap->add_tube(thisTileStr, thisTubeMod, thisTubeID, thisTubeI,thisTubeJ, thisTubeX, thisTubeY);
322 
323  if (m_VisLimit != -1 && (counter++ > m_VisLimit)) continue;
324  //std::cout<<thisTileStr<<" "<<thisTubeX<<" "<<thisTubeY<<std::endl;
325 
326  GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*Gaudi::Units::cm, thisTubeY*Gaudi::Units::cm,0));
327  modPhysical->add(xf);
328  modPhysical->add(physVol);
329  }
330  }
331 
332 
333  m_absPhysical1 = modPhysical;
334  } // if (F1)
335  }
336  if (F2)
337  {
338  // Module 2
339  GeoIntrusivePtr<GeoFullPhysVol>modPhysical =nullptr;
340  {
341  double halfDepth = fcalData[1].fullModuleDepth/2;
342  double innerRadius = fcalData[1].innerModuleRadius;
343  double outerRadius = fcalData[1].outerModuleRadius;
344  GeoIntrusivePtr<GeoFullPhysVol>physVol;
345 
346  if(m_absPhysical2)
347  physVol = m_absPhysical2->clone();
348  else
349  {
350  GeoTubs *tubs = new GeoTubs( innerRadius, outerRadius, halfDepth, fcalstartPhi, fcaldeltaPhi);
351  GeoLogVol *logVol = new GeoLogVol(baseName + "Module2::Absorber", tubs, FCal23Absorber);
352  physVol = new GeoFullPhysVol(logVol);
353  }
354 
355  fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,-(fcalHalfDepth-(startZFCal2-startZFCal1)-halfDepth))));
356  fcalPhysical->add(physVol);
357  modPhysical = physVol;
358 
359  std::string tag = std::string("FCAL2");
361 
362  StoredPhysVol *sPhysVol = new StoredPhysVol(physVol);
363  status=detStore->record(sPhysVol,tag);
364  if(!status.isSuccess()) throw std::runtime_error ((std::string("Cannot store")+tag).c_str());
365 
366  }
367  // 16 Troughs representing Cable Harnesses:
368  if(m_absPhysical2==nullptr)
369  {
370  double troughDepth = 1.0 * Gaudi::Units::cm;
371  double outerRadius = fcalData[1].outerModuleRadius;
372  double innerRadius = outerRadius - troughDepth;
373  double halfLength = fcalData[1].fullModuleDepth/ 2.0;
374  double deltaPhi = 5.625 * Gaudi::Units::deg;
375  double startPhi = 11.25 * Gaudi::Units::deg - deltaPhi/2.0;
376  GeoTubs * tubs = new GeoTubs(innerRadius,outerRadius,halfLength,startPhi,deltaPhi );
377  GeoLogVol *logVol = new GeoLogVol(baseName+"Module2::CableTrough",tubs,FCalCableHarness);
378  GeoIntrusivePtr<GeoPhysVol>physVol = new GeoPhysVol(logVol);
379  GeoGenfun::Variable i;
380  GeoGenfun::GENFUNCTION rotationAngle = fcalstartPhi + 22.5*Gaudi::Units::deg*i;
381  GeoXF::TRANSFUNCTION xf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),rotationAngle);
382  GeoSerialTransformer *st = new GeoSerialTransformer(physVol,&xf,4);
383  modPhysical->add(st);
384  }
385 
386  // Electrodes:
387  if(m_absPhysical2==nullptr) // Until fixed. m_absPhysical2==0)
388  {
389 
390  double halfDepth = fcalData[1].fullGapDepth/2.0;
391  double innerRadius = fcalData[1].innerGapRadius;
392  double outerRadius = fcalData[1].outerGapRadius;
393 
394  GeoTubs *gapTubs = new GeoTubs(0,outerRadius,halfDepth, fcalstartPhi, fcaldeltaPhi);
395  GeoLogVol *gapLog = new GeoLogVol(baseName + "Module2::Gap",gapTubs, LAr);
396  GeoIntrusivePtr<GeoPhysVol>gapPhys = new GeoPhysVol(gapLog);
397 
398  GeoTubs *rodTubs = new GeoTubs(0,innerRadius,halfDepth, fcalstartPhi, fcaldeltaPhi);
399  GeoLogVol *rodLog = new GeoLogVol(baseName + "Module2::Rod",rodTubs, FCal23Slugs);
400  GeoIntrusivePtr<GeoPhysVol>rodPhys = new GeoPhysVol(rodLog);
401 
402  gapPhys->add(rodPhys);
403 
404  int counter=0;
405  modPhysical->add(new GeoSerialIdentifier(0));
406 
407  int myGroup=2;
408  if ((*m_fcalElectrode).size()>0) {
409  for (unsigned int i=0;i<(*m_fcalElectrode).size();i++) {
410  const IRDBRecord * record = (*m_fcalElectrode)[i];
411 
412  int thisGroup=record->getInt("MODNUMBER");
413  if (thisGroup!=myGroup) continue;
414 
415  double thisTubeX= record->getDouble("X");
416  double thisTubeY= record->getDouble("Y");
417 
418  if (thisTubeX>=0. || thisTubeY<=0.) continue;
419 
420  std::string thisTileStr=record->getString("TILENAME");
421  int thisTubeI=record->getInt("I");
422  int thisTubeJ= record->getInt("J");
423  int thisTubeID = record->getInt("ID");
424  int thisTubeMod = record->getInt("MODNUMBER");
425 
426  cmap->add_tube(thisTileStr, thisTubeMod, thisTubeID, thisTubeI,thisTubeJ, thisTubeX, thisTubeY);
427 
428  if (m_VisLimit!=-1 && (counter++ > m_VisLimit)) continue;
429 
430  GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(thisTubeX*Gaudi::Units::cm, thisTubeY*Gaudi::Units::cm,0));
431  modPhysical->add(xf);
432  modPhysical->add(gapPhys);
433  }
434  }
435  m_absPhysical2 = modPhysical;
436  }
437  } // if (F2)
438 
439  if (F3)
440  {
441  // ColdTC......
442  GeoIntrusivePtr<GeoFullPhysVol>modPhysical =nullptr;
443  {
444  double halfDepth = fcalData[2].fullModuleDepth/2;
445  double innerRadius = fcalData[2].innerModuleRadius;
446  double outerRadius = fcalData[2].outerModuleRadius;
447  GeoIntrusivePtr<GeoFullPhysVol>physVol;
448 
449  // We need few more materials
450  // ColdTC effective absorber: Cu with a little bit of inactive argon
451  GeoMaterial *thisAbsorber = new GeoMaterial("ColdTCAbsorber",8.701*GeoModelKernelUnits::g/Gaudi::Units::cm3);
452  thisAbsorber->add(Copper,0.994);
453  thisAbsorber->add(LAr,0.006);
454  thisAbsorber->lock();
455 
456 
457  if(m_absPhysical3)
458  physVol = m_absPhysical3->clone();
459  else
460  {
461  GeoTubs *tubs = new GeoTubs( innerRadius, outerRadius, halfDepth, 0.999*fcalstartPhi, 1.001*fcaldeltaPhi);
462  GeoLogVol *logVol = new GeoLogVol(baseName + "ColdTC::Absorber", tubs, thisAbsorber);
463  physVol = new GeoFullPhysVol(logVol);
464  }
465 
466 
467  fcalPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,fcalHalfDepth-halfDepth)));
468  fcalPhysical->add(physVol);
469  modPhysical = physVol;
470 
471  std::string tag = std::string("ColdTC");
473 
474  StoredPhysVol *sPhysVol = new StoredPhysVol(physVol);
475  status=detStore->record(sPhysVol,tag);
476  if(!status.isSuccess()) throw std::runtime_error ((std::string("Cannot store")+tag).c_str());
477  }
478 
479  // Add electrode and gaps......
480  if(m_absPhysical3==nullptr){
481  double halfDepth = fcalData[2].fullGapDepth/2;
482  double innerRadius = fcalData[2].innerGapRadius;
483  double outerRadius = fcalData[2].outerGapRadius;
484 
485  // Where in DB should go this ?
486  double ElectrodeDepth = 0.85*Gaudi::Units::cm;
487  double ActiveDepth = 0.2*Gaudi::Units::cm;
488 
489  // big argon gap solid
490  GeoTubs *gapSolid = new GeoTubs(innerRadius,outerRadius,halfDepth, fcalstartPhi, fcaldeltaPhi);
491  GeoLogVol *gapLV = new GeoLogVol(baseName + "ColdTC::Gap", gapSolid, LAr);
492  // electrode solid
493  GeoTubs *electrodeSolid = new GeoTubs(innerRadius,outerRadius,ElectrodeDepth/2.,1.00001*fcalstartPhi, 0.99999*fcaldeltaPhi);
494  GeoLogVol *electrodeLV = new GeoLogVol(baseName + "ColdTC::Electrode", electrodeSolid, G10);
495  // active argon solid
496  GeoTubs *activeSolid = new GeoTubs(innerRadius,outerRadius,ActiveDepth/2.,1.0001*fcalstartPhi, 0.9999*fcaldeltaPhi);
497  GeoLogVol *activeLV = new GeoLogVol(baseName + "ColdTC::Active", activeSolid, LAr);
498 
499  GeoIntrusivePtr<GeoPhysVol>activePhys = new GeoPhysVol(activeLV);
500  GeoIntrusivePtr<GeoPhysVol>electrodePhys = new GeoPhysVol(electrodeLV);
501  GeoIntrusivePtr<GeoPhysVol>gapPhys = new GeoPhysVol(gapLV);
502 
503  // active gaps in electrode
504  int iCopy = 1;
505  double zPos = -ElectrodeDepth/2. + 1.5 * Gaudi::Units::mm + ActiveDepth/2.;
506  GeoTransform *t1 = new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos));
507  electrodePhys->add(new GeoSerialIdentifier(iCopy));
508  electrodePhys->add(t1);
509  electrodePhys->add(activePhys);
510  ++iCopy;
511  zPos += 3.5 * Gaudi::Units::mm;
512  electrodePhys->add(new GeoSerialIdentifier(iCopy));
513  electrodePhys->add(t1);
514  electrodePhys->add(activePhys);
515  // electrode in inactive argon
516  zPos = -halfDepth + ElectrodeDepth/2.;
517  GeoTransform *t2 = new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos));
518  gapPhys->add(new GeoSerialIdentifier(1));
519  gapPhys->add(t2);
520  gapPhys->add(electrodePhys);
521  // big gaps in copper block
522  zPos = -fcalData[2].fullModuleDepth/2. + 2.2 * Gaudi::Units::cm + halfDepth;
523  for ( iCopy = 1; iCopy < 9; ++iCopy ){
524  modPhysical->add(new GeoSerialIdentifier(iCopy));
525  modPhysical->add(new GeoTransform(GeoTrf::Translate3D(0.,0.,zPos)));
526  modPhysical->add(gapPhys);
527  zPos += 3.5*Gaudi::Units::cm;
528  }
529  m_absPhysical3 = modPhysical;
530  }
531  } // if (F3)
532 
533  // Did I already store it?
534  //FCAL_ChannelMap *aChannelMap(NULL);
535  if (!detStore->contains<FCAL_ChannelMap>("FCAL_ChannelMap")) {
536  cmap->finish();
537  StatusCode status=detStore->record(cmap,"FCAL_ChannelMap");
538  if(!status.isSuccess()) throw std::runtime_error ("Cannot store FCAL_ChannelMap");
539  }
540 
541  return fcalPhysical;
542 
543 }

◆ operator=()

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

◆ setFCALVisLimit()

void LArGeo::FCALConstructionH62004::setFCALVisLimit ( int  maxCell)
inline

Definition at line 34 of file FCALConstructionH62004.h.

Member Data Documentation

◆ m_absPhysical1

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::FCALConstructionH62004::m_absPhysical1 {}
private

Definition at line 46 of file FCALConstructionH62004.h.

◆ m_absPhysical2

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::FCALConstructionH62004::m_absPhysical2 {}
private

Definition at line 47 of file FCALConstructionH62004.h.

◆ m_absPhysical3

GeoIntrusivePtr<GeoFullPhysVol> LArGeo::FCALConstructionH62004::m_absPhysical3 {}
private

Definition at line 48 of file FCALConstructionH62004.h.

◆ m_fcalElectrode

IRDBRecordset_ptr LArGeo::FCALConstructionH62004::m_fcalElectrode
private

Definition at line 53 of file FCALConstructionH62004.h.

◆ m_fcalMod

IRDBRecordset_ptr LArGeo::FCALConstructionH62004::m_fcalMod
private

Definition at line 54 of file FCALConstructionH62004.h.

◆ m_svcLocator

ISvcLocator* LArGeo::FCALConstructionH62004::m_svcLocator
private

Definition at line 52 of file FCALConstructionH62004.h.

◆ m_VisLimit

int LArGeo::FCALConstructionH62004::m_VisLimit
private

Definition at line 50 of file FCALConstructionH62004.h.


The documentation for this class was generated from the following files:
IRDBRecord::getInt
virtual int getInt(const std::string &fieldName) const =0
Get int field value.
max
#define max(a, b)
Definition: cfImp.cxx:41
LArGeo::FCALConstructionH62004::m_absPhysical1
GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical1
Definition: FCALConstructionH62004.h:46
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.
LAr
Definition: LArVolumeBuilder.h:36
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
FCAL_ChannelMap
This class contains the tube and tile maps for the FCAL A tile is of a set of FCAL tubes.
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/LArReadoutGeometry/FCAL_ChannelMap.h:34
IRDBRecord::getString
virtual const std::string & getString(const std::string &fieldName) const =0
Get string field value.
LArGeo::FCALConstructionH62004::m_svcLocator
ISvcLocator * m_svcLocator
Definition: FCALConstructionH62004.h:52
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
cm3
#define cm3
deg
#define deg
Definition: SbPolyhedron.cxx:17
FCAL_ChannelMap::add_tube
void add_tube(const std::string &tileName, int mod, int id, int i, int j, double xCm, double yCm)
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:69
LArGeo::FCALConstructionH62004::m_fcalElectrode
IRDBRecordset_ptr m_fcalElectrode
Definition: FCALConstructionH62004.h:53
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
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
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
min
#define min(a, b)
Definition: cfImp.cxx:40
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
FCAL_ChannelMap::finish
void finish()
Definition: LArCalorimeter/LArGeoModel/LArReadoutGeometry/src/FCAL_ChannelMap.cxx:55
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LArGeo::FCALConstructionH62004::m_fcalMod
IRDBRecordset_ptr m_fcalMod
Definition: FCALConstructionH62004.h:54
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
LArGeo::FCALConstructionH62004::m_absPhysical3
GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical3
Definition: FCALConstructionH62004.h:48
IRDBRecord
IRDBRecord is one record in the IRDBRecordset object.
Definition: IRDBRecord.h:27
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
IRDBRecord::getDouble
virtual double getDouble(const std::string &fieldName) const =0
Get double field value.
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
test_pyathena.counter
counter
Definition: test_pyathena.py:15
LArGeo::FCALConstructionH62004::m_VisLimit
int m_VisLimit
Definition: FCALConstructionH62004.h:50
LArGeo::FCALConstructionH62004::m_absPhysical2
GeoIntrusivePtr< GeoFullPhysVol > m_absPhysical2
Definition: FCALConstructionH62004.h:47
maxCell
#define maxCell