File indexing completed on 2023-10-25 09:50:10
0001 #include "FWCore/Framework/interface/ESProducer.h"
0002 #include "FWCore/Framework/interface/EventSetup.h"
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/Framework/interface/ModuleFactory.h"
0005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0009 #include "CondFormats/Alignment/interface/Alignments.h"
0010 #include "CondFormats/Alignment/interface/AlignmentErrorsExtended.h"
0011 #include "CondFormats/Alignment/interface/AlignmentSurfaceDeformations.h"
0012 #include "CondFormats/Alignment/interface/DetectorGlobalPosition.h"
0013 #include "CondFormats/AlignmentRecord/interface/GlobalPositionRcd.h"
0014 #include "CondFormats/AlignmentRecord/interface/TrackerAlignmentRcd.h"
0015 #include "CondFormats/AlignmentRecord/interface/TrackerAlignmentErrorExtendedRcd.h"
0016 #include "CondFormats/AlignmentRecord/interface/TrackerSurfaceDeformationRcd.h"
0017 #include "CondFormats/GeometryObjects/interface/PTrackerParameters.h"
0018 #include "Geometry/CommonTopologies/interface/GeometryAligner.h"
0019 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0020 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0021 #include "Geometry/Records/interface/PTrackerParametersRcd.h"
0022 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0023 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0024 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeomBuilderFromGeometricDet.h"
0025 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0026 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0027
0028 #include <memory>
0029 #include <string>
0030
0031 class TrackerDigiGeometryESModule : public edm::ESProducer {
0032 public:
0033 TrackerDigiGeometryESModule(const edm::ParameterSet& p);
0034 ~TrackerDigiGeometryESModule() override;
0035 std::unique_ptr<TrackerGeometry> produce(const TrackerDigiGeometryRecord&);
0036
0037 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038
0039 private:
0040
0041 const std::string alignmentsLabel_;
0042 const std::string myLabel_;
0043
0044 edm::ESGetToken<GeometricDet, IdealGeometryRecord> geometricDetToken_;
0045 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> trackerTopoToken_;
0046 edm::ESGetToken<PTrackerParameters, PTrackerParametersRcd> trackerParamsToken_;
0047
0048 edm::ESGetToken<Alignments, GlobalPositionRcd> globalAlignmentToken_;
0049 edm::ESGetToken<Alignments, TrackerAlignmentRcd> trackerAlignmentToken_;
0050 edm::ESGetToken<AlignmentErrorsExtended, TrackerAlignmentErrorExtendedRcd> alignmentErrorsToken_;
0051 edm::ESGetToken<AlignmentSurfaceDeformations, TrackerSurfaceDeformationRcd> deformationsToken_;
0052
0053 const bool applyAlignment_;
0054 };
0055
0056
0057 TrackerDigiGeometryESModule::TrackerDigiGeometryESModule(const edm::ParameterSet& p)
0058 : alignmentsLabel_(p.getParameter<std::string>("alignmentsLabel")),
0059 myLabel_(p.getParameter<std::string>("appendToDataLabel")),
0060 applyAlignment_(p.getParameter<bool>("applyAlignment")) {
0061 {
0062 auto cc = setWhatProduced(this);
0063 const edm::ESInputTag kEmptyTag;
0064 geometricDetToken_ = cc.consumesFrom<GeometricDet, IdealGeometryRecord>(kEmptyTag);
0065 trackerTopoToken_ = cc.consumesFrom<TrackerTopology, TrackerTopologyRcd>(kEmptyTag);
0066 trackerParamsToken_ = cc.consumesFrom<PTrackerParameters, PTrackerParametersRcd>(kEmptyTag);
0067
0068 if (applyAlignment_) {
0069 const edm::ESInputTag kAlignTag{"", alignmentsLabel_};
0070 globalAlignmentToken_ = cc.consumesFrom<Alignments, GlobalPositionRcd>(kAlignTag);
0071 trackerAlignmentToken_ = cc.consumesFrom<Alignments, TrackerAlignmentRcd>(kAlignTag);
0072 alignmentErrorsToken_ = cc.consumesFrom<AlignmentErrorsExtended, TrackerAlignmentErrorExtendedRcd>(kAlignTag);
0073 deformationsToken_ = cc.consumesFrom<AlignmentSurfaceDeformations, TrackerSurfaceDeformationRcd>(kAlignTag);
0074 }
0075 }
0076
0077 edm::LogInfo("Geometry") << "@SUB=TrackerDigiGeometryESModule"
0078 << "Label '" << myLabel_ << "' " << (applyAlignment_ ? "looking for" : "IGNORING")
0079 << " alignment labels '" << alignmentsLabel_ << "'.";
0080 }
0081
0082
0083 TrackerDigiGeometryESModule::~TrackerDigiGeometryESModule() {}
0084
0085 void TrackerDigiGeometryESModule::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0086 edm::ParameterSetDescription descDB;
0087 descDB.add<std::string>("appendToDataLabel", "");
0088 descDB.add<bool>("fromDDD", false);
0089 descDB.add<bool>("applyAlignment", true);
0090 descDB.add<std::string>("alignmentsLabel", "");
0091 descriptions.add("trackerGeometryDB", descDB);
0092
0093 edm::ParameterSetDescription desc;
0094 desc.add<std::string>("appendToDataLabel", "");
0095 desc.add<bool>("fromDDD", true);
0096 desc.add<bool>("applyAlignment", true);
0097 desc.add<std::string>("alignmentsLabel", "");
0098 descriptions.add("trackerGeometry", desc);
0099 }
0100
0101
0102 std::unique_ptr<TrackerGeometry> TrackerDigiGeometryESModule::produce(const TrackerDigiGeometryRecord& iRecord) {
0103
0104
0105
0106 auto const& gD = iRecord.get(geometricDetToken_);
0107
0108 auto const& tTopo = iRecord.get(trackerTopoToken_);
0109
0110 auto const& ptp = iRecord.get(trackerParamsToken_);
0111
0112 TrackerGeomBuilderFromGeometricDet builder;
0113 std::unique_ptr<TrackerGeometry> tracker(builder.build(&gD, ptp, &tTopo));
0114
0115 if (applyAlignment_) {
0116
0117 auto const& globalPosition = iRecord.get(globalAlignmentToken_);
0118 auto const& alignments = iRecord.get(trackerAlignmentToken_);
0119 auto const& alignmentErrors = iRecord.get(alignmentErrorsToken_);
0120
0121 if (alignments.empty() && alignmentErrors.empty() && globalPosition.empty()) {
0122 edm::LogInfo("Config") << "@SUB=TrackerDigiGeometryRecord::produce"
0123 << "Alignment(Error)s and global position (label '" << alignmentsLabel_
0124 << "') empty: Geometry producer (label "
0125 << "'" << myLabel_ << "') assumes fake and does not apply.";
0126 } else {
0127 GeometryAligner ali;
0128 ali.applyAlignments<TrackerGeometry>(tracker.get(),
0129 &(alignments),
0130 &(alignmentErrors),
0131 align::DetectorGlobalPosition(globalPosition, DetId(DetId::Tracker)));
0132 }
0133
0134 auto const& surfaceDeformations = iRecord.get(deformationsToken_);
0135
0136 if (surfaceDeformations.empty()) {
0137 edm::LogInfo("Config") << "@SUB=TrackerDigiGeometryRecord::produce"
0138 << "AlignmentSurfaceDeformations (label '" << alignmentsLabel_
0139 << "') empty: Geometry producer (label "
0140 << "'" << myLabel_ << "') assumes fake and does not apply.";
0141 } else {
0142 GeometryAligner ali;
0143 ali.attachSurfaceDeformations<TrackerGeometry>(tracker.get(), &(surfaceDeformations));
0144 }
0145 }
0146
0147 return tracker;
0148 }
0149
0150 DEFINE_FWK_EVENTSETUP_MODULE(TrackerDigiGeometryESModule);