Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // From jet producer
0056   JetDefPtr fjJetDefinition_;                         // fastjet jet definition
0057   ClusterSequencePtr fjClusterSeq_;                   // fastjet cluster sequence
0058   std::vector<edm::Ptr<reco::Candidate> >* inputs_;   // input candidates
0059   std::vector<fastjet::PseudoJet>* fjInputs_;         // fastjet inputs
0060   std::vector<fastjet::PseudoJet>* fjJets_;           // fastjet jets
0061   std::vector<fastjet::PseudoJet> fjOriginalInputs_;  // to back-up unsubtracted fastjet inputs
0062 
0063   // PU subtraction parameters
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_;                 // number of sigma for pileup
0075   double radiusPU_;                 // pileup radius
0076   ActiveAreaSpecPtr fjActiveArea_;  // fastjet active area definition
0077   edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geoToken_;
0078   CaloGeometry const* geo_;             // geometry
0079   int ietamax_;                         // maximum eta in geometry
0080   int ietamin_;                         // minimum eta in geometry
0081   std::vector<HcalDetId> allgeomid_;    // all det ids in the geometry
0082   std::map<int, int> geomtowers_;       // map of geometry towers to det id
0083   std::map<int, int> ntowersWithJets_;  // number of towers with jets
0084   std::map<int, double> esigma_;        // energy sigma
0085   std::map<int, double> emean_;         // energy mean
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 }  // namespace edm
0096 typedef edmplugin::PluginFactory<PileUpSubtractor*(const edm::ParameterSet&, edm::ConsumesCollector&&)>
0097     PileUpSubtractorFactory;
0098 
0099 #endif