File indexing completed on 2025-08-06 08:18:07
0001
0002
0003
0004
0005
0006
0007
0008 #include "alignmentTransformationContainer.h"
0009
0010 #include <Eigen/Dense>
0011 #include <Eigen/Geometry>
0012
0013 #include <algorithm>
0014 #include <ostream>
0015 #include <utility>
0016
0017 bool alignmentTransformationContainer::use_alignment = false;
0018
0019 alignmentTransformationContainer::alignmentTransformationContainer()
0020 {
0021 for (uint8_t layer = 0; layer < 57; layer++)
0022 {
0023 m_misalignmentFactor.insert(std::make_pair(layer, 1.));
0024 }
0025 }
0026 void alignmentTransformationContainer::setMisalignmentFactor(uint8_t layer, double factor)
0027 {
0028 auto it = m_misalignmentFactor.find(layer);
0029 if (it != m_misalignmentFactor.end())
0030 {
0031 it->second = factor;
0032 return;
0033 }
0034 std::cout << "You provided a nonexistent layer in alignmentTransformationContainer::setMisalignmentFactor..."
0035 << std::endl;
0036 }
0037 void alignmentTransformationContainer::Reset()
0038 {
0039 if (transformVec.size() == 0)
0040 {
0041 return;
0042 }
0043
0044
0045 for (auto& i : transformVec)
0046 {
0047 i.clear();
0048 std::vector<Acts::Transform3> emptyLayerVec;
0049 i.swap(emptyLayerVec);
0050 }
0051
0052 transformVec.clear();
0053 std::vector<std::vector<Acts::Transform3>> emptyVec;
0054 transformVec.swap(emptyVec);
0055 }
0056
0057 void alignmentTransformationContainer::identify(std::ostream& os)
0058 {
0059 os << "-----alignmentTransformationContainer-----" << std::endl;
0060 for (unsigned int i = 0; i < transformVec.size(); ++i)
0061 {
0062 auto& layerVec = transformVec[i];
0063 if (layerVec.size() == 0)
0064 {
0065 continue;
0066 }
0067
0068 os << " Layer: " << i << std::endl;
0069
0070 for (unsigned int il = 0; il < layerVec.size(); ++il)
0071 {
0072 os << " Sensor Id: " << il + 1
0073 << " Transform: " << layerVec[il].matrix()
0074 << std::endl;
0075 }
0076 }
0077 os << "------------------------------" << std::endl;
0078
0079 return;
0080 }
0081
0082 void alignmentTransformationContainer::addTransform(const Acts::GeometryIdentifier id, const Acts::Transform3& transform)
0083 {
0084 unsigned int sphlayer = getsphlayer(id);
0085 unsigned int sensor = id.sensitive() - 1;
0086
0087
0088
0089
0090 if (sphlayer < transformVec.size())
0091 {
0092
0093 auto& layerVec = transformVec[sphlayer];
0094
0095 if (sensor < layerVec.size())
0096 {
0097 layerVec[sensor] = transform;
0098 }
0099 else if (sensor == layerVec.size())
0100 {
0101 layerVec.push_back(transform);
0102 }
0103 else
0104 {
0105 layerVec.resize(sensor + 1, transform);
0106 }
0107 }
0108 else if (sphlayer == transformVec.size())
0109 {
0110
0111 std::vector<Acts::Transform3> newVec;
0112 newVec.resize(sensor + 1, transform);
0113 transformVec.push_back(newVec);
0114 }
0115 else
0116 {
0117 transformVec.resize(sphlayer + 1);
0118
0119 std::vector<Acts::Transform3> newVec;
0120 newVec.resize(sensor + 1, transform);
0121 transformVec[sphlayer] = newVec;
0122 }
0123 }
0124
0125 Acts::Transform3& alignmentTransformationContainer::getTransform(const Acts::GeometryIdentifier id)
0126 {
0127 unsigned int sphlayer = getsphlayer(id);
0128 unsigned int sensor = id.sensitive() - 1;
0129
0130 auto& layerVec = transformVec[sphlayer];
0131 if (layerVec.size() > sensor)
0132 {
0133 return layerVec[sensor];
0134 }
0135
0136 std::cout << "Unable to find Acts Id: " << id << " in alignmentTransformationContainer" << std::endl;
0137 exit(1);
0138 }
0139
0140 void alignmentTransformationContainer::replaceTransform(const Acts::GeometryIdentifier id, Acts::Transform3 transform)
0141 {
0142 unsigned int sphlayer = getsphlayer(id);
0143 unsigned int sensor = id.sensitive() - 1;
0144
0145 auto& layerVec = transformVec[sphlayer];
0146 if (layerVec.size() > sensor)
0147 {
0148 layerVec[sensor] = std::move(transform);
0149 return;
0150 }
0151
0152 std::cout << "Unable to find Acts Id: " << id << " in alignmentTransformationContainer" << std::endl;
0153 exit(1);
0154 }
0155
0156 const std::vector<std::vector<Acts::Transform3>>& alignmentTransformationContainer::getMap() const
0157 {
0158 return transformVec;
0159 }
0160
0161 unsigned int alignmentTransformationContainer::getsphlayer(Acts::GeometryIdentifier id)
0162 {
0163 unsigned int layer = id.layer();
0164 unsigned int volume = id.volume();
0165 unsigned int sphlayer = base_layer_map.find(volume)->second + layer / 2 - 1;
0166
0167 return sphlayer;
0168 }