Skip to content

Commit

Permalink
Merge pull request #39 from cms-hh-pd/btag_syst
Browse files Browse the repository at this point in the history
Add btag sf systematic variations, fix eta range (sf=1 if eta>2.4)
  • Loading branch information
Martino Dall'Osso authored Jan 19, 2017
2 parents b91123e + 5164a31 commit c6d5729
Show file tree
Hide file tree
Showing 3 changed files with 775 additions and 587 deletions.
270 changes: 154 additions & 116 deletions interface/BTagCalibrationStandalone.h
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


Loading

0 comments on commit c6d5729

Please sign in to comment.