CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
LegacyPFClusterProducer Class Reference
Inheritance diagram for LegacyPFClusterProducer:
edm::stream::EDProducer<>

Public Member Functions

 LegacyPFClusterProducer (edm::ParameterSet const &config)
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::unique_ptr< PFCPositionCalculatorBaseallCellsPositionCalc_
 
const bool cutsFromDB_
 
const edm::ESGetToken< HcalPFCuts, HcalPFCutsRcdhcalCutsToken_
 
const edm::EDGetTokenT< reco::PFRecHitHostCollectionInputPFRecHitSoA_Token_
 
const edm::EDPutTokenT< reco::PFClusterCollectionlegacyPfClustersToken_
 
const edm::ESGetToken< reco::PFClusterParamsHostCollection, JobConfigurationGPURecordpfClusParamsToken_
 
const edm::EDGetTokenT< reco::PFClusterHostCollectionpfClusterSoAToken_
 
const edm::EDGetTokenT< reco::PFRecHitFractionHostCollectionpfRecHitFractionSoAToken_
 
std::unique_ptr< PFCPositionCalculatorBasepositionCalc_
 
const edm::EDGetTokenT< reco::PFRecHitCollectionrecHitsLabel_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 37 of file LegacyPFClusterProducer.cc.

Constructor & Destructor Documentation

◆ LegacyPFClusterProducer()

LegacyPFClusterProducer::LegacyPFClusterProducer ( edm::ParameterSet const &  config)
inline

Definition at line 39 of file LegacyPFClusterProducer.cc.

40  : pfClusterSoAToken_(consumes(config.getParameter<edm::InputTag>("src"))),
41  pfRecHitFractionSoAToken_(consumes(config.getParameter<edm::InputTag>("src"))),
42  InputPFRecHitSoA_Token_{consumes(config.getParameter<edm::InputTag>("PFRecHitsLabelIn"))},
43  pfClusParamsToken_(esConsumes(config.getParameter<edm::ESInputTag>("pfClusterParams"))),
44  legacyPfClustersToken_(produces()),
45  recHitsLabel_(consumes(config.getParameter<edm::InputTag>("recHitsSource"))),
46  hcalCutsToken_(esConsumes<HcalPFCuts, HcalPFCutsRcd>(edm::ESInputTag("", "withTopo"))),
47  cutsFromDB_(config.getParameter<bool>("usePFThresholdsFromDB")) {
48  edm::ConsumesCollector cc = consumesCollector();
49 
50  //setup pf cluster builder if requested
51  const edm::ParameterSet& pfcConf = config.getParameterSet("pfClusterBuilder");
52  if (!pfcConf.empty()) {
53  if (pfcConf.exists("positionCalc")) {
54  const edm::ParameterSet& acConf = pfcConf.getParameterSet("positionCalc");
55  const std::string& algoac = acConf.getParameter<std::string>("algoName");
56  positionCalc_ = PFCPositionCalculatorFactory::get()->create(algoac, acConf, cc);
57  }
58 
59  if (pfcConf.exists("allCellsPositionCalc")) {
60  const edm::ParameterSet& acConf = pfcConf.getParameterSet("allCellsPositionCalc");
61  const std::string& algoac = acConf.getParameter<std::string>("algoName");
62  allCellsPositionCalc_ = PFCPositionCalculatorFactory::get()->create(algoac, acConf, cc);
63  }
64  }
65  }
std::unique_ptr< PFCPositionCalculatorBase > positionCalc_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
const edm::EDGetTokenT< reco::PFClusterHostCollection > pfClusterSoAToken_
const edm::EDGetTokenT< reco::PFRecHitFractionHostCollection > pfRecHitFractionSoAToken_
const edm::EDGetTokenT< reco::PFRecHitHostCollection > InputPFRecHitSoA_Token_
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
const edm::ESGetToken< reco::PFClusterParamsHostCollection, JobConfigurationGPURecord > pfClusParamsToken_
bool exists(std::string const &parameterName) const
checks if a parameter exists
ParameterSet const & getParameterSet(std::string const &) const
Definition: config.py:1
const edm::EDPutTokenT< reco::PFClusterCollection > legacyPfClustersToken_
std::unique_ptr< PFCPositionCalculatorBase > allCellsPositionCalc_
bool empty() const
Definition: ParameterSet.h:202
const edm::ESGetToken< HcalPFCuts, HcalPFCutsRcd > hcalCutsToken_
const edm::EDGetTokenT< reco::PFRecHitCollection > recHitsLabel_
#define get

Member Function Documentation

◆ fillDescriptions()

static void LegacyPFClusterProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
inlinestatic

Definition at line 67 of file LegacyPFClusterProducer.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, MillePedeFileConverter_cfg::e, HLT_2023v12_cff::pfClusterBuilder, and AlCaHLTBitMon_QueryRunRegistry::string.

67  {
69  desc.add<edm::InputTag>("src");
70  desc.add<edm::InputTag>("PFRecHitsLabelIn");
71  desc.add<edm::ESInputTag>("pfClusterParams");
72  desc.add<edm::InputTag>("recHitsSource");
73  desc.add<bool>("usePFThresholdsFromDB", true);
74  {
76  pfClusterBuilder.add<unsigned int>("maxIterations", 5);
77  pfClusterBuilder.add<double>("minFracTot", 1e-20);
78  pfClusterBuilder.add<double>("minFractionToKeep", 1e-7);
79  pfClusterBuilder.add<bool>("excludeOtherSeeds", true);
80  pfClusterBuilder.add<double>("showerSigma", 10.);
81  pfClusterBuilder.add<double>("stoppingTolerance", 1e-8);
82  pfClusterBuilder.add<double>("timeSigmaEB", 10.);
83  pfClusterBuilder.add<double>("timeSigmaEE", 10.);
84  pfClusterBuilder.add<double>("maxNSigmaTime", 10.);
85  pfClusterBuilder.add<double>("minChi2Prob", 0.);
86  pfClusterBuilder.add<bool>("clusterTimeResFromSeed", false);
87  pfClusterBuilder.add<std::string>("algoName", "");
88  {
90  validator.add<std::string>("detector", "");
91  validator.add<std::vector<int>>("depths", {});
92  validator.add<std::vector<double>>("recHitEnergyNorm", {});
93  std::vector<edm::ParameterSet> vDefaults(2);
94  vDefaults[0].addParameter<std::string>("detector", "HCAL_BARREL1");
95  vDefaults[0].addParameter<std::vector<int>>("depths", {1, 2, 3, 4});
96  vDefaults[0].addParameter<std::vector<double>>("recHitEnergyNorm", {0.1, 0.2, 0.3, 0.3});
97  vDefaults[1].addParameter<std::string>("detector", "HCAL_ENDCAP");
98  vDefaults[1].addParameter<std::vector<int>>("depths", {1, 2, 3, 4, 5, 6, 7});
99  vDefaults[1].addParameter<std::vector<double>>("recHitEnergyNorm", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2});
100  pfClusterBuilder.addVPSet("recHitEnergyNorms", validator, vDefaults);
101  }
102  {
104  bar.add<std::string>("algoName", "Basic2DGenericPFlowPositionCalc");
105  bar.add<double>("minFractionInCalc", 1e-9);
106  bar.add<int>("posCalcNCrystals", 5);
107  {
109  validator.add<std::string>("detector", "");
110  validator.add<std::vector<int>>("depths", {});
111  validator.add<std::vector<double>>("logWeightDenominator", {});
112  std::vector<edm::ParameterSet> vDefaults(2);
113  vDefaults[0].addParameter<std::string>("detector", "HCAL_BARREL1");
114  vDefaults[0].addParameter<std::vector<int>>("depths", {1, 2, 3, 4});
115  vDefaults[0].addParameter<std::vector<double>>("logWeightDenominator", {0.1, 0.2, 0.3, 0.3});
116  vDefaults[1].addParameter<std::string>("detector", "HCAL_ENDCAP");
117  vDefaults[1].addParameter<std::vector<int>>("depths", {1, 2, 3, 4, 5, 6, 7});
118  vDefaults[1].addParameter<std::vector<double>>("logWeightDenominator", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2});
119  bar.addVPSet("logWeightDenominatorByDetector", validator, vDefaults);
120  }
121  bar.add<double>("minAllowedNormalization", 1e-9);
122  pfClusterBuilder.add("positionCalc", bar);
123  }
124  {
126  bar.add<std::string>("algoName", "Basic2DGenericPFlowPositionCalc");
127  bar.add<double>("minFractionInCalc", 1e-9);
128  bar.add<int>("posCalcNCrystals", -1);
129  {
131  validator.add<std::string>("detector", "");
132  validator.add<std::vector<int>>("depths", {});
133  validator.add<std::vector<double>>("logWeightDenominator", {});
134  std::vector<edm::ParameterSet> vDefaults(2);
135  vDefaults[0].addParameter<std::string>("detector", "HCAL_BARREL1");
136  vDefaults[0].addParameter<std::vector<int>>("depths", {1, 2, 3, 4});
137  vDefaults[0].addParameter<std::vector<double>>("logWeightDenominator", {0.1, 0.2, 0.3, 0.3});
138  vDefaults[1].addParameter<std::string>("detector", "HCAL_ENDCAP");
139  vDefaults[1].addParameter<std::vector<int>>("depths", {1, 2, 3, 4, 5, 6, 7});
140  vDefaults[1].addParameter<std::vector<double>>("logWeightDenominator", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2});
141  bar.addVPSet("logWeightDenominatorByDetector", validator, vDefaults);
142  }
143  bar.add<double>("minAllowedNormalization", 1e-9);
144  pfClusterBuilder.add("allCellsPositionCalc", bar);
145  }
146  {
148  bar.add<double>("corrTermLowE", 0.);
149  bar.add<double>("threshLowE", 6.);
150  bar.add<double>("noiseTerm", 21.86);
151  bar.add<double>("constantTermLowE", 4.24);
152  bar.add<double>("noiseTermLowE", 8.);
153  bar.add<double>("threshHighE", 15.);
154  bar.add<double>("constantTerm", 2.82);
155  pfClusterBuilder.add("timeResolutionCalcBarrel", bar);
156  }
157  {
159  bar.add<double>("corrTermLowE", 0.);
160  bar.add<double>("threshLowE", 6.);
161  bar.add<double>("noiseTerm", 21.86);
162  bar.add<double>("constantTermLowE", 4.24);
163  bar.add<double>("noiseTermLowE", 8.);
164  bar.add<double>("threshHighE", 15.);
165  bar.add<double>("constantTerm", 2.82);
166  pfClusterBuilder.add("timeResolutionCalcEndcap", bar);
167  }
168  {
170  pfClusterBuilder.add("positionReCalc", bar);
171  }
172  {
174  pfClusterBuilder.add("energyCorrector", bar);
175  }
176  desc.add("pfClusterBuilder", pfClusterBuilder);
177  }
178  descriptions.addWithDefaultLabel(desc);
179  }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)

◆ produce()

void LegacyPFClusterProducer::produce ( edm::Event event,
const edm::EventSetup setup 
)
overrideprivate

Definition at line 196 of file LegacyPFClusterProducer.cc.

References allCellsPositionCalc_, cutsFromDB_, hcalRecHitTable_cff::detId, DivergingColor::frac, hcalCutsToken_, mps_fire::i, InputPFRecHitSoA_Token_, dqmdumpme::k, legacyPfClustersToken_, eostools::move(), dqmiodumpmetadata::n, hltrates_dqm_sourceclient-live_cfg::offset, MillePedeFileConverter_cfg::out, pfClusterSoAToken_, pfRecHitFractionSoAToken_, pfClusterHBHEAlpaka_cff::pfRecHits, positionCalc_, recHitsLabel_, singleTopDQM_cfi::setup, and groupFilesInBlocks::temp.

196  {
198 
199  HcalPFCuts const* paramPF = cutsFromDB_ ? &setup.getData(hcalCutsToken_) : nullptr;
200 
201  auto const& pfClusterSoA = event.get(pfClusterSoAToken_).const_view();
202  auto const& pfRecHitFractionSoA = event.get(pfRecHitFractionSoAToken_).const_view();
203 
204  int nRH = pfRecHits.view().size();
206  out.reserve(nRH);
207 
208  auto const rechitsHandle = event.getHandle(recHitsLabel_);
209 
210  // Build PFClusters in legacy format
211  std::vector<int> nTopoSeeds(nRH, 0);
212 
213  for (int i = 0; i < pfClusterSoA.nSeeds(); i++) {
214  nTopoSeeds[pfClusterSoA[i].topoId()]++;
215  }
216 
217  // Looping over SoA PFClusters to produce legacy PFCluster collection
218  for (int i = 0; i < pfClusterSoA.nSeeds(); i++) {
219  unsigned int n = pfClusterSoA[i].seedRHIdx();
221  temp.setSeed((*rechitsHandle)[n].detId()); // Pulling the detId of this PFRecHit from the legacy format input
222  int offset = pfClusterSoA[i].rhfracOffset();
223  for (int k = offset; k < (offset + pfClusterSoA[i].rhfracSize()) && k >= 0;
224  k++) { // Looping over PFRecHits in the same topo cluster
225  if (pfRecHitFractionSoA[k].pfrhIdx() < nRH && pfRecHitFractionSoA[k].pfrhIdx() > -1 &&
226  pfRecHitFractionSoA[k].frac() > 0.0) {
227  const reco::PFRecHitRef& refhit = reco::PFRecHitRef(rechitsHandle, pfRecHitFractionSoA[k].pfrhIdx());
228  temp.addRecHitFraction(reco::PFRecHitFraction(refhit, pfRecHitFractionSoA[k].frac()));
229  }
230  }
231 
232  // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc)
233  if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) {
234  allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF);
235  } else {
236  positionCalc_->calculateAndSetPosition(temp, paramPF);
237  }
238  out.emplace_back(std::move(temp));
239  }
240 
241  event.emplace(legacyPfClustersToken_, std::move(out));
242 }
std::unique_ptr< PFCPositionCalculatorBase > positionCalc_
const edm::EDGetTokenT< reco::PFClusterHostCollection > pfClusterSoAToken_
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
Definition: PFCluster.h:42
const edm::EDGetTokenT< reco::PFRecHitFractionHostCollection > pfRecHitFractionSoAToken_
const edm::EDGetTokenT< reco::PFRecHitHostCollection > InputPFRecHitSoA_Token_
Fraction of a PFRecHit (rechits can be shared between several PFCluster&#39;s)
const edm::EDPutTokenT< reco::PFClusterCollection > legacyPfClustersToken_
std::unique_ptr< PFCPositionCalculatorBase > allCellsPositionCalc_
edm::Ref< PFRecHitCollection > PFRecHitRef
persistent reference to PFRecHit objects
Definition: PFRecHitFwd.h:15
const edm::ESGetToken< HcalPFCuts, HcalPFCutsRcd > hcalCutsToken_
const edm::EDGetTokenT< reco::PFRecHitCollection > recHitsLabel_
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ allCellsPositionCalc_

std::unique_ptr<PFCPositionCalculatorBase> LegacyPFClusterProducer::allCellsPositionCalc_
private

Definition at line 193 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ cutsFromDB_

const bool LegacyPFClusterProducer::cutsFromDB_
private

Definition at line 190 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ hcalCutsToken_

const edm::ESGetToken<HcalPFCuts, HcalPFCutsRcd> LegacyPFClusterProducer::hcalCutsToken_
private

Definition at line 189 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ InputPFRecHitSoA_Token_

const edm::EDGetTokenT<reco::PFRecHitHostCollection> LegacyPFClusterProducer::InputPFRecHitSoA_Token_
private

Definition at line 185 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ legacyPfClustersToken_

const edm::EDPutTokenT<reco::PFClusterCollection> LegacyPFClusterProducer::legacyPfClustersToken_
private

Definition at line 187 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ pfClusParamsToken_

const edm::ESGetToken<reco::PFClusterParamsHostCollection, JobConfigurationGPURecord> LegacyPFClusterProducer::pfClusParamsToken_
private

Definition at line 186 of file LegacyPFClusterProducer.cc.

◆ pfClusterSoAToken_

const edm::EDGetTokenT<reco::PFClusterHostCollection> LegacyPFClusterProducer::pfClusterSoAToken_
private

Definition at line 183 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ pfRecHitFractionSoAToken_

const edm::EDGetTokenT<reco::PFRecHitFractionHostCollection> LegacyPFClusterProducer::pfRecHitFractionSoAToken_
private

Definition at line 184 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ positionCalc_

std::unique_ptr<PFCPositionCalculatorBase> LegacyPFClusterProducer::positionCalc_
private

Definition at line 192 of file LegacyPFClusterProducer.cc.

Referenced by produce().

◆ recHitsLabel_

const edm::EDGetTokenT<reco::PFRecHitCollection> LegacyPFClusterProducer::recHitsLabel_
private

Definition at line 188 of file LegacyPFClusterProducer.cc.

Referenced by produce().