File indexing completed on 2023-10-25 09:50:15
0001 #include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSGeometryESCommon.h"
0002 #include "Geometry/VeryForwardGeometryBuilder/interface/CTPPSDDDNames.h"
0003
0004 namespace CTPPSGeometryESCommon {
0005
0006 std::unique_ptr<DetGeomDesc> applyAlignments(const DetGeomDesc& idealDetRoot,
0007 const CTPPSRPAlignmentCorrectionsData* alignments) {
0008 std::deque<const DetGeomDesc*> bufferIdealGeo;
0009 bufferIdealGeo.emplace_back(&idealDetRoot);
0010
0011 std::deque<DetGeomDesc*> bufferAlignedGeo;
0012 DetGeomDesc* alignedDetRoot = new DetGeomDesc(idealDetRoot, DetGeomDesc::cmWithoutChildren);
0013 bufferAlignedGeo.emplace_back(alignedDetRoot);
0014
0015 while (!bufferIdealGeo.empty()) {
0016 const DetGeomDesc* idealDet = bufferIdealGeo.front();
0017 DetGeomDesc* alignedDet = bufferAlignedGeo.front();
0018 bufferIdealGeo.pop_front();
0019 bufferAlignedGeo.pop_front();
0020
0021 const std::string name = alignedDet->name();
0022
0023
0024 if (name == DDD_TOTEM_RP_SENSOR_NAME || name == DDD_CTPPS_DIAMONDS_SEGMENT_NAME ||
0025 name == DDD_CTPPS_UFSD_SEGMENT_NAME || name == DDD_CTPPS_PIXELS_SENSOR_NAME ||
0026 name == DDD_CTPPS_PIXELS_SENSOR_NAME_2x2 ||
0027 std::regex_match(name, std::regex(DDD_TOTEM_TIMING_SENSOR_TMPL))) {
0028 unsigned int plId = alignedDet->geographicalID();
0029
0030 if (alignments) {
0031 const auto& ac = alignments->getFullSensorCorrection(plId);
0032 alignedDet->applyAlignment(ac);
0033 }
0034 }
0035
0036
0037 if (name == DDD_TOTEM_RP_RP_NAME || name == DDD_CTPPS_DIAMONDS_RP_NAME || name == DDD_CTPPS_PIXELS_RP_NAME ||
0038 name == DDD_TOTEM_TIMING_RP_NAME) {
0039 unsigned int rpId = alignedDet->geographicalID();
0040
0041 if (alignments) {
0042 const auto& ac = alignments->getRPCorrection(rpId);
0043 alignedDet->applyAlignment(ac);
0044 }
0045 }
0046
0047
0048 const auto& idealDetChildren = idealDet->components();
0049 for (unsigned int i = 0; i < idealDetChildren.size(); i++) {
0050 const DetGeomDesc* idealDetChild = idealDetChildren[i];
0051 bufferIdealGeo.emplace_back(idealDetChild);
0052
0053
0054 DetGeomDesc* alignedDetChild = new DetGeomDesc(*idealDetChild, DetGeomDesc::cmWithoutChildren);
0055 alignedDet->addComponent(alignedDetChild);
0056
0057 bufferAlignedGeo.emplace_back(alignedDetChild);
0058 }
0059 }
0060 return std::unique_ptr<DetGeomDesc>(alignedDetRoot);
0061 }
0062
0063 }