CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
TagProbeFitTreeAnalyzer Class Reference
Inheritance diagram for TagProbeFitTreeAnalyzer:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &eventSetup) override
 
void calculateEfficiency (string name, const edm::ParameterSet &pset)
 
void endRun (const edm::Run &run, const edm::EventSetup &setup) override
 
 TagProbeFitTreeAnalyzer (const edm::ParameterSet &pset)
 
 ~TagProbeFitTreeAnalyzer () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

TagProbeFitter fitter
 
unsigned int split_mode
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 14 of file TagProbeFitTreeAnalyzer.cc.

Constructor & Destructor Documentation

TagProbeFitTreeAnalyzer::TagProbeFitTreeAnalyzer ( const edm::ParameterSet pset)

Definition at line 26 of file TagProbeFitTreeAnalyzer.cc.

References TagProbeFitter::addCategory(), TagProbeFitter::addExpression(), TagProbeFitter::addPdf(), TagProbeFitter::addThresholdCategory(), TagProbeFitter::addVariable(), writedatasetfile::args, calculateEfficiency(), eostools::cat(), myMessageLogger_cff::categories, egammaForCoreTracking_cff::cuts, electronProducer_cfi::efficiencies, cppFunctionSkipper::exception, Exception, edm::ParameterSet::existsAs(), jets_cff::expr, cmsPerfPublish::fail(), fitter, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), edm::ParameterSet::getUntrackedParameter(), dataset::name, TagProbeFitter::setBinnedFit(), TagProbeFitter::setBinsForMassPlots(), TagProbeFitter::setQuiet(), TagProbeFitter::setSaveDistributionsPlot(), TagProbeFitter::setSplitMode(), TagProbeFitter::setWeightVar(), split_mode, AlCaHLTBitMon_QueryRunRegistry::string, JetChargeProducer_cfi::var, and objects.autophobj::variables.

26  :
27  fitter( pset.getParameter<vector<string> >("InputFileNames"),
28  pset.getParameter<string>("InputDirectoryName"),
29  pset.getParameter<string>("InputTreeName"),
30  pset.getParameter<string>("OutputFileName"),
31  pset.existsAs<unsigned int>("NumCPU")?pset.getParameter<unsigned int>("NumCPU"):1,
32  pset.existsAs<bool>("SaveWorkspace")?pset.getParameter<bool>("SaveWorkspace"):false,
33  pset.existsAs<bool>("floatShapeParameters")?pset.getParameter<bool>("floatShapeParameters"):true,
34  pset.existsAs<vector<string> >("fixVars")?pset.getParameter<vector<string> >("fixVars"):vector<string>()
35  ),
36  split_mode( pset.existsAs<unsigned int>("SplitMode")?pset.getParameter<unsigned int>("SplitMode"):0 )
37 {
38  fitter.setQuiet(pset.getUntrackedParameter("Quiet",false));
40 
41  if (pset.existsAs<bool>("binnedFit")) {
42  bool binned = pset.getParameter<bool>("binnedFit");
43  fitter.setBinnedFit(binned, binned ? pset.getParameter<uint32_t>("binsForFit") : 0);
44  } else if (pset.existsAs<uint32_t>("binsForMassPlots")) {
45  fitter.setBinsForMassPlots(pset.getParameter<uint32_t>("binsForMassPlots"));
46  }
47 
48  if (pset.existsAs<bool>("saveDistributionsPlot")) {
49  fitter.setSaveDistributionsPlot(pset.getParameter<bool>("saveDistributionsPlot"));
50  }
51  if (pset.existsAs<std::string>("WeightVariable")) {
52  fitter.setWeightVar(pset.getParameter<std::string>("WeightVariable"));
53  }
54  const ParameterSet variables = pset.getParameter<ParameterSet>("Variables");
55  vector<string> variableNames = variables.getParameterNamesForType<vector<string> >();
56  for (vector<string>::const_iterator name = variableNames.begin(); name != variableNames.end(); name++) {
57  vector<string> var = variables.getParameter<vector<string> >(*name);
58  double lo, hi;
59  if(var.size()>=4 && !(istringstream(var[1])>>lo).fail() && !(istringstream(var[2])>>hi).fail()){
60  fitter.addVariable(*name, var[0], lo, hi, var[3]);
61  }else{
62  LogError("TagProbeFitTreeAnalyzer")<<"Could not create variable: "<<*name<<
63  ". Example: pt = cms.vstring(\"Probe pT\", \"1.0\", \"100.0\", \"GeV/c\") ";
64  }
65  }
66 
67  const ParameterSet categories = pset.getParameter<ParameterSet>("Categories");
68  vector<string> categoryNames = categories.getParameterNamesForType<vector<string> >();
69  for (vector<string>::const_iterator name = categoryNames.begin(); name != categoryNames.end(); name++) {
70  vector<string> cat = categories.getParameter<vector<string> >(*name);
71  if(cat.size()==2){
72  fitter.addCategory(*name, cat[0], cat[1]);
73  }else{
74  LogError("TagProbeFitTreeAnalyzer")<<"Could not create category: "<<*name<<
75  ". Example: mcTrue = cms.vstring(\"MC True\", \"dummy[true=1,false=0]\") ";
76  }
77  }
78 
79  if (pset.existsAs<ParameterSet>("Expressions")) {
80  const ParameterSet exprs = pset.getParameter<ParameterSet>("Expressions");
81  vector<string> exprNames = exprs.getParameterNamesForType<vector<string> >();
82  for (vector<string>::const_iterator name = exprNames.begin(); name != exprNames.end(); name++) {
83  vector<string> expr = exprs.getParameter<vector<string> >(*name);
84  if(expr.size()>=2){
85  vector<string> args(expr.begin()+2,expr.end());
86  fitter.addExpression(*name, expr[0], expr[1], args);
87  }else{
88  LogError("TagProbeFitTreeAnalyzer")<<"Could not create expr: "<<*name<<
89  ". Example: qop = cms.vstring(\"qOverP\", \"charge/p\", \"charge\", \"p\") ";
90  }
91  }
92  }
93 
94 
95  if (pset.existsAs<ParameterSet>("Cuts")) {
96  const ParameterSet cuts = pset.getParameter<ParameterSet>("Cuts");
97  vector<string> cutNames = cuts.getParameterNamesForType<vector<string> >();
98  for (vector<string>::const_iterator name = cutNames.begin(); name != cutNames.end(); name++) {
99  vector<string> cat = cuts.getParameter<vector<string> >(*name);
100  if(cat.size()==3){
101  fitter.addThresholdCategory(*name, cat[0], cat[1], atof(cat[2].c_str()));
102  }else{
103  LogError("TagProbeFitTreeAnalyzer")<<"Could not create cut: "<<*name<<
104  ". Example: matched = cms.vstring(\"Matched\", \"deltaR\", \"0.5\") ";
105  }
106  }
107  }
108 
109  if(pset.existsAs<ParameterSet>("PDFs")){
110  const ParameterSet pdfs = pset.getParameter<ParameterSet>("PDFs");
111  vector<string> pdfNames = pdfs.getParameterNamesForType<vector<string> >();
112  for (vector<string>::const_iterator name = pdfNames.begin(); name != pdfNames.end(); name++) {
113  vector<string> pdf = pdfs.getParameter<vector<string> >(*name);
114  fitter.addPdf(*name, pdf);
115  }
116  }
117 
118  const ParameterSet efficiencies = pset.getParameter<ParameterSet>("Efficiencies");
119  vector<string> efficiencyNames = efficiencies.getParameterNamesForType<ParameterSet>();
120  for (vector<string>::const_iterator name = efficiencyNames.begin(); name != efficiencyNames.end(); name++) {
121  try {
122  calculateEfficiency(*name, efficiencies.getParameter<ParameterSet>(*name));
123  } catch (std::exception &ex) {
124  throw cms::Exception("Error", ex.what());
125  }
126  }
127 }
void setSaveDistributionsPlot(bool saveDistributionsPlot_)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:161
void addPdf(std::string pdfName, std::vector< std::string > &pdfCommands)
void setWeightVar(const std::string &weight)
set a variable to be used as weight for a dataset. empty string means no weights. ...
void calculateEfficiency(string name, const edm::ParameterSet &pset)
bool addThresholdCategory(std::string categoryName, std::string title, std::string varName, double cutValue)
adds a new category based on a cut
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:169
void setQuiet(bool quiet_=true)
suppress most of the output from RooFit and Minuit
def cat(path)
Definition: eostools.py:401
bool addExpression(std::string expressionName, std::string title, std::string expression, const std::vector< std::string > &arguments)
adds a new category based on a cut
void setBinnedFit(bool binned, int bins=0)
set if to do a binned fit
void setSplitMode(unsigned int nevents)
void setBinsForMassPlots(int bins)
set number of bins to use when making the plots; 0 = automatic
def fail(errstr="")
bool addCategory(std::string categoryName, std::string title, std::string expression)
adds a new category variable to the set of variables describing the data in the tree; "expression" is...
bool addVariable(std::string variableName, std::string title, double low, double hi, std::string units)
adds a new real variable to the set of variables describing the data in the tree
TagProbeFitTreeAnalyzer::~TagProbeFitTreeAnalyzer ( )
inlineoverride

Definition at line 17 of file TagProbeFitTreeAnalyzer.cc.

17 {};

Member Function Documentation

void TagProbeFitTreeAnalyzer::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
)
inlineoverride

Definition at line 18 of file TagProbeFitTreeAnalyzer.cc.

18 {};
void TagProbeFitTreeAnalyzer::calculateEfficiency ( string  name,
const edm::ParameterSet pset 
)

Definition at line 129 of file TagProbeFitTreeAnalyzer.cc.

References RecoTauDiscriminantConfiguration::binning, TagProbeFitter::calculateEfficiency(), gather_cfg::cout, DEFINE_FWK_MODULE, edm::ParameterSet::existsAs(), cmsRelvalreport::exit, fitter, edm::ParameterSet::getParameter(), edm::ParameterSet::getParameterNamesForType(), mps_fire::i, genParticles_cff::map, gen::n, and JetChargeProducer_cfi::var.

Referenced by TagProbeFitTreeAnalyzer().

129  {
130  vector<string> effCatState = pset.getParameter<vector<string> >("EfficiencyCategoryAndState");
131  if(effCatState.empty() || (effCatState.size() % 2 == 1)){
132  cout<<"EfficiencyCategoryAndState must be a even-sized list of category names and states of that category (cat1, state1, cat2, state2, ...)."<<endl;
133  exit(1);
134  }
135 
136  vector<string> unbinnedVariables;
137  if(pset.existsAs<vector<string> >("UnbinnedVariables")){
138  unbinnedVariables = pset.getParameter<vector<string> >("UnbinnedVariables");
139  }
140 
141  const ParameterSet binVars = pset.getParameter<ParameterSet>("BinnedVariables");
142  map<string, vector<double> >binnedVariables;
143  vector<string> variableNames = binVars.getParameterNamesForType<vector<double> >();
144  for (vector<string>::const_iterator var = variableNames.begin(); var != variableNames.end(); var++) {
145  vector<double> binning = binVars.getParameter<vector<double> >(*var);
146  binnedVariables[*var] = binning;
147  }
148  map<string, vector<string> >mappedCategories;
149  vector<string> categoryNames = binVars.getParameterNamesForType<vector<string> >();
150  for (vector<string>::const_iterator var = categoryNames.begin(); var != categoryNames.end(); var++) {
151  vector<string> map = binVars.getParameter<vector<string> >(*var);
152  mappedCategories[*var] = map;
153  }
154 
155  vector<string> binToPDFmap;
156  if(pset.existsAs<vector<string> >("BinToPDFmap")){
157  binToPDFmap = pset.getParameter<vector<string> >("BinToPDFmap");
158  }
159  if((!binToPDFmap.empty()) && (binToPDFmap.size()%2 == 0)){
160  cout<<"BinToPDFmap must have odd size, first string is the default, followed by binRegExp - PDFname pairs!"<<endl;
161  exit(2);
162  }
163 
164  vector<string> effCats, effStates;
165  for (size_t i = 0, n = effCatState.size()/2; i < n; ++i) {
166  effCats.push_back(effCatState[2*i]);
167  effStates.push_back(effCatState[2*i+1]);
168  }
169 
170  fitter.calculateEfficiency(name, effCats, effStates, unbinnedVariables, binnedVariables, mappedCategories, binToPDFmap);
171 }
T getParameter(std::string const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:161
std::string calculateEfficiency(std::string dirName, std::string efficiencyCategory, std::string efficiencyState, std::vector< std::string > &unbinnedVariables, std::map< std::string, std::vector< double > > &binnedReals, std::map< std::string, std::vector< std::string > > &binnedCategories, std::vector< std::string > &binToPDFmap)
calculate the efficiency for a particular binning of the data; it saves everything in the directory "...
std::vector< std::string > getParameterNamesForType(bool trackiness=true) const
Definition: ParameterSet.h:169
void TagProbeFitTreeAnalyzer::endRun ( const edm::Run run,
const edm::EventSetup setup 
)
inlineoverride

Definition at line 19 of file TagProbeFitTreeAnalyzer.cc.

References dataset::name.

19 {};

Member Data Documentation

TagProbeFitter TagProbeFitTreeAnalyzer::fitter
private

Definition at line 22 of file TagProbeFitTreeAnalyzer.cc.

Referenced by calculateEfficiency(), and TagProbeFitTreeAnalyzer().

unsigned int TagProbeFitTreeAnalyzer::split_mode
private

Definition at line 23 of file TagProbeFitTreeAnalyzer.cc.

Referenced by TagProbeFitTreeAnalyzer().