ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ForwardRegionGeoModelFactory Class Reference

#include <ForwardRegionGeoModelFactory.h>

Inheritance diagram for ForwardRegionGeoModelFactory:
Collaboration diagram for ForwardRegionGeoModelFactory:

Public Member Functions

 ForwardRegionGeoModelFactory (StoreGateSvc *pDetStore, const PFWD_CONFIGURATION pConfig)
 
 ~ForwardRegionGeoModelFactory ()
 
virtual void create (GeoPhysVol *world)
 
virtual const ForwardRegionGeoModelManagergetDetectorManager () const
 

Private Member Functions

void DefineMaterials ()
 
void constructElements (GeoPhysVol *fwrPhys, std::vector< std::vector< std::string > > loadedDataFile, int beam)
 
GeoPhysVol * insertMagnetEnvelope (const std::string &name, double x, double y, double z, double rotationAngle, double diameter, double halfL, double dL, GeoPhysVol *fwrPhys)
 
void insertCircularElement (const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
 
void insertEllipticalElement (const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
 
void insertXRecticircularElement (const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
 
void insertYRecticircularElement (const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
 
void insertTrousersElement (const std::string &name, double x, double y, double z, double rotationAngle, GeoPhysVol *fwrPhys)
 
void insertTCLElement (const std::string &name, double x, double y, double z, GeoPhysVol *fwrPhys, double TCLJawDistO, double TCLJawDistI, bool tungstenInsteadOfCopper=false)
 
std::vector< std::vector< std::string > > loadDataFile (const std::string &fileName, int cols)
 
template<class T >
std::string num2str (T)
 
template<typename T >
int sgn (T val)
 
const ForwardRegionGeoModelFactoryoperator= (const ForwardRegionGeoModelFactory &right)
 
 ForwardRegionGeoModelFactory (const ForwardRegionGeoModelFactory &right)
 

Private Attributes

StoreGateSvcm_detectorStore
 
std::map< std::string, const GeoMaterial * > m_MapMaterials
 
FWD_CONFIGURATION m_Config
 
FWDMg_CONFIGURATION m_MagConfig
 
ToolHandle< IForwardRegionPropertiesm_properties
 
ForwardRegionGeoModelManagerm_detectorManager
 

Detailed Description

Definition at line 49 of file ForwardRegionGeoModelFactory.h.

Constructor & Destructor Documentation

◆ ForwardRegionGeoModelFactory() [1/2]

ForwardRegionGeoModelFactory::ForwardRegionGeoModelFactory ( StoreGateSvc pDetStore,
const PFWD_CONFIGURATION  pConfig 
)

Definition at line 61 of file ForwardRegionGeoModelFactory.cxx.

63  m_properties("ForwardRegionProperties")
64 {
65  m_detectorManager = NULL;
66  MsgStream LogStream(Athena::getMessageSvc(), "ForwardRegionGeoModel::ForwardRegionGeoModel()");
67 
68  m_Config = *pConfig;
69 
70  if(m_properties.retrieve().isFailure()){
71  LogStream << MSG::ERROR << ": Failed to load magnet properties" << endmsg;
72  return;
73  }
74 
75  m_MagConfig = *(m_properties->getConf());
76 }

◆ ~ForwardRegionGeoModelFactory()

ForwardRegionGeoModelFactory::~ForwardRegionGeoModelFactory ( )

Definition at line 79 of file ForwardRegionGeoModelFactory.cxx.

80 {
81 
82 }

◆ ForwardRegionGeoModelFactory() [2/2]

ForwardRegionGeoModelFactory::ForwardRegionGeoModelFactory ( const ForwardRegionGeoModelFactory right)
private

Member Function Documentation

◆ constructElements()

void ForwardRegionGeoModelFactory::constructElements ( GeoPhysVol *  fwrPhys,
std::vector< std::vector< std::string > >  loadedDataFile,
int  beam 
)
private

Definition at line 211 of file ForwardRegionGeoModelFactory.cxx.

212 {
213  //-------------------------------------------------------------------------------------
214  // Construction of geometry from geometry file
215 
216  // indexes
217  int name, zStart, zEnd, type, xAperture, yAperture, xStart, xEnd, yStart, yEnd, tubeThickness;
218  name = 0;
219  type = 1;
220  zStart = 4;
221  zEnd = 5;
222  xAperture = 2;
223  yAperture = 3;
224  xStart = 6;
225  xEnd = 7;
226  yStart = 8;
227  yEnd = 9;
228  tubeThickness = 10;
229 
230  int lDFSize = loadedDataFile.size();
231 
232  // apply shifts of magnets defined by magnets properties in JO
233  for(int i=0; i < lDFSize; i++)
234  {
235  // get start and end points defined in JO
236  HepGeom::Point3D<double> pointMagStart;
237  HepGeom::Point3D<double> pointMagEnd;
238  if(m_properties.retrieve().isSuccess()) m_properties->getMagTransforms(loadedDataFile[i][name],beam,pointMagStart,pointMagEnd);
239 
240  // are points defined (non-zero)? If not, shifts will not apply
241  bool pointsDefined = !(pointMagStart.distance2() == 0 || pointMagEnd.distance2() == 0);
242 
243  if(pointsDefined)
244  {
245 
246  // overlap correction for x rotation
247  double startZ = pointMagStart[2];
248  double endZ = pointMagEnd[2];
249  double startX = pointMagStart[0];
250  double endX = pointMagEnd[0];
251  double rotationAngle = atan2(endX - startX,endZ - startZ);
252  double r = atof(loadedDataFile[i][xAperture].c_str())*Gaudi::Units::mm/2;
253  double dL = abs(r*tan(rotationAngle))+0.2*Gaudi::Units::mm;
254 
255 
256  // move start and end points of the magnet element and neighbour elemens accordingly
257  // move (resize) neighbours only in z (needed to avoid overlaps)
258  loadedDataFile[i][xStart] = num2str(pointMagStart[0]/1000);
259  loadedDataFile[i][yStart] = num2str(pointMagStart[1]/1000);
260  loadedDataFile[i][zStart] = num2str(pointMagStart[2]/1000);
261  loadedDataFile[i-1][zEnd] = num2str(sgn(pointMagStart[2])*(abs(pointMagStart[2])-dL)/1000);
262 
263  loadedDataFile[i][xEnd] = num2str(pointMagEnd[0]/1000);
264  loadedDataFile[i][yEnd] = num2str(pointMagEnd[1]/1000);
265  loadedDataFile[i+1][zStart] = num2str(sgn(pointMagEnd[2])*(abs(pointMagEnd[2])+dL)/1000);
266  loadedDataFile[i][zEnd] = num2str(pointMagEnd[2]/1000);
267 
268  }
269  }
270 
271  double x,y,z,halfL,rotationAngle,r,dL,startZ,endZ,startX,endX,startY,endY;
272 
273  // ################ ELEMENTS ############################
274 
275  // --------------- elements cycle -----------------
276  for(int i=0; i < lDFSize; i++)
277  {
278  startZ = atof(loadedDataFile[i][zStart].c_str())*Gaudi::Units::m;
279  endZ = atof(loadedDataFile[i][zEnd].c_str())*Gaudi::Units::m;
280  startX = atof(loadedDataFile[i][xStart].c_str())*Gaudi::Units::m;
281  endX = atof(loadedDataFile[i][xEnd].c_str())*Gaudi::Units::m;
282  startY = atof(loadedDataFile[i][yStart].c_str())*Gaudi::Units::m;
283  endY = atof(loadedDataFile[i][yEnd].c_str())*Gaudi::Units::m;
284 
285  // translation of element
286  x = (startX + endX)/2;
287  y = (startY + endY)/2;
288  z = (startZ + endZ)/2;
289 
290  // absolute rotation of element
291  //rotationAngle_old = rotationAngle;
292  rotationAngle = atan2(endX - startX,endZ - startZ);
293 
294  // half-length of element
295  halfL = sqrt((endX - startX)*(endX - startX) + (endZ - startZ)*(endZ - startZ))/2;
296 
297  r = atof(loadedDataFile[i][xAperture].c_str())*Gaudi::Units::mm/2;
298 
299  // overlap correction
300  dL = abs(r*tan(rotationAngle))+0.2*Gaudi::Units::mm;
301 
302  // do not shorten magnetic volumes
303  if(loadedDataFile[i][name].find("Mag") != std::string::npos)
304  dL = 0;
305 
306  // construction of element
307 
308  // circular aperture
309  if(atoi(loadedDataFile[i][type].c_str()) == 0){
310  // envelope to allow tracking with G4TrackAction
311  if(loadedDataFile[i][name] == "VCDBP.7R1.B"){
312  GeoPhysVol* trackEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 100*Gaudi::Units::mm, halfL, dL, fwrPhys);
313  insertCircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), trackEnv);
314  }
315  else
316  insertCircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), fwrPhys);
317  }
318 
319  // special volumes
320  if(atoi(loadedDataFile[i][type].c_str()) == 4){
321  if(loadedDataFile[i][name] == "VCTYF.A4R1.X") // Trousers -- transition from 1 to 2 beampipes
322  insertTrousersElement(loadedDataFile[i][name], x, y, z, rotationAngle, fwrPhys);
323  else if(loadedDataFile[i][name] == "TCL.5R1.B1") // TCL5 collimator
325  else if(m_Config.buildTCL4 && loadedDataFile[i][name] == "VCDSS.4R1.B") // TCL4 collimator
327  else if(m_Config.buildTCL6 && loadedDataFile[i][name] == "TCL6") // TCL6 collimator
328  insertTCLElement(loadedDataFile[i][name], x, y, z, fwrPhys, (beam == 1 ? m_Config.TCL6JawDistB1O : m_Config.TCL6JawDistB2O), (beam == 1 ? m_Config.TCL6JawDistB1I : m_Config.TCL6JawDistB2I), true);
329 
330  // aproximate rest by circular apperture
331  else
332  insertCircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), fwrPhys);
333  }
334 
335  GeoPhysVol* magEnv;
336 
337  // elliptical aperture
338  if(atoi(loadedDataFile[i][type].c_str()) == 1) {
339  magEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, 20*Gaudi::Units::cm, halfL, dL, fwrPhys);
340  insertEllipticalElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), magEnv);
341  }
342 
343 
344  double magDiam = 19.4*Gaudi::Units::cm;
345  if(loadedDataFile[i][name].find("Mag") != std::string::npos)
346  magDiam= 19.4*Gaudi::Units::cm;
347  if(loadedDataFile[i][name] == "LQXAA.1R1MagQ1" || loadedDataFile[i][name] == "LQXAG.3R1MagQ3")
348  magDiam = 48*Gaudi::Units::cm;
349  if(loadedDataFile[i][name] == "LQXBA.2R1MagQ2a" || loadedDataFile[i][name] == "LQXBA.2R1MagQ2b")
350  magDiam = 52*Gaudi::Units::cm;
351  //else magDiam = std::max(atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()))+2*atof(loadedDataFile[i][tubeThickness].c_str());
352  //else magDiam = 19.4*Gaudi::Units::cm;
353 
354  // rectcircular aperture with flats in x
355  if(atoi(loadedDataFile[i][type].c_str()) == 2) {
356  magEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, magDiam, halfL, dL, fwrPhys);
357  insertXRecticircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), magEnv);
358  }
359 
360  // rectcircular aperture with flats in y
361  if(atoi(loadedDataFile[i][type].c_str()) == 3) {
362  magEnv = insertMagnetEnvelope(loadedDataFile[i][name], x, y, z, rotationAngle, magDiam, halfL, dL, fwrPhys);
363  insertYRecticircularElement(loadedDataFile[i][name], x, y, z, rotationAngle, atof(loadedDataFile[i][xAperture].c_str()), atof(loadedDataFile[i][yAperture].c_str()), halfL, dL, atof(loadedDataFile[i][tubeThickness].c_str()), magEnv);
364  }
365  }
366  // ################ ELEMENTS - end ########################
367 }

◆ create()

void ForwardRegionGeoModelFactory::create ( GeoPhysVol *  world)
virtual

Definition at line 370 of file ForwardRegionGeoModelFactory.cxx.

371 {
373 
374  MsgStream LogStream(Athena::getMessageSvc(), "ForwardRegionGeoModel::create()");
375 
376  LogStream << MSG::INFO << "Constructing forward region model" << endmsg;
377 
378  DefineMaterials();
379 
380  // Load "geometry" files
381  std::vector<std::vector<std::string> > loadedDataFileR = this->loadDataFile("ForwardRegionGeoModel/LSS1Rout.csv",11);
382  std::vector<std::vector<std::string> > loadedDataFileL = this->loadDataFile("ForwardRegionGeoModel/LSS1Lout.csv",11);
383 
384  double startZ,endZ;
385 
386  if(m_Config.vp1Compatibility) startZ = 19.0*Gaudi::Units::m;
387  else startZ = 22.0*Gaudi::Units::m;
388  endZ = 268.904*Gaudi::Units::m;
389 
390  //rotationAngle_old = 0;
391 
392  // mother volume -- union of tubes, one for each side
393  //const GeoBox *fwrBox = new GeoBox(2*Gaudi::Units::m,0.5*Gaudi::Units::m,(endZ-startZ)/2);
394  const GeoTube *fwrTubeL = new GeoTube(0,2*Gaudi::Units::m,(endZ-startZ)/2);
395  GeoTube *fwrTubeR = new GeoTube(0,2*Gaudi::Units::m,(endZ-startZ)/2);
396  GeoTrf::Transform3D shiftL = GeoTrf::Translate3D(0,0,(endZ+startZ)/2);
397  GeoTrf::Transform3D shiftR = GeoTrf::Translate3D(0,0,-(endZ+startZ)/2);
398 
399  const GeoShapeShift& fwrTube0 = (*fwrTubeL)<<shiftL;
400  const GeoShapeUnion& fwrTube1 = fwrTube0.add((*fwrTubeR)<<shiftR);
401 
402  // cut out slots for ALFA
403  const GeoTube *alfa = new GeoTube(0, 2*Gaudi::Units::m, 500*Gaudi::Units::mm);
404  GeoTrf::Transform3D shiftAlfaL1 = GeoTrf::Translate3D(0,0,237388*Gaudi::Units::mm);
405  GeoTrf::Transform3D shiftAlfaR1 = GeoTrf::Translate3D(0,0,-237408*Gaudi::Units::mm);
406  GeoTrf::Transform3D shiftAlfaL2 = GeoTrf::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7L1 : 241528*Gaudi::Units::mm));
407  GeoTrf::Transform3D shiftAlfaR2 = GeoTrf::Translate3D(0,0,(m_Config.ALFAInNewPosition ? m_Config.newPosB7R1 :-241548*Gaudi::Units::mm));
408  const GeoShapeSubtraction& fwrTube2 = fwrTube1.subtract((*alfa)<<shiftAlfaL1).subtract((*alfa)<<shiftAlfaL2).subtract((*alfa)<<shiftAlfaR1).subtract((*alfa)<<shiftAlfaR2);
409 
410  // cut out slots for AFP
411  const GeoTube *afp = new GeoTube(0, 2.5*Gaudi::Units::m, 280*Gaudi::Units::mm);
412  const GeoTube *afp2 = new GeoTube(0, 2.5*Gaudi::Units::m, 580*Gaudi::Units::mm);
413  GeoTrf::Transform3D shiftAfpL1 = GeoTrf::Translate3D(0,0,m_Config.posAFPL1);
414  GeoTrf::Transform3D shiftAfpR1 = GeoTrf::Translate3D(0,0,m_Config.posAFPR1);
415  GeoTrf::Transform3D shiftAfpL2 = GeoTrf::Translate3D(0,0,m_Config.posAFPL2);
416  GeoTrf::Transform3D shiftAfpR2 = GeoTrf::Translate3D(0,0,m_Config.posAFPR2);
417  const GeoShapeSubtraction& fwrTube3 = fwrTube2.subtract((*afp)<<shiftAfpL1).subtract((*afp)<<shiftAfpR1).subtract((*afp2)<<shiftAfpL2).subtract((*afp2)<<shiftAfpR2);
418 
419  // cut out slots for ZDC
420  const GeoBox *zdc = new GeoBox( 9.1*Gaudi::Units::cm/2.0 ,18.1*Gaudi::Units::cm/2.0 , 94.4*Gaudi::Units::cm/2.0);
421  GeoTrf::Transform3D shiftZdcL1 = GeoTrf::Translate3D(0,0, m_Config.posZDC1);
422  GeoTrf::Transform3D shiftZdcR1 = GeoTrf::Translate3D(0,0, m_Config.posZDC2);
423  const GeoShapeSubtraction& fwrTube = fwrTube3.subtract((*zdc)<<shiftZdcL1).subtract((*zdc)<<shiftZdcR1);
424 
425 
426  const GeoLogVol *fwrLog = new GeoLogVol("ForwardRegionGeoModel", &fwrTube, m_MapMaterials[std::string("std::Vacuum")]);
427  GeoPhysVol *fwrPhys = new GeoPhysVol(fwrLog);
428  GeoNameTag *tag = new GeoNameTag("ForwardRegionGeoModel");
429  world->add(tag);
430  world->add(fwrPhys);
431  m_detectorManager->addTreeTop(fwrPhys);
432 
433  constructElements(fwrPhys,std::move(loadedDataFileR),1);
434  constructElements(fwrPhys,std::move(loadedDataFileL),2);
435 
436  LogStream << MSG::INFO << "Forward region model succesfully constructed." << endmsg;
437 }

◆ DefineMaterials()

void ForwardRegionGeoModelFactory::DefineMaterials ( )
private

Definition at line 85 of file ForwardRegionGeoModelFactory.cxx.

86 {
87  std::string matName;
88 
89  StoredMaterialManager* materialManager = nullptr;
90  if (StatusCode::SUCCESS != m_detectorStore->retrieve(materialManager, std::string("MATERIALS"))) {
91  return;
92  }
93 
94 
95  //-----------------------------------------------------------------------------------//
96  // Get the materials that we shall use. //
97  // ----------------------------------------------------------------------------------//
98 
99  // vacuum
100  matName = "std::Vacuum";
101  const GeoMaterial *vacuum = materialManager->getMaterial(matName);
102  m_MapMaterials.emplace(matName,vacuum);
103 
104  // water
105  matName = "water";
106  GeoMaterial *water = new GeoMaterial("H20", 1.0*GeoModelKernelUnits::gram/Gaudi::Units::cm3);
107  GeoElement *hydrogen = new GeoElement("Hydrogen","H",1.0, 1.010);
108  GeoElement *oxygen = new GeoElement("Oxygen", "O", 8.0, 16.0);
109  water->add(hydrogen,0.11);
110  water->add(oxygen,0.89);
111  water->lock();
112  m_MapMaterials.emplace(matName,water);
113 
114  // elements
115  const GeoElement* C = materialManager->getElement("Carbon");
116  const GeoElement* N = materialManager->getElement("Nitrogen");
117  const GeoElement* Si = materialManager->getElement("Silicon");
118  const GeoElement* P = materialManager->getElement("Phosphorus");
119  const GeoElement* S = materialManager->getElement("Sulfur");
120  const GeoElement* Cr = materialManager->getElement("Chromium");
121  const GeoElement* Mn = materialManager->getElement("Manganese");
122  const GeoElement* Fe = materialManager->getElement("Iron");
123  const GeoElement* Ni = materialManager->getElement("Nickel");
124  const GeoElement* Mo = materialManager->getElement("Molybdenum");
125  const GeoElement* Cu = materialManager->getElement("Copper");
126 
127 
128  const GeoElement* Al = materialManager->getElement("Aluminium");
129  const GeoElement* B = materialManager->getElement("Boron");
130  const GeoElement* O = materialManager->getElement("Oxygen");
131 
132  // Copper for beam screens
133  matName = "Copper";
134  GeoMaterial *copper = new GeoMaterial("Copper", 8.94*GeoModelKernelUnits::g/Gaudi::Units::cm3);
135  copper->add(const_cast<GeoElement*> (Cu),1.0);
136  copper->lock();
137  m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,copper));
138 
139  // Tungsten for TCL6
140  matName = "Tungsten";
141  const GeoElement* W = materialManager->getElement("Wolfram");
142  GeoMaterial *tungsten = new GeoMaterial("Tungsten", 19.25*GeoModelKernelUnits::g/Gaudi::Units::cm3);
143  tungsten->add(const_cast<GeoElement*> (W),1.0);
144  tungsten->lock();
145  m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,tungsten));
146 
147  // GlidCop AL15 copper -- aproximate composition (trace impurities (< 0.01 wt. %) not included)
148  // source: http://www-ferp.ucsd.edu/LIB/PROPS/compcu15.html
149  matName = "GlidCopAL15";
150  GeoMaterial *glidcop=new GeoMaterial("GlidCopAL15", 8.90*GeoModelKernelUnits::g/Gaudi::Units::cm3);
151 
152  double aCu, aAl, aO, aB, aTot;
153 
154  aCu=99.7*Cu->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
155  aAl=0.15*Al->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
156  aO=0.13*O->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
157  aB=0.02*B->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
158  aTot=aCu+aAl+aO+aB;
159 
160  glidcop->add(const_cast<GeoElement*> (Cu), aCu/aTot);
161  glidcop->add(const_cast<GeoElement*> (Al), aAl/aTot);
162  glidcop->add(const_cast<GeoElement*> (O), aO/aTot);
163  glidcop->add(const_cast<GeoElement*> (B), aB/aTot);
164  glidcop->lock();
165  m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,glidcop));
166 
167  // Steel Grade 316L (Roman Pot)
168  matName = "Steel";
169  GeoMaterial *steel=new GeoMaterial("Steel", 8*GeoModelKernelUnits::g/Gaudi::Units::cm3);
170 
171  double aC,aN,aSi,aP,aS,aCr,aMn,aFe,aNi,aMo,Atot;
172 
173  aFe=62.045*Fe->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
174  aC =0.03*C ->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
175  aMn=2.0*Mn ->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
176  aSi=0.75*Si->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
177  aP =0.045*P->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
178  aS =0.03*S ->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
179  aCr=18.0*Cr->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
180  aMo=3.0*Mo ->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
181  aNi=14.0*Ni->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
182  aN =0.10*N ->getA()/(GeoModelKernelUnits::g/Gaudi::Units::mole);
183  Atot=aFe+aC+aMn+aSi+aP+aS+aCr+aMo+aNi+aN;
184 
185  steel->add(const_cast<GeoElement*> (Fe),aFe/Atot);
186  steel->add(const_cast<GeoElement*> (C), aC/Atot);
187  steel->add(const_cast<GeoElement*> (Mn),aMn/Atot);
188  steel->add(const_cast<GeoElement*> (Si),aSi/Atot);
189  steel->add(const_cast<GeoElement*> (P), aP/Atot);
190  steel->add(const_cast<GeoElement*> (S), aS/Atot);
191  steel->add(const_cast<GeoElement*> (Cr),aCr/Atot);
192  steel->add(const_cast<GeoElement*> (Mo),aMo/Atot);
193  steel->add(const_cast<GeoElement*> (Ni),aNi/Atot);
194  steel->add(const_cast<GeoElement*> (N), aN/Atot);
195  steel->lock();
196  m_MapMaterials.insert(std::pair<std::string,GeoMaterial*>(matName,steel));
197 }

◆ getDetectorManager()

const ForwardRegionGeoModelManager * ForwardRegionGeoModelFactory::getDetectorManager ( ) const
virtual

Definition at line 439 of file ForwardRegionGeoModelFactory.cxx.

440 {
441  return m_detectorManager;
442 }

◆ insertCircularElement()

void ForwardRegionGeoModelFactory::insertCircularElement ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
double  xAperture,
double  yAperture,
double  halfL,
double  dL,
double  tubeThickness,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 49 of file ForwardRegionGeoModelElements.cxx.

50 {
51  double r0 = std::max(xAperture,yAperture)*Gaudi::Units::mm/2;
52 
53  const GeoTube *ringTube = new GeoTube(r0, r0+tubeThickness, halfL-dL);
54 
55  const GeoLogVol *ringLog = new GeoLogVol(name+"Log", ringTube, m_MapMaterials[std::string("Steel")]);
56 
57  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
58 
59  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
60  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
61  fwrPhys->add(move);
62  GeoTransform *rotate = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
63  fwrPhys->add(rotate);
64 
65  GeoNameTag *tag = new GeoNameTag(name);
66  fwrPhys->add(tag);
67 
68  fwrPhys->add(ringPhys);
69 
70 // // The other side of the forward region may be obtained by rotation
71 // GeoTransform *rotateX180 = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg));
72 
73 // // the other side
74 // fwrPhys->add(rotateX180);
75 // fwrPhys->add(move);
76 // fwrPhys->add(rotate);
77 // tag = new GeoNameTag(name+"_L");
78 // fwrPhys->add(tag);
79 // fwrPhys->add(ringPhys);
80 }

◆ insertEllipticalElement()

void ForwardRegionGeoModelFactory::insertEllipticalElement ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
double  xAperture,
double  yAperture,
double  halfL,
double  dL,
double  tubeThickness,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 82 of file ForwardRegionGeoModelElements.cxx.

83 {
84  const GeoShape * ringTube0;
85  GeoShape * ringTube2;
86 
87  // GeoEllipticalTube causes VP1 to fall, so for visualization GeoBox is used
89  ringTube0 = new GeoEllipticalTube(xAperture*Gaudi::Units::mm/2+tubeThickness, yAperture*Gaudi::Units::mm/2+tubeThickness, halfL-dL);
90  ringTube2 = new GeoEllipticalTube(xAperture*Gaudi::Units::mm/2, yAperture*Gaudi::Units::mm/2, halfL-dL);
91  }
92  else {
93  ringTube0 = new GeoBox(xAperture*Gaudi::Units::mm/2+tubeThickness, yAperture*Gaudi::Units::mm/2+tubeThickness, halfL-dL);
94  ringTube2 = new GeoBox(xAperture*Gaudi::Units::mm/2, yAperture*Gaudi::Units::mm/2, halfL-dL);
95  }
96  GeoShapeSubtraction * ringTube = new GeoShapeSubtraction(ringTube0, ringTube2);
97 
98  const GeoLogVol *ringLog = new GeoLogVol(name+"Log", ringTube, m_MapMaterials[std::string("Steel")]);
99 
100  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
101 
102  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
103  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
104  fwrPhys->add(move);
105  GeoTransform *rotate = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
106  fwrPhys->add(rotate);
107 
108  GeoNameTag *tag = new GeoNameTag(name);
109  fwrPhys->add(tag);
110 
111  fwrPhys->add(ringPhys);
112 
113 // // The other side of the forward region may be obtained by rotation
114 // GeoTransform *rotateX180 = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg));
115 
116 // // the other side
117 // fwrPhys->add(rotateX180);
118 // fwrPhys->add(move);
119 // fwrPhys->add(rotate);
120 // tag = new GeoNameTag(name+"_L");
121 // fwrPhys->add(tag);
122 // fwrPhys->add(ringPhys);
123 }

◆ insertMagnetEnvelope()

GeoPhysVol * ForwardRegionGeoModelFactory::insertMagnetEnvelope ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
double  diameter,
double  halfL,
double  dL,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 26 of file ForwardRegionGeoModelElements.cxx.

27 {
28  const GeoTube *tube = new GeoTube(0, diameter/2, halfL-dL);
29 
30  GeoTrf::Transform3D shift = GeoTrf::Translate3D(x,y,z);
31  GeoTrf::Transform3D rotate = GeoTrf::RotateY3D(rotationAngle);
32 // Transform3D rotateX180 = GeoTrf::RotateX3D(180*Gaudi::Units::deg);
33 
34  const GeoShapeShift& magTube0 = (*tube)<<rotate<<shift;
35 // const GeoShapeUnion& magTube = magTube0.add((*tube)<<rotate<<shift<<rotateX180);
36 
37  const GeoLogVol *tubeLog = new GeoLogVol(name, &magTube0, m_MapMaterials[std::string("std::Vacuum")]);
38 
39  GeoPhysVol *tubePhys = new GeoPhysVol(tubeLog);
40 
41  GeoNameTag *tag = new GeoNameTag(name);
42  fwrPhys->add(tag);
43 
44  fwrPhys->add(tubePhys);
45 
46  return tubePhys;
47 }

◆ insertTCLElement()

void ForwardRegionGeoModelFactory::insertTCLElement ( const std::string &  name,
double  x,
double  y,
double  z,
GeoPhysVol *  fwrPhys,
double  TCLJawDistO,
double  TCLJawDistI,
bool  tungstenInsteadOfCopper = false 
)
private

Definition at line 393 of file ForwardRegionGeoModelElements.cxx.

394 {
395  // Constants
396  double TCL_BOX_halflength, TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_sideThickness, TCL_BOX_topBottomThickness, TCL_BOX_endThickness, TCL_TUBE_halflength, TCL_TUBE_halfapperture, TCL_TUBE_thickness;
397  TCL_BOX_sideThickness = 6*Gaudi::Units::mm;
398  TCL_BOX_topBottomThickness = 18*Gaudi::Units::mm;
399  TCL_BOX_endThickness = 18*Gaudi::Units::mm;
400 
401  TCL_BOX_halflength = 621*Gaudi::Units::mm;
402  TCL_BOX_halfwidth = 132*Gaudi::Units::mm;
403  TCL_BOX_halfheight = 60+TCL_BOX_topBottomThickness;
404 
405  TCL_TUBE_halflength = 59.5*Gaudi::Units::mm;
406  TCL_TUBE_halfapperture = 53*Gaudi::Units::mm;
407  TCL_TUBE_thickness = 2*Gaudi::Units::mm;
408 
409  double TCL_CuBlock_halflength, TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlockCylCut_zDepth, TCL_CuBlockCylCut_angle, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength, TCL_CuBlockCylCut_xDepth, TCL_CuBlockCylCut_xShift;
410  TCL_CuBlock_halflength = 597*Gaudi::Units::mm;
411  TCL_CuBlock_halfwidth = 14.5*Gaudi::Units::mm;
412  TCL_CuBlock_halfheight = 40*Gaudi::Units::mm;
413 
414  TCL_CuBlockCylCut_zDepth = 90*Gaudi::Units::mm;
415  TCL_CuBlockCylCut_angle = 12*Gaudi::Units::deg;
416  TCL_CuBlockCylCut_cylR = 40*Gaudi::Units::mm;
417 
418  TCL_CuBlockCylCut_cylHalflength = TCL_CuBlockCylCut_zDepth/cos(TCL_CuBlockCylCut_angle);
419  TCL_CuBlockCylCut_xDepth = TCL_CuBlockCylCut_zDepth*tan(TCL_CuBlockCylCut_angle);
420  TCL_CuBlockCylCut_xShift = -TCL_CuBlock_halfwidth-TCL_CuBlockCylCut_cylR/cos(TCL_CuBlockCylCut_angle)+TCL_CuBlockCylCut_xDepth;
421 
422  double TCL_CuBeam_halflength, TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_Cooling_width;
423  TCL_CuBeam_halflength = 530*Gaudi::Units::mm;
424  TCL_CuBeam_halfwidth = 15*Gaudi::Units::mm;
425  TCL_CuBeam_halfheight = 40*Gaudi::Units::mm;
426 
427  TCL_Cooling_width = 9*Gaudi::Units::mm;
428 
429 
430 
431  // rotate by 180 deg around X and Y
432  GeoTrf::Transform3D rotateX180 = GeoTrf::RotateX3D(180*Gaudi::Units::deg);
433  GeoTrf::Transform3D rotateY180 = GeoTrf::RotateY3D(180*Gaudi::Units::deg);
434 
435  // inner vacuum volume solid
436  const GeoBox * boxIn = new GeoBox(TCL_BOX_halfwidth-TCL_BOX_sideThickness, TCL_BOX_halfheight-TCL_BOX_topBottomThickness, TCL_BOX_halflength-TCL_BOX_endThickness);
437  const GeoTube * tubeIn = new GeoTube(0, TCL_TUBE_halfapperture, TCL_TUBE_halflength+0.5*TCL_BOX_endThickness);
438  GeoTrf::Transform3D moveTubeIn = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength-0.5*TCL_BOX_endThickness);
439  const GeoShapeShift& tubeIn1 = (*tubeIn)<<moveTubeIn;
440  const GeoShapeShift& tubeIn2 = (*tubeIn)<<moveTubeIn<<rotateY180;
441  const GeoShapeUnion * innerVac0 = new GeoShapeUnion(boxIn,&tubeIn1);
442  GeoShapeUnion * innerVac = new GeoShapeUnion(innerVac0,&tubeIn2);
443 
444  // outer steel case solid
445  const GeoBox * boxFull = new GeoBox(TCL_BOX_halfwidth, TCL_BOX_halfheight, TCL_BOX_halflength);
446  const GeoTube * tubeOut = new GeoTube(TCL_TUBE_halfapperture, TCL_TUBE_halfapperture+TCL_TUBE_thickness, TCL_TUBE_halflength);
447  GeoTrf::Transform3D moveTubeOut = GeoTrf::Translate3D(0, 0, TCL_BOX_halflength+TCL_TUBE_halflength);
448  const GeoShapeShift& tubeOut1 = (*tubeOut)<<moveTubeOut;
449  const GeoShapeShift& tubeOut2 = (*tubeOut)<<moveTubeOut<<rotateY180;
450  const GeoShapeUnion * outerSteelFull0 = new GeoShapeUnion(boxFull,&tubeOut1);
451  const GeoShapeUnion * outerSteelFull = new GeoShapeUnion(outerSteelFull0,&tubeOut2);
452  GeoShapeSubtraction * outerSteel = new GeoShapeSubtraction(outerSteelFull,innerVac);
453 
454  // Copper block solid
455  const GeoBox * cuBoxFull = new GeoBox(TCL_CuBlock_halfwidth, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
456  const GeoTube * cylCut0 = new GeoTube(0, TCL_CuBlockCylCut_cylR, TCL_CuBlockCylCut_cylHalflength);
457  GeoTrf::Transform3D rotateCylCut = GeoTrf::RotateY3D(TCL_CuBlockCylCut_angle);
458  GeoTrf::Transform3D moveCylCut = GeoTrf::Translate3D(TCL_CuBlockCylCut_xShift, 0, TCL_CuBlock_halflength);
459  const GeoShapeShift& cylCut1 = (*cylCut0)<<rotateCylCut<<moveCylCut;
460  const GeoShapeShift& cylCut2 = (*cylCut0)<<rotateCylCut<<moveCylCut<<rotateX180;
461  const GeoShapeSubtraction * cuBox0 = new GeoShapeSubtraction(cuBoxFull, &cylCut1);
462  const GeoShapeSubtraction * cuBox1 = new GeoShapeSubtraction(cuBox0, &cylCut2);
463  GeoTrf::Transform3D moveCuBoxI = GeoTrf::Translate3D(TCLJawDistI+TCL_CuBlock_halfwidth, 0, 0);
464  const GeoShapeShift& cuBoxI = (*cuBox1)<<moveCuBoxI;
465  GeoTrf::Transform3D moveCuBoxO = GeoTrf::Translate3D(+TCLJawDistO+TCL_CuBlock_halfwidth, 0, 0);
466  const GeoShapeShift& cuBoxO = (*cuBox1)<<moveCuBoxO<<rotateY180;
467 
468  // Copper beam solid
469  const GeoBox * cuBeamFull = new GeoBox(TCL_CuBeam_halfwidth, TCL_CuBeam_halfheight, TCL_CuBeam_halflength);
470  GeoTrf::Transform3D moveCuBeamI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
471  const GeoShapeShift& cuBeamI = (*cuBeamFull)<<moveCuBeamI;
472  GeoTrf::Transform3D moveCuBeamO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+TCL_Cooling_width+TCL_CuBeam_halfwidth, 0, 0);
473  const GeoShapeShift& cuBeamO = (*cuBeamFull)<<moveCuBeamO<<rotateY180;
474 
475  // Watter cooling in first aproximation (water box)
476  const GeoBox * waterBox = new GeoBox(0.5*TCL_Cooling_width, TCL_CuBlock_halfheight, TCL_CuBlock_halflength);
477  GeoTrf::Transform3D moveWaterBoxI = GeoTrf::Translate3D(TCLJawDistI+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
478  const GeoShapeShift& waterBoxI = (*waterBox)<<moveWaterBoxI;
479  GeoTrf::Transform3D moveWaterBoxO = GeoTrf::Translate3D(+TCLJawDistO+2*TCL_CuBlock_halfwidth+0.5*TCL_Cooling_width, 0, 0);
480  const GeoShapeShift& waterBoxO = (*waterBox)<<moveWaterBoxO<<rotateY180;
481 
482 
483  // Logical and physical volumes
484  const GeoLogVol *ringLog = new GeoLogVol(name+"Log", outerSteel, m_MapMaterials[std::string("Steel")]);
485  const GeoLogVol *ringLog2 = new GeoLogVol(name+"Fill", innerVac, m_MapMaterials[std::string("std::Vacuum")]);
486 
487  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
488  GeoPhysVol *ringPhys2 = new GeoPhysVol(ringLog2);
489 
490  const GeoLogVol *cuBoxLogI = new GeoLogVol(name+"CuBoxI", &cuBoxI, m_MapMaterials[std::string(tungstenInsteadOfCopper ? "Tungsten" : "Copper")]);
491  GeoPhysVol *cuBoxPhysI = new GeoPhysVol(cuBoxLogI);
492  const GeoLogVol *cuBoxLogO = new GeoLogVol(name+"CuBoxO", &cuBoxO, m_MapMaterials[std::string(tungstenInsteadOfCopper ? "Tungsten" : "Copper")]);
493  GeoPhysVol *cuBoxPhysO = new GeoPhysVol(cuBoxLogO);
494 
495  const GeoLogVol *cuBeamLogI = new GeoLogVol(name+"CuBeamI", &cuBeamI, m_MapMaterials[std::string("GlidCopAL15")]);
496  GeoPhysVol *cuBeamPhysI = new GeoPhysVol(cuBeamLogI);
497  const GeoLogVol *cuBeamLogO = new GeoLogVol(name+"CuBeamO", &cuBeamO, m_MapMaterials[std::string("GlidCopAL15")]);
498  GeoPhysVol *cuBeamPhysO = new GeoPhysVol(cuBeamLogO);
499 
500  const GeoLogVol *waterBoxLogI = new GeoLogVol(name+"waterBoxI", &waterBoxI, m_MapMaterials[std::string("water")]);
501  GeoPhysVol *waterBoxPhysI = new GeoPhysVol(waterBoxLogI);
502  const GeoLogVol *waterBoxLogO = new GeoLogVol(name+"waterBoxO", &waterBoxO, m_MapMaterials[std::string("water")]);
503  GeoPhysVol *waterBoxPhysO = new GeoPhysVol(waterBoxLogO);
504 
505  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
506  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
507  fwrPhys->add(move);
508 
509  GeoNameTag *tag = new GeoNameTag(name);
510  fwrPhys->add(tag);
511 
512  fwrPhys->add(ringPhys);
513 
514  // add filling (inside of the tube)
515  fwrPhys->add(move);
516  tag = new GeoNameTag(name+"Fill");
517  fwrPhys->add(tag);
518  fwrPhys->add(ringPhys2);
519 
520  // add copper absorbers
521  ringPhys2->add(cuBoxPhysI);
522  ringPhys2->add(cuBoxPhysO);
523 
524  ringPhys2->add(cuBeamPhysI);
525  ringPhys2->add(cuBeamPhysO);
526 
527  ringPhys2->add(waterBoxPhysI);
528  ringPhys2->add(waterBoxPhysO);
529 }

◆ insertTrousersElement()

void ForwardRegionGeoModelFactory::insertTrousersElement ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 285 of file ForwardRegionGeoModelElements.cxx.

286 {
287  // "Trousers" -- transition from 1 to 2 beampipes
288  // rewritten from Knut Dundas Moraa's AGDD file and modified
289 
290  // CONSTANTS
291  double TAN_A, TAN_B, TAN_C, TAN_Dsmall, TAN_Dbig, TAN_thick1, TAN_xseparation;
292  TAN_A = 700*Gaudi::Units::mm;
293  TAN_B = 500*Gaudi::Units::mm;
294  TAN_C = 3700*Gaudi::Units::mm;
295  TAN_Dsmall = 52*Gaudi::Units::mm;
296  TAN_Dbig = 212*Gaudi::Units::mm;
297  TAN_thick1 = 4.5*Gaudi::Units::mm;
298  TAN_xseparation = 80*Gaudi::Units::mm;
299 
300  // Derived constants
301  double TAN_Rsmall, TAN_Rbig, TAN_coneZh, TAN_coneR, TAN_coneXh;//, TAN_halflength;
302  TAN_Rsmall = 0.5*TAN_Dsmall;
303  TAN_Rbig = 0.5*TAN_Dbig;
304  TAN_coneZh = TAN_B*cos(5*M_PI/180);
305  TAN_coneR = 2*TAN_B*sin(5*M_PI/180)+TAN_Rsmall;
306  TAN_coneXh = TAN_Rbig-TAN_B*sin(5*M_PI/180)-TAN_Rsmall;
307  //TAN_halflength = 0.5*(TAN_A+TAN_B+TAN_C);
308 
309  // volume construction
310 
311  // inner part
312  GeoPcon *TANi_cone0 = new GeoPcon(0,360*Gaudi::Units::deg);
313  TANi_cone0->addPlane(2*TAN_coneZh, TAN_Rsmall, 2*TAN_Rbig);
314  TANi_cone0->addPlane(TAN_coneZh, TAN_Rsmall, 2*TAN_Rbig);
315  TANi_cone0->addPlane(-TAN_coneZh, TAN_coneR, 2*TAN_Rbig);
316  GeoTrf::Transform3D TAN_moveCone = GeoTrf::Translate3D(TAN_coneXh,0,0.5*(TAN_A-TAN_B));
317  GeoTrf::Transform3D TAN_rotateCone = GeoTrf::RotateY3D(5*Gaudi::Units::deg);
318  const GeoShapeShift& TANi_cone = (*TANi_cone0)<<TAN_rotateCone<<TAN_moveCone;
319 
320  const GeoBox *TAN_box0 = new GeoBox(2*TAN_Rbig,2*TAN_Rbig,TAN_A+TAN_B);
321  GeoTrf::Transform3D TAN_moveBox = GeoTrf::Translate3D(-2*TAN_Rbig,0,0);
322  const GeoShapeShift& TAN_box = (*TAN_box0)<<TAN_moveBox;
323 
324  const GeoTube *TANi_bigtube = new GeoTube(0, TAN_Rbig, 0.5*(TAN_A+TAN_B));
325 
326  GeoShapeSubtraction *TANi_hcyl = new GeoShapeSubtraction(TANi_bigtube, &TAN_box);
327 
328  GeoShapeSubtraction *TANi_h = new GeoShapeSubtraction(TANi_hcyl, &TANi_cone);
329  GeoTrf::Transform3D TAN_moveH = GeoTrf::Translate3D(0,0,-0.5*TAN_C);
330  GeoTrf::Transform3D TAN_rotateH = GeoTrf::RotateZ3D(180*Gaudi::Units::deg);
331 
332  GeoTrf::Transform3D TAN_moveTube1 = GeoTrf::Translate3D(TAN_xseparation,0,0.5*(TAN_A+TAN_B));
333  GeoTrf::Transform3D TAN_moveTube2 = GeoTrf::Translate3D(-TAN_xseparation,0,0.5*(TAN_A+TAN_B));
334 
335  // outer part
336  GeoPcon *TANo_cone0 = new GeoPcon(0,360*Gaudi::Units::deg);
337  TANo_cone0->addPlane(2*TAN_coneZh, TAN_Rsmall+TAN_thick1, 2*TAN_Rbig);
338  TANo_cone0->addPlane(TAN_coneZh, TAN_Rsmall+TAN_thick1, 2*TAN_Rbig);
339  TANo_cone0->addPlane(-TAN_coneZh, TAN_coneR+TAN_thick1, 2*TAN_Rbig);
340  const GeoShapeShift& TANo_cone = (*TANo_cone0)<<TAN_rotateCone<<TAN_moveCone;
341 
342  const GeoTube *TANo_bigtube = new GeoTube(0, TAN_Rbig+TAN_thick1, 0.5*(TAN_A+TAN_B));
343 
344  GeoShapeSubtraction *TANo_hcyl = new GeoShapeSubtraction(TANo_bigtube, &TAN_box);
345 
346  GeoShapeSubtraction *TANo_h = new GeoShapeSubtraction(TANo_hcyl, &TANo_cone);
347 
348  const GeoTube *TAN_antiblock0 = new GeoTube(0, TAN_Rsmall, 0.5*(TAN_A+2*TAN_B)); // antiblock tube -- just in case..
349  GeoTrf::Transform3D TAN_moveAntiblock = GeoTrf::Translate3D(TAN_xseparation,0,0);
350  const GeoShapeShift& TAN_antiblock = (*TAN_antiblock0)<<TAN_moveAntiblock;
351 
352  GeoShapeSubtraction *TAN_shape0 = new GeoShapeSubtraction(TANo_h, TANi_h);
353  GeoShapeSubtraction *TAN_shape = new GeoShapeSubtraction(TAN_shape0, &TAN_antiblock);
354  const GeoShapeShift& TAN_shape1 = (*TAN_shape)<<TAN_moveH;
355  const GeoShapeShift& TAN_shape2 = (*TAN_shape)<<TAN_moveH<<TAN_rotateH;
356 
357  const GeoTube *TANo_ftube = new GeoTube(TAN_Rsmall,TAN_Rsmall+TAN_thick1,0.5*TAN_C-0.1*Gaudi::Units::mm);
358  const GeoShapeShift& TANo_ftube1 = (*TANo_ftube)<<TAN_moveTube1;
359  const GeoShapeShift& TANo_ftube2 = (*TANo_ftube)<<TAN_moveTube2;
360 
361  GeoShapeUnion *TANo0 = new GeoShapeUnion(&TAN_shape1, &TAN_shape2);
362  GeoShapeUnion *TANo1 = new GeoShapeUnion(TANo0, &TANo_ftube1);
363  GeoShapeUnion *TANo = new GeoShapeUnion(TANo1, &TANo_ftube2); // complete outer part
364 
365  // PLACEMENT
366  const GeoLogVol *ringLog = new GeoLogVol(name+"Log", TANo, m_MapMaterials[std::string("Steel")]);
367 
368  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
369 
370  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
371  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
372  fwrPhys->add(move);
373  GeoTransform *rotate = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
374  fwrPhys->add(rotate);
375 
376  GeoNameTag *tag = new GeoNameTag(name);
377  fwrPhys->add(tag);
378 
379  fwrPhys->add(ringPhys);
380 
381 // // The other side of the forward region may be obtained by rotation
382 // GeoTransform *rotateX180 = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg));
383 
384 // // the other side
385 // fwrPhys->add(rotateX180);
386 // fwrPhys->add(move);
387 // fwrPhys->add(rotate);
388 // tag = new GeoNameTag(name+"_L");
389 // fwrPhys->add(tag);
390 // fwrPhys->add(ringPhys);
391 }

◆ insertXRecticircularElement()

void ForwardRegionGeoModelFactory::insertXRecticircularElement ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
double  xAperture,
double  yAperture,
double  halfL,
double  dL,
double  tubeThickness,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 125 of file ForwardRegionGeoModelElements.cxx.

126 {
127  double beamScreenSeparation = 1.5*Gaudi::Units::mm;
128  double beamScreenCuThick = 0.05*Gaudi::Units::mm;
129  double beamScreenSteelThick = 1*Gaudi::Units::mm;
130 
131  const GeoTube *ringTube = new GeoTube(yAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, yAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
132  const GeoTube *circ = new GeoTube(0, yAperture*Gaudi::Units::mm/2, halfL-dL);
133  const GeoBox *rect = new GeoBox(xAperture*Gaudi::Units::mm/2, yAperture*Gaudi::Units::mm/2, halfL-dL);
134  GeoShapeIntersection *innerVac = new GeoShapeIntersection(rect,circ);
135 
136  const GeoTube *circ2 = new GeoTube(0, yAperture*Gaudi::Units::mm/2+beamScreenCuThick, halfL-dL);
137  const GeoBox *rect2 = new GeoBox(xAperture*Gaudi::Units::mm/2+beamScreenCuThick, yAperture*Gaudi::Units::mm/2+beamScreenCuThick, halfL-dL);
138  GeoShapeIntersection *beamScreenCu0 = new GeoShapeIntersection(rect2,circ2);
139  GeoShapeSubtraction *beamScreenCu = new GeoShapeSubtraction(beamScreenCu0, innerVac);
140 
141  const GeoTube *circ3 = new GeoTube(0, yAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
142  const GeoBox *rect3 = new GeoBox(xAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
143  GeoShapeIntersection *beamScreenSteel01 = new GeoShapeIntersection(rect3,circ3);
144  GeoShapeSubtraction *beamScreenSteel02 = new GeoShapeSubtraction(beamScreenSteel01, innerVac);
145  GeoShapeSubtraction *beamScreenSteel = new GeoShapeSubtraction(beamScreenSteel02, beamScreenCu);
146 
147  const GeoLogVol *ringLog = new GeoLogVol(name+"BeamPipe", ringTube, m_MapMaterials[std::string("Steel")]);
148  const GeoLogVol *ringLogCu = new GeoLogVol(name+"BeamScreenCu", beamScreenCu, m_MapMaterials[std::string("Copper")]);
149  const GeoLogVol *ringLogSteel = new GeoLogVol(name+"BeamScreenSteel", beamScreenSteel, m_MapMaterials[std::string("Steel")]);
150 
151  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
152  GeoPhysVol *ringPhysCu = new GeoPhysVol(ringLogCu);
153  GeoPhysVol *ringPhysSteel = new GeoPhysVol(ringLogSteel);
154 
155  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
156  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
157  fwrPhys->add(move);
158  GeoTransform *rotate = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
159  fwrPhys->add(rotate);
160 
161  GeoNameTag *tag = new GeoNameTag(name+"BeamPipe");
162  fwrPhys->add(tag);
163 
164  fwrPhys->add(ringPhys);
165  //detectorManager->addTreeTop(ringPhys);
166 
167  // add beam scren
168  fwrPhys->add(move);
169  fwrPhys->add(rotate);
170  tag = new GeoNameTag(name+"BeamScreenCu");
171  fwrPhys->add(tag);
172  fwrPhys->add(ringPhysCu);
173  fwrPhys->add(move);
174  fwrPhys->add(rotate);
175  tag = new GeoNameTag(name+"BeamScreenSteel");
176  fwrPhys->add(tag);
177  fwrPhys->add(ringPhysSteel);
178 
179 
180 // // The other side of the forward region may be obtain by rotation
181 // GeoTransform *rotateX180 = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg));
182 
183 // // the other side
184 // fwrPhys->add(rotateX180);
185 // fwrPhys->add(move);
186 // fwrPhys->add(rotate);
187 // tag = new GeoNameTag(name+"BeamPipe_L");
188 // fwrPhys->add(tag);
189 // fwrPhys->add(ringPhys);
190 
191 // fwrPhys->add(rotateX180);
192 // fwrPhys->add(move);
193 // fwrPhys->add(rotate);
194 // tag = new GeoNameTag(name+"BeamScreenCu_L");
195 // fwrPhys->add(tag);
196 // fwrPhys->add(ringPhysCu);
197 
198 // fwrPhys->add(rotateX180);
199 // fwrPhys->add(move);
200 // fwrPhys->add(rotate);
201 // tag = new GeoNameTag(name+"BeamScreenSteel_L");
202 // fwrPhys->add(tag);
203 // fwrPhys->add(ringPhysSteel);
204 }

◆ insertYRecticircularElement()

void ForwardRegionGeoModelFactory::insertYRecticircularElement ( const std::string &  name,
double  x,
double  y,
double  z,
double  rotationAngle,
double  xAperture,
double  yAperture,
double  halfL,
double  dL,
double  tubeThickness,
GeoPhysVol *  fwrPhys 
)
private

Definition at line 206 of file ForwardRegionGeoModelElements.cxx.

207 {
208  double beamScreenSeparation = 1.5*Gaudi::Units::mm;
209  double beamScreenCuThick = 0.05*Gaudi::Units::mm;
210  double beamScreenSteelThick = 1*Gaudi::Units::mm;
211 
212  const GeoTube *ringTube = new GeoTube(xAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation, xAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick+beamScreenSeparation+tubeThickness, halfL-dL);
213  const GeoTube *circ = new GeoTube(0, xAperture*Gaudi::Units::mm/2, halfL-dL);
214  const GeoBox *rect = new GeoBox(xAperture*Gaudi::Units::mm/2, yAperture*Gaudi::Units::mm/2, halfL-dL);
215  GeoShapeIntersection *innerVac = new GeoShapeIntersection(rect,circ);
216 
217  const GeoTube *circ2 = new GeoTube(0, xAperture*Gaudi::Units::mm/2+beamScreenCuThick, halfL-dL);
218  const GeoBox *rect2 = new GeoBox(xAperture*Gaudi::Units::mm/2+beamScreenCuThick, yAperture*Gaudi::Units::mm/2+beamScreenCuThick, halfL-dL);
219  GeoShapeIntersection *beamScreenCu0 = new GeoShapeIntersection(rect2,circ2);
220  GeoShapeSubtraction *beamScreenCu = new GeoShapeSubtraction(beamScreenCu0, innerVac);
221 
222  const GeoTube *circ3 = new GeoTube(0, xAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
223  const GeoBox *rect3 = new GeoBox(xAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, yAperture*Gaudi::Units::mm/2+beamScreenCuThick+beamScreenSteelThick, halfL-dL);
224  GeoShapeIntersection *beamScreenSteel01 = new GeoShapeIntersection(rect3,circ3);
225  GeoShapeSubtraction *beamScreenSteel02 = new GeoShapeSubtraction(beamScreenSteel01, innerVac);
226  GeoShapeSubtraction *beamScreenSteel = new GeoShapeSubtraction(beamScreenSteel02, beamScreenCu);
227 
228  const GeoLogVol *ringLog = new GeoLogVol(name+"BeamPipe", ringTube, m_MapMaterials[std::string("Steel")]);
229  const GeoLogVol *ringLogCu = new GeoLogVol(name+"BeamScreenCu", beamScreenCu, m_MapMaterials[std::string("Copper")]);
230  const GeoLogVol *ringLogSteel = new GeoLogVol(name+"BeamScreenSteel", beamScreenSteel, m_MapMaterials[std::string("Steel")]);
231 
232  GeoPhysVol *ringPhys = new GeoPhysVol(ringLog);
233  GeoPhysVol *ringPhysCu = new GeoPhysVol(ringLogCu);
234  GeoPhysVol *ringPhysSteel = new GeoPhysVol(ringLogSteel);
235 
236  //create rotation and traslation and add them to the tree of volumes of the world (move and rotate the volume)
237  GeoTransform *move = new GeoTransform(GeoTrf::Translate3D(x,y,z));
238  fwrPhys->add(move);
239  GeoTransform *rotate = new GeoTransform(GeoTrf::RotateY3D(rotationAngle));
240  fwrPhys->add(rotate);
241 
242  GeoNameTag *tag = new GeoNameTag(name+"BeamPipe");
243  fwrPhys->add(tag);
244 
245  fwrPhys->add(ringPhys);
246 
247  // add beam scren
248  fwrPhys->add(move);
249  fwrPhys->add(rotate);
250  tag = new GeoNameTag(name+"BeamScreenCu");
251  fwrPhys->add(tag);
252  fwrPhys->add(ringPhysCu);
253  fwrPhys->add(move);
254  fwrPhys->add(rotate);
255  tag = new GeoNameTag(name+"BeamScreenSteel");
256  fwrPhys->add(tag);
257  fwrPhys->add(ringPhysSteel);
258 
259 // // The other side of the forward region may be obtain by rotation
260 // GeoTransform *rotateX180 = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg));
261 
262 // // the other side
263 // fwrPhys->add(rotateX180);
264 // fwrPhys->add(move);
265 // fwrPhys->add(rotate);
266 // tag = new GeoNameTag(name+"BeamPipe_L");
267 // fwrPhys->add(tag);
268 // fwrPhys->add(ringPhys);
269 
270 // fwrPhys->add(rotateX180);
271 // fwrPhys->add(move);
272 // fwrPhys->add(rotate);
273 // tag = new GeoNameTag(name+"BeamScreenCu_L");
274 // fwrPhys->add(tag);
275 // fwrPhys->add(ringPhysCu);
276 
277 // fwrPhys->add(rotateX180);
278 // fwrPhys->add(move);
279 // fwrPhys->add(rotate);
280 // tag = new GeoNameTag(name+"BeamScreenSteel_L");
281 // fwrPhys->add(tag);
282 // fwrPhys->add(ringPhysSteel);
283 }

◆ loadDataFile()

std::vector< std::vector< std::string > > ForwardRegionGeoModelFactory::loadDataFile ( const std::string &  fileName,
int  cols 
)
private

Definition at line 445 of file ForwardRegionGeoModelFactory.cxx.

446 {
447  std::vector<std::vector<std::string> > loadedData;
448 
449  MsgStream LogStream(Athena::getMessageSvc(), "ForwardRegionGeoModel::loadDataFile()");
450 
451  std::ifstream file (fileName);
452  if(!file){
454  LogStream << MSG::DEBUG << "File " << fileName << " not found in run directory, trying to load it from DATAPATH" << endmsg;
455  file.open(datapath.c_str());
456  }
457 
458  if(!file)
459  LogStream << MSG::FATAL << "Unable to load " << fileName << endmsg;
460 
461  if(file.is_open())
462  {
463  std::vector<std::string> row (cols);
464  char c;
465 
466  while(file.get(c))
467  {
468  if(c != '@' && c != '#' && c != '*' && c != '$' && c != '%')
469  {
470  file.unget();
471  for(int i = 0; i<cols; i++) // load desired columns
472  {
473  file >> row[i];
474  }
475  loadedData.push_back(row); //store them
476  file.ignore(1024,'\n'); // discard rest of line
477  }
478  else
479  file.ignore(1024, '\n'); // discard commented lines
480  }
481  LogStream << MSG::INFO << "File " << fileName << " succesfully loaded." << endmsg;
482  file.close();
483  }
484  return loadedData;
485 }

◆ num2str()

template<class T >
std::string ForwardRegionGeoModelFactory::num2str ( num)
private

Definition at line 200 of file ForwardRegionGeoModelFactory.cxx.

201 {
202  std::ostringstream strs;
203  strs << num;
204  return strs.str();
205 }

◆ operator=()

const ForwardRegionGeoModelFactory& ForwardRegionGeoModelFactory::operator= ( const ForwardRegionGeoModelFactory right)
private

◆ sgn()

template<typename T >
int ForwardRegionGeoModelFactory::sgn ( val)
private

Definition at line 207 of file ForwardRegionGeoModelFactory.cxx.

207  {
208  return (T(0) < val) - (val < T(0));
209 }

Member Data Documentation

◆ m_Config

FWD_CONFIGURATION ForwardRegionGeoModelFactory::m_Config
private

Definition at line 73 of file ForwardRegionGeoModelFactory.h.

◆ m_detectorManager

ForwardRegionGeoModelManager* ForwardRegionGeoModelFactory::m_detectorManager
private

Definition at line 108 of file ForwardRegionGeoModelFactory.h.

◆ m_detectorStore

StoreGateSvc* ForwardRegionGeoModelFactory::m_detectorStore
private

Definition at line 67 of file ForwardRegionGeoModelFactory.h.

◆ m_MagConfig

FWDMg_CONFIGURATION ForwardRegionGeoModelFactory::m_MagConfig
private

Definition at line 74 of file ForwardRegionGeoModelFactory.h.

◆ m_MapMaterials

std::map<std::string,const GeoMaterial*> ForwardRegionGeoModelFactory::m_MapMaterials
private

Definition at line 70 of file ForwardRegionGeoModelFactory.h.

◆ m_properties

ToolHandle<IForwardRegionProperties> ForwardRegionGeoModelFactory::m_properties
private

Definition at line 76 of file ForwardRegionGeoModelFactory.h.


The documentation for this class was generated from the following files:
_FWD_CONFIGURATION::TCL5JawDistB2I
double TCL5JawDistB2I
Definition: ForwardRegionGeoModelFactory.h:28
ForwardRegionGeoModelFactory::m_detectorManager
ForwardRegionGeoModelManager * m_detectorManager
Definition: ForwardRegionGeoModelFactory.h:108
beamspotman.r
def r
Definition: beamspotman.py:672
_FWD_CONFIGURATION::posZDC2
double posZDC2
Definition: ForwardRegionGeoModelFactory.h:44
_FWD_CONFIGURATION::TCL6JawDistB2I
double TCL6JawDistB2I
Definition: ForwardRegionGeoModelFactory.h:29
rotate
void rotate(double angler, GeoTrf::Vector2D &vector)
Definition: TRTDetectorFactory_Full.cxx:61
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:18
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:138
_FWD_CONFIGURATION::TCL6JawDistB2O
double TCL6JawDistB2O
Definition: ForwardRegionGeoModelFactory.h:32
ForwardRegionGeoModelManager
Definition: ForwardRegionGeoModelManager.h:10
ForwardRegionGeoModelFactory::insertYRecticircularElement
void insertYRecticircularElement(const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:206
ForwardRegionGeoModelFactory::num2str
std::string num2str(T)
Definition: ForwardRegionGeoModelFactory.cxx:200
_FWD_CONFIGURATION::newPosB7R1
double newPosB7R1
Definition: ForwardRegionGeoModelFactory.h:38
_FWD_CONFIGURATION::TCL5JawDistB1O
double TCL5JawDistB1O
Definition: ForwardRegionGeoModelFactory.h:25
JetTiledMap::W
@ W
Definition: TiledEtaPhiMap.h:44
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
DMTest::P
P_v1 P
Definition: P.h:23
_FWD_CONFIGURATION::TCL5JawDistB1I
double TCL5JawDistB1I
Definition: ForwardRegionGeoModelFactory.h:22
_FWD_CONFIGURATION::TCL4JawDistB2I
double TCL4JawDistB2I
Definition: ForwardRegionGeoModelFactory.h:27
DMTest::C
C_v1 C
Definition: C.h:26
_FWD_CONFIGURATION::posAFPL1
double posAFPL1
Definition: ForwardRegionGeoModelFactory.h:39
StoredMaterialManager::getElement
virtual const GeoElement * getElement(const std::string &name)=0
cm3
#define cm3
M_PI
#define M_PI
Definition: ActiveFraction.h:11
deg
#define deg
Definition: SbPolyhedron.cxx:17
keylayer_zslicemap.row
row
Definition: keylayer_zslicemap.py:155
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
ForwardRegionGeoModelFactory::m_MapMaterials
std::map< std::string, const GeoMaterial * > m_MapMaterials
Definition: ForwardRegionGeoModelFactory.h:70
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ForwardRegionGeoModelFactory::insertTCLElement
void insertTCLElement(const std::string &name, double x, double y, double z, GeoPhysVol *fwrPhys, double TCLJawDistO, double TCLJawDistI, bool tungstenInsteadOfCopper=false)
Definition: ForwardRegionGeoModelElements.cxx:393
x
#define x
JetTiledMap::S
@ S
Definition: TiledEtaPhiMap.h:44
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
ForwardRegionGeoModelFactory::constructElements
void constructElements(GeoPhysVol *fwrPhys, std::vector< std::vector< std::string > > loadedDataFile, int beam)
Definition: ForwardRegionGeoModelFactory.cxx:211
_FWD_CONFIGURATION::posAFPL2
double posAFPL2
Definition: ForwardRegionGeoModelFactory.h:40
ForwardRegionGeoModelFactory::insertTrousersElement
void insertTrousersElement(const std::string &name, double x, double y, double z, double rotationAngle, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:285
_FWD_CONFIGURATION::vp1Compatibility
bool vp1Compatibility
Definition: ForwardRegionGeoModelFactory.h:35
StoreGateSvc::retrieve
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
python.SystemOfUnits.dL
float dL
Definition: SystemOfUnits.py:93
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
_FWD_CONFIGURATION::ALFAInNewPosition
bool ALFAInNewPosition
Definition: ForwardRegionGeoModelFactory.h:36
beamspotnt.cols
list cols
Definition: bin/beamspotnt.py:1113
lwtDev::Component::O
@ O
ForwardRegionGeoModelFactory::insertCircularElement
void insertCircularElement(const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:49
ForwardRegionGeoModelFactory::insertMagnetEnvelope
GeoPhysVol * insertMagnetEnvelope(const std::string &name, double x, double y, double z, double rotationAngle, double diameter, double halfL, double dL, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:26
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
python.html.AtlRunQueryDQSummary.datapath
datapath
Definition: AtlRunQueryDQSummary.py:1204
_FWD_CONFIGURATION::TCL4JawDistB1I
double TCL4JawDistB1I
Definition: ForwardRegionGeoModelFactory.h:21
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
_FWD_CONFIGURATION::buildTCL6
bool buildTCL6
Definition: ForwardRegionGeoModelFactory.h:34
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
_FWD_CONFIGURATION::posAFPR2
double posAFPR2
Definition: ForwardRegionGeoModelFactory.h:42
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
_FWD_CONFIGURATION::newPosB7L1
double newPosB7L1
Definition: ForwardRegionGeoModelFactory.h:37
TRT_PAI_physicsConstants::r0
const double r0
electron radius{cm}
Definition: TRT_PAI_physicsConstants.h:22
file
TFile * file
Definition: tile_monitor.h:29
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
ForwardRegionGeoModelFactory::insertXRecticircularElement
void insertXRecticircularElement(const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:125
jobOptions.beam
beam
Definition: jobOptions.SuperChic_ALP2.py:16
CxxUtils::atof
double atof(std::string_view str)
Converts a string into a double / float.
Definition: Control/CxxUtils/Root/StringUtils.cxx:91
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
_FWD_CONFIGURATION::TCL6JawDistB1O
double TCL6JawDistB1O
Definition: ForwardRegionGeoModelFactory.h:26
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ForwardRegionGeoModelFactory::m_Config
FWD_CONFIGURATION m_Config
Definition: ForwardRegionGeoModelFactory.h:73
dqt_zlumi_alleff_HIST.B
B
Definition: dqt_zlumi_alleff_HIST.py:110
ForwardRegionGeoModelFactory::m_MagConfig
FWDMg_CONFIGURATION m_MagConfig
Definition: ForwardRegionGeoModelFactory.h:74
_FWD_CONFIGURATION::TCL6JawDistB1I
double TCL6JawDistB1I
Definition: ForwardRegionGeoModelFactory.h:23
ForwardRegionGeoModelFactory::m_properties
ToolHandle< IForwardRegionProperties > m_properties
Definition: ForwardRegionGeoModelFactory.h:76
_FWD_CONFIGURATION::posAFPR1
double posAFPR1
Definition: ForwardRegionGeoModelFactory.h:41
PathResolverFindDataFile
std::string PathResolverFindDataFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:316
_FWD_CONFIGURATION::TCL5JawDistB2O
double TCL5JawDistB2O
Definition: ForwardRegionGeoModelFactory.h:31
_FWD_CONFIGURATION::posZDC1
double posZDC1
Definition: ForwardRegionGeoModelFactory.h:43
ForwardRegionGeoModelFactory::loadDataFile
std::vector< std::vector< std::string > > loadDataFile(const std::string &fileName, int cols)
Definition: ForwardRegionGeoModelFactory.cxx:445
_FWD_CONFIGURATION::TCL4JawDistB1O
double TCL4JawDistB1O
Definition: ForwardRegionGeoModelFactory.h:24
y
#define y
ForwardRegionGeoModelFactory::m_detectorStore
StoreGateSvc * m_detectorStore
Definition: ForwardRegionGeoModelFactory.h:67
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
ForwardRegionGeoModelFactory::insertEllipticalElement
void insertEllipticalElement(const std::string &name, double x, double y, double z, double rotationAngle, double xAperture, double yAperture, double halfL, double dL, double tubeThickness, GeoPhysVol *fwrPhys)
Definition: ForwardRegionGeoModelElements.cxx:82
ForwardRegionGeoModelFactory::sgn
int sgn(T val)
Definition: ForwardRegionGeoModelFactory.cxx:207
DEBUG
#define DEBUG
Definition: page_access.h:11
StoredMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name)=0
ForwardRegionGeoModelFactory::DefineMaterials
void DefineMaterials()
Definition: ForwardRegionGeoModelFactory.cxx:85
ForwardRegionGeoModelManager::addTreeTop
void addTreeTop(PVLink)
Definition: ForwardRegionGeoModelManager.cxx:27
mole
#define mole
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:23
jobOptions.fileName
fileName
Definition: jobOptions.SuperChic_ALP2.py:39
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
_FWD_CONFIGURATION::buildTCL4
bool buildTCL4
Definition: ForwardRegionGeoModelFactory.h:33
python.compressB64.c
def c
Definition: compressB64.py:93
calibdata.tube
tube
Definition: calibdata.py:30
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
_FWD_CONFIGURATION::TCL4JawDistB2O
double TCL4JawDistB2O
Definition: ForwardRegionGeoModelFactory.h:30
python.SystemOfUnits.gram
float gram
Definition: SystemOfUnits.py:183