CMS 3D CMS Logo

PATPhotonSlimmer.cc
Go to the documentation of this file.
1 
10 
13 
15 
17 
25 
26 namespace pat {
27 
29  public:
30  explicit PATPhotonSlimmer(const edm::ParameterSet & iConfig);
31  ~PATPhotonSlimmer() override { }
32 
33  void produce(edm::Event & iEvent, const edm::EventSetup & iSetup) override;
35 
36  private:
38 
40 
44  const bool linkToPackedPF_;
47  const bool modifyPhoton_;
48  std::unique_ptr<pat::ObjectModifier<pat::Photon> > photonModifier_;
49  };
50 
51 } // namespace
52 
54  src_(consumes<edm::View<pat::Photon> >(iConfig.getParameter<edm::InputTag>("src"))),
55  dropSuperClusters_(iConfig.getParameter<std::string>("dropSuperCluster")),
56  dropBasicClusters_(iConfig.getParameter<std::string>("dropBasicClusters")),
57  dropPreshowerClusters_(iConfig.getParameter<std::string>("dropPreshowerClusters")),
58  dropSeedCluster_(iConfig.getParameter<std::string>("dropSeedCluster")),
59  dropRecHits_(iConfig.getParameter<std::string>("dropRecHits")),
60  dropSaturation_(iConfig.getParameter<std::string>("dropSaturation")),
61  dropRegressionData_(iConfig.getParameter<std::string>("dropRegressionData")),
62  reco2pf_(mayConsume<edm::ValueMap<std::vector<reco::PFCandidateRef> > >(iConfig.getParameter<edm::InputTag>("recoToPFMap"))),
63  pf2pc_(mayConsume<edm::Association<pat::PackedCandidateCollection>>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
64  pc_(mayConsume<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidates"))),
65  linkToPackedPF_(iConfig.getParameter<bool>("linkToPackedPFCandidates")),
66  saveNonZSClusterShapes_(iConfig.getParameter<std::string>("saveNonZSClusterShapes")),
67  reducedBarrelRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedBarrelRecHitCollection"))),
68  reducedEndcapRecHitCollectionToken_(consumes<EcalRecHitCollection>(iConfig.getParameter<edm::InputTag>("reducedEndcapRecHitCollection"))),
69  modifyPhoton_(iConfig.getParameter<bool>("modifyPhotons"))
70 {
71  edm::ConsumesCollector sumes(consumesCollector());
72  if( modifyPhoton_ ) {
73  const edm::ParameterSet& mod_config = iConfig.getParameter<edm::ParameterSet>("modifierConfig");
74  photonModifier_.reset(new pat::ObjectModifier<pat::Photon>(mod_config) );
75  photonModifier_->setConsumes(sumes);
76  } else {
77  photonModifier_.reset(nullptr);
78  }
79 
80  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEB"));
81  mayConsume<EcalRecHitCollection>(edm::InputTag("reducedEcalRecHitsEE"));
82 
83  produces<std::vector<pat::Photon> >();
84 }
85 
86 void
88 }
89 
90 void
92  using namespace edm;
93  using namespace std;
94 
96  iEvent.getByToken(src_, src);
97 
101  if (linkToPackedPF_) {
102  iEvent.getByToken(reco2pf_, reco2pf);
103  iEvent.getByToken(pf2pc_, pf2pc);
104  iEvent.getByToken(pc_, pc);
105  }
107 
108  auto out = std::make_unique<std::vector<pat::Photon>>();
109  out->reserve(src->size());
110 
111  if( modifyPhoton_ ) { photonModifier_->setEvent(iEvent); }
112  if( modifyPhoton_ ) photonModifier_->setEventContent(iSetup);
113 
114 
115  std::vector<unsigned int> keys;
116  for (View<pat::Photon>::const_iterator it = src->begin(), ed = src->end(); it != ed; ++it) {
117  out->push_back(*it);
118  pat::Photon & photon = out->back();
119 
120  if( modifyPhoton_ ) { photonModifier_->modify(photon); }
121 
122  if (dropSuperClusters_(photon)) { photon.superCluster_.clear(); photon.embeddedSuperCluster_ = false; }
123  if (dropBasicClusters_(photon)) { photon.basicClusters_.clear(); }
124  if (dropPreshowerClusters_(photon)) { photon.preshowerClusters_.clear(); }
125  if (dropSeedCluster_(photon)) { photon.seedCluster_.clear(); photon.embeddedSeedCluster_ = false; }
126  if (dropRecHits_(photon)) { photon.recHits_ = EcalRecHitCollection(); photon.embeddedRecHits_ = false; }
128  if (dropRegressionData_(photon)) {
129  photon.setEMax(0); photon.setE2nd(0); photon.setE3x3(0);
130  photon.setETop(0); photon.setEBottom(0); photon.setELeft(0); photon.setERight(0);
131  photon.setSee(0); photon.setSep(0); photon.setSpp(0);
132  photon.setMaxDR(0); photon.setMaxDRDPhi(0); photon.setMaxDRDEta(0); photon.setMaxDRRawEnergy(0);
133  photon.setSubClusRawE1(0); photon.setSubClusRawE2(0); photon.setSubClusRawE3(0);
134  photon.setSubClusDPhi1(0); photon.setSubClusDPhi2(0); photon.setSubClusDPhi3(0);
135  photon.setSubClusDEta1(0); photon.setSubClusDEta2(0); photon.setSubClusDEta3(0);
136  photon.setCryPhi(0); photon.setCryEta(0); photon.setIEta(0); photon.setIPhi(0);
137  }
138 
139  if (linkToPackedPF_) {
140  //std::cout << " PAT photon in " << src.id() << " comes from " << photon.refToOrig_.id() << ", " << photon.refToOrig_.key() << std::endl;
141  keys.clear();
142  for(auto const& pf: (*reco2pf)[photon.refToOrig_]) {
143  if( pf2pc->contains(pf.id()) ) {
144  keys.push_back( (*pf2pc)[pf].key());
145  }
146  }
148  keys.begin(), keys.end());
149  //std::cout << "Photon with pt " << photon.pt() << " associated to " << photon.associatedPackedFCandidateIndices_.size() << " PF Candidates\n";
150  //if there's just one PF Cand then it's me, otherwise I have no univoque parent so my ref will be null
151  if (keys.size() == 1) {
152  photon.refToOrig_ = photon.sourceCandidatePtr(0);
153  } else {
154  photon.refToOrig_ = reco::CandidatePtr(pc.id());
155  }
156  }
157  if (saveNonZSClusterShapes_(photon)) {
158  std::vector<float> vCov = lazyToolsNoZS.localCovariances(*( photon.superCluster()->seed()));
159  float r9 = lazyToolsNoZS.e3x3( *( photon.superCluster()->seed())) / photon.superCluster()->rawEnergy() ;
160  float sigmaIetaIeta = ( !edm::isNotFinite(vCov[0]) ) ? sqrt(vCov[0]) : 0;
161  float sigmaIetaIphi = vCov[1];
162  float sigmaIphiIphi = ( !edm::isNotFinite(vCov[2]) ) ? sqrt(vCov[2]) : 0;
163  float e15o55 = lazyToolsNoZS.e1x5( *( photon.superCluster()->seed()) ) / lazyToolsNoZS.e5x5( *( photon.superCluster()->seed()) );
164  photon.addUserFloat("sigmaIetaIeta_NoZS", sigmaIetaIeta);
165  photon.addUserFloat("sigmaIetaIphi_NoZS", sigmaIetaIphi);
166  photon.addUserFloat("sigmaIphiIphi_NoZS", sigmaIphiIphi);
167  photon.addUserFloat("r9_NoZS", r9);
168  photon.addUserFloat("e1x5_over_e5x5_NoZS", e15o55);
169  }
170 
171  }
172 
173  iEvent.put(std::move(out));
174 }
175 
177 using namespace pat;
T getParameter(std::string const &) const
void setSpp(float s)
Definition: Photon.h:265
Analysis-level Photon class.
Definition: Photon.h:47
void setIEta(float i)
Definition: Photon.h:307
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
Definition: Photon.py:1
float e5x5(const reco::BasicCluster &cluster)
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
const edm::EDGetTokenT< EcalRecHitCollection > reducedBarrelRecHitCollectionToken_
void setSubClusDPhi3(float s)
Definition: Photon.h:290
ProductID id() const
Definition: HandleBase.cc:15
void setE2nd(float e)
Definition: Photon.h:250
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
void setSee(float s)
Definition: Photon.h:263
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void setMaxDRRawEnergy(float m)
Definition: Photon.h:276
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:316
void setSubClusDPhi2(float s)
Definition: Photon.h:288
void setSaturationInfo(const SaturationInfo &s)
Definition: Photon.h:257
const StringCutObjectSelector< pat::Photon > dropSuperClusters_
std::vector< reco::SuperCluster > superCluster_
Definition: Photon.h:337
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:343
float e3x3(const reco::BasicCluster &cluster)
void setIPhi(float i)
Definition: Photon.h:305
const StringCutObjectSelector< pat::Photon > saveNonZSClusterShapes_
reco::SuperClusterRef superCluster() const override
override the superCluster method from CaloJet, to access the internal storage of the supercluster ...
std::vector< reco::CaloCluster > seedCluster_
Place to store electron&#39;s seed cluster internally.
Definition: Photon.h:347
Definition: HeavyIon.h:7
void setELeft(float e)
Definition: Photon.h:258
int iEvent
Definition: GenABIO.cc:230
void setEMax(float e)
Definition: Photon.h:248
slimmer of PAT Taus
bool isNotFinite(T x)
Definition: isFinite.h:10
const edm::EDGetTokenT< edm::Association< pat::PackedCandidateCollection > > pf2pc_
void setERight(float e)
Definition: Photon.h:260
const edm::EDGetTokenT< edm::ValueMap< std::vector< reco::PFCandidateRef > > > reco2pf_
void setMaxDRDEta(float m)
Definition: Photon.h:274
T sqrt(T t)
Definition: SSEVec.h:18
void setETop(float e)
Definition: Photon.h:254
void setSubClusDPhi1(float s)
Definition: Photon.h:286
edm::Ref< PFCandidateCollection > PFCandidateRef
persistent reference to a PFCandidate
const edm::EDGetTokenT< edm::View< pat::Photon > > src_
void setSubClusDEta1(float s)
Definition: Photon.h:293
bool embeddedSuperCluster_
Definition: Photon.h:336
void setCryEta(float c)
Definition: Photon.h:302
const StringCutObjectSelector< pat::Photon > dropRegressionData_
EcalRecHitCollection recHits_
Place to store electron&#39;s RecHits internally (5x5 around seed+ all RecHits)
Definition: Photon.h:351
bool embeddedRecHits_
True if RecHits stored internally.
Definition: Photon.h:349
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
void setCryPhi(float c)
Definition: Photon.h:300
void setSubClusDEta2(float s)
Definition: Photon.h:295
void setMaxDR(float m)
Definition: Photon.h:270
std::vector< float > localCovariances(const reco::BasicCluster &cluster, float w0=4.7)
void setSubClusRawE2(float s)
Definition: Photon.h:281
PATPhotonSlimmer(const edm::ParameterSet &iConfig)
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) final
void setEBottom(float e)
Definition: Photon.h:256
void setMaxDRDPhi(float m)
Definition: Photon.h:272
fixed size matrix
HLT enums.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
void setSubClusDEta3(float s)
Definition: Photon.h:297
float e1x5(const reco::BasicCluster &cluster)
bool embeddedSeedCluster_
True if seed cluster is stored internally.
Definition: Photon.h:345
void setSubClusRawE1(float s)
Definition: Photon.h:279
const StringCutObjectSelector< pat::Photon > dropSeedCluster_
const StringCutObjectSelector< pat::Photon > dropRecHits_
std::unique_ptr< pat::ObjectModifier< pat::Photon > > photonModifier_
void setSubClusRawE3(float s)
Definition: Photon.h:283
reco::CandidatePtr sourceCandidatePtr(size_type i) const override
get the source candidate pointer with index i
const StringCutObjectSelector< pat::Photon > dropSaturation_
const edm::EDGetTokenT< EcalRecHitCollection > reducedEndcapRecHitCollectionToken_
edm::Ptr< reco::Candidate > refToOrig_
Definition: PATObject.h:421
def move(src, dest)
Definition: eostools.py:510
const StringCutObjectSelector< pat::Photon > dropBasicClusters_
void setE3x3(float e)
Definition: Photon.h:252
const StringCutObjectSelector< pat::Photon > dropPreshowerClusters_
std::vector< reco::CaloCluster > basicClusters_
Place to store electron&#39;s basic clusters internally.
Definition: Photon.h:341
edm::SortedCollection< EcalRecHit > EcalRecHitCollection
void setSep(float s)
Definition: Photon.h:267
const edm::EDGetTokenT< pat::PackedCandidateCollection > pc_