Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-11 03:00:13

0001 #include "FWCore/Framework/interface/ESProducer.h"
0002 #include "FWCore/Framework/interface/ModuleFactory.h"
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/Utilities/interface/ESGetToken.h"
0006 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0007 
0008 #include <memory>
0009 
0010 namespace tt {
0011 
0012   /*! \class  tt::ProducerSetup
0013    *  \brief  Class to produce setup of Track Trigger emulators
0014    *  \author Thomas Schuh
0015    *  \date   2020, Apr
0016    */
0017   class ProducerSetup : public edm::ESProducer {
0018   public:
0019     ProducerSetup(const edm::ParameterSet& iConfig);
0020     ~ProducerSetup() override = default;
0021     std::unique_ptr<Setup> produce(const SetupRcd& setupRcd);
0022 
0023   private:
0024     Setup::Config iConfig_;
0025     edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> getTokenTrackerGeometry_;
0026     edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> getTokenTrackerTopology_;
0027     edm::ESGetToken<TrackerDetToDTCELinkCablingMap, TrackerDetToDTCELinkCablingMapRcd> getTokenCablingMap_;
0028     edm::ESGetToken<StubAlgorithm, TTStubAlgorithmRecord> getTokenTTStubAlgorithm_;
0029   };
0030 
0031   ProducerSetup::ProducerSetup(const edm::ParameterSet& iConfig) {
0032     auto cc = setWhatProduced(this);
0033     getTokenTrackerGeometry_ = cc.consumes();
0034     getTokenTrackerTopology_ = cc.consumes();
0035     getTokenCablingMap_ = cc.consumes();
0036     getTokenTTStubAlgorithm_ = cc.consumes();
0037     const edm::ParameterSet& pSetTF = iConfig.getParameter<edm::ParameterSet>("TrackFinding");
0038     iConfig_.beamWindowZ_ = pSetTF.getParameter<double>("BeamWindowZ");
0039     iConfig_.minPt_ = pSetTF.getParameter<double>("MinPt");
0040     iConfig_.minPtCand_ = pSetTF.getParameter<double>("MinPtCand");
0041     iConfig_.maxEta_ = pSetTF.getParameter<double>("MaxEta");
0042     iConfig_.maxD0_ = pSetTF.getParameter<double>("MaxD0");
0043     iConfig_.chosenRofPhi_ = pSetTF.getParameter<double>("ChosenRofPhi");
0044     iConfig_.numLayers_ = pSetTF.getParameter<int>("NumLayers");
0045     iConfig_.minLayers_ = pSetTF.getParameter<int>("MinLayers");
0046     const edm::ParameterSet& pSetTMTT = iConfig.getParameter<edm::ParameterSet>("TMTT");
0047     iConfig_.tmttWidthR_ = pSetTMTT.getParameter<int>("WidthR");
0048     iConfig_.tmttWidthPhi_ = pSetTMTT.getParameter<int>("WidthPhi");
0049     iConfig_.tmttWidthZ_ = pSetTMTT.getParameter<int>("WidthZ");
0050     const edm::ParameterSet& pSetHybrid = iConfig.getParameter<edm::ParameterSet>("Hybrid");
0051     iConfig_.hybridNumLayers_ = pSetHybrid.getParameter<int>("NumLayers");
0052     iConfig_.hybridNumRingsPS_ = pSetHybrid.getParameter<std::vector<int>>("NumRingsPS");
0053     iConfig_.hybridWidthsR_ = pSetHybrid.getParameter<std::vector<int>>("WidthsR");
0054     iConfig_.hybridWidthsZ_ = pSetHybrid.getParameter<std::vector<int>>("WidthsZ");
0055     iConfig_.hybridWidthsPhi_ = pSetHybrid.getParameter<std::vector<int>>("WidthsPhi");
0056     iConfig_.hybridWidthsAlpha_ = pSetHybrid.getParameter<std::vector<int>>("WidthsAlpha");
0057     iConfig_.hybridWidthsBend_ = pSetHybrid.getParameter<std::vector<int>>("WidthsBend");
0058     iConfig_.hybridRangesR_ = pSetHybrid.getParameter<std::vector<double>>("RangesR");
0059     iConfig_.hybridRangesZ_ = pSetHybrid.getParameter<std::vector<double>>("RangesZ");
0060     iConfig_.hybridRangesAlpha_ = pSetHybrid.getParameter<std::vector<double>>("RangesAlpha");
0061     iConfig_.hybridLayerRs_ = pSetHybrid.getParameter<std::vector<double>>("LayerRs");
0062     iConfig_.hybridDiskZs_ = pSetHybrid.getParameter<std::vector<double>>("DiskZs");
0063     iConfig_.hybridDisk2SRsSet_ = pSetHybrid.getParameter<std::vector<edm::ParameterSet>>("Disk2SRsSet");
0064     iConfig_.tbBarrelHalfLength_ = pSetHybrid.getParameter<double>("BarrelHalfLength");
0065     iConfig_.tbInnerRadius_ = pSetHybrid.getParameter<double>("InnerRadius");
0066     iConfig_.tbWidthsR_ = pSetHybrid.getParameter<std::vector<int>>("WidthsRTB");
0067     const edm::ParameterSet& pSetFW = iConfig.getParameter<edm::ParameterSet>("Firmware");
0068     iConfig_.enableTruncation_ = pSetFW.getParameter<bool>("EnableTruncation");
0069     iConfig_.useHybrid_ = pSetFW.getParameter<bool>("UseHybrid");
0070     iConfig_.widthDSPa_ = pSetFW.getParameter<int>("WidthDSPa");
0071     iConfig_.widthDSPb_ = pSetFW.getParameter<int>("WidthDSPb");
0072     iConfig_.widthDSPc_ = pSetFW.getParameter<int>("WidthDSPc");
0073     iConfig_.widthAddrBRAM36_ = pSetFW.getParameter<int>("WidthAddrBRAM36");
0074     iConfig_.widthAddrBRAM18_ = pSetFW.getParameter<int>("WidthAddrBRAM18");
0075     iConfig_.numFramesInfra_ = pSetFW.getParameter<int>("NumFramesInfra");
0076     iConfig_.freqLHC_ = pSetFW.getParameter<double>("FreqLHC");
0077     iConfig_.freqBEHigh_ = pSetFW.getParameter<double>("FreqBEHigh");
0078     iConfig_.freqBELow_ = pSetFW.getParameter<double>("FreqBELow");
0079     iConfig_.tmpFE_ = pSetFW.getParameter<int>("TMP_FE");
0080     iConfig_.tmpTFP_ = pSetFW.getParameter<int>("TMP_TFP");
0081     iConfig_.speedOfLight_ = pSetFW.getParameter<double>("SpeedOfLight");
0082     const edm::ParameterSet& pSetOT = iConfig.getParameter<edm::ParameterSet>("Tracker");
0083     iConfig_.bField_ = pSetOT.getParameter<double>("BField");
0084     iConfig_.bFieldError_ = pSetOT.getParameter<double>("BFieldError");
0085     iConfig_.outerRadius_ = pSetOT.getParameter<double>("OuterRadius");
0086     iConfig_.innerRadius_ = pSetOT.getParameter<double>("InnerRadius");
0087     iConfig_.halfLength_ = pSetOT.getParameter<double>("HalfLength");
0088     iConfig_.tiltApproxSlope_ = pSetOT.getParameter<double>("TiltApproxSlope");
0089     iConfig_.tiltApproxIntercept_ = pSetOT.getParameter<double>("TiltApproxIntercept");
0090     iConfig_.tiltUncertaintyR_ = pSetOT.getParameter<double>("TiltUncertaintyR");
0091     iConfig_.scattering_ = pSetOT.getParameter<double>("Scattering");
0092     iConfig_.pitchRow2S_ = pSetOT.getParameter<double>("PitchRow2S");
0093     iConfig_.pitchRowPS_ = pSetOT.getParameter<double>("PitchRowPS");
0094     iConfig_.pitchCol2S_ = pSetOT.getParameter<double>("PitchCol2S");
0095     iConfig_.pitchColPS_ = pSetOT.getParameter<double>("PitchColPS");
0096     iConfig_.limitPSBarrel_ = pSetOT.getParameter<double>("LimitPSBarrel");
0097     iConfig_.limitsTiltedR_ = pSetOT.getParameter<std::vector<double>>("LimitsTiltedR");
0098     iConfig_.limitsTiltedZ_ = pSetOT.getParameter<std::vector<double>>("LimitsTiltedZ");
0099     iConfig_.limitsPSDiksZ_ = pSetOT.getParameter<std::vector<double>>("LimitsPSDiksZ");
0100     iConfig_.limitsPSDiksR_ = pSetOT.getParameter<std::vector<double>>("LimitsPSDiksR");
0101     iConfig_.tiltedLayerLimitsZ_ = pSetOT.getParameter<std::vector<double>>("TiltedLayerLimitsZ");
0102     iConfig_.psDiskLimitsR_ = pSetOT.getParameter<std::vector<double>>("PSDiskLimitsR");
0103     const edm::ParameterSet& pSetFE = iConfig.getParameter<edm::ParameterSet>("FrontEnd");
0104     iConfig_.widthBend_ = pSetFE.getParameter<int>("WidthBend");
0105     iConfig_.widthCol_ = pSetFE.getParameter<int>("WidthCol");
0106     iConfig_.widthRow_ = pSetFE.getParameter<int>("WidthRow");
0107     iConfig_.baseBend_ = pSetFE.getParameter<double>("BaseBend");
0108     iConfig_.baseCol_ = pSetFE.getParameter<double>("BaseCol");
0109     iConfig_.baseRow_ = pSetFE.getParameter<double>("BaseRow");
0110     iConfig_.baseWindowSize_ = pSetFE.getParameter<double>("BaseWindowSize");
0111     iConfig_.bendCut_ = pSetFE.getParameter<double>("BendCut");
0112     const edm::ParameterSet& pSetDTC = iConfig.getParameter<edm::ParameterSet>("DTC");
0113     iConfig_.numRegions_ = pSetDTC.getParameter<int>("NumRegions");
0114     iConfig_.numOverlappingRegions_ = pSetDTC.getParameter<int>("NumOverlappingRegions");
0115     iConfig_.numATCASlots_ = pSetDTC.getParameter<int>("NumATCASlots");
0116     iConfig_.numDTCsPerRegion_ = pSetDTC.getParameter<int>("NumDTCsPerRegion");
0117     iConfig_.numModulesPerDTC_ = pSetDTC.getParameter<int>("NumModulesPerDTC");
0118     iConfig_.dtcNumRoutingBlocks_ = pSetDTC.getParameter<int>("NumRoutingBlocks");
0119     iConfig_.dtcDepthMemory_ = pSetDTC.getParameter<int>("DepthMemory");
0120     iConfig_.dtcWidthRowLUT_ = pSetDTC.getParameter<int>("WidthRowLUT");
0121     iConfig_.dtcWidthInv2R_ = pSetDTC.getParameter<int>("WidthInv2R");
0122     iConfig_.offsetDetIdDSV_ = pSetDTC.getParameter<int>("OffsetDetIdDSV");
0123     iConfig_.offsetDetIdTP_ = pSetDTC.getParameter<int>("OffsetDetIdTP");
0124     iConfig_.offsetLayerDisks_ = pSetDTC.getParameter<int>("OffsetLayerDisks");
0125     iConfig_.offsetLayerId_ = pSetDTC.getParameter<int>("OffsetLayerId");
0126     iConfig_.numBarrelLayer_ = pSetDTC.getParameter<int>("NumBarrelLayer");
0127     iConfig_.numBarrelLayerPS_ = pSetDTC.getParameter<int>("NumBarrelLayerPS");
0128     iConfig_.slotLimitPS_ = pSetDTC.getParameter<int>("SlotLimitPS");
0129     iConfig_.slotLimit10gbps_ = pSetDTC.getParameter<int>("SlotLimit10gbps");
0130     const edm::ParameterSet& pSetTFP = iConfig.getParameter<edm::ParameterSet>("TFP");
0131     iConfig_.tfpWidthPhi0_ = pSetTFP.getParameter<int>("WidthPhi0");
0132     iConfig_.tfpWidthInvR_ = pSetTFP.getParameter<int>("WidthInvR");
0133     iConfig_.tfpWidthCot_ = pSetTFP.getParameter<int>("WidthCot");
0134     iConfig_.tfpWidthZ0_ = pSetTFP.getParameter<int>("WidthZ0");
0135     iConfig_.tfpNumChannel_ = pSetTFP.getParameter<int>("NumChannel");
0136     const edm::ParameterSet& pSetGP = iConfig.getParameter<edm::ParameterSet>("GeometricProcessor");
0137     iConfig_.gpNumBinsPhiT_ = pSetGP.getParameter<int>("NumBinsPhiT");
0138     iConfig_.gpNumBinsZT_ = pSetGP.getParameter<int>("NumBinsZT");
0139     iConfig_.chosenRofZ_ = pSetGP.getParameter<double>("ChosenRofZ");
0140     iConfig_.gpDepthMemory_ = pSetGP.getParameter<int>("DepthMemory");
0141     iConfig_.gpWidthModule_ = pSetGP.getParameter<int>("WidthModule");
0142     iConfig_.gpPosPS_ = pSetGP.getParameter<int>("PosPS");
0143     iConfig_.gpPosBarrel_ = pSetGP.getParameter<int>("PosBarrel");
0144     iConfig_.gpPosTilted_ = pSetGP.getParameter<int>("PosTilted");
0145     const edm::ParameterSet& pSetHT = iConfig.getParameter<edm::ParameterSet>("HoughTransform");
0146     iConfig_.htNumBinsInv2R_ = pSetHT.getParameter<int>("NumBinsInv2R");
0147     iConfig_.htNumBinsPhiT_ = pSetHT.getParameter<int>("NumBinsPhiT");
0148     iConfig_.htMinLayers_ = pSetHT.getParameter<int>("MinLayers");
0149     iConfig_.htDepthMemory_ = pSetHT.getParameter<int>("DepthMemory");
0150     const edm::ParameterSet& pSetCTB = iConfig.getParameter<edm::ParameterSet>("CleanTrackBuilder");
0151     iConfig_.ctbNumBinsInv2R_ = pSetCTB.getParameter<int>("NumBinsInv2R");
0152     iConfig_.ctbNumBinsPhiT_ = pSetCTB.getParameter<int>("NumBinsPhiT");
0153     iConfig_.ctbNumBinsCot_ = pSetCTB.getParameter<int>("NumBinsCot");
0154     iConfig_.ctbNumBinsZT_ = pSetCTB.getParameter<int>("NumBinsZT");
0155     iConfig_.ctbMinLayers_ = pSetCTB.getParameter<int>("MinLayers");
0156     iConfig_.ctbMaxTracks_ = pSetCTB.getParameter<int>("MaxTracks");
0157     iConfig_.ctbMaxStubs_ = pSetCTB.getParameter<int>("MaxStubs");
0158     iConfig_.ctbDepthMemory_ = pSetCTB.getParameter<int>("DepthMemory");
0159     const edm::ParameterSet& pSetKF = iConfig.getParameter<edm::ParameterSet>("KalmanFilter");
0160     iConfig_.kfUse5ParameterFit_ = pSetKF.getParameter<bool>("Use5ParameterFit");
0161     iConfig_.kfUseSimmulation_ = pSetKF.getParameter<bool>("UseSimmulation");
0162     iConfig_.kfUseTTStubResiduals_ = pSetKF.getParameter<bool>("UseTTStubResiduals");
0163     iConfig_.kfUseTTStubParameters_ = pSetKF.getParameter<bool>("UseTTStubParameters");
0164     iConfig_.kfApplyNonLinearCorrection_ = pSetKF.getParameter<bool>("ApplyNonLinearCorrection");
0165     iConfig_.kfNumWorker_ = pSetKF.getParameter<int>("NumWorker");
0166     iConfig_.kfMaxTracks_ = pSetKF.getParameter<int>("MaxTracks");
0167     iConfig_.kfMinLayers_ = pSetKF.getParameter<int>("MinLayers");
0168     iConfig_.kfMinLayersPS_ = pSetKF.getParameter<int>("MinLayersPS");
0169     iConfig_.kfMaxLayers_ = pSetKF.getParameter<int>("MaxLayers");
0170     iConfig_.kfMaxGaps_ = pSetKF.getParameter<int>("MaxGaps");
0171     iConfig_.kfMaxSeedingLayer_ = pSetKF.getParameter<int>("MaxSeedingLayer");
0172     iConfig_.kfNumSeedStubs_ = pSetKF.getParameter<int>("NumSeedStubs");
0173     iConfig_.kfMinSeedDeltaR_ = pSetKF.getParameter<double>("MinSeedDeltaR");
0174     iConfig_.kfRangeFactor_ = pSetKF.getParameter<double>("RangeFactor");
0175     iConfig_.kfShiftInitialC00_ = pSetKF.getParameter<int>("ShiftInitialC00");
0176     iConfig_.kfShiftInitialC11_ = pSetKF.getParameter<int>("ShiftInitialC11");
0177     iConfig_.kfShiftInitialC22_ = pSetKF.getParameter<int>("ShiftInitialC22");
0178     iConfig_.kfShiftInitialC33_ = pSetKF.getParameter<int>("ShiftInitialC33");
0179     iConfig_.kfShiftChi20_ = pSetKF.getParameter<int>("ShiftChi20");
0180     iConfig_.kfShiftChi21_ = pSetKF.getParameter<int>("ShiftChi21");
0181     iConfig_.kfCutChi2_ = pSetKF.getParameter<double>("CutChi2");
0182     iConfig_.kfWidthChi2_ = pSetKF.getParameter<int>("WidthChi2");
0183     const edm::ParameterSet& pSetDR = iConfig.getParameter<edm::ParameterSet>("DuplicateRemoval");
0184     iConfig_.drDepthMemory_ = pSetDR.getParameter<int>("DepthMemory");
0185     const edm::ParameterSet& pSetTQ = iConfig.getParameter<edm::ParameterSet>("TrackQuality");
0186     iConfig_.tqNumChannel_ = pSetTQ.getParameter<int>("NumChannel");
0187   }
0188 
0189   std::unique_ptr<Setup> ProducerSetup::produce(const SetupRcd& setupRcd) {
0190     const TrackerGeometry& trackerGeometry = setupRcd.get(getTokenTrackerGeometry_);
0191     const TrackerTopology& trackerTopology = setupRcd.get(getTokenTrackerTopology_);
0192     const TrackerDetToDTCELinkCablingMap& cablingMap = setupRcd.get(getTokenCablingMap_);
0193     const edm::ESHandle<StubAlgorithm> handleStubAlgorithm = setupRcd.getHandle(getTokenTTStubAlgorithm_);
0194     const StubAlgorithmOfficial& stubAlgoritm =
0195         *dynamic_cast<const StubAlgorithmOfficial*>(&setupRcd.get(getTokenTTStubAlgorithm_));
0196     const edm::ParameterSet& pSetStubAlgorithm = getParameterSet(handleStubAlgorithm.description()->pid_);
0197     return std::make_unique<Setup>(
0198         iConfig_, trackerGeometry, trackerTopology, cablingMap, stubAlgoritm, pSetStubAlgorithm);
0199   }
0200 }  // namespace tt
0201 
0202 DEFINE_FWK_EVENTSETUP_MODULE(tt::ProducerSetup);