CMS 3D CMS Logo

Public Member Functions | Private Types | Private Attributes

reco::tau::RecoTauDiscriminantFromDiscriminator Class Reference

Inheritance diagram for reco::tau::RecoTauDiscriminantFromDiscriminator:
reco::tau::RecoTauDiscriminantPlugin reco::tau::RecoTauEventHolderPlugin reco::tau::RecoTauNamedPlugin

List of all members.

Public Member Functions

void beginEvent ()
std::vector< double > operator() (const reco::PFTauRef &tau) const
 RecoTauDiscriminantFromDiscriminator (const edm::ParameterSet &pset)

Private Types

typedef std::pair
< edm::InputTag, edm::Handle
< reco::PFTauDiscriminator > > 
DiscInfo

Private Attributes

std::vector< DiscInfodiscriminators_

Detailed Description

Definition at line 19 of file RecoTauDiscriminantFromDiscriminator.cc.


Member Typedef Documentation

Definition at line 26 of file RecoTauDiscriminantFromDiscriminator.cc.


Constructor & Destructor Documentation

reco::tau::RecoTauDiscriminantFromDiscriminator::RecoTauDiscriminantFromDiscriminator ( const edm::ParameterSet pset) [explicit]

Definition at line 30 of file RecoTauDiscriminantFromDiscriminator.cc.

References discriminators_, edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), and GlobalPosition_Frontier_DevDB_cff::tag.

                                :RecoTauDiscriminantPlugin(pset) {
  if (pset.existsAs<edm::InputTag>("discSrc")) {
    discriminators_.push_back(std::make_pair(
          pset.getParameter<edm::InputTag>("discSrc"),
          edm::Handle<reco::PFTauDiscriminator>()));
  } else {
    // Get multiple discriminators.  This supports the case when the MVAHelper
    // class might be dealing with multiple tau collections (training)
    std::vector<edm::InputTag> discriminators =
      pset.getParameter<std::vector<edm::InputTag> >("discSrc");
    BOOST_FOREACH(const edm::InputTag& tag, discriminators) {
      discriminators_.push_back(std::make_pair(
            tag, edm::Handle<reco::PFTauDiscriminator>()));
    }
  }
}

Member Function Documentation

void reco::tau::RecoTauDiscriminantFromDiscriminator::beginEvent ( ) [virtual]

Reimplemented from reco::tau::RecoTauDiscriminantPlugin.

Definition at line 49 of file RecoTauDiscriminantFromDiscriminator.cc.

References discriminators_, reco::tau::RecoTauEventHolderPlugin::evt(), and edm::Event::getByLabel().

                                                      {
  BOOST_FOREACH(DiscInfo& discInfo, discriminators_) {
    evt()->getByLabel(discInfo.first, discInfo.second);
  }
}
std::vector< double > reco::tau::RecoTauDiscriminantFromDiscriminator::operator() ( const reco::PFTauRef tau) const [virtual]

Implements reco::tau::RecoTauDiscriminantPlugin.

Definition at line 55 of file RecoTauDiscriminantFromDiscriminator.cc.

References discriminators_, error, i, edm::Ref< C, T, F >::id(), edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::keyProduct(), edm::second(), and metsig::tau.

                                   {
  edm::ProductID tauProdId = tau.id();
  for (size_t i = 0; i < discriminators_.size(); ++i) {
    // Check if the discriminator actually exists
    if (!discriminators_[i].second.isValid())
      continue;
    const reco::PFTauDiscriminator& disc = *(discriminators_[i].second);
    if (tauProdId == disc.keyProduct().id())
      return std::vector<double>(1, (disc)[tau]);
  }
  // Can only reach this point if not appropriate discriminator is defined for
  // the passed tau.
  std::stringstream error;
  error << "Couldn't find a PFTauDiscriminator usable with given tau."
    << std::endl << " Input tau has product id: " << tau.id() << std::endl;
  for (size_t i = 0; i < discriminators_.size(); ++i ) {
    error << "disc: " << discriminators_[i].first;
    error << " isValid: " << discriminators_[i].second.isValid();
    if (discriminators_[i].second.isValid()) {
      error << " product: " << discriminators_[i].second->keyProduct().id();
    }
    error << std::endl;
  }
  edm::LogError("BadDiscriminatorConfiguration") << error.str();
  return std::vector<double>(1,-999);
}

Member Data Documentation