Skip to content

Commit

Permalink
Merge pull request #1 from mhl0116/topic_addPtBinning_ttH_v2
Browse files Browse the repository at this point in the history
Topic add pt binning ttH v2
  • Loading branch information
sam-may authored Feb 6, 2020
2 parents c9779e1 + 73ffa9b commit 702fd7f
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 19 deletions.
1 change: 1 addition & 0 deletions DataFormats/interface/DiPhotonTagBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace flashgg {
class DiPhotonTagBase : public WeightedObject
{
public:

enum tag_t { kUndefined = 0, kUntagged, kVBF, kTTHHadronic, kTTHLeptonic, kTHQLeptonic, kTTHDiLepton, kVHTight, kVHLoose, kVHHadronic, kVHEt, kZHLeptonic, kWHLeptonic, kVHLeptonicLoose, kVHMet, kStageOneCombined };

enum stage1recoTag { LOGICERROR = -1, NOTAG = 0, RECO_0J_PTH_0_10_Tag0, RECO_0J_PTH_0_10_Tag1, RECO_0J_PTH_GT10_Tag0, RECO_0J_PTH_GT10_Tag1,
Expand Down
52 changes: 47 additions & 5 deletions Taggers/plugins/TTHHadronicTagProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ namespace flashgg {
private:
void produce( Event &, const EventSetup & ) override;
int chooseCategory( float );
int chooseCategory_pt( float, float );

std::vector<edm::EDGetTokenT<View<flashgg::Jet> > > tokenJets_;
std::vector<std::vector<edm::EDGetTokenT<edm::View<flashgg::Jet>>>> jetTokens_;
Expand Down Expand Up @@ -206,6 +207,12 @@ namespace flashgg {

vector<double> boundaries;

vector<double> boundaries_pt1;
vector<double> STXSPtBoundaries_pt1;

vector<double> boundaries_pt2;
vector<double> STXSPtBoundaries_pt2;

BDT_resolvedTopTagger *topTagger;
TTH_DNN_Helper* dnn_dipho;
TTH_DNN_Helper* dnn_ttGG;
Expand Down Expand Up @@ -321,7 +328,16 @@ namespace flashgg {
metTokens_.push_back(consumes<edm::View<flashgg::Met>>(tag));

boundaries = iConfig.getParameter<vector<double > >( "Boundaries" );
boundaries_pt1 = iConfig.getParameter<vector<double > >( "Boundaries_pt1" );
boundaries_pt2 = iConfig.getParameter<vector<double > >( "Boundaries_pt2" );
STXSPtBoundaries_pt1 = iConfig.getParameter<vector<double > >( "STXSPtBoundaries_pt1" );
STXSPtBoundaries_pt2 = iConfig.getParameter<vector<double > >( "STXSPtBoundaries_pt2" );

assert( is_sorted( boundaries.begin(), boundaries.end() ) ); //
assert( is_sorted( boundaries_pt1.begin(), boundaries_pt1.end() ) ); //
assert( is_sorted( boundaries_pt2.begin(), boundaries_pt2.end() ) ); //
//assert( is_sorted( STXSPtBoundaries_pt1.begin(), STXSBoundaries_pt1.end() ) ); //
//assert( is_sorted( STXSPtBoundaries_pt2.begin(), STXSBoundaries_pt2.end() ) ); //

MVAThreshold_ = iConfig.getParameter<double>( "MVAThreshold");
MVATTHHMVAThreshold_ = iConfig.getParameter<double>( "MVATTHHMVAThreshold");
Expand Down Expand Up @@ -561,6 +577,29 @@ namespace flashgg {
}
}

int TTHHadronicTagProducer::chooseCategory_pt( float tthmvavalue, float pT)
{
// should return 0 if mva above all the numbers, 1 if below the first, ..., boundaries.size()-N if below the Nth, ...
if (pT > STXSPtBoundaries_pt1[0] && pT < STXSPtBoundaries_pt1[1]) {
for(int n = 0 ; n < ( int )boundaries_pt1.size() ; n++ ) {
if( ( double )tthmvavalue > boundaries_pt1[boundaries_pt1.size() - n - 1] ) {
cout << "pT range: [" << STXSPtBoundaries_pt1[0] << ", " << STXSPtBoundaries_pt1[1] << "], Hadronic cat " << n << endl; return n;
}
}
}


if (pT > STXSPtBoundaries_pt2[0] && pT < STXSPtBoundaries_pt2[1]) {
for(int n = 0 ; n < ( int )boundaries_pt2.size() ; n++ ) {
if( ( double )tthmvavalue > boundaries_pt2[boundaries_pt2.size() - n - 1] ) {
cout << "pT range: [" << STXSPtBoundaries_pt2[0] << ", " << STXSPtBoundaries_pt2[1] << "], Hadronic cat " << n + boundaries_pt1.size() << endl;
return (n + boundaries_pt1.size());
}
}
}
return -1; // Does not pass, object will not be produced
}

int TTHHadronicTagProducer::chooseCategory( float tthmvavalue )
{
// should return 0 if mva above all the numbers, 1 if below the first, ..., boundaries.size()-N if below the Nth, ...
Expand Down Expand Up @@ -1174,18 +1213,21 @@ namespace flashgg {
tthMvaVal_ = tthMvaVal_RunII_; // use Run II MVA

bool isTTHHadronicTagged = false;
int catnum =-1;
//int catnum =-1;
int catnum_pt =-1;
if( !useTTHHadronicMVA_ && njets_btagloose_ >= bjetsLooseNumberThreshold_ && njets_btagmedium_ >= bjetsNumberThreshold_ && jetcount_ >= jetsNumberThreshold_ ) {

catnum=0;
catnum_pt=0;
isTTHHadronicTagged = true;

} else if ( useTTHHadronicMVA_ && njets_btagloose_ >= bjetsLooseNumberTTHHMVAThreshold_ && njets_btagmedium_ >= bjetsNumberTTHHMVAThreshold_ && jetcount_ >= jetsNumberTTHHMVAThreshold_ ) {
//&& tthMvaVal_ >= tthHadMVAThresholdMin_ && tthMvaVal_ < tthHadMVAThresholdMax_ )

catnum = chooseCategory( tthMvaVal_ );
catnum_pt = chooseCategory_pt( tthMvaVal_, dipho->pt() );
//catnum = chooseCategory( tthMvaVal_ );
// cout<<" catNum="<<catnum<<endl;
if(catnum>=0){
if(catnum_pt>=0){
//if(catnum>=0){
isTTHHadronicTagged = true;
// cout<<" TAGGED "<< endl;
}
Expand All @@ -1194,7 +1236,7 @@ namespace flashgg {
if( isTTHHadronicTagged ) {

TTHHadronicTag tthhtags_obj( dipho, mvares, JetVect, BJetVect );
tthhtags_obj.setCategoryNumber(catnum );
tthhtags_obj.setCategoryNumber(catnum_pt );
tthhtags_obj.setNjet( jetcount_ );
tthhtags_obj.setNBLoose( njets_btagloose_ );
tthhtags_obj.setNBMedium( njets_btagmedium_ );
Expand Down
50 changes: 43 additions & 7 deletions Taggers/plugins/TTHLeptonicTagProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ namespace flashgg {
private:
void produce( Event &, const EventSetup & ) override;
int chooseCategory( float tthmvavalue , bool debug_ );
int chooseCategory_pt( float tthmvavalue , float pT );

const reco::GenParticle* motherID(const reco::GenParticle* gp);
bool PassFrixione(Handle<View<reco::GenParticle> > genParticles, const reco::GenParticle* gp, int nBinsForFrix, double cone_frix);
Expand Down Expand Up @@ -127,6 +128,10 @@ namespace flashgg {
double leadPhoOverMassThreshold_;
double subleadPhoOverMassThreshold_;
vector<double> MVAThreshold_;
vector<double> MVAThreshold_pt1_;
vector<double> MVAThreshold_pt2_;
vector<double> STXSPtBoundaries_pt1;
vector<double> STXSPtBoundaries_pt2;
double deltaRJetLeadPhoThreshold_;
double deltaRJetSubLeadPhoThreshold_;
double jetsNumberThreshold_;
Expand Down Expand Up @@ -482,6 +487,12 @@ namespace flashgg {
leadPhoOverMassThreshold_ = iConfig.getParameter<double>( "leadPhoOverMassThreshold");
subleadPhoOverMassThreshold_ = iConfig.getParameter<double>( "subleadPhoOverMassThreshold");
MVAThreshold_ = iConfig.getParameter<std::vector<double>>( "MVAThreshold");
MVAThreshold_pt1_ = iConfig.getParameter<std::vector<double>>( "MVAThreshold_pt1");
MVAThreshold_pt2_ = iConfig.getParameter<std::vector<double>>( "MVAThreshold_pt2");
STXSPtBoundaries_pt1 = iConfig.getParameter<vector<double > >( "STXSPtBoundaries_pt1" );
STXSPtBoundaries_pt2 = iConfig.getParameter<vector<double > >( "STXSPtBoundaries_pt2" );
//assert( is_sorted( STXSPtBoundaries_pt1.begin(), STXSBoundaries_pt1.end() ) ); //
//assert( is_sorted( STXSPtBoundaries_pt2.begin(), STXSBoundaries_pt2.end() ) ); //
PhoMVAThreshold_ = iConfig.getParameter<double>( "PhoMVAThreshold");
jetsNumberThreshold_ = iConfig.getParameter<double>( "jetsNumberThreshold");
bjetsNumberThreshold_ = iConfig.getParameter<double>( "bjetsNumberThreshold");
Expand Down Expand Up @@ -638,11 +649,33 @@ namespace flashgg {

}

int TTHLeptonicTagProducer::chooseCategory_pt( float tthmvavalue , float pT)
{
// should return 0 if mva above all the numbers, 1 if below the first, ..., boundaries.size()-N if below the Nth, ...
if (pT > STXSPtBoundaries_pt1[0] && pT < STXSPtBoundaries_pt1[1]) {
for(int n = 0 ; n < ( int )MVAThreshold_pt1_.size() ; n++ ) {
//if( ( double )tthmvavalue > MVAThreshold_[MVAThreshold_.size() - n - 1] ) { return n; }
if( ( double )tthmvavalue > MVAThreshold_pt1_[MVAThreshold_pt1_.size() - n - 1] ) {
cout << "pT range: [" << STXSPtBoundaries_pt1[0] << ", " << STXSPtBoundaries_pt1[1] << "], Leptonic cat " << n << endl; return n;
}
}
}

if (pT > STXSPtBoundaries_pt2[0] && pT < STXSPtBoundaries_pt2[1]) {
for(int n = 0 ; n < ( int )MVAThreshold_pt2_.size() ; n++ ) {
//if( ( double )tthmvavalue > MVAThreshold_[MVAThreshold_.size() - n - 1] ) { return n; }
if( ( double )tthmvavalue > MVAThreshold_pt2_[MVAThreshold_pt2_.size() - n - 1] ) {
cout << "pT range: [" << STXSPtBoundaries_pt2[0] << ", " << STXSPtBoundaries_pt2[1] << "], Leptonic cat " << n + MVAThreshold_pt1_.size() << endl; return n + MVAThreshold_pt1_.size();
}
}
}
return -1; // Does not pass, object will not be produced
}

int TTHLeptonicTagProducer::chooseCategory( float tthmvavalue , bool debug_)
{
// should return 0 if mva above all the numbers, 1 if below the first, ..., boundaries.size()-N if below the Nth, ...
int n;
for( n = 0 ; n < ( int )MVAThreshold_.size() ; n++ ) {
for(int n = 0 ; n < ( int )MVAThreshold_.size() ; n++ ) {
//if( ( double )tthmvavalue > MVAThreshold_[MVAThreshold_.size() - n - 1] ) { return n; }
if( ( double )tthmvavalue > MVAThreshold_[MVAThreshold_.size() - n - 1] ) { cout << "Leptonic cat " << n; return n; }
}
Expand Down Expand Up @@ -1361,8 +1394,10 @@ namespace flashgg {

mvaValue = tthMvaVal_RunII_; // use Run II MVA for categorization

int catNumber = -1;
catNumber = chooseCategory( mvaValue , debug_);
//int catNumber = -1;
//catNumber = chooseCategory( mvaValue , debug_);
int catNumber_pt = -1;
catNumber_pt = chooseCategory_pt( mvaValue , dipho->pt());

if(debug_)
cout << "I'm going to check selections, mva value: " << mvaValue << endl;
Expand Down Expand Up @@ -1402,13 +1437,14 @@ namespace flashgg {
cout << "MetPt " << MetPt_ << endl;
cout << "Lepton pT and Eta " << lepton_leadPt_ << " " << lepton_leadEta_ << endl;
cout << "--------------------------------------" << endl;
cout << "TTHLeptonicTag -- output MVA value " << mvaValue << " " << DiphotonMva_-> EvaluateMVA( "BDT" ) << ", category " << catNumber << endl;
cout << "TTHLeptonicTag -- output MVA value " << mvaValue << " " << DiphotonMva_-> EvaluateMVA( "BDT" ) << ", category " << catNumber_pt << endl;
}

if(catNumber!=-1)
if(catNumber_pt!=-1)
{
TTHLeptonicTag tthltags_obj( dipho, mvares );
tthltags_obj.setCategoryNumber(catNumber);
tthltags_obj.setCategoryNumber(catNumber_pt);
//tthltags_obj.setCategoryNumber(catNumber);

for( unsigned int i = 0; i < tagJets.size(); ++i )
{
Expand Down
23 changes: 16 additions & 7 deletions Taggers/python/flashggTags_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@
tthMVA_RunII_weightfile = cms.FileInPath("flashgg/Taggers/data/Hadronic__v3.10_8Oct2019_RunII_MVA_Presel_impute_addDNNs_addTopTag__bdt.xml"),
MVAMethod = cms.string("BDT"),
RECOfilters = cms.InputTag('TriggerResults::RECO'),
leadPhoOverMassThreshold = cms.double(0.0),
leadPhoOverMassThreshold = cms.double(0.33),
leadPhoPtThreshold = cms.double(20),
leadPhoUseVariableThreshold = cms.bool(True),
subleadPhoOverMassThreshold = cms.double(0.0),
subleadPhoOverMassThreshold = cms.double(0.25),
subleadPhoPtThreshold = cms.double(20),
subleadPhoUseVariableThreshold = cms.bool(True),
MVAThreshold = cms.double(-1.0),
PhoMVAThreshold = cms.double(-0.9),
PhoMVAThreshold = cms.double(-0.7),
inputTagJets= UnpackedJetCollectionVInputTag,
jetPtThreshold = cms.double(25.),
jetEtaThreshold = cms.double(2.4),
Expand All @@ -89,14 +89,18 @@
bjetsLooseNumberThreshold = cms.int32(0),
useTTHHadronicMVA = cms.bool(True),
applyMETfilters = cms.bool(False),
leadPhoOverMassTTHHMVAThreshold = cms.double(0.0),
leadPhoOverMassTTHHMVAThreshold = cms.double(0.33),
MVATTHHMVAThreshold = cms.double(-1.),
jetsNumberTTHHMVAThreshold = cms.int32(3),
bjetsNumberTTHHMVAThreshold = cms.int32(0),
bjetsLooseNumberTTHHMVAThreshold = cms.int32(1),
secondMaxBTagTTHHMVAThreshold = cms.double(0.0),
#Boundaries = cms.vdouble(0.9675, 0.9937, 0.9971, 0.9991),
Boundaries = cms.vdouble(0.986025, 0.9948537, 0.9983046, 0.9990729),
Boundaries_pt1 = cms.vdouble(0.9500353, 0.98873866,0.99597067, 0.99796754),
Boundaries_pt2 = cms.vdouble(0.986025, 0.9948537, 0.9983046, 0.9990729),
STXSPtBoundaries_pt1 = cms.vdouble(0,120),
STXSPtBoundaries_pt2= cms.vdouble(120,13001),
dRJetPhoLeadCut = cms.double(0.4),
dRJetPhoSubleadCut = cms.double(0.4),
MuonEtaCut = cms.double(2.4),
Expand Down Expand Up @@ -206,12 +210,17 @@
tthVstHDNN_object_mean = ttHLeptonic_ttH_vs_tH_DNN_preprocess_scheme["object_mean"],
tthVstHDNN_object_stddev = ttHLeptonic_ttH_vs_tH_DNN_preprocess_scheme["object_stddev"],
tthMVA_RunII_weightfile = cms.FileInPath("flashgg/Taggers/data/Leptonic__v3.10_8Oct2019_RunII_MVA_Presel_addDNNs__bdt.xml"),
leadPhoOverMassThreshold = cms.double(0.33),
subleadPhoOverMassThreshold = cms.double(0.25),
tthVstHThreshold = cms.double(0.13699667), # 97% ttH eff
leadPhoOverMassThreshold = cms.double(0.0),
subleadPhoOverMassThreshold = cms.double(0.0),

#MVAThreshold = cms.vdouble(0.8435, 0.9346, 0.9625, 0.9890),
MVAThreshold = cms.vdouble(0.8997816, 0.95635754, 0.9725133, 0.9870608),
PhoMVAThreshold = cms.double(-0.9),
MVAThreshold_pt1 = cms.vdouble(0.82085735, 0.922095, 0.96056825, 0.9773357),
MVAThreshold_pt2 = cms.vdouble(0.6828851, 0.82344174, 0.9380817, 0.95741),
STXSPtBoundaries_pt1 = cms.vdouble(0,120),
STXSPtBoundaries_pt2= cms.vdouble(120,13001),
PhoMVAThreshold = cms.double(-0.7),
jetsNumberThreshold = cms.double(1.),
bjetsNumberThreshold = cms.double(0.),
jetPtThreshold = cms.double(25.),
Expand Down

0 comments on commit 702fd7f

Please sign in to comment.