CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Attributes
TauDiscriminationProducerBase< TauType, TauDiscriminator > Class Template Referenceabstract

#include <TauDiscriminationProducerBase.h>

Inheritance diagram for TauDiscriminationProducerBase< TauType, TauDiscriminator >:
edm::stream::EDProducer<> PATTauDiscriminantCutMultiplexer PATTauDiscriminationAgainstElectronMVA6 PFRecoTauDiscriminationAgainstElectron2 PFRecoTauDiscriminationAgainstElectronDeadECAL PFRecoTauDiscriminationAgainstElectronMVA6 PFRecoTauDiscriminationAgainstMuon PFRecoTauDiscriminationAgainstMuon2 PFRecoTauDiscriminationAgainstMuonMVA PFRecoTauDiscriminationAgainstMuonSimple PFRecoTauDiscriminationByHPSSelection PFRecoTauDiscriminationByIsolation PFRecoTauDiscriminationByIsolationMVA2 PFRecoTauDiscriminationByLeadingObjectPtCut PFRecoTauDiscriminationByNProngs PFTauDecayModeCutMultiplexer PFTauDiscriminatorLogicalAndProducer reco::tau::PATTauDiscriminationByMVAIsolationRun2 reco::tau::PFRecoTauDiscriminationByMVAIsolationRun2 RecoTauDiscriminantCutMultiplexer

Classes

struct  TauDiscInfo
 

Public Types

typedef std::vector< TauType > TauCollection
 
typedef edm::Ref< TauCollectionTauRef
 
typedef edm::RefProd< TauCollectionTauRefProd
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

virtual void beginEvent (const edm::Event &, const edm::EventSetup &)
 
virtual double discriminate (const TauRef &tau) const =0
 
virtual void endEvent (edm::Event &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 TauDiscriminationProducerBase (const edm::ParameterSet &iConfig)
 
 TauDiscriminationProducerBase ()
 
 ~TauDiscriminationProducerBase () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 

Static Public Member Functions

static void fillProducerDescriptions (edm::ParameterSetDescription &desc)
 

Protected Attributes

std::string moduleLabel_
 
double prediscriminantFailValue_
 
edm::EDGetTokenT< TauCollectionTau_token
 
size_t tauIndex_
 
edm::InputTag TauProducer_
 

Private Attributes

uint8_t andPrediscriminants_
 
std::vector< TauDiscInfoprediscriminants_
 

Detailed Description

template<class TauType, class TauDiscriminator>
class TauDiscriminationProducerBase< TauType, TauDiscriminator >

Definition at line 51 of file TauDiscriminationProducerBase.h.

Member Typedef Documentation

template<class TauType , class TauDiscriminator >
typedef std::vector<TauType> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauCollection

Definition at line 54 of file TauDiscriminationProducerBase.h.

template<class TauType , class TauDiscriminator >
typedef edm::Ref<TauCollection> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauRef

Definition at line 55 of file TauDiscriminationProducerBase.h.

template<class TauType , class TauDiscriminator >
typedef edm::RefProd<TauCollection> TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauRefProd

Definition at line 56 of file TauDiscriminationProducerBase.h.

Constructor & Destructor Documentation

template<class TauType , class TauDiscriminator >
TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscriminationProducerBase ( const edm::ParameterSet iConfig)
explicit

Definition at line 16 of file TauDiscriminationProducerBase.cc.

References TauDiscriminationProducerBase< TauType, TauDiscriminator >::andPrediscriminants_, TkAlMuonSelectors_cfi::cut, Exception, edm::ParameterSet::getParameter(), label, TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscInfo::label, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminantFailValue_, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminants_, AlCaHLTBitMon_QueryRunRegistry::string, TauDiscriminationProducerBase< TauType, TauDiscriminator >::Tau_token, TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauProducer_, and HcalDetIdTransform::transform().

17  : moduleLabel_(iConfig.getParameter<std::string>("@module_label")) {
18  // tau collection to discriminate
19  TauProducer_ = iConfig.getParameter<edm::InputTag>(getProducerString<TauType>());
20  Tau_token = consumes<TauCollection>(TauProducer_);
21 
22  // prediscriminant operator
23  // require the tau to pass the following prediscriminants
24  const edm::ParameterSet& prediscriminantConfig = iConfig.getParameter<edm::ParameterSet>("Prediscriminants");
25 
26  // determine boolean operator used on the prediscriminants
27  std::string pdBoolOperator = prediscriminantConfig.getParameter<std::string>("BooleanOperator");
28  // convert string to lowercase
29  transform(pdBoolOperator.begin(), pdBoolOperator.end(), pdBoolOperator.begin(), ::tolower);
30 
31  if (pdBoolOperator == "and") {
32  andPrediscriminants_ = 0x1; //use chars instead of bools so we can do a bitwise trick later
33  } else if (pdBoolOperator == "or") {
35  } else {
36  throw cms::Exception("TauDiscriminationProducerBase")
37  << "PrediscriminantBooleanOperator defined incorrectly, options are: AND,OR";
38  }
39 
40  // get the list of prediscriminants
41  std::vector<std::string> prediscriminantsNames = prediscriminantConfig.getParameterNamesForType<edm::ParameterSet>();
42 
43  for (std::vector<std::string>::const_iterator iDisc = prediscriminantsNames.begin();
44  iDisc != prediscriminantsNames.end();
45  ++iDisc) {
46  const edm::ParameterSet& iPredisc = prediscriminantConfig.getParameter<edm::ParameterSet>(*iDisc);
47  const edm::InputTag& label = iPredisc.getParameter<edm::InputTag>("Producer");
48  double cut = iPredisc.getParameter<double>("cut");
49 
50  TauDiscInfo thisDiscriminator;
51  thisDiscriminator.label = label;
52  thisDiscriminator.cut = cut;
53  thisDiscriminator.disc_token = consumes<TauDiscriminator>(label);
54  prediscriminants_.push_back(thisDiscriminator);
55  }
56 
58 
59  // register product
60  produces<TauDiscriminator>();
61 }
T getParameter(std::string const &) const
std::vector< TauDiscInfo > prediscriminants_
char const * label
edm::EDGetTokenT< TauCollection > Tau_token
unsigned transform(const HcalDetId &id, unsigned transformCode)
template<class TauType , class TauDiscriminator >
TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscriminationProducerBase ( )

Definition at line 9 of file TauDiscriminationProducerBase.cc.

References Exception.

9  {
10  throw cms::Exception("TauDiscriminationProducerBase") << " -- default ctor called; derived classes must call "
11  << "TauDiscriminationProducerBase(const ParameterSet&)";
12 }
template<class TauType , class TauDiscriminator >
TauDiscriminationProducerBase< TauType, TauDiscriminator >::~TauDiscriminationProducerBase ( )
inlineoverride

Member Function Documentation

template<class TauType , class TauDiscriminator >
virtual void TauDiscriminationProducerBase< TauType, TauDiscriminator >::beginEvent ( const edm::Event ,
const edm::EventSetup  
)
inlinevirtual
template<class TauType , class TauDiscriminator >
virtual double TauDiscriminationProducerBase< TauType, TauDiscriminator >::discriminate ( const TauRef tau) const
pure virtual
template<class TauType , class TauDiscriminator >
virtual void TauDiscriminationProducerBase< TauType, TauDiscriminator >::endEvent ( edm::Event )
inlinevirtual
template<class TauType , class TauDiscriminator >
void TauDiscriminationProducerBase< TauType, TauDiscriminator >::fillProducerDescriptions ( edm::ParameterSetDescription desc)
static

Definition at line 148 of file TauDiscriminationProducerBase.cc.

References edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addOptional(), HLT_2018_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauDiscInfo::fill(), RecoTauDiscriminantCutMultiplexer::fillDescriptions(), PATTauDiscriminantCutMultiplexer::fillDescriptions(), PFTauDecayModeCutMultiplexer::fillDescriptions(), and reco::tau::PFRecoTauDiscriminationByMVAIsolationRun2::fillDescriptions().

149  {
150  // helper function, it fills the description of the Producers parameter
151  desc.add<edm::InputTag>(getProducerString<TauType>(), edm::InputTag("fixme"));
152  {
153  edm::ParameterSetDescription pset_prediscriminants;
154  pset_prediscriminants.add<std::string>("BooleanOperator", "AND");
155  // optional producers // will it pass if I don't specify them?
156 
157  {
158  edm::ParameterSetDescription producer_params;
159  producer_params.add<double>("cut", 0.);
160  producer_params.add<edm::InputTag>("Producer", edm::InputTag("fixme"));
161 
162  pset_prediscriminants.addOptional<edm::ParameterSetDescription>("leadTrack", producer_params);
163  pset_prediscriminants.addOptional<edm::ParameterSetDescription>("decayMode", producer_params);
164  }
165 
166  desc.add<edm::ParameterSetDescription>("Prediscriminants", pset_prediscriminants);
167  }
168 }
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
template<class TauType , class TauDiscriminator >
void TauDiscriminationProducerBase< TauType, TauDiscriminator >::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
override

Definition at line 64 of file TauDiscriminationProducerBase.cc.

References TauDiscriminationProducerBase< TauType, TauDiscriminator >::andPrediscriminants_, TauDiscriminationProducerBase< TauType, TauDiscriminator >::beginEvent(), TauDiscriminationProducerBase< TauType, TauDiscriminator >::discriminate(), TauDiscriminationProducerBase< TauType, TauDiscriminator >::endEvent(), Exception, edm::HandleBase::id(), eostools::move(), convertSQLitetoXML_cfg::output, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminantFailValue_, TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminants_, mps_fire::result, TauDiscriminationProducerBase< TauType, TauDiscriminator >::Tau_token, TauDiscriminationProducerBase< TauType, TauDiscriminator >::tauIndex_, TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauProducer_, and Tau3MuMonitor_cff::taus.

Referenced by TauDiscriminationProducerBase< TauType, TauDiscriminator >::~TauDiscriminationProducerBase().

65  {
66  tauIndex_ = 0;
67  // setup function - does nothing in base, but can be overridden to retrieve PV or other stuff
68  beginEvent(event, eventSetup);
69 
70  // retrieve the tau collection to discriminate
72  event.getByToken(Tau_token, taus);
73 
74  edm::ProductID tauProductID = taus.id();
75 
76  // output product
77  auto output = std::make_unique<TauDiscriminator>(TauRefProd(taus));
78 
79  size_t nTaus = taus->size();
80 
81  // load prediscriminators
82  size_t nPrediscriminants = prediscriminants_.size();
83  for (size_t iDisc = 0; iDisc < nPrediscriminants; ++iDisc) {
84  prediscriminants_[iDisc].fill(event);
85 
86  // Check to make sure the product is correct for the discriminator.
87  // If not, throw a more informative exception.
88  edm::ProductID discKeyId = prediscriminants_[iDisc].handle->keyProduct().id();
89  if (tauProductID != discKeyId) {
90  throw cms::Exception("MisconfiguredPrediscriminant")
91  << "The tau collection with input tag " << TauProducer_ << " has product ID: " << tauProductID
92  << " but the pre-discriminator with input tag " << prediscriminants_[iDisc].label
93  << " is keyed with product ID: " << discKeyId << std::endl;
94  }
95  }
96 
97  // loop over taus
98  for (size_t iTau = 0; iTau < nTaus; ++iTau) {
99  // get reference to tau
100  TauRef tauRef(taus, iTau);
101 
102  bool passesPrediscriminants = (andPrediscriminants_ ? 1 : 0);
103  // check tau passes prediscriminants
104  for (size_t iDisc = 0; iDisc < nPrediscriminants; ++iDisc) {
105  // current discriminant result for this tau
106  double discResult = (*prediscriminants_[iDisc].handle)[tauRef];
107  uint8_t thisPasses = (discResult > prediscriminants_[iDisc].cut) ? 1 : 0;
108 
109  // if we are using the AND option, as soon as one fails,
110  // the result is FAIL and we can quit looping.
111  // if we are using the OR option as soon as one passes,
112  // the result is pass and we can quit looping
113 
114  // truth table
115  // | result (thisPasses)
116  // | F | T
117  //-----------------------------------
118  // AND(T) | res=fails | continue
119  // | break |
120  //-----------------------------------
121  // OR (F) | continue | res=passes
122  // | | break
123 
124  if (thisPasses ^ andPrediscriminants_) //XOR
125  {
126  passesPrediscriminants = (andPrediscriminants_ ? 0 : 1); //NOR
127  break;
128  }
129  }
130 
132  if (passesPrediscriminants) {
133  // this tau passes the prereqs, call our implemented discrimination function
134  result = discriminate(tauRef);
135  ++tauIndex_;
136  }
137 
138  // store the result of this tau into our new discriminator
139  output->setValue(iTau, result);
140  }
141  event.put(std::move(output));
142 
143  // function to put additional information into the event - does nothing in base, but can be overridden in derived classes
144  endEvent(event);
145 }
edm::RefProd< TauCollection > TauRefProd
ProductID id() const
Definition: HandleBase.cc:13
std::vector< TauDiscInfo > prediscriminants_
virtual void beginEvent(const edm::Event &, const edm::EventSetup &)
edm::EDGetTokenT< TauCollection > Tau_token
virtual double discriminate(const TauRef &tau) const =0
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

template<class TauType , class TauDiscriminator >
uint8_t TauDiscriminationProducerBase< TauType, TauDiscriminator >::andPrediscriminants_
private
template<class TauType , class TauDiscriminator >
std::string TauDiscriminationProducerBase< TauType, TauDiscriminator >::moduleLabel_
protected
template<class TauType , class TauDiscriminator >
double TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminantFailValue_
protected
template<class TauType , class TauDiscriminator >
std::vector<TauDiscInfo> TauDiscriminationProducerBase< TauType, TauDiscriminator >::prediscriminants_
private
template<class TauType , class TauDiscriminator >
edm::EDGetTokenT<TauCollection> TauDiscriminationProducerBase< TauType, TauDiscriminator >::Tau_token
protected
template<class TauType , class TauDiscriminator >
size_t TauDiscriminationProducerBase< TauType, TauDiscriminator >::tauIndex_
protected
template<class TauType , class TauDiscriminator >
edm::InputTag TauDiscriminationProducerBase< TauType, TauDiscriminator >::TauProducer_
protected