CMS 3D CMS Logo

pat::PATGenericParticleProducer Class Reference

Produces the pat::GenericParticle. More...

#include <PhysicsTools/PatAlgos/interface/PATGenericParticleProducer.h>

Inheritance diagram for pat::PATGenericParticleProducer:

edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 PATGenericParticleProducer (const edm::ParameterSet &iConfig)
virtual void produce (edm::Event &iEvent, const edm::EventSetup &iSetup)
 ~PATGenericParticleProducer ()

Private Attributes

bool addEfficiencies_
bool addGenMatch_
bool addQuality_
bool addTrigMatch_
pat::helper::EfficiencyLoader efficiencyLoader_
bool embedCaloTower_
bool embedCombined_
bool embedGenMatch_
bool embedGsfTrack_
bool embedStandalone_
bool embedSuperCluster_
bool embedTrack_
bool embedTracks_
GreaterByEt< GenericParticleeTComparator_
std::vector< edm::InputTaggenMatchSrc_
std::vector< std::pair
< pat::IsolationKeys,
edm::InputTag > > 
isoDepositLabels_
pat::helper::MultiIsolator isolator_
pat::helper::MultiIsolator::IsolationValuePairs isolatorTmpStorage_
edm::InputTag qualitySrc_
edm::InputTag src_
std::vector< edm::InputTagtrigPrimSrc_
pat::PATUserDataHelper
< pat::GenericParticle
userDataHelper_
bool useUserData_
pat::helper::VertexingHelper vertexingHelper_


Detailed Description

Produces the pat::GenericParticle.

The PATGenericParticleProducer produces the analysis-level pat::GenericParticle starting from any collection of Candidates

Author:
Giovanni Petrucciani
Version:
Id
PATGenericParticleProducer.h,v 1.6.4.1 2009/04/28 14:29:39 gpetrucc Exp

Definition at line 42 of file PATGenericParticleProducer.h.


Constructor & Destructor Documentation

PATGenericParticleProducer::PATGenericParticleProducer ( const edm::ParameterSet iConfig  )  [explicit]

Definition at line 12 of file PATGenericParticleProducer.cc.

References addEfficiencies_, addGenMatch_, addQuality_, addTrigMatch_, pat::ECalIso, efficiencyLoader_, embedCaloTower_, embedCombined_, embedGenMatch_, embedGsfTrack_, embedStandalone_, embedSuperCluster_, embedTrack_, embedTracks_, edm::ParameterSet::exists(), edm::ParameterSet::existsAs(), genMatchSrc_, edm::ParameterSet::getParameter(), pat::HCalIso, isoDepositLabels_, it, getDQMSummary::key, qualitySrc_, src_, pat::TrackerIso, trigPrimSrc_, pat::UserBaseIso, useUserData_, and vertexingHelper_.

00012                                                                                       :
00013   isolator_(iConfig.exists("isolation") ? iConfig.getParameter<edm::ParameterSet>("isolation") : edm::ParameterSet(), false), 
00014   userDataHelper_ ( iConfig.getParameter<edm::ParameterSet>("userData") )
00015 {
00016   // initialize the configurables
00017   src_ = iConfig.getParameter<edm::InputTag>( "src" );
00018 
00019   // RECO embedding
00020   embedTrack_        = iConfig.getParameter<bool>( "embedTrack" );
00021   embedGsfTrack_     = iConfig.getParameter<bool>( "embedGsfTrack" );
00022   embedStandalone_   = iConfig.getParameter<bool>( "embedStandAloneMuon" );
00023   embedCombined_     = iConfig.getParameter<bool>( "embedCombinedMuon" );
00024   embedSuperCluster_ = iConfig.getParameter<bool>( "embedSuperCluster" );
00025   embedTracks_       = iConfig.getParameter<bool>( "embedMultipleTracks" );
00026   embedCaloTower_    = iConfig.getParameter<bool>( "embedCaloTower" );
00027   
00028   // MC matching configurables
00029   addGenMatch_   = iConfig.getParameter<bool>( "addGenMatch" );
00030   if (addGenMatch_) {
00031       embedGenMatch_ = iConfig.getParameter<bool>         ( "embedGenMatch" );
00032       if (iConfig.existsAs<edm::InputTag>("genParticleMatch")) {
00033           genMatchSrc_.push_back(iConfig.getParameter<edm::InputTag>( "genParticleMatch" ));
00034       } else {
00035           genMatchSrc_ = iConfig.getParameter<std::vector<edm::InputTag> >( "genParticleMatch" );
00036       }
00037   }
00038  
00039   // Trigger matching configurables
00040   addTrigMatch_  = iConfig.getParameter<bool>( "addTrigMatch" );
00041   trigPrimSrc_   = iConfig.getParameter<std::vector<edm::InputTag> >( "trigPrimMatch" );
00042 
00043   // quality
00044   addQuality_ = iConfig.getParameter<bool>("addQuality");
00045   qualitySrc_ = iConfig.getParameter<edm::InputTag>("qualitySource");
00046 
00047   // produces vector of particles
00048   produces<std::vector<GenericParticle> >();
00049 
00050   if (iConfig.exists("isoDeposits")) {
00051      edm::ParameterSet depconf = iConfig.getParameter<edm::ParameterSet>("isoDeposits");
00052      if (depconf.exists("tracker")) isoDepositLabels_.push_back(std::make_pair(TrackerIso, depconf.getParameter<edm::InputTag>("tracker")));
00053      if (depconf.exists("ecal"))    isoDepositLabels_.push_back(std::make_pair(ECalIso, depconf.getParameter<edm::InputTag>("ecal")));
00054      if (depconf.exists("hcal"))    isoDepositLabels_.push_back(std::make_pair(HCalIso, depconf.getParameter<edm::InputTag>("hcal")));
00055      if (depconf.exists("user")) {
00056         std::vector<edm::InputTag> userdeps = depconf.getParameter<std::vector<edm::InputTag> >("user");
00057         std::vector<edm::InputTag>::const_iterator it = userdeps.begin(), ed = userdeps.end();
00058         int key = UserBaseIso;
00059         for ( ; it != ed; ++it, ++key) {
00060             isoDepositLabels_.push_back(std::make_pair(IsolationKeys(key), *it));
00061         }
00062      }
00063   }
00064 
00065   // Efficiency configurables
00066   addEfficiencies_ = iConfig.getParameter<bool>("addEfficiencies");
00067   if (addEfficiencies_) {
00068      efficiencyLoader_ = pat::helper::EfficiencyLoader(iConfig.getParameter<edm::ParameterSet>("efficiencies"));
00069   }
00070 
00071   if (iConfig.exists("vertexing")) {
00072      vertexingHelper_ = pat::helper::VertexingHelper(iConfig.getParameter<edm::ParameterSet>("vertexing")); 
00073   }
00074 
00075   // Check to see if the user wants to add user data
00076   useUserData_ = false;
00077   if ( iConfig.exists("userData") ) {
00078     useUserData_ = true;
00079   }
00080 }

PATGenericParticleProducer::~PATGenericParticleProducer (  ) 

Definition at line 82 of file PATGenericParticleProducer.cc.

00082                                                         {
00083 }


Member Function Documentation

void PATGenericParticleProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
) [virtual]

Implements edm::EDProducer.

Definition at line 85 of file PATGenericParticleProducer.cc.

References pat::PATUserDataHelper< ObjectType >::add(), addGenMatch_, pat::PATObject< ObjectType >::addGenParticleRef(), addQuality_, pat::PATObject< ObjectType >::addTriggerMatch(), addTrigMatch_, pat::helper::MultiIsolator::beginEvent(), efficiencyLoader_, pat::GenericParticle::embedCaloTower(), embedCaloTower_, pat::GenericParticle::embedCombined(), embedCombined_, embedGenMatch_, pat::PATObject< ObjectType >::embedGenParticle(), pat::GenericParticle::embedGsfTrack(), embedGsfTrack_, pat::GenericParticle::embedStandalone(), embedStandalone_, pat::GenericParticle::embedSuperCluster(), embedSuperCluster_, pat::GenericParticle::embedTrack(), embedTrack_, pat::GenericParticle::embedTracks(), embedTracks_, pat::helper::MultiIsolator::enabled(), pat::helper::VertexingHelper::enabled(), pat::helper::EfficiencyLoader::enabled(), pat::helper::MultiIsolator::endEvent(), eTComparator_, pat::helper::MultiIsolator::fill(), first, genMatchSrc_, edm::Event::getByLabel(), i, edm::Ref< C, T, F >::isAvailable(), edm::Ref< C, T, F >::isNonnull(), isoDepositLabels_, isolator_, isolatorTmpStorage_, it, j, n, pat::helper::EfficiencyLoader::newEvent(), pat::helper::VertexingHelper::newEvent(), edm::Event::put(), qualitySrc_, edm::second(), pat::helper::EfficiencyLoader::setEfficiencies(), pat::GenericParticle::setIsoDeposit(), pat::GenericParticle::setIsolation(), pat::GenericParticle::setQuality(), pat::GenericParticle::setVertexAssociation(), python::multivaluedict::sort(), src_, trigPrimSrc_, userDataHelper_, useUserData_, and vertexingHelper_.

00085                                                                                         {
00086   // Get the vector of GenericParticle's from the event
00087   edm::Handle<edm::View<reco::Candidate> > cands;
00088   iEvent.getByLabel(src_, cands);
00089 
00090   // prepare isolation
00091   if (isolator_.enabled()) isolator_.beginEvent(iEvent,iSetup);
00092 
00093   if (efficiencyLoader_.enabled()) efficiencyLoader_.newEvent(iEvent);
00094   if (vertexingHelper_.enabled())  vertexingHelper_.newEvent(iEvent,iSetup);
00095 
00096   // prepare IsoDeposits
00097   std::vector<edm::Handle<edm::ValueMap<IsoDeposit> > > deposits(isoDepositLabels_.size());
00098   for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
00099     iEvent.getByLabel(isoDepositLabels_[j].second, deposits[j]);
00100   }
00101 
00102   // prepare the MC matching
00103   std::vector<edm::Handle<edm::Association<reco::GenParticleCollection> > > genMatches(genMatchSrc_.size());
00104   if (addGenMatch_) {
00105         for (size_t j = 0, nd = genMatchSrc_.size(); j < nd; ++j) {
00106             iEvent.getByLabel(genMatchSrc_[j], genMatches[j]);
00107         }
00108   }
00109 
00110   // prepare the quality
00111   edm::Handle<edm::ValueMap<float> > qualities;
00112   if (addQuality_) iEvent.getByLabel(qualitySrc_, qualities);
00113 
00114   // loop over cands
00115   std::vector<GenericParticle> * PATGenericParticles = new std::vector<GenericParticle>(); 
00116   for (edm::View<reco::Candidate>::const_iterator itGenericParticle = cands->begin(); itGenericParticle != cands->end(); itGenericParticle++) {
00117     // construct the GenericParticle from the ref -> save ref to original object
00118     unsigned int idx = itGenericParticle - cands->begin();
00119     edm::RefToBase<reco::Candidate> candRef = cands->refAt(idx);
00120 
00121     PATGenericParticles->push_back(GenericParticle(candRef));
00122     GenericParticle & aGenericParticle = PATGenericParticles->back();
00123 
00124     // embed RECO
00125     if (embedTrack_)        aGenericParticle.embedTrack();
00126     if (embedGsfTrack_)     aGenericParticle.embedGsfTrack();
00127     if (embedTracks_)       aGenericParticle.embedTracks();
00128     if (embedStandalone_)   aGenericParticle.embedStandalone();
00129     if (embedCombined_)     aGenericParticle.embedCombined();
00130     if (embedSuperCluster_) aGenericParticle.embedSuperCluster();
00131     if (embedCaloTower_)    aGenericParticle.embedCaloTower();
00132 
00133     // matches to fired trigger primitives
00134     if ( addTrigMatch_ ) {
00135       for ( size_t i = 0; i < trigPrimSrc_.size(); ++i ) {
00136         edm::Handle<edm::Association<TriggerPrimitiveCollection> > trigMatch;
00137         iEvent.getByLabel(trigPrimSrc_[i], trigMatch);
00138         TriggerPrimitiveRef trigPrim = (*trigMatch)[candRef];
00139         if ( trigPrim.isNonnull() && trigPrim.isAvailable() ) {
00140           aGenericParticle.addTriggerMatch(*trigPrim);
00141         }
00142       }
00143     }
00144 
00145     // isolation
00146     if (isolator_.enabled()) {
00147         isolator_.fill(*cands, idx, isolatorTmpStorage_);
00148         typedef pat::helper::MultiIsolator::IsolationValuePairs IsolationValuePairs;
00149         // better to loop backwards, so the vector is resized less times
00150         for (IsolationValuePairs::const_reverse_iterator it = isolatorTmpStorage_.rbegin(), ed = isolatorTmpStorage_.rend(); it != ed; ++it) {
00151             aGenericParticle.setIsolation(it->first, it->second);
00152         }
00153     }
00154 
00155     // isodeposit
00156     for (size_t j = 0, nd = deposits.size(); j < nd; ++j) {
00157         aGenericParticle.setIsoDeposit(isoDepositLabels_[j].first, (*deposits[j])[candRef]);
00158     }
00159 
00160     // store the match to the generated final state muons
00161     if (addGenMatch_) {
00162       for(size_t i = 0, n = genMatches.size(); i < n; ++i) {
00163           reco::GenParticleRef genGenericParticle = (*genMatches[i])[candRef];
00164           aGenericParticle.addGenParticleRef(genGenericParticle);
00165       }
00166       if (embedGenMatch_) aGenericParticle.embedGenParticle();
00167     }
00168 
00169     if (addQuality_) {
00170       aGenericParticle.setQuality( (*qualities)[candRef] );
00171     }
00172 
00173     if (efficiencyLoader_.enabled()) {
00174         efficiencyLoader_.setEfficiencies( aGenericParticle, candRef );
00175     }
00176 
00177     if (vertexingHelper_.enabled()) {
00178         aGenericParticle.setVertexAssociation( vertexingHelper_(candRef) );
00179     }
00180 
00181     if ( useUserData_ ) {
00182         userDataHelper_.add( aGenericParticle, iEvent, iSetup );
00183     }
00184 
00185     // PATGenericParticles->push_back(aGenericParticle); // NOOOOO!!!!
00186     // We have already pushed_back this generic particle in the collection
00187     // (we first push an empty particle and then fill it, to avoid useless copies)
00188   }
00189 
00190   // sort GenericParticles in ET
00191   std::sort(PATGenericParticles->begin(), PATGenericParticles->end(), eTComparator_);
00192 
00193   // put genEvt object in Event
00194   std::auto_ptr<std::vector<GenericParticle> > myGenericParticles(PATGenericParticles);
00195   iEvent.put(myGenericParticles);
00196   if (isolator_.enabled()) isolator_.endEvent();
00197 
00198 }


Member Data Documentation

bool pat::PATGenericParticleProducer::addEfficiencies_ [private]

Definition at line 76 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer().

bool pat::PATGenericParticleProducer::addGenMatch_ [private]

Definition at line 62 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::addQuality_ [private]

Definition at line 59 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::addTrigMatch_ [private]

Definition at line 66 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

pat::helper::EfficiencyLoader pat::PATGenericParticleProducer::efficiencyLoader_ [private]

Definition at line 77 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedCaloTower_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedCombined_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedGenMatch_ [private]

Definition at line 63 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedGsfTrack_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedStandalone_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedSuperCluster_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedTrack_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

bool pat::PATGenericParticleProducer::embedTracks_ [private]

Definition at line 57 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

GreaterByEt<GenericParticle> pat::PATGenericParticleProducer::eTComparator_ [private]

Definition at line 70 of file PATGenericParticleProducer.h.

Referenced by produce().

std::vector<edm::InputTag> pat::PATGenericParticleProducer::genMatchSrc_ [private]

Definition at line 64 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

std::vector<std::pair<pat::IsolationKeys,edm::InputTag> > pat::PATGenericParticleProducer::isoDepositLabels_ [private]

Definition at line 74 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

pat::helper::MultiIsolator pat::PATGenericParticleProducer::isolator_ [private]

Definition at line 72 of file PATGenericParticleProducer.h.

Referenced by produce().

pat::helper::MultiIsolator::IsolationValuePairs pat::PATGenericParticleProducer::isolatorTmpStorage_ [private]

Definition at line 73 of file PATGenericParticleProducer.h.

Referenced by produce().

edm::InputTag pat::PATGenericParticleProducer::qualitySrc_ [private]

Definition at line 60 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

edm::InputTag pat::PATGenericParticleProducer::src_ [private]

Definition at line 54 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

std::vector<edm::InputTag> pat::PATGenericParticleProducer::trigPrimSrc_ [private]

Definition at line 67 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

pat::PATUserDataHelper<pat::GenericParticle> pat::PATGenericParticleProducer::userDataHelper_ [private]

Definition at line 82 of file PATGenericParticleProducer.h.

Referenced by produce().

bool pat::PATGenericParticleProducer::useUserData_ [private]

Definition at line 81 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().

pat::helper::VertexingHelper pat::PATGenericParticleProducer::vertexingHelper_ [private]

Definition at line 79 of file PATGenericParticleProducer.h.

Referenced by PATGenericParticleProducer(), and produce().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:49:43 2009 for CMSSW by  doxygen 1.5.4