Build the Itk Blueprint Node.
48 {
49
50
51 std::map<caloRegion, caloSampleSurfaceMap_t> caloRegionSampleSurfaceMap;
52 std::map<caloRegion, caloSampleDDEElementsMap_t> caloRegionSampleDDEElementsMap;
53 std::map<std::string, double> caloDimensions;
54
55 fillMaps(caloRegionSampleDDEElementsMap, caloDimensions);
56
58
64
65 ATH_MSG_DEBUG(
"Have generated calorimeter cylindrical surfaces");
66
67
68
69
70
71
72
73 double caloEvelopeMaxR = caloDimensions.at("maxR") + 5._mm;
74 double caloEnvelopeHalfLenghtZ = (caloDimensions.at("maxPosZ") - caloDimensions.at("minNegZ"))/2.0 + 5._mm;
75
76 ATH_MSG_INFO(
"Calo envelope dimensions: maxR = " << caloEvelopeMaxR <<
", halfLengthZ = " << caloEnvelopeHalfLenghtZ);
77 std::shared_ptr<StaticBlueprintNode> itkCaloNode{};
78 {
79 auto envelope = std::make_unique<TrackingVolume>(Amg::Transform3D::Identity(),
80 std::make_shared<CylinderVolumeBounds>(0., caloEvelopeMaxR, caloEnvelopeHalfLenghtZ),"ITkCalo");
81 envelope->assignGeometryId(Acts::GeometryIdentifier{}.withVolume(
s_caloEnvelopeID));
82 itkCaloNode = std::make_shared<StaticBlueprintNode>(std::move(envelope));
83 }
84 if (childNode) {
85 itkCaloNode->addChild(std::move(childNode));
86 }
87
89
90 auto caloNode = std::make_shared<CylinderContainerBlueprintNode>("CaloNode", AxisDirection::AxisZ);
91 CylinderContainerBlueprintNode& caloBarrelCylinderNode = caloNode->addCylinderContainer("CaloBarrelSymmetricZZeroCylinders", AxisDirection::AxisR);
92 caloBarrelCylinderNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
93 caloBarrelCylinderNode.setResizeStrategy(ResizeStrategy::Gap);
94
96
97 unsigned int volumeCounter = 0;
98
99
103 volumeCounter++;
104 }
105
106
109
110
111
112 itkCaloNode->addLayer(sampleName+"NegZ_Layer", [&](auto& layer) {
114 layer.setEnvelope(Acts::ExtentEnvelope{{
115 .z = {0.1_mm, 0.1_mm},
116 .r = {2_mm, 2_mm},
117 }});
118 });
119 itkCaloNode->addLayer(sampleName+"PosZ_Layer", [&](auto& layer) {
121 layer.setEnvelope(Acts::ExtentEnvelope{{
122 .z = {0.1_mm, 0.1_mm},
123 .r = {2_mm, 2_mm},
124 }});
125 });
126 }
127
128 auto caloEndCapNegativeNode = std::make_shared<CylinderContainerBlueprintNode>("CaloNode", AxisDirection::AxisZ);
129
130 CylinderContainerBlueprintNode& caloEndCapDiscNegativeZNode = caloEndCapNegativeNode->addCylinderContainer("CaloEndCapDiscNegativeZ", AxisDirection::AxisZ);
131 caloEndCapDiscNegativeZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
132
133
134
135
136
137
138
139 caloEndCapDiscNegativeZNode.setResizeStrategies(ResizeStrategy::Expand, ResizeStrategy::Gap);
140
141 auto caloEndCapPositiveNode = std::make_shared<CylinderContainerBlueprintNode>("CaloNode", AxisDirection::AxisZ);
142 CylinderContainerBlueprintNode& caloEndCapDiscPositiveZNode = caloEndCapPositiveNode->addCylinderContainer("CaloEndCapDiscPositiveZ", AxisDirection::AxisZ);
143 caloEndCapDiscPositiveZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
144
145
146 caloEndCapDiscPositiveZNode.setResizeStrategies(ResizeStrategy::Gap, ResizeStrategy::Expand);
147
151 volumeCounter++;
153 volumeCounter++;
154 }
155
156 ATH_MSG_DEBUG(
"Have added all Barrel layers to caloBarrelCylinderNode");
157
158
159 itkCaloNode->addChild(caloNode);
160 itkCaloNode->addChild(caloEndCapNegativeNode);
161 itkCaloNode->addChild(caloEndCapPositiveNode);
162
163
164 return itkCaloNode;
165}
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_INFO(x,...)
void addCylindricalTrackingVolumeToCaloNode(Acts::CylinderContainerBlueprintNode &containerNode, const std::string &volumeName, const std::vector< std::shared_ptr< Acts::Surface > > &surfaces, int layerIndex, const bool &isDisc) const
addCylindricalTrackingVolumeToCaloNode adds a cylindrical tracking volume to the calo node.
std::vector< std::pair< std::string, CaloCell_ID::CaloSample > > m_caloDiscSampleList
std::vector< std::pair< std::string, CaloCell_ID::CaloSample > > m_caloCylinderAsymmetricSampleList
void generateCylinderSurfaces(caloSampleSurfaceMap_t &caloSampleSurfaceMap, caloSampleDDEElementsMap_t &caloSampleDDEElementsMap, bool asymmetricZ) const
generateCylinderSurfaces generates cylindrical surfaces for each calo sampling.
std::vector< std::pair< std::string, CaloCell_ID::CaloSample > > m_caloCylinderSymmetricSampleList
void fillMaps(std::map< caloRegion, caloSampleDDEElementsMap_t > &caloRegionSampleDDEElementsMap, std::map< std::string, double > &caloDimensions) const
fillMaps fills two maps.
CaloCell_ID::CaloSample getSampleEnum(const std::string &sampleName) const
void generateDiscSurfaces(caloSampleSurfaceMap_t &caloSampleSurfaceMap, caloSampleDDEElementsMap_t &caloSampleDDEElementsMap) const
constexpr std::size_t s_caloEnvelopeID
Volume Ids ofthe Calorimeter.
mapped_type at(key_type key) const
Look up an element in the map.