ATLAS Offline Software
Loading...
Searching...
No Matches
TRT_ServMatFactory Class Reference

#include <TRT_ServMatFactory.h>

Inheritance diagram for TRT_ServMatFactory:
Collaboration diagram for TRT_ServMatFactory:

Public Member Functions

 TRT_ServMatFactory (InDetDD::AthenaComps *athenaComps)
 ~TRT_ServMatFactory ()
void create (GeoPhysVol *mother)
StoreGateSvcdetStore ()
const IGeoDbTagSvcgeoDbTagSvc () const
IRDBAccessSvcrdbAccessSvc ()
const IGeometryDBSvcgeomDB () const
InDetMaterialManagermaterialManager ()
MsgStream & msg (MSG::Level lvl) const
bool msgLvl (MSG::Level lvl) const
InDetDD::AthenaCompsgetAthenaComps ()

Protected Attributes

InDetMaterialManagerm_materialManager
std::unique_ptr< InDetMaterialManagerm_materialManagerUnique

Private Member Functions

const TRT_ServMatFactoryoperator= (const TRT_ServMatFactory &right)
 TRT_ServMatFactory (const TRT_ServMatFactory &right)

Private Attributes

InDetDD::AthenaCompsm_athenaComps

Detailed Description

Definition at line 15 of file TRT_ServMatFactory.h.

Constructor & Destructor Documentation

◆ TRT_ServMatFactory() [1/2]

TRT_ServMatFactory::TRT_ServMatFactory ( InDetDD::AthenaComps * athenaComps)

Definition at line 36 of file TRT_ServMatFactory.cxx.

37 : InDetDD::SubDetectorFactoryBase(athenaComps)
38{
39}

◆ ~TRT_ServMatFactory()

TRT_ServMatFactory::~TRT_ServMatFactory ( )

Definition at line 42 of file TRT_ServMatFactory.cxx.

43{
44}

◆ TRT_ServMatFactory() [2/2]

TRT_ServMatFactory::TRT_ServMatFactory ( const TRT_ServMatFactory & right)
private

Member Function Documentation

◆ create()

void TRT_ServMatFactory::create ( GeoPhysVol * mother)

Definition at line 49 of file TRT_ServMatFactory.cxx.

50{
51
52 msg(MSG::DEBUG) << "Building TRT Service Material" << endmsg;
53
54 //double epsilon = 0.002;
55
56 DecodeVersionKey atlasVersionKey(geoDbTagSvc(),"ATLAS");
57 DecodeVersionKey indetVersionKey(geoDbTagSvc(),"InnerDetector");
58 DecodeVersionKey trtVersionKey(geoDbTagSvc(),"TRT");
59
60 std::string railversion = rdbAccessSvc()->getChildTag("IDDetailedRail",indetVersionKey.tag(),indetVersionKey.node());
61 if(!railversion.empty()) {
62 // ______________________________________________________________________________________________________________________
63 // Geometry with ID rail
64
65 IRDBRecordset_ptr atls = rdbAccessSvc()->getRecordsetPtr("AtlasMother", atlasVersionKey.tag(), atlasVersionKey.node());
66 IRDBRecordset_ptr cage = rdbAccessSvc()->getRecordsetPtr("SquirrelCage", indetVersionKey.tag(), indetVersionKey.node());
67 IRDBRecordset_ptr trtGenServices = rdbAccessSvc()->getRecordsetPtr("TRTGenServices", indetVersionKey.tag(), indetVersionKey.node());
68
69 // Doesn't exist at time of writing but we include it to keep things general
70 IRDBRecordset_ptr weightTable = rdbAccessSvc()->getRecordsetPtr("TrtWeights", trtVersionKey.tag(), trtVersionKey.node());
71
72 IRDBRecordset_ptr scalingTable = rdbAccessSvc()->getRecordsetPtr("InDetServMatScaling", indetVersionKey.tag(), indetVersionKey.node());
73
74 // Get the InDet material manager. This is a wrapper around the geomodel one with some extra functionality to deal
75 // with weights table if it exists
76 m_materialManagerUnique = std::make_unique<InDetMaterialManager>("TRT_MaterialManager", getAthenaComps());
78 m_materialManager->addWeightTable(weightTable, "trt");
79 m_materialManager->addScalingTable(scalingTable);
80
81 //VK 10/09/2005 Construct a gap for rails
82 double outROfIDet = (*atls)[0]->getDouble("IDETOR")*Gaudi::Units::cm;
83 double endZOfIDet = (*atls)[0]->getDouble("IDETZMX")*Gaudi::Units::cm;
84
85//VK 26.03.2007 Construct a gap for SquirrelCage ribbon
86 double rminInt = (*cage)[0]->getDouble("RINGRMIN")*Gaudi::Units::mm;
87
88//created by Adam Agocs
89 IRDBRecordset_ptr commonParameters = rdbAccessSvc()->getRecordsetPtr("IDDetRailCommon",indetVersionKey.tag(), indetVersionKey.node());
90 if(commonParameters->size()==0)
91 commonParameters = rdbAccessSvc()->getRecordsetPtr("IDDetRailCommon","IDDetRailCommon-00");
92
93 double yWidthUSP1 = (*commonParameters)[0]->getDouble("YWIDTHUSP1");
94 double yRailSup = (*commonParameters)[0]->getDouble("YRAILSUP");
95 double yRailSupPart3 = (*commonParameters)[0]->getDouble("YRAILSUPPART3");
96 double gapOfRSF = (*commonParameters)[0]->getDouble("GAPOFRSF");
97 double yWidthTRSB = (*commonParameters)[0]->getDouble("YWIDTHTRSB");
98
99 double coordY = yWidthUSP1/2. - yRailSup + (yRailSupPart3 - gapOfRSF/2.);
100
101 double phiTop = asin((yWidthTRSB + coordY) / (rminInt));
102 double phiBot = asin((yWidthTRSB/2. - coordY) / (rminInt));
103
104 GeoIntrusivePtr<const GeoShape> railGap1{new GeoTubs( rminInt, outROfIDet, endZOfIDet, -phiBot, phiBot + phiTop)};
105 GeoIntrusivePtr<const GeoShape> railGap2{new GeoTubs( rminInt, outROfIDet, endZOfIDet, M_PI - phiTop, phiBot + phiTop)};
106
107
108 for (unsigned int ii =0; ii < trtGenServices->size(); ii++) {
109
110 InDetDD::GenericTubeMaker tubeHelper((*trtGenServices)[ii]);
111 const GeoShape * serviceTubeTmp = tubeHelper.buildShape();
112
113 std::string logName = tubeHelper.name();
114 if (logName.empty()) {
115 std::ostringstream o; o << ii;
116 logName = "ServMat"+o.str();
117 }
118 logName = "Trt" + logName;
119
120 const GeoShape* serviceTube = serviceTubeTmp;
121
122 if( tubeHelper.volData().maxRadius() > rminInt && tubeHelper.volData().phiDelta() > 359.9*Gaudi::Units::degree)
123 {
124 // Subtract RailGap out of services
125 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
126 }
127
128 std::string materialName = tubeHelper.materialName();
129 //const GeoMaterial* material = m_materialManager->getMaterialForVolume(materialName, serviceTube->volume());
130 const GeoMaterial* material = m_materialManager->getMaterial(materialName);
131
132 const GeoLogVol* servLog = new GeoLogVol(logName,serviceTube,material);
133 GeoVPhysVol* servPhys = new GeoPhysVol(servLog);
134
135 if (tubeHelper.name() == "FwdServ")
136 {
137 GeoTransform *xform1 = new GeoTransform(GeoTrf::Translate3D(0, 0, tubeHelper.volData().zMid() ));
138 GeoTransform *xform2 = new GeoTransform(GeoTrf::Translate3D(0, 0, -tubeHelper.volData().zMid() ));
139 mother->add(xform1); mother->add(servPhys); mother->add(xform2); mother->add(servPhys);
140 }
141 else {
142 tubeHelper.placeVolume(mother, servPhys);
143 }
144 }
145
146 }
147 else {
148 // ______________________________________________________________________________________________________________________
149 // Geometry without ID rail
150 IRDBRecordset_ptr atls = rdbAccessSvc()->getRecordsetPtr("AtlasMother", atlasVersionKey.tag(), atlasVersionKey.node());
151 IRDBRecordset_ptr cage = rdbAccessSvc()->getRecordsetPtr("SquirrelCage", indetVersionKey.tag(), indetVersionKey.node());
152 IRDBRecordset_ptr trtGenServices = rdbAccessSvc()->getRecordsetPtr("TRTGenServices", indetVersionKey.tag(), indetVersionKey.node());
153
154 // Doesn't exist at time of writing but we include it to keep things general
155 IRDBRecordset_ptr weightTable = rdbAccessSvc()->getRecordsetPtr("TrtWeights", trtVersionKey.tag(), trtVersionKey.node());
156
157 IRDBRecordset_ptr scalingTable = rdbAccessSvc()->getRecordsetPtr("InDetServMatScaling", indetVersionKey.tag(), indetVersionKey.node());
158
159 // Get the InDet material manager. This is a wrapper around the geomodel one with some extra functionality to deal
160 // with weights table if it exists
161 m_materialManager = new InDetMaterialManager("TRT_MaterialManager", getAthenaComps());
162 m_materialManager->addWeightTable(weightTable, "trt");
163 m_materialManager->addScalingTable(scalingTable);
164
165 //VK 10/09/2005 Construct a gap for rails
166 double outROfIDet = (*atls)[0]->getDouble("IDETOR")*Gaudi::Units::cm;
167 double endZOfIDet = (*atls)[0]->getDouble("IDETZMX")*Gaudi::Units::cm;
168 double minRofGap = 1050.0;
169 double phiWid=70./outROfIDet; double safetyGap=1.;
170 GeoIntrusivePtr<const GeoShape> railGap1{new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
171 -phiWid/2.,phiWid)};
172 GeoIntrusivePtr<const GeoShape> railGap2{new GeoTubs( minRofGap, outROfIDet+safetyGap ,endZOfIDet+safetyGap ,
173 -phiWid/2.+M_PI,phiWid)};
174
175
176
177//VK 26.03.2007 Construct a gap for SquirrelCage ribbon
178 double rminInt = (*cage)[0]->getDouble("RINGRMIN")*Gaudi::Units::mm;
179 double ringThick = (*cage)[0]->getDouble("RINGTHICK")*Gaudi::Units::mm;
180 double ringGap = (*cage)[0]->getDouble("RINGGAP")*Gaudi::Units::mm;
181 double ribWid = (*cage)[0]->getDouble("RIBWIDTH")*Gaudi::Units::mm;
182 double phiWidSQ=ribWid/(rminInt+ringThick+ringGap/2.);
183
184
185
186
187 // Build general services:
188 //
189
190 for (unsigned int ii =0; ii < trtGenServices->size(); ii++) {
191
192 InDetDD::GenericTubeMaker tubeHelper((*trtGenServices)[ii]);
193 const GeoShape * serviceTubeTmp = tubeHelper.buildShape();
194
195 std::string logName = tubeHelper.name();
196 if (logName.empty()) {
197 std::ostringstream o; o << ii;
198 logName = "ServMat"+o.str();
199 }
200 logName = "Trt" + logName;
201
202
203
204 const GeoShape* serviceTube = serviceTubeTmp;
205
206
207 if (tubeHelper.name() == "FwdServ") {
208 const GeoShape* ribSup1 = new GeoTubs( tubeHelper.volData().rmin(), tubeHelper.volData().rmax(), 0.5*tubeHelper.volData().length(),
209 -phiWidSQ/2., phiWidSQ);
210 const GeoShape* ribSup2 = new GeoTubs( tubeHelper.volData().rmin(), tubeHelper.volData().rmax(), 0.5*tubeHelper.volData().length(),
211 -phiWidSQ/2.+M_PI, phiWidSQ);
212 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*ribSup1).subtract(*ribSup2);
213 } else if( tubeHelper.volData().maxRadius() > minRofGap && tubeHelper.volData().phiDelta() > 359.9*Gaudi::Units::degree) {
214 // Subtract RailGap out of services
215 serviceTube = (GeoShape*) & (*serviceTubeTmp).subtract(*railGap2).subtract(*railGap1);
216 }
217
218 std::string materialName = tubeHelper.materialName();
219 //const GeoMaterial* material = materialManager()->getMaterialForVolume(materialName, serviceTube->volume());
220 const GeoMaterial* material = materialManager()->getMaterial(materialName);
221
222 const GeoLogVol* servLog = new GeoLogVol(logName,serviceTube,material);
223 GeoVPhysVol* servPhys = new GeoPhysVol(servLog);
224
225 tubeHelper.placeVolume(mother, servPhys);
226
227 }
228 }
229}
#define M_PI
#define endmsg
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
virtual std::string getChildTag(const std::string &childNode, const std::string &parentTag, const std::string &parentNode, const std::string &connName="ATLASDD")=0
Gets the tag name for the node by giving its parent node tag.
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.
virtual unsigned int size() const =0
const IGeoDbTagSvc * geoDbTagSvc() const
std::unique_ptr< InDetMaterialManager > m_materialManagerUnique
const GeoMaterial * getMaterial(const std::string &materialName)
Get material. First looks for locally defined material and if not found looks in GeoModel material ma...
MsgStream & msg
Definition testRead.cxx:32

◆ detStore()

StoreGateSvc * InDetDD::SubDetectorFactoryBase::detStore ( )
inlineinherited

Definition at line 39 of file InDetSubDetectorFactoryBase.h.

39{return m_athenaComps->detStore();}

◆ geoDbTagSvc()

const IGeoDbTagSvc * InDetDD::SubDetectorFactoryBase::geoDbTagSvc ( ) const
inlineinherited

Definition at line 41 of file InDetSubDetectorFactoryBase.h.

41{return std::as_const(*m_athenaComps).geoDbTagSvc();}

◆ geomDB()

const IGeometryDBSvc * InDetDD::SubDetectorFactoryBase::geomDB ( ) const
inlineinherited

Definition at line 45 of file InDetSubDetectorFactoryBase.h.

45{return m_athenaComps->geomDB();}

◆ getAthenaComps()

InDetDD::AthenaComps * InDetDD::SubDetectorFactoryBase::getAthenaComps ( )
inlineinherited

Definition at line 55 of file InDetSubDetectorFactoryBase.h.

55{return m_athenaComps;}

◆ materialManager()

InDetMaterialManager * InDetDD::SubDetectorFactoryBase::materialManager ( )
inlineinherited

Definition at line 47 of file InDetSubDetectorFactoryBase.h.

47{return m_materialManager;}

◆ msg()

MsgStream & InDetDD::SubDetectorFactoryBase::msg ( MSG::Level lvl) const
inlineinherited

Definition at line 50 of file InDetSubDetectorFactoryBase.h.

50{ return m_athenaComps->msg(lvl); }

◆ msgLvl()

bool InDetDD::SubDetectorFactoryBase::msgLvl ( MSG::Level lvl) const
inlineinherited

Definition at line 53 of file InDetSubDetectorFactoryBase.h.

53{ return m_athenaComps->msgLvl(lvl); }

◆ operator=()

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

◆ rdbAccessSvc()

IRDBAccessSvc * InDetDD::SubDetectorFactoryBase::rdbAccessSvc ( )
inlineinherited

Definition at line 43 of file InDetSubDetectorFactoryBase.h.

43{return m_athenaComps->rdbAccessSvc();}

Member Data Documentation

◆ m_athenaComps

InDetDD::AthenaComps* InDetDD::SubDetectorFactoryBase::m_athenaComps
privateinherited

Definition at line 58 of file InDetSubDetectorFactoryBase.h.

◆ m_materialManager

InDetMaterialManager* InDetDD::SubDetectorFactoryBase::m_materialManager
protectedinherited

Definition at line 61 of file InDetSubDetectorFactoryBase.h.

◆ m_materialManagerUnique

std::unique_ptr<InDetMaterialManager> InDetDD::SubDetectorFactoryBase::m_materialManagerUnique
protectedinherited

Definition at line 63 of file InDetSubDetectorFactoryBase.h.


The documentation for this class was generated from the following files: