Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:59:31

0001 // -*- C++ -*-
0002 //
0003 // Package:    SiPhase2OuterTrackerFakeLorentzAngleESSource
0004 // Class:      SiPhase2OuterTrackerFakeLorentzAngleESSource
0005 //
0006 /**\class SiPhase2OuterTrackerFakeLorentzAngleESSource SiPhase2OuterTrackerFakeLorentzAngleESSource.h CalibTracker/SiPhase2TrackerESProducers/src/SiPhase2OuterTrackerFakeLorentzAngleESSource.cc
0007  Description: <one line class summary>
0008  Implementation:
0009      <Notes on implementation>
0010 */
0011 //
0012 // Original Author:  Marco Musich
0013 //         Created:  Jul 31st, 2020
0014 //
0015 //
0016 
0017 // user include files
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 // constructors and destructor
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   // the following line is needed to tell the framework what
0034   // data is being produced
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         }  // if it's a OT DetId
0064       }    // check if Tracker
0065     }      // loop on DetIds
0066     return std::unique_ptr<T>(obj);
0067   }
0068 }  // namespace fakeOTLA
0069 
0070 std::unique_ptr<SiPhase2OuterTrackerLorentzAngle> SiPhase2OuterTrackerFakeLorentzAngleESSource::produceOTLA(
0071     const SiPhase2OuterTrackerLorentzAngleRcd& rcd) {
0072   const auto& geomDet = rcd.getRecord<TrackerTopologyRcd>().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.getRecord<TrackerTopologyRcd>().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 //define this as a plug-in
0097 #include "FWCore/Framework/interface/SourceFactory.h"
0098 DEFINE_FWK_EVENTSETUP_SOURCE(SiPhase2OuterTrackerFakeLorentzAngleESSource);