CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PATPhotonSlimmer.cc
Go to the documentation of this file.
1 
10 
13 
15 
17 
24 
25 namespace pat {
26 
28  public:
29  explicit PATPhotonSlimmer(const edm::ParameterSet & iConfig);
30  virtual ~PATPhotonSlimmer() { }
31 
32  virtual void produce(edm::Event & iEvent, const edm::EventSetup & iSetup);
33  virtual void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) override final;
34 
35  private:
36  const edm::EDGetTokenT<edm::View<pat::Photon> > src_;
37 
39 
40  const edm::EDGetTokenT<edm::ValueMap<std::vector<reco::PFCandidateRef> > > reco2pf_;
41  const edm::EDGetTokenT<edm::Association<pat::PackedCandidateCollection> > pf2pc_;
42  const edm::EDGetTokenT<pat::PackedCandidateCollection> pc_;
47  std::unique_ptr<pat::ObjectModifier<pat::Photon> > photonModifier_;
48  };
49 
50 } // namespace
51 
53  src_(consumes<edm::View<pat::Photon> >(iConfig.getParameter<edm::InputTag>("src"))),
54  dropSuperClusters_(iConfig.getParameter<std::string>("dropSuperCluster")),
55  dropBasicClusters_(iConfig.getParameter<std::string>("dropBasicClusters")),
56  dropPreshowerClusters_(iConfig.getParameter<std::string>("dropPreshowerClusters")),
57  dropSeedCluster_(iConfig.getParameter<std::string>("dropSeedCluster")),
58  dropRecHits_(iConfig.getParameter<std::string>("dropRecHits")),
59  reco2pf_(mayConsume<edm::ValueMap<std::vector<reco::PFCandidateRef> > >(iConfig.getParameter<edm::InputTag>("recoToPFMap"))),
60  pf2pc_(mayConsume<edm::Association<pat::PackedCandidateCollection>>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
61  pc_(mayConsume<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
62  linkToPackedPF_(iConfig.getParameter<bool>("linkToPackedPFCandidates")),
63  saveNonZSClusterShapes_(iConfig.getParameter<std::string>("saveNonZSClusterShapes")),
64  reducedBarrelRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection"))),
65  reducedEndcapRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection"))),
66  modifyPhoton_(iConfig.getParameter<bool>("modifyPhotons"))
67 {
69  if( modifyPhoton_ ) {
70  const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
71  photonModifier_.reset(new pat::ObjectModifier<pat::Photon>(mod_config) );
72  photonModifier_->setConsumes(sumes);
73  } else {
74  photonModifier_.reset(nullptr);
75  }
76 
77  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
78  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEE"));
79 
80  produces<std::vector<pat::Photon> >();
81 }
82 
83 void
85 }
86 
87 void
89  using namespace edm;
90  using namespace std;
91 
93  iEvent.getByToken(src_, src);
94 
98  if (linkToPackedPF_) {
99  iEvent.getByToken(reco2pf_, reco2pf);
100  iEvent.getByToken(pf2pc_, pf2pc);
101  iEvent.getByToken(pc_, pc);
102  }
104 
105  auto_ptr<vector<pat::Photon> > out(new vector<pat::Photon>());
106  out->reserve(src->size());
107 
108  if( modifyPhoton_ ) { photonModifier_->setEvent(iEvent); }
109  if( modifyPhoton_ ) photonModifier_->setEventContent(iSetup);
110 
111  std::vector<unsigned int> keys;
112  for (View<pat::Photon>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
113  out->push_back(*it);
114  pat::Photon & photon = out->back();
115 
116  if( modifyPhoton_ ) { photonModifier_->modify(photon); }
117 
118  if (dropSuperClusters_(photon)) { photon.superCluster_.clear(); photon.embeddedSuperCluster_ = false; }
119  if (dropBasicClusters_(photon)) { photon.basicClusters_.clear(); }
120  if (dropPreshowerClusters_(photon)) { photon.preshowerClusters_.clear(); }
121  if (dropSeedCluster_(photon)) { photon.seedCluster_.clear(); photon.embeddedSeedCluster_ = false; }
122  if (dropRecHits_(photon)) { photon.recHits_ = EcalRecHitCollection(); photon.embeddedRecHits_ = false; }
123 
124  if (linkToPackedPF_) {
125  //std::cout << " PAT photon in " << src.id() << " comes from " << photon.refToOrig_.id() << ", " << photon.refToOrig_.key() << std::endl;
126  keys.clear();
127  for(auto const& pf: (*reco2pf)[photon.refToOrig_]) {
128  if( pf2pc->contains(pf.id()) ) {
129  keys.push_back( (*pf2pc)[pf].key());
130  }
131  }
133  keys.begin(), keys.end());
134  //std::cout << "Photon with pt " << photon.pt() << " associated to " << photon.associatedPackedFCandidateIndices_.size() << " PF Candidates\n";
135  //if there's just one PF Cand then it's me, otherwise I have no univoque parent so my ref will be null
136  if (keys.size() == 1) {
137  photon.refToOrig_ = photon.sourceCandidatePtr(0);
138  } else {
139  photon.refToOrig_ = reco::CandidatePtr(pc.id());
140  }
141  }
142  if (saveNonZSClusterShapes_(photon)) {
143  std::vector<float> vCov = lazyToolsNoZS.localCovariances(*( photon.superCluster()->seed()));
144  float r9 = lazyToolsNoZS.e3x3( *( photon.superCluster()->seed())) / photon.superCluster()->rawEnergy() ;
145  float sigmaIetaIeta = ( !edm::isNotFinite(vCov[0]) ) ? sqrt(vCov[0]) : 0;
146  float sigmaIetaIphi = vCov[1];
147  float sigmaIphiIphi = ( !edm::isNotFinite(vCov[2]) ) ? sqrt(vCov[2]) : 0;
148  float e15o55 = lazyToolsNoZS.e1x5( *( photon.superCluster()->seed()) ) / lazyToolsNoZS.e5x5( *( photon.superCluster()->seed()) );
149  photon.addUserFloat("sigmaIetaIeta_NoZS", sigmaIetaIeta);
150  photon.addUserFloat("sigmaIetaIphi_NoZS", sigmaIetaIphi);
151  photon.addUserFloat("sigmaIphiIphi_NoZS", sigmaIphiIphi);
152  photon.addUserFloat("r9_NoZS", r9);
153  photon.addUserFloat("e1x5_over_e5x5_NoZS", e15o55);
154  }
155  }
156 
157  iEvent.put(out);
158 }
159 
161 using namespace pat;
T getParameter(std::string const &) const
Analysis-level Photon class.
Definition: Photon.h:47
reco::SuperClusterRef superCluster() const
override the superCluster method from CaloJet, to access the internal storage of the supercluster ...
float e5x5(const reco::BasicCluster &cluster)
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::vector< pat::PackedCandidate > PackedCandidateCollection
void setAssociatedPackedPFCandidates(const edm::RefProd< pat::PackedCandidateCollection > &refprod, T beginIndexItr, T endIndexItr)
References to PFCandidates linked to this object (e.g. for isolation vetos or masking before jet recl...
Definition: Photon.h:309
const StringCutObjectSelector< pat::Photon > dropSuperClusters_
std::vector< reco::SuperCluster > superCluster_
Definition: Photon.h:330
void addUserFloat(const std::string &label, float data, const bool overwrite=false)
Set user-defined float.
Definition: PATObject.h:813
std::vector< reco::CaloCluster > preshowerClusters_
Place to store electron&#39;s preshower clusters internally.
Definition: Photon.h:336
float e3x3(const reco::BasicCluster &cluster)
const StringCutObjectSelector< pat::Photon > saveNonZSClusterShapes_
std::vector< reco::CaloCluster > seedCluster_
Place to store electron&#39;s seed cluster internally.
Definition: Photon.h:340
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
int iEvent
Definition: GenABIO.cc:230
slimmer of PAT Taus
bool isNotFinite(T x)
Definition: isFinite.h:10
reco::CandidatePtr sourceCandidatePtr(size_type i) const
get the source candidate pointer with index i
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > pf2pc_
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:121
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
T sqrt(T t)
Definition: SSEVec.h:18
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
const edm::EDGetTokenT< edm::View< pat::Photon > > src_
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
bool embeddedSuperCluster_
Definition: Photon.h:329
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) overridefinal
EcalRecHitCollection recHits_
Place to store electron&#39;s RecHits internally (5x5 around seed+ all RecHits)
Definition: Photon.h:344
bool embeddedRecHits_
True if RecHits stored internally.
Definition: Photon.h:342
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
std::vector< float > localCovariances(const reco::BasicCluster &cluster, float w0=4.7)
string const
Definition: compareJSON.py:14
PATPhotonSlimmer(const edm::ParameterSet &iConfig)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
float e1x5(const reco::BasicCluster &cluster)
bool embeddedSeedCluster_
True if seed cluster is stored internally.
Definition: Photon.h:338
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup)
const StringCutObjectSelector< pat::Photon > dropSeedCluster_
const StringCutObjectSelector< pat::Photon > dropRecHits_
std::unique_ptr< pat::ObjectModifier< pat::Photon > > photonModifier_
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
edm::Ptr< reco::Candidate > refToOrig_
Definition: PATObject.h:421
const StringCutObjectSelector< pat::Photon > dropBasicClusters_
const StringCutObjectSelector< pat::Photon > dropPreshowerClusters_
std::vector< reco::CaloCluster > basicClusters_
Place to store electron&#39;s basic clusters internally.
Definition: Photon.h:334
edm::SortedCollection< EcalRecHit > EcalRecHitCollection
const edm::EDGetTokenT< pat::PackedCandidateCollection > pc_