File indexing completed on 2025-02-21 05:46:49
0001 #ifndef __PUSubtractor__
0002 #define __PUSubtractor__
0003
0004 #include <vector>
0005
0006 #include "fastjet/PseudoJet.hh"
0007 #include "fastjet/ClusterSequence.hh"
0008 #include "fastjet/ClusterSequenceArea.hh"
0009 #include "fastjet/GhostedAreaSpec.hh"
0010
0011 #include "FWCore/Framework/interface/Event.h"
0012 #include "FWCore/Framework/interface/EventSetup.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Framework/interface/ConsumesCollector.h"
0015 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0017
0018 #include "DataFormats/JetReco/interface/CaloJet.h"
0019 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
0020 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0021 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0022
0023 class CaloGeometryRecord;
0024
0025 class PileUpSubtractor {
0026 public:
0027 typedef std::shared_ptr<fastjet::ClusterSequence> ClusterSequencePtr;
0028 typedef std::shared_ptr<fastjet::GhostedAreaSpec> ActiveAreaSpecPtr;
0029 typedef std::shared_ptr<fastjet::JetDefinition> JetDefPtr;
0030
0031 PileUpSubtractor(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC);
0032 virtual ~PileUpSubtractor() { ; }
0033
0034 virtual void setDefinition(JetDefPtr const& jetDef);
0035 virtual void reset(std::vector<edm::Ptr<reco::Candidate> >& input,
0036 std::vector<fastjet::PseudoJet>& towers,
0037 std::vector<fastjet::PseudoJet>& output);
0038 virtual void setupGeometryMap(edm::Event& iEvent, const edm::EventSetup& iSetup);
0039 virtual void calculatePedestal(std::vector<fastjet::PseudoJet> const& coll);
0040 virtual void subtractPedestal(std::vector<fastjet::PseudoJet>& coll);
0041 virtual void calculateOrphanInput(std::vector<fastjet::PseudoJet>& orphanInput);
0042 virtual void offsetCorrectJets();
0043 virtual double getMeanAtTower(const reco::CandidatePtr& in) const;
0044 virtual double getSigmaAtTower(const reco::CandidatePtr& in) const;
0045 virtual double getPileUpAtTower(const reco::CandidatePtr& in) const;
0046 virtual double getPileUpEnergy(int ijet) const { return jetOffset_[ijet]; }
0047 virtual double getCone(double cone, double eta, double phi, double& et, double& pu);
0048 int getN(const reco::CandidatePtr& in) const;
0049 int getNwithJets(const reco::CandidatePtr& in) const;
0050
0051 int ieta(const reco::CandidatePtr& in) const;
0052 int iphi(const reco::CandidatePtr& in) const;
0053
0054 protected:
0055
0056 JetDefPtr fjJetDefinition_;
0057 ClusterSequencePtr fjClusterSeq_;
0058 std::vector<edm::Ptr<reco::Candidate> >* inputs_;
0059 std::vector<fastjet::PseudoJet>* fjInputs_;
0060 std::vector<fastjet::PseudoJet>* fjJets_;
0061 std::vector<fastjet::PseudoJet> fjOriginalInputs_;
0062
0063
0064 bool reRunAlgo_;
0065 bool doAreaFastjet_;
0066 bool doRhoFastjet_;
0067 double jetPtMin_;
0068 double puPtMin_;
0069
0070 double ghostEtaMax;
0071 int activeAreaRepeats;
0072 double ghostArea;
0073
0074 double nSigmaPU_;
0075 double radiusPU_;
0076 ActiveAreaSpecPtr fjActiveArea_;
0077 edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geoToken_;
0078 CaloGeometry const* geo_;
0079 int ietamax_;
0080 int ietamin_;
0081 std::vector<HcalDetId> allgeomid_;
0082 std::map<int, int> geomtowers_;
0083 std::map<int, int> ntowersWithJets_;
0084 std::map<int, double> esigma_;
0085 std::map<int, double> emean_;
0086
0087 std::vector<double> jetOffset_;
0088 };
0089
0090 #include "FWCore/PluginManager/interface/PluginFactory.h"
0091 namespace edm {
0092 class ParameterSet;
0093 class EventSetup;
0094 class ConsumesCollector;
0095 }
0096 typedef edmplugin::PluginFactory<PileUpSubtractor*(const edm::ParameterSet&, edm::ConsumesCollector&&)>
0097 PileUpSubtractorFactory;
0098
0099 #endif