-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #39 from cms-hh-pd/btag_syst
Add btag sf systematic variations, fix eta range (sf=1 if eta>2.4)
- Loading branch information
Showing
3 changed files
with
775 additions
and
587 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,151 +1,189 @@ | ||
#ifndef BTagEntry_H | ||
#define BTagEntry_H | ||
|
||
/** | ||
* | ||
* BTagEntry | ||
* | ||
* Represents one pt- or discriminator-dependent calibration function. | ||
* | ||
* measurement_type: e.g. comb, ttbar, di-mu, boosted, ... | ||
* sys_type: e.g. central, plus, minus, plus_JEC, plus_JER, ... | ||
* | ||
* Everything is converted into a function, as it is easiest to store it in a | ||
* txt or json file. | ||
* | ||
************************************************************/ | ||
* | ||
* BTagEntry | ||
* | ||
* Represents one pt- or discriminator-dependent calibration function. | ||
* | ||
* measurement_type: e.g. comb, ttbar, di-mu, boosted, ... | ||
* sys_type: e.g. central, plus, minus, plus_JEC, plus_JER, ... | ||
* | ||
* Everything is converted into a function, as it is easiest to store it in a | ||
* txt or json file. | ||
* | ||
************************************************************/ | ||
|
||
#include <string> | ||
#include <TF1.h> | ||
#include <TH1.h> | ||
|
||
|
||
class BTagEntry | ||
{ | ||
public: | ||
enum OperatingPoint { | ||
OP_LOOSE=0, | ||
OP_MEDIUM=1, | ||
OP_TIGHT=2, | ||
OP_RESHAPING=3, | ||
}; | ||
enum JetFlavor { | ||
FLAV_B=0, | ||
FLAV_C=1, | ||
FLAV_UDSG=2, | ||
}; | ||
struct Parameters { | ||
OperatingPoint operatingPoint; | ||
std::string measurementType; | ||
std::string sysType; | ||
JetFlavor jetFlavor; | ||
float etaMin; | ||
float etaMax; | ||
float ptMin; | ||
float ptMax; | ||
float discrMin; | ||
float discrMax; | ||
// default constructor | ||
Parameters( | ||
OperatingPoint op=OP_TIGHT, | ||
std::string measurement_type="comb", | ||
std::string sys_type="central", | ||
JetFlavor jf=FLAV_B, | ||
float eta_min=-99999., | ||
float eta_max=99999., | ||
float pt_min=0., | ||
float pt_max=99999., | ||
float discr_min=0., | ||
float discr_max=99999. | ||
); | ||
}; | ||
BTagEntry() {} | ||
BTagEntry(const std::string &csvLine); | ||
BTagEntry(const std::string &func, Parameters p); | ||
BTagEntry(const TF1* func, Parameters p); | ||
BTagEntry(const TH1* histo, Parameters p); | ||
~BTagEntry() {} | ||
static std::string makeCSVHeader(); | ||
std::string makeCSVLine() const; | ||
static std::string trimStr(std::string str); | ||
// public, no getters needed | ||
std::string formula; | ||
Parameters params; | ||
enum OperatingPoint { | ||
OP_LOOSE=0, | ||
OP_MEDIUM=1, | ||
OP_TIGHT=2, | ||
OP_RESHAPING=3, | ||
}; | ||
enum JetFlavor { | ||
FLAV_B=0, | ||
FLAV_C=1, | ||
FLAV_UDSG=2, | ||
}; | ||
struct Parameters { | ||
OperatingPoint operatingPoint; | ||
std::string measurementType; | ||
std::string sysType; | ||
JetFlavor jetFlavor; | ||
float etaMin; | ||
float etaMax; | ||
float ptMin; | ||
float ptMax; | ||
float discrMin; | ||
float discrMax; | ||
|
||
// default constructor | ||
Parameters( | ||
OperatingPoint op=OP_TIGHT, | ||
std::string measurement_type="comb", | ||
std::string sys_type="central", | ||
JetFlavor jf=FLAV_B, | ||
float eta_min=-99999., | ||
float eta_max=99999., | ||
float pt_min=0., | ||
float pt_max=99999., | ||
float discr_min=0., | ||
float discr_max=99999. | ||
); | ||
|
||
}; | ||
|
||
BTagEntry() {} | ||
BTagEntry(const std::string &csvLine); | ||
BTagEntry(const std::string &func, Parameters p); | ||
BTagEntry(const TF1* func, Parameters p); | ||
BTagEntry(const TH1* histo, Parameters p); | ||
~BTagEntry() {} | ||
static std::string makeCSVHeader(); | ||
std::string makeCSVLine() const; | ||
static std::string trimStr(std::string str); | ||
|
||
// public, no getters needed | ||
std::string formula; | ||
Parameters params; | ||
|
||
}; | ||
#endif // BTagEntry_H | ||
|
||
#endif // BTagEntry_H | ||
|
||
|
||
#ifndef BTagCalibration_H | ||
#define BTagCalibration_H | ||
|
||
/** | ||
* BTagCalibration | ||
* | ||
* The 'hierarchy' of stored information is this: | ||
* - by tagger (BTagCalibration) | ||
* - by operating point or reshape bin | ||
* - by jet parton flavor | ||
* - by type of measurement | ||
* - by systematic | ||
* - by eta bin | ||
* - as 1D-function dependent of pt or discriminant | ||
* | ||
************************************************************/ | ||
* BTagCalibration | ||
* | ||
* The 'hierarchy' of stored information is this: | ||
* - by tagger (BTagCalibration) | ||
* - by operating point or reshape bin | ||
* - by jet parton flavor | ||
* - by type of measurement | ||
* - by systematic | ||
* - by eta bin | ||
* - as 1D-function dependent of pt or discriminant | ||
* | ||
************************************************************/ | ||
|
||
#include <map> | ||
#include <vector> | ||
#include <string> | ||
#include <istream> | ||
#include <ostream> | ||
|
||
|
||
class BTagCalibration | ||
{ | ||
public: | ||
BTagCalibration() {} | ||
BTagCalibration(const std::string &tagger); | ||
BTagCalibration(const std::string &tagger, const std::string &filename); | ||
~BTagCalibration() {} | ||
std::string tagger() const {return tagger_;} | ||
void addEntry(const BTagEntry &entry); | ||
const std::vector<BTagEntry>& getEntries(const BTagEntry::Parameters &par) const; | ||
void readCSV(std::istream &s); | ||
void readCSV(const std::string &s); | ||
void makeCSV(std::ostream &s) const; | ||
std::string makeCSV() const; | ||
BTagCalibration() {} | ||
BTagCalibration(const std::string &tagger); | ||
BTagCalibration(const std::string &tagger, const std::string &filename); | ||
~BTagCalibration() {} | ||
|
||
std::string tagger() const {return tagger_;} | ||
|
||
void addEntry(const BTagEntry &entry); | ||
const std::vector<BTagEntry>& getEntries(const BTagEntry::Parameters &par) const; | ||
|
||
void readCSV(std::istream &s); | ||
void readCSV(const std::string &s); | ||
void makeCSV(std::ostream &s) const; | ||
std::string makeCSV() const; | ||
|
||
protected: | ||
static std::string token(const BTagEntry::Parameters &par); | ||
std::string tagger_; | ||
std::map<std::string, std::vector<BTagEntry> > data_; | ||
static std::string token(const BTagEntry::Parameters &par); | ||
|
||
std::string tagger_; | ||
std::map<std::string, std::vector<BTagEntry> > data_; | ||
|
||
}; | ||
#endif // BTagCalibration_H | ||
|
||
#endif // BTagCalibration_H | ||
|
||
|
||
#ifndef BTagCalibrationReader_H | ||
#define BTagCalibrationReader_H | ||
|
||
/** | ||
* BTagCalibrationReader | ||
* | ||
* Helper class to pull out a specific set of BTagEntry's out of a | ||
* BTagCalibration. TF1 functions are set up at initialization time. | ||
* | ||
************************************************************/ | ||
* BTagCalibrationReader | ||
* | ||
* Helper class to pull out a specific set of BTagEntry's out of a | ||
* BTagCalibration. TF1 functions are set up at initialization time. | ||
* | ||
************************************************************/ | ||
|
||
#include <memory> | ||
#include <string> | ||
|
||
|
||
|
||
class BTagCalibrationReader | ||
{ | ||
public: | ||
class BTagCalibrationReaderImpl; | ||
BTagCalibrationReader() {} | ||
BTagCalibrationReader(BTagEntry::OperatingPoint op, | ||
const std::string & sysType="central", | ||
const std::vector<std::string> & otherSysTypes={}); | ||
void load(const BTagCalibration & c, | ||
BTagEntry::JetFlavor jf, | ||
const std::string & measurementType="comb"); | ||
double eval(BTagEntry::JetFlavor jf, | ||
float eta, | ||
float pt, | ||
float discr=0.) const; | ||
double eval_auto_bounds(const std::string & sys, | ||
BTagEntry::JetFlavor jf, | ||
float eta, | ||
float pt, | ||
float discr=0.) const; | ||
std::pair<float, float> min_max_pt(BTagEntry::JetFlavor jf, | ||
float eta, | ||
float discr=0.) const; | ||
class BTagCalibrationReaderImpl; | ||
|
||
BTagCalibrationReader() {} | ||
BTagCalibrationReader(BTagEntry::OperatingPoint op, | ||
const std::string & sysType="central", | ||
const std::vector<std::string> & otherSysTypes={}); | ||
|
||
void load(const BTagCalibration & c, | ||
BTagEntry::JetFlavor jf, | ||
const std::string & measurementType="comb"); | ||
|
||
double eval(BTagEntry::JetFlavor jf, | ||
float eta, | ||
float pt, | ||
float discr=0.) const; | ||
|
||
double eval_auto_bounds(const std::string & sys, | ||
BTagEntry::JetFlavor jf, | ||
float eta, | ||
float pt, | ||
float discr=0.) const; | ||
|
||
std::pair<float, float> min_max_pt(BTagEntry::JetFlavor jf, | ||
float eta, | ||
float discr=0.) const; | ||
|
||
protected: | ||
std::shared_ptr<BTagCalibrationReaderImpl> pimpl; | ||
std::shared_ptr<BTagCalibrationReaderImpl> pimpl; | ||
}; | ||
#endif // BTagCalibrationReader_H | ||
|
||
|
||
#endif // BTagCalibrationReader_H | ||
|
||
|
Oops, something went wrong.