Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

code-cleaning in RecoMET/METProducers #1745

Merged
merged 19 commits into from Dec 12, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 1 addition & 6 deletions RecoMET/METAlgorithms/interface/PFSpecificAlgo.h
Expand Up @@ -28,7 +28,6 @@
#include "DataFormats/Candidate/interface/Candidate.h"
#include "DataFormats/Math/interface/LorentzVector.h"
#include "DataFormats/Math/interface/Point3D.h"
#include "RecoMET/METAlgorithms/interface/SignPFSpecificAlgo.h"
#include "TMatrixD.h"

namespace metsig {
Expand All @@ -39,20 +38,16 @@ namespace metsig {
class PFSpecificAlgo
{
public:
PFSpecificAlgo() : doSignificance(false) { }
PFSpecificAlgo() { }

void runSignificance(metsig::SignAlgoResolutions & resolutions, edm::Handle<edm::View<reco::PFJet> > jets);
reco::PFMET addInfo(edm::Handle<edm::View<reco::Candidate> > PFCandidates, const CommonMETData& met);

private:
typedef math::XYZTLorentzVector LorentzVector;
typedef math::XYZPoint Point;
void initializeSpecificPFMETData(SpecificPFMETData &specific);
SpecificPFMETData mkSpecificPFMETData(edm::Handle<edm::View<reco::Candidate> > &PFCandidates);
TMatrixD mkSignifMatrix(edm::Handle<edm::View<reco::Candidate> > &PFCandidates);

bool doSignificance;
metsig::SignPFSpecificAlgo pfsignalgo_;
};

//____________________________________________________________________________||
Expand Down
42 changes: 29 additions & 13 deletions RecoMET/METAlgorithms/interface/SignPFSpecificAlgo.h
@@ -1,38 +1,54 @@
// -*- C++ -*-
//
// Package: METAlgorithms
// Class: SignPFSpecificAlgo
//
/**\class SignPFSpecificAlgo

Description: Organizes information specific to the Jet-based significance for
Particle Flow MET

*/
//
// Authors: A. Khukhunaishvili (Cornell), L. Gibbons (Cornell)
// First Implementation: November 11, 2011
//
//
#ifndef METAlgorithms_SignPFSpecificAlgo_h
#define METAlgorithms_SignPFSpecificAlgo_h

// Organizes information specific to the Jet-based significance for Particle Flow MET
// Author: A. Khukhunaishvili (Cornell), L. Gibbons (Cornell)
// First Implementation: 11/11/10

//____________________________________________________________________________||
#include "RecoMET/METAlgorithms/interface/significanceAlgo.h"
#include "RecoMET/METAlgorithms/interface/SignAlgoResolutions.h"
#include "DataFormats/JetReco/interface/PFJet.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
#include "TMatrixD.h"

//____________________________________________________________________________||
namespace metsig
{


namespace metsig{
class SignPFSpecificAlgo{
class SignPFSpecificAlgo
{

public:
SignPFSpecificAlgo();
~SignPFSpecificAlgo();
~SignPFSpecificAlgo() { }


void setResolutions( metsig::SignAlgoResolutions *resolutions);
void addPFJets(edm::Handle<edm::View<reco::PFJet> > PFJets);
void addPFJets(const edm::View<reco::PFJet>* PFJets);
void addPFCandidate(reco::PFCandidatePtr pf);
void useOriginalPtrs(const edm::ProductID& productID);
TMatrixD getSignifMatrix() const {return algo_.getSignifMatrix();}

TMatrixD mkSignifMatrix(edm::Handle<edm::View<reco::Candidate> > &PFCandidates);

private:
metsig::SignAlgoResolutions *resolutions_;
std::set<reco::CandidatePtr> clusteredParticlePtrs_;
metsig::significanceAlgo algo_;
};

}

#endif
//____________________________________________________________________________||
#endif // METAlgorithms_SignPFSpecificAlgo_h
28 changes: 0 additions & 28 deletions RecoMET/METAlgorithms/src/PFSpecificAlgo.cc
Expand Up @@ -9,7 +9,6 @@
//
//____________________________________________________________________________||
#include "RecoMET/METAlgorithms/interface/PFSpecificAlgo.h"
#include "RecoMET/METAlgorithms/interface/SignAlgoResolutions.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"

//____________________________________________________________________________||
Expand All @@ -24,19 +23,9 @@ reco::PFMET PFSpecificAlgo::addInfo(edm::Handle<edm::View<Candidate> > PFCandida
const Point vtx(0.0,0.0,0.0);
PFMET pfMET(specific, met.sumet, p4, vtx );

if(doSignificance) pfMET.setSignificanceMatrix(mkSignifMatrix(PFCandidates));

return pfMET;
}

//____________________________________________________________________________||
void PFSpecificAlgo::runSignificance(metsig::SignAlgoResolutions &resolutions, edm::Handle<edm::View<reco::PFJet> > jets)
{
doSignificance = true;
pfsignalgo_.setResolutions( &resolutions );
pfsignalgo_.addPFJets(jets);
}

//____________________________________________________________________________||
void PFSpecificAlgo::initializeSpecificPFMETData(SpecificPFMETData &specific)
{
Expand Down Expand Up @@ -103,20 +92,3 @@ SpecificPFMETData PFSpecificAlgo::mkSpecificPFMETData(edm::Handle<edm::View<reco
}

//____________________________________________________________________________||
TMatrixD PFSpecificAlgo::mkSignifMatrix(edm::Handle<edm::View<reco::Candidate> > &PFCandidates)
{
pfsignalgo_.useOriginalPtrs(PFCandidates.id());
for(edm::View<reco::Candidate>::const_iterator iParticle = (PFCandidates.product())->begin(); iParticle != (PFCandidates.product())->end(); ++iParticle )
{
const PFCandidate* pfCandidate = dynamic_cast<const PFCandidate*> (&(*iParticle));
if (!pfCandidate) continue;
reco::CandidatePtr dau(PFCandidates, iParticle - PFCandidates->begin());
if(dau.isNull()) continue;
if(!dau.isAvailable()) continue;
reco::PFCandidatePtr pf(dau.id(), pfCandidate, dau.key());
pfsignalgo_.addPFCandidate(pf);
}
return pfsignalgo_.getSignifMatrix();
}

//____________________________________________________________________________||
122 changes: 77 additions & 45 deletions RecoMET/METAlgorithms/src/SignPFSpecificAlgo.cc
@@ -1,65 +1,97 @@
/*
class: SignPFSpecificAlgo.cc
description: add the infrastructure to compute the jet-based significance for MET computed with particle flow
authors: A. Khukhunaishvili (Cornell), L. Gibbons (Cornell)
date: 11/11/10
*/
// -*- C++ -*-
//
// Package: METAlgorithms
// Class: SignPFSpecificAlgo
//
// Authors: A. Khukhunaishvili (Cornell), L. Gibbons (Cornell)
// First Implementation: November 11, 2011
//
//

//____________________________________________________________________________||
#include "RecoMET/METAlgorithms/interface/SignPFSpecificAlgo.h"

metsig::SignPFSpecificAlgo::SignPFSpecificAlgo():
resolutions_(0),
algo_()
{clusteredParticlePtrs_.clear();}
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"

metsig::SignPFSpecificAlgo::~SignPFSpecificAlgo(){}
//____________________________________________________________________________||
metsig::SignPFSpecificAlgo::SignPFSpecificAlgo()
: resolutions_(0), algo_()
{
clusteredParticlePtrs_.clear();
}

void
metsig::SignPFSpecificAlgo::setResolutions( metsig::SignAlgoResolutions *resolutions) {
//____________________________________________________________________________||
void metsig::SignPFSpecificAlgo::setResolutions( metsig::SignAlgoResolutions *resolutions)
{
resolutions_ = resolutions;
}


void
metsig::SignPFSpecificAlgo::addPFJets(edm::Handle<edm::View<reco::PFJet> > PFJets){
std::vector<metsig::SigInputObj> vobj;
for(edm::View<reco::PFJet>::const_iterator jet = PFJets->begin(); jet != PFJets->end(); ++jet){
vobj.push_back(resolutions_->evalPFJet(&(*jet)));
std::vector<reco::PFCandidatePtr> pfs = jet->getPFConstituents();
for(std::vector<reco::PFCandidatePtr>::const_iterator it=pfs.begin(); it!=pfs.end(); ++it){
reco::CandidatePtr ptr(*it);
clusteredParticlePtrs_.insert(ptr);
//____________________________________________________________________________||
void metsig::SignPFSpecificAlgo::addPFJets(const edm::View<reco::PFJet>* PFJets)
{
std::vector<metsig::SigInputObj> vobj;
for(edm::View<reco::PFJet>::const_iterator jet = PFJets->begin(); jet != PFJets->end(); ++jet)
{
vobj.push_back(resolutions_->evalPFJet(&(*jet)));
std::vector<reco::PFCandidatePtr> pfs = jet->getPFConstituents();
for(std::vector<reco::PFCandidatePtr>::const_iterator it=pfs.begin(); it!=pfs.end(); ++it)
{
reco::CandidatePtr ptr(*it);
clusteredParticlePtrs_.insert(ptr);
}
}
algo_.addObjects(vobj);
algo_.addObjects(vobj);
}

void
metsig::SignPFSpecificAlgo::useOriginalPtrs(const edm::ProductID& productID){
std::set<reco::CandidatePtr>::const_iterator it=clusteredParticlePtrs_.begin();
reco::CandidatePtr ptr(*it);
if(ptr.id()==productID) return; //If the first element is from the right product, return
//____________________________________________________________________________||
void metsig::SignPFSpecificAlgo::useOriginalPtrs(const edm::ProductID& productID)
{
std::set<reco::CandidatePtr>::const_iterator it=clusteredParticlePtrs_.begin();
reco::CandidatePtr ptr(*it);
if(ptr.id()==productID) return; //If the first element is from the right product, return

std::set<reco::CandidatePtr> temp;
for(; it!=clusteredParticlePtrs_.end(); ++it){
reco::CandidatePtr ptr(*it);
while(ptr.id()!=productID){
ptr = ptr->sourceCandidatePtr(0);
if(ptr.isNull()) return; //if it does not get to the correct product, return
std::set<reco::CandidatePtr> temp;
for(; it!=clusteredParticlePtrs_.end(); ++it)
{
reco::CandidatePtr ptr(*it);
while(ptr.id()!=productID)
{
ptr = ptr->sourceCandidatePtr(0);
if(ptr.isNull()) return; //if it does not get to the correct product, return
}
temp.insert(ptr);
temp.insert(ptr);
}
clusteredParticlePtrs_.clear();
clusteredParticlePtrs_ = temp;
}

//____________________________________________________________________________||
void metsig::SignPFSpecificAlgo::addPFCandidate(reco::PFCandidatePtr pf)
{
if(clusteredParticlePtrs_.find(pf) != clusteredParticlePtrs_.end())
{
return; //pf candidate already added in jet collection
}
clusteredParticlePtrs_.clear();
clusteredParticlePtrs_ = temp;
std::vector<metsig::SigInputObj> vobj;
vobj.push_back(resolutions_->evalPF(&(*pf)));
algo_.addObjects(vobj);
}

void
metsig::SignPFSpecificAlgo::addPFCandidate(reco::PFCandidatePtr pf){
if(clusteredParticlePtrs_.find(pf) != clusteredParticlePtrs_.end()) {
return; //pf candidate already added in jet collection
//____________________________________________________________________________||
TMatrixD metsig::SignPFSpecificAlgo::mkSignifMatrix(edm::Handle<edm::View<reco::Candidate> > &PFCandidates)
{
useOriginalPtrs(PFCandidates.id());
for(edm::View<reco::Candidate>::const_iterator iParticle = (PFCandidates.product())->begin(); iParticle != (PFCandidates.product())->end(); ++iParticle )
{
const reco::PFCandidate* pfCandidate = dynamic_cast<const reco::PFCandidate*> (&(*iParticle));
if (!pfCandidate) continue;
reco::CandidatePtr dau(PFCandidates, iParticle - PFCandidates->begin());
if(dau.isNull()) continue;
if(!dau.isAvailable()) continue;
reco::PFCandidatePtr pf(dau.id(), pfCandidate, dau.key());
addPFCandidate(pf);
}
std::vector<metsig::SigInputObj> vobj;
vobj.push_back(resolutions_->evalPF(&(*pf)));
algo_.addObjects(vobj);
return getSignifMatrix();
}

//____________________________________________________________________________||
64 changes: 64 additions & 0 deletions RecoMET/METProducers/interface/CaloMETProducer.h
@@ -0,0 +1,64 @@
// -*- C++ -*-
//
// Package: METProducers
// Class: CaloMETProducer
//
/**\class CaloMETProducer

Description: An EDProducer for CaloMET

Implementation:

*/
//
//
//

//____________________________________________________________________________||
#ifndef CaloMETProducer_h
#define CaloMETProducer_h

//____________________________________________________________________________||
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/EDProducer.h"

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "DataFormats/Common/interface/View.h"
#include "DataFormats/Candidate/interface/Candidate.h"

//____________________________________________________________________________||
namespace metsig
{
class SignAlgoResolutions;
}

//____________________________________________________________________________||
namespace cms
{
class CaloMETProducer: public edm::EDProducer
{
public:
explicit CaloMETProducer(const edm::ParameterSet&);
virtual ~CaloMETProducer() { }
virtual void produce(edm::Event&, const edm::EventSetup&) override;

private:

edm::EDGetTokenT<edm::View<reco::Candidate> > inputToken_;

bool calculateSignificance_;
metsig::SignAlgoResolutions *resolutions_;

bool noHF_;

double globalThreshold_;

};
}

//____________________________________________________________________________||
#endif // CaloMETProducer_h