Build the Itk Blueprint Node.
47 {
48
49
50 std::map<caloRegion, caloSampleSurfaceMap_t> caloRegionSampleSurfaceMap;
51 std::map<caloRegion, caloSampleDDEElementsMap_t> caloRegionSampleDDEElementsMap;
52 std::map<std::string, double> caloDimensions;
53
54 fillMaps(caloRegionSampleSurfaceMap, caloRegionSampleDDEElementsMap, caloDimensions);
55
57
63
64 ATH_MSG_DEBUG(
"Have generated calorimeter cylindrical surfaces");
65
66
67
68
69
70
71
72 double caloEvelopeMaxR = caloDimensions.at("maxR");
73 double caloEnvelopeHalfLenghtZ = (caloDimensions.at("maxPosZ") - caloDimensions.at("minNegZ"))/2.0;
74
75 ATH_MSG_INFO(
"Calo envelope dimensions: maxR = " << caloEvelopeMaxR <<
", halfLengthZ = " << caloEnvelopeHalfLenghtZ);
76 std::shared_ptr<StaticBlueprintNode> itkCaloNode{};
77 {
78 auto envelope = std::make_unique<TrackingVolume>(Amg::Transform3D::Identity(),
79 std::make_shared<CylinderVolumeBounds>(0., caloEvelopeMaxR, caloEnvelopeHalfLenghtZ),"ITkCalo");
80 envelope->assignGeometryId(Acts::GeometryIdentifier{}.withVolume(
s_caloEnvelopeID));
81 itkCaloNode = std::make_shared<StaticBlueprintNode>(std::move(envelope));
82 }
83 if (childNode) {
84 itkCaloNode->addChild(std::move(childNode));
85 }
86
88
89 auto caloNode = std::make_shared<CylinderContainerBlueprintNode>("CaloNode", AxisDirection::AxisZ);
90 CylinderContainerBlueprintNode& caloBarrelCylinderNode = caloNode->addCylinderContainer("CaloBarrelSymmetricZZeroCylinders", AxisDirection::AxisR);
91 caloBarrelCylinderNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
92 caloBarrelCylinderNode.setResizeStrategy(ResizeStrategy::Gap);
93
95
96 unsigned int volumeCounter = 0;
97
98
102 volumeCounter++;
103 }
104
105
106
107 CylinderContainerBlueprintNode& caloBarrelCylinderNegativeZNode = caloNode->addCylinderContainer("CaloBarrelNegativeZAsymmetricCylinders", AxisDirection::AxisR);
108 caloBarrelCylinderNegativeZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
109 caloBarrelCylinderNegativeZNode.setResizeStrategy(ResizeStrategy::Gap);
110
111
112 CylinderContainerBlueprintNode& caloBarrelCylinderPositiveZNode = caloNode->addCylinderContainer("CaloBarrelPositiveZAsymmetricCylinders", AxisDirection::AxisR);
113 caloBarrelCylinderPositiveZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
114 caloBarrelCylinderPositiveZNode.setResizeStrategy(ResizeStrategy::Gap);
115
118
119
120 if (sampleIndex < 2){
122 volumeCounter++;
124 volumeCounter++;
125 }
126 else{
127
128
129
130 itkCaloNode->addLayer(sampleName+"NegZ" + "_Layer", [&](auto& layer) {
132 layer.setEnvelope(Acts::ExtentEnvelope{{
133 .z = {0.1_mm, 0.1_mm},
134 .r = {2_mm, 2_mm},
135 }});
136 });
137 itkCaloNode->addLayer(sampleName+"PosZ" + "_Layer", [&](auto& layer) {
139 layer.setEnvelope(Acts::ExtentEnvelope{{
140 .z = {0.1_mm, 0.1_mm},
141 .r = {2_mm, 2_mm},
142 }});
143 });
144 }
145 }
146
147
148 CylinderContainerBlueprintNode& caloEndCapDiscNegativeZNode = caloNode->addCylinderContainer("CaloEndCapDiscNegativeZ", AxisDirection::AxisZ);
149 caloEndCapDiscNegativeZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
150
151
152
153
154
155
156
157 caloEndCapDiscNegativeZNode.setResizeStrategies(ResizeStrategy::Expand, ResizeStrategy::Gap);
158
159 CylinderContainerBlueprintNode& caloEndCapDiscPositiveZNode = caloNode->addCylinderContainer("CaloEndCapDiscPositiveZ", AxisDirection::AxisZ);
160 caloEndCapDiscPositiveZNode.setAttachmentStrategy(VolumeAttachmentStrategy::Gap);
161
162
163 caloEndCapDiscPositiveZNode.setResizeStrategies(ResizeStrategy::Gap, ResizeStrategy::Expand);
164
168 volumeCounter++;
170 volumeCounter++;
171 }
172
173 ATH_MSG_DEBUG(
"Have added all Barrel layers to caloBarrelCylinderNode");
174
175
176 itkCaloNode->addChild(caloNode);
177
178
179 return itkCaloNode;
180}
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.
void fillMaps(std::map< caloRegion, caloSampleSurfaceMap_t > &caloRegionSampleSurfaceMap, std::map< caloRegion, caloSampleDDEElementsMap_t > &caloRegionSampleDDEElementsMap, std::map< std::string, double > &caloDimensions) const
fillMaps fills two maps.
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
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.