File indexing completed on 2024-04-06 12:28:00
0001 #include "CombinedHitPairGeneratorForPhotonConversion.h"
0002
0003 #include <memory>
0004
0005 #include "DataFormats/Common/interface/Handle.h"
0006 #include "FWCore/Framework/interface/ConsumesCollector.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "HitPairGeneratorFromLayerPairForPhotonConversion.h"
0009
0010 #include "FWCore/Utilities/interface/RunningAverage.h"
0011 namespace {
0012 edm::RunningAverage localRA;
0013 }
0014
0015 CombinedHitPairGeneratorForPhotonConversion::CombinedHitPairGeneratorForPhotonConversion(const edm::ParameterSet& cfg,
0016 edm::ConsumesCollector& iC)
0017 : theSeedingLayerToken(iC.consumes<SeedingLayerSetsHits>(cfg.getParameter<edm::InputTag>("SeedingLayers"))) {
0018 theMaxElement = cfg.getParameter<unsigned int>("maxElement");
0019 maxHitPairsPerTrackAndGenerator = cfg.getParameter<unsigned int>("maxHitPairsPerTrackAndGenerator");
0020 theGenerator = std::make_unique<HitPairGeneratorFromLayerPairForPhotonConversion>(
0021 iC, 0, 1, &theLayerCache, 0, maxHitPairsPerTrackAndGenerator);
0022 }
0023
0024 const OrderedHitPairs& CombinedHitPairGeneratorForPhotonConversion::run(const ConversionRegion& convRegion,
0025 const TrackingRegion& region,
0026 const edm::Event& ev,
0027 const edm::EventSetup& es) {
0028 if (thePairs.capacity() == 0)
0029 thePairs.reserve(localRA.upper());
0030 thePairs.clear();
0031 hitPairs(convRegion, region, thePairs, ev, es);
0032 return thePairs;
0033 }
0034
0035 void CombinedHitPairGeneratorForPhotonConversion::hitPairs(const ConversionRegion& convRegion,
0036 const TrackingRegion& region,
0037 OrderedHitPairs& result,
0038 const edm::Event& ev,
0039 const edm::EventSetup& es) {
0040 edm::Handle<SeedingLayerSetsHits> hlayers;
0041 ev.getByToken(theSeedingLayerToken, hlayers);
0042 const SeedingLayerSetsHits& layers = *hlayers;
0043 assert(layers.numberOfLayersInSet() == 2);
0044
0045 for (SeedingLayerSetsHits::LayerSetIndex i = 0; i < layers.size(); ++i) {
0046 theGenerator->hitPairs(convRegion, region, result, layers[i], ev, es);
0047 }
0048 }
0049
0050 void CombinedHitPairGeneratorForPhotonConversion::clearCache() {
0051 theLayerCache.clear();
0052 localRA.update(thePairs.size());
0053 thePairs.clear();
0054 thePairs.shrink_to_fit();
0055 }