5 #include "GeoModelKernel/GeoAccessVolAndSTAction.h" 7 #include "GeoModelKernel/GeoNameTag.h" 8 #include "GeoModelKernel/GeoSerialDenominator.h" 11 GeoAccessVolAndSTAction::GeoAccessVolAndSTAction(
unsigned int index)
13 , m_serialTransformer(0)
14 , m_transform(
GeoTrf::Transform3D::Identity())
15 , m_defTransform(
GeoTrf::Transform3D::Identity())
19 , m_serialDenominator(0)
21 , m_serialDenomPosition(0)
26 GeoAccessVolAndSTAction::~GeoAccessVolAndSTAction()
30 void GeoAccessVolAndSTAction::handleTransform(
const GeoTransform *xform)
32 m_pendingTransformList.push_back (xform);
35 void GeoAccessVolAndSTAction::handlePhysVol(
const GeoPhysVol *vol)
38 if(getPath()->getLength()-1 == 0)
42 if(m_index == m_counter) {
44 m_serialTransformer = 0;
45 unsigned int listSize = m_pendingTransformList.size();
50 else if(listSize == 1) {
51 m_transform = m_pendingTransformList[0]->getTransform(
nullptr);
52 m_defTransform = m_pendingTransformList[0]->getDefTransform(
nullptr);
55 for(
unsigned int t=0; t<m_pendingTransformList.size(); t++) {
56 m_transform = m_transform * m_pendingTransformList[t]->getTransform(
nullptr);
57 m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(
nullptr);
65 m_pendingTransformList.erase(m_pendingTransformList.begin(),
66 m_pendingTransformList.end());
72 void GeoAccessVolAndSTAction::handleFullPhysVol(
const GeoFullPhysVol *vol)
75 if(getPath()->getLength()-1 == 0)
79 if(m_index == m_counter)
82 m_serialTransformer = 0;
84 unsigned int listSize = m_pendingTransformList.size();
88 else if(listSize == 1) {
89 m_transform = m_pendingTransformList[0]->getTransform(
nullptr);
90 m_defTransform = m_pendingTransformList[0]->getDefTransform(
nullptr);
93 for(
unsigned int t = 0; t < m_pendingTransformList.size (); t++) {
94 m_transform = m_transform * m_pendingTransformList[t]->getTransform(
nullptr);
95 m_defTransform = m_defTransform * m_pendingTransformList[t]->getDefTransform(
nullptr);
101 m_pendingTransformList.erase (m_pendingTransformList.begin(),
102 m_pendingTransformList.end());
110 PVConstLink GeoAccessVolAndSTAction::getVolume()
const 115 const GeoTrf::Transform3D & GeoAccessVolAndSTAction::getTransform()
const 120 const GeoTrf::Transform3D & GeoAccessVolAndSTAction::getDefTransform()
const 122 return m_defTransform;
125 const std::string & GeoAccessVolAndSTAction::getName()
const 129 m_name = m_nameTag->getName();
131 else if(m_serialDenominator) {
132 m_name = m_serialDenominator->getBaseName() + std::to_string(m_index-m_serialDenomPosition);
141 void GeoAccessVolAndSTAction::handleNameTag(
const GeoNameTag *nameTag)
144 m_serialDenominator = 0;
145 m_serialDenomPosition = 0;
150 m_serialDenominator = sD;
151 m_serialDenomPosition = m_counter;
156 m_pendingTransformList.erase(m_pendingTransformList.begin(),
157 m_pendingTransformList.end());
159 if(m_index == m_counter) {
161 m_serialTransformer = sT;
173 return m_serialTransformer;
176 void GeoAccessVolAndSTAction::handleIdentifierTag(
const GeoIdentifierTag *idTag)
This class generates a name for all physical volumes following it. The name is a prefix string follow...
This class represent a physical volume whose absolute default and aligned positions are known and hel...
This class gives an integral identifer to the following physical volume.
Smart pointer to physical volume... constant.
A GeoPhysVol is a physical volume for normal recursive access only. This means, normally, that it represents a piece of detector that nobody cares about except for tracing engines like GEANT. More specifically: