File indexing completed on 2024-09-11 04:32:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h"
0019 #include "CondFormats/SiPhase2TrackerObjects/interface/SiPhase2OuterTrackerLorentzAngle.h"
0020 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0021 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0022 #include "CalibTracker/SiPhase2TrackerESProducers/interface/SiPhase2OuterTrackerFakeLorentzAngleESSource.h"
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0025 #include "Geometry/TrackerNumberingBuilder/interface/utils.h"
0026
0027
0028
0029 SiPhase2OuterTrackerFakeLorentzAngleESSource::SiPhase2OuterTrackerFakeLorentzAngleESSource(
0030 const edm::ParameterSet& conf_)
0031 : LAvalue_(conf_.getParameter<double>("LAValue")), recordName_(conf_.getParameter<std::string>("recordName")) {
0032 edm::LogInfo("SiPhase2OuterTrackerFakeLorentzAngleESSource::SiPhase2OuterTrackerFakeLorentzAngleESSource");
0033
0034
0035 if (recordName_ == "LorentzAngle") {
0036 auto cc = setWhatProduced(this, &SiPhase2OuterTrackerFakeLorentzAngleESSource::produceOTLA);
0037 m_tTopoToken = cc.consumes();
0038 m_geomDetToken = cc.consumes();
0039 findingRecord<SiPhase2OuterTrackerLorentzAngleRcd>();
0040 } else if (recordName_ == "SimLorentzAngle") {
0041 auto cc = setWhatProduced(this, &SiPhase2OuterTrackerFakeLorentzAngleESSource::produceOTSimLA);
0042 m_tTopoToken = cc.consumes();
0043 m_geomDetToken = cc.consumes();
0044 findingRecord<SiPhase2OuterTrackerLorentzAngleSimRcd>();
0045 }
0046 }
0047
0048 SiPhase2OuterTrackerFakeLorentzAngleESSource::~SiPhase2OuterTrackerFakeLorentzAngleESSource() {}
0049
0050 namespace fakeOTLA {
0051 template <class T>
0052 std::unique_ptr<T> produceRecord(const float value, const GeometricDet& geomDet) {
0053 using namespace edm::es;
0054 T* obj = new T();
0055 for (const auto detId : TrackerGeometryUtils::getOuterTrackerDetIds(geomDet)) {
0056 const DetId detectorId = DetId(detId);
0057 const int subDet = detectorId.subdetId();
0058 if (detectorId.det() == DetId::Detector::Tracker) {
0059 if (subDet == StripSubdetector::TOB || subDet == StripSubdetector::TID) {
0060 if (!obj->putLorentzAngle(detId, value))
0061 edm::LogError("SiPhase2OuterTrackerFakeLorentzAngleESSource")
0062 << "[SiPhase2OuterTrackerFakeLorentzAngleESSource::produce] detid already exists" << std::endl;
0063 }
0064 }
0065 }
0066 return std::unique_ptr<T>(obj);
0067 }
0068 }
0069
0070 std::unique_ptr<SiPhase2OuterTrackerLorentzAngle> SiPhase2OuterTrackerFakeLorentzAngleESSource::produceOTLA(
0071 const SiPhase2OuterTrackerLorentzAngleRcd& rcd) {
0072 const auto& geomDet = rcd.get(m_geomDetToken);
0073 return fakeOTLA::produceRecord<SiPhase2OuterTrackerLorentzAngle>(LAvalue_, geomDet);
0074 }
0075
0076 std::unique_ptr<SiPhase2OuterTrackerLorentzAngle> SiPhase2OuterTrackerFakeLorentzAngleESSource::produceOTSimLA(
0077 const SiPhase2OuterTrackerLorentzAngleSimRcd& rcd) {
0078 const auto& geomDet = rcd.get(m_geomDetToken);
0079 return fakeOTLA::produceRecord<SiPhase2OuterTrackerLorentzAngle>(LAvalue_, geomDet);
0080 }
0081
0082 void SiPhase2OuterTrackerFakeLorentzAngleESSource::setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
0083 const edm::IOVSyncValue& iosv,
0084 edm::ValidityInterval& oValidity) {
0085 edm::ValidityInterval infinity(iosv.beginOfTime(), iosv.endOfTime());
0086 oValidity = infinity;
0087 }
0088
0089 void SiPhase2OuterTrackerFakeLorentzAngleESSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0090 edm::ParameterSetDescription desc;
0091 desc.add<double>("LAValue", 0.07);
0092 desc.add<std::string>("recordName", "LorentzAngle");
0093 descriptions.add("siPhase2OTFakeLorentzAngleESSource", desc);
0094 }
0095
0096
0097 #include "FWCore/Framework/interface/SourceFactory.h"
0098 DEFINE_FWK_EVENTSETUP_SOURCE(SiPhase2OuterTrackerFakeLorentzAngleESSource);