diff --git a/CMGTools/Production/python/dataset.py b/CMGTools/Production/python/dataset.py index e6868e29bc485..9f166f78e6dd1 100644 --- a/CMGTools/Production/python/dataset.py +++ b/CMGTools/Production/python/dataset.py @@ -408,36 +408,31 @@ def getPrimaryDatasetEntries(self): return self.findPrimaryDatasetEntries(self.name, self.dbsInstance, runmin, runmax) ### MM +def getDatasetFromCache( cachename ) : + cachedir = '/'.join( [os.environ['HOME'],'.cmgdataset']) + pckfile = open( cachedir + "/" + cachename ) + dataset = pickle.load(pckfile) + return dataset + +def writeDatasetToCache( cachename, dataset ): + cachedir = '/'.join( [os.environ['HOME'],'.cmgdataset']) + if not os.path.exists(cachedir): + os.mkdir(cachedir) + pckfile = open( cachedir + "/" + cachename, 'w') + pickle.dump(dataset, pckfile) def createDataset( user, dataset, pattern, readcache=False, basedir = None, run_range = None): - cachedir = '/'.join( [os.environ['HOME'],'.cmgdataset']) def cacheFileName(data, user, pattern): - cf = data.replace('/','_') - name = '{dir}/{user}%{name}%{pattern}.pck'.format( - dir = cachedir, - user = user, - name = cf, - pattern = pattern) - return name + return '{user}%{name}%{pattern}.pck'.format( user = user, name = data.replace('/','_'), pattern = pattern) def writeCache(dataset): - if not os.path.exists(cachedir): - os.mkdir(cachedir) - cachename = cacheFileName(dataset.name, - dataset.user, - dataset.pattern) - pckfile = open( cachename, 'w') - pickle.dump(dataset, pckfile) + writeDatasetToCache( cacheFileName(dataset.name, dataset.user, dataset.pattern), dataset ) def readCache(data, user, pattern): - cachename = cacheFileName(data, user, pattern) - pckfile = open( cachename) - dataset = pickle.load(pckfile) - #print 'reading cache' - return dataset + return getDatasetFromCache( cacheFileName(data, user, pattern) ) if readcache: try: diff --git a/CMGTools/Production/scripts/cmgListChunksToResub b/CMGTools/Production/scripts/cmgListChunksToResub new file mode 100755 index 0000000000000..a18eb1a27eda0 --- /dev/null +++ b/CMGTools/Production/scripts/cmgListChunksToResub @@ -0,0 +1,23 @@ +#!/bin/bash +if [[ "$1" == "" || "$1" == "-h" || "$1" == "--help" ]]; then + echo "Usage: $0 [ -q ] [ directory ] " + echo "Will look in the specified directory (or in the current one if none is specified), " + echo "list failed jobs and print the cmgResubChunk commands to resubmit them." + echo "The default queue is 8nh" + exit 1; +fi + +Q=8nh +if [[ "$1" == "-q" ]]; then + Q=$2; shift; shift; +fi; + +BASE=""; +if [[ "$1" != "" && "$1" != "." ]]; then + test -d $1 && cd $1 && BASE="$PWD/"; +fi + +echo "Will print out the commands to resubmit the chunks that failed " +for D in *_Chunk[0-9]*; do + test -f $D/JSONAnalyzer/JSON.pck || echo cmgResubChunk -q 8nh ${BASE}${D}; +done; diff --git a/CMGTools/Production/scripts/cmgResubChunk b/CMGTools/Production/scripts/cmgResubChunk new file mode 100755 index 0000000000000..3c8f2e2454dbf --- /dev/null +++ b/CMGTools/Production/scripts/cmgResubChunk @@ -0,0 +1,22 @@ +#!/bin/bash +if [[ "$1" == "" || "$1" == "-h" || "$1" == "--help" ]]; then + echo "Usage: $0 [ -q ] [ ] " + echo " will resubmit the chunk to the queue (default: 2nd) " + echo " if no jobname is specified, the job name in LSF will be the chunk name." + echo " you can also run this command from within the Component_ChunkXYZ directory, in that case you can omit the chunk name" + exit 1; +fi + +Q=2nd +if [[ "$1" == "-q" ]]; then + Q=$2; shift; shift; +fi; +if [[ "$1" != "" ]] && test -d $1 && test -f $1/batchScript.sh; then + cd $1; shift; +elif test \! -f batchScript.sh; then + echo "You did not specify a valid chunk to resubmit and you're not in a chunk directory."; + exit 1; +fi +LAB="$(basename $PWD)"; if [[ "$1" != "" ]]; then LAB=$1; fi; +rename LSFJ OLD_LSFJ *; +bsub -q $Q -J $LAB < batchScript.sh diff --git a/CMGTools/TTHAnalysis/interface/SignedImpactParameter.h b/CMGTools/TTHAnalysis/interface/SignedImpactParameter.h index 35422c33e9e87..4f9ed67b57a2d 100644 --- a/CMGTools/TTHAnalysis/interface/SignedImpactParameter.h +++ b/CMGTools/TTHAnalysis/interface/SignedImpactParameter.h @@ -4,8 +4,14 @@ #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h" + +#if defined( __GXX_EXPERIMENTAL_CXX0X__) +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" +#endif + struct MagneticField; + class SignedImpactParameter { public: SignedImpactParameter() ; @@ -13,6 +19,25 @@ class SignedImpactParameter { Measurement1D signedIP3D(const reco::Track &tk, const reco::Vertex &vtx, const reco::Track::Vector jetdir) const ; std::pair twoTrackChi2(const reco::Track &tk1, const reco::Track &tk2) const ; + //For the vertex related variables + //A = selectedLeptons[0], B = selectedLeptons[1], C = selectedLeptons[2], D = selectedLeptons[3] + + #if defined( __GXX_EXPERIMENTAL_CXX0X__) + //Helping functions + std::vector ttrksf(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep) const; + std::vector ttrksbuthef(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const; + reco::TransientTrack thettrkf(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const; + #endif + + //Variables related to IP + //Of one lepton w.r.t. the PV of the event + std::pair absIP3D(const reco::Track &trk, const reco::Vertex &pv) const; + //Of one lepton w.r.t. the PV of the PV of the other leptons only + std::pair absIP3Dtrkpvtrks(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const; + //Variables related to chi2 + std::pair chi2pvtrks(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep) const; + + private: //MagneticField *bfield_; static MagneticField *paramField_; diff --git a/CMGTools/TTHAnalysis/macros/leptons/prepareLepMVAFriendTree.py b/CMGTools/TTHAnalysis/macros/leptons/prepareLepMVAFriendTree.py index ea39f0b2cd54a..600e75a051c2d 100644 --- a/CMGTools/TTHAnalysis/macros/leptons/prepareLepMVAFriendTree.py +++ b/CMGTools/TTHAnalysis/macros/leptons/prepareLepMVAFriendTree.py @@ -47,21 +47,17 @@ def __call__(self,lep,ncorr): _CommonSpect = [ ] _CommonVars = [ - MVAVar("neuRelIso := relIso - chargedIso/pt",lambda x: x.relIso - x.chargedIso/x.pt), - MVAVar("chRelIso := chargedIso/pt",lambda x: x.chargedIso/x.pt), - MVAVar("jetDR_in := min(dr_in,0.5)", lambda x : min(x.jetDR,0.5), corrfunc=ROOT.correctJetDRMC), - MVAVar("jetPtRatio_in := min(ptf_in,1.5)", lambda x : min(x.jetPtRatio,1.5), corrfunc=ROOT.correctJetPtRatioMC), - MVAVar("jetBTagCSV_in := max(CSV_in,0)", lambda x : max(x.jetBTagCSV,0.)), - #MVAVar("jetDR_out := min(dr_out,5)", lambda x : min(x.dr_out,5.)), - #MVAVar("jetPtRatio_out := min(ptf_out,1.5)", lambda x : min(x.ptf_out,1.5)), - #MVAVar("jetBTagCSV_out := max(CSV_out,0)", lambda x : max(x.CSV_out,0.)), + MVAVar("neuRelIso03 := relIso03 - chargedHadRelIso03",lambda x: x.relIso03 - x.chargedHadRelIso03), + MVAVar("chRelIso03 := chargedHadRelIso03",lambda x: x.chargedHadRelIso03), + MVAVar("jetDR := min(jetDR,0.5)", lambda x : min(x.jetDR,0.5), corrfunc=ROOT.correctJetDRMC), + MVAVar("jetPtRatio := min(jetPtRatio,1.5)", lambda x : min(x.jetPtRatio,1.5), corrfunc=ROOT.correctJetPtRatioMC), + MVAVar("jetBTagCSV := max(jetBTagCSV,0)", lambda x : max(x.jetBTagCSV,0.)), MVAVar("sip3d",lambda x: x.sip3d, corrfunc=ROOT.scaleSip3dMC), MVAVar("dxy := log(abs(dxy))",lambda x: log(abs(x.dxy)), corrfunc=ROOT.scaleDxyMC), MVAVar("dz := log(abs(dz))", lambda x: log(abs(x.dz)), corrfunc=ROOT.scaleDzMC), ] _ElectronVars = [ - MVAVar("mvaId",lambda x: x.mvaId), - MVAVar("innerHits",lambda x: x.innerHits), + MVAVar("mvaId",lambda x: x.mvaId) ] class LeptonMVA: def __init__(self,basepath): @@ -95,24 +91,24 @@ def beginJob(self): self.t = PyTree(self.book("TTree","t","t")) for i in range(8): self.t.branch("LepGood%d_mvaNew" % (i+1),"F") - if not self.data and not self.fast: - self.t.branch("LepGood%d_mvaNewUncorr" % (i+1),"F") - self.t.branch("LepGood%d_mvaNewDoubleCorr" % (i+1),"F") + #if not self.data and not self.fast: + # self.t.branch("LepGood%d_mvaNewUncorr" % (i+1),"F") + # self.t.branch("LepGood%d_mvaNewDoubleCorr" % (i+1),"F") def analyze(self,event): lep = Collection(event,"LepGood","nLepGood",8) for i,l in enumerate(lep): if self.data: setattr(self.t, "LepGood%d_mvaNew" % (i+1), self.mva(l,ncorr=0)) else: - setattr(self.t, "LepGood%d_mvaNew" % (i+1), self.mva(l,ncorr=1)) - if not self.fast: - setattr(self.t, "LepGood%d_mvaNewUncorr" % (i+1), self.mva(l,ncorr=0)) - setattr(self.t, "LepGood%d_mvaNewDoubleCorr" % (i+1), self.mva(l,ncorr=2)) + setattr(self.t, "LepGood%d_mvaNew" % (i+1), self.mva(l,ncorr=0)) + #if not self.fast: + # setattr(self.t, "LepGood%d_mvaNewUncorr" % (i+1), self.mva(l,ncorr=0)) + # setattr(self.t, "LepGood%d_mvaNewDoubleCorr" % (i+1), self.mva(l,ncorr=2)) for i in xrange(len(lep),8): setattr(self.t, "LepGood%d_mvaNew" % (i+1), -99.) - if not self.data and not self.fast: - setattr(self.t, "LepGood%d_mvaNewUncorr" % (i+1), -99.) - setattr(self.t, "LepGood%d_mvaNewDoubleCorr" % (i+1), -99.) + #if not self.data and not self.fast: + # setattr(self.t, "LepGood%d_mvaNewUncorr" % (i+1), -99.) + # setattr(self.t, "LepGood%d_mvaNewDoubleCorr" % (i+1), -99.) self.t.fill() import os, itertools diff --git a/CMGTools/TTHAnalysis/macros/leptons/prepareLepTrain.py b/CMGTools/TTHAnalysis/macros/leptons/prepareLepTrain.py index 3f0e249862404..406a5fc6d04da 100644 --- a/CMGTools/TTHAnalysis/macros/leptons/prepareLepTrain.py +++ b/CMGTools/TTHAnalysis/macros/leptons/prepareLepTrain.py @@ -1,94 +1,65 @@ #!/usr/bin/env python from CMGTools.TTHAnalysis.treeReAnalyzer import * -import os, ROOT +import os,itertools, ROOT if "/smearer_cc.so" not in ROOT.gSystem.GetLibraries(): ROOT.gROOT.ProcessLine(".L %s/src/CMGTools/TTHAnalysis/python/plotter/smearer.cc+" % os.environ['CMSSW_BASE']); if "/mcCorrections_cc.so" not in ROOT.gSystem.GetLibraries(): ROOT.gROOT.ProcessLine(".L %s/src/CMGTools/TTHAnalysis/python/plotter/mcCorrections.cc+" % os.environ['CMSSW_BASE']); -def plausible(rec,gen): - dr = deltaR(rec,gen) - if abs(rec.pdgId) == 11 and abs(gen.pdgId) != 11: return False - if abs(rec.pdgId) == 13 and abs(gen.pdgId) != 13: return False - if dr < 0.3: return True - if gen.pt < abs(rec.pdgId) == 13 and gen.pdgId != rec.pdgId: return False - if dr < 0.7: return True - if min(rec.pt,gen.pt)/max(rec.pt,gen.pt) < 0.3: return False - return True + +from optparse import OptionParser +parser = OptionParser(usage="%prog [options] ") +parser.add_option("-t", "--tree", dest="tree", default='ttHLepTreeProducerTTH', help="Pattern for tree name"); +parser.add_option("-V", "--vector", dest="vectorTree", action="store_true", default=True, help="Input tree is a vector") +(options, args) = parser.parse_args() class LepTreeProducer(Module): def beginJob(self): self.t = PyTree(self.book("TTree","t","t")) - self.t.branch("dr_in","F") - self.t.branch("ptf_in","F") - self.t.branch("CSV_in","F") - #self.t.branch("dr_out","F") - #self.t.branch("ptf_out","F") - #self.t.branch("CSV_out","F") self.t.branch("good","I") self.t.branch("nJet25","I") self.t.branch("nBJetLoose25","I") self.t.branch("nBJetMedium25","I") self.t.branch("puWeight","F") - #self.t.branch("nVert","F") - self.copyvars = [ 'relIso','chargedIso','mvaId','pt','eta','pdgId','innerHits','tightId',"mva"] + self.copyvars = ['relIso03','chargedHadRelIso03','relIso04','chargedHadRelIso04','mvaId','pt','eta','pdgId','lostHits','tightId','nStations','trkKink','caloCompatibility','globalTrackChi2','trackerLayers','pixelLayers','mcMatchId','mcMatchAny', 'mcMatchTau'] for C in self.copyvars: self.t.branch(C,"F") - # these I can't copy since I need - for C in [ 'sip3d','dxy','dz' ]: self.t.branch(C,"F") + # these I can't copy since I need to apply corrections + for C in [ 'sip3d','dxy','dz','jetPtRatio','jetBTagCSV','jetDR']: self.t.branch(C,"F") self.first = True def analyze(self,event): - #if event.nLepGood < 3: return False - #jet = Collection(event,"Jet") lep = Collection(event,"LepGood","nLepGood",8) - glep = Collection(event,"GenLep") - gtau = Collection(event,"GenLepFromTau") for l in lep: self.t.sip3d = ROOT.scaleSip3dMC(l.sip3d, l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else l.sip3d self.t.dz = ROOT.scaleDzMC( l.dz, l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else l.dz self.t.dxy = ROOT.scaleDxyMC( l.dxy, l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else l.dxy (dr,ptf) = (l.jetDR,l.jetPtRatio) - self.t.dr_in = ROOT.correctJetDRMC(dr,l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else dr - self.t.ptf_in = ROOT.correctJetPtRatioMC(ptf,l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else ptf - self.t.CSV_in = l.jetBTagCSV - #(j,dr) = closest(l, jet) - #ptot = j.p4() + l.p4() - #self.t.dr_out = dr - #self.t.ptf_out = l.pt/ptot.Pt() - #self.t.CSV_out = j.btagCSV - (gmatch,dr) = closest(l,glep,presel=plausible) - if dr < 1.5 and abs(gmatch.pdgId) == abs(l.pdgId): - self.t.good = 20 if dr < 0.5 else 2 - else: - (gmatch,dr) = closest(l,gtau,presel=plausible) - if dr < 1.5 and abs(gmatch.pdgId) == abs(l.pdgId): - self.t.good = 10 if dr < 0.5 else 1 - else: - self.t.good = -l.mcMatchAny - self.t.fill() + self.t.jetDR = ROOT.correctJetDRMC(dr,l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else dr + self.t.jetPtRatio = ROOT.correctJetPtRatioMC(ptf,l.pdgId,l.pt,l.eta,l.mcMatchId,l.mcMatchAny) if self.corr else ptf + self.t.jetBTagCSV = l.jetBTagCSV for C in self.copyvars: setattr(self.t, C, getattr(l,C)) self.t.nJet25 = event.nJet25 self.t.nBJetLoose25 = event.nBJetLoose25 self.t.nBJetMedium25 = event.nBJetMedium25 self.t.puWeight = event.puWeight - #self.t.nVert = event.nVert self.t.fill() from sys import argv -f = ROOT.TFile.Open(argv[1]) -t = f.Get("ttHLepTreeProducerBase") -print "Reading %s (%d entries)" % (argv[1], t.GetEntries()) +f = ROOT.TFile.Open(args[0]+"/"+options.tree+"/"+options.tree+"_tree.root") +t = f.Get(options.tree) +t.vectorTree = options.vectorTree +print "Reading %s (%d entries)" % (args[0], t.GetEntries()) -booker = Booker(argv[2] if len(argv) >= 3 else "lepTree.root") +booker = Booker(args[1] if len(argv) >= 3 else "lepTree.root") prod = LepTreeProducer("rec",booker) -if len(argv) >= 4 and argv[3] == "NoCorr": +if len(args) >= 3 and args[2] == "NoCorr": print "Will not apply corrections" prod.corr = False else: print "Will apply corrections" prod.corr = True el = EventLoop([ prod, ]) -maxEv = (int(argv[4]) if len(argv) >= 5 else -1) +maxEv = (int(args[3]) if len(args) >= 4 else -1) print "max entries: ",maxEv el.loop([t], maxEvents=maxEv) booker.done() diff --git a/CMGTools/TTHAnalysis/macros/leptons/trainLeptonID.cxx b/CMGTools/TTHAnalysis/macros/leptons/trainLeptonID.cxx index 566811742e02e..095bb04c15e6e 100644 --- a/CMGTools/TTHAnalysis/macros/leptons/trainLeptonID.cxx +++ b/CMGTools/TTHAnalysis/macros/leptons/trainLeptonID.cxx @@ -1,27 +1,22 @@ -void trainLeptonID(TString name, TString train="GB") { +void trainLeptonID(TString name, TString train="GoodvsBad") { TTree *dSig = (TTree*) _file0->Get("rec/t"); TTree *dBg1 = (TTree*) _file1->Get("rec/t"); TFile *fOut = new TFile(name+".root","RECREATE"); TMVA::Factory *factory = new TMVA::Factory(name, fOut, "!V:!Color"); - //factory->AddSpectator("charge", 'I'); - //factory->AddSpectator("mcId", 'I'); - //factory->AddSpectator("mva", 'D'); + if (!name.Contains("pteta")) { factory->AddSpectator("pt", 'D'); factory->AddSpectator("abseta := abs(eta)", 'D'); } TString allvars = ""; - //factory->AddVariable("relIso", 'D'); allvars += "relIso"; - factory->AddVariable("neuRelIso := relIso - chargedIso/pt", 'D'); allvars += "neuRelIso"; - factory->AddVariable("chRelIso := chargedIso/pt", 'D'); allvars += ":chRelIso"; - factory->AddVariable("jetDR_in := min(dr_in,0.5)", 'D'); allvars += ":jetDR_in"; - factory->AddVariable("jetPtRatio_in := min(ptf_in,1.5)", 'D'); allvars += ":jetPtRatio_in"; - factory->AddVariable("jetBTagCSV_in := max(CSV_in,0)", 'D'); allvars += ":jetBTagCSV_in"; - //factory->AddVariable("jetDR_out := min(dr_out,5)", 'D'); allvars += ":jetDR_out"; - //factory->AddVariable("jetPtRatio_out := min(ptf_out,1.5)", 'D'); allvars += ":jetPtRatio_out"; - //factory->AddVariable("jetBTagCSV_out := max(CSV_out,0)", 'D'); allvars += ":jetBTagCSV_out"; + //common variables + factory->AddVariable("neuRelIso03 := relIso03 - chargedHadRelIso03", 'D'); allvars += "neuRelIso03"; + factory->AddVariable("chRelIso03 := chargedHadRelIso03", 'D'); allvars += ":chRelIso03"; + factory->AddVariable("jetDR := min(jetDR,0.5)", 'D'); allvars += ":jetDR"; + factory->AddVariable("jetPtRatio := min(jetPtRatio,1.5)", 'D'); allvars += ":jetPtRatio"; + factory->AddVariable("jetBTagCSV := max(jetBTagCSV,0)", 'D'); allvars += ":jetBTagCSV"; if (!name.Contains("NoIP")) { @@ -32,14 +27,16 @@ void trainLeptonID(TString name, TString train="GB") { } if (name.Contains("mu")) { + //muons variables if (!name.Contains("NoID")) { //factory->AddVariable("tightId",'D'); allvars += ":tightId"; - //factory->AddVariable("innerHits",'D'); allvars += ":innerHits"; + } } else if (name.Contains("el")) { + //electron variables if (!name.Contains("NoID")) { factory->AddVariable("mvaId",'D'); allvars += ":mvaId"; - factory->AddVariable("innerHits",'D'); allvars += ":innerHits"; + } } else { std::cerr << "ERROR: must either be electron or muon." << std::endl; return; } @@ -72,49 +69,19 @@ void trainLeptonID(TString name, TString train="GB") { //factory->SetWeightExpression("puWeight*((good>0)+(good<=0)*pow(nJet25,2.36))"); factory->SetWeightExpression("puWeight"); - if (train=="GB") { - factory->PrepareTrainingAndTestTree( lepton+" good > 0", lepton+" good <= 0", "" ); - } else if (train=="gb") { - factory->PrepareTrainingAndTestTree( lepton+" good > 10", lepton+" good <= 0", "" ); - } else if (train=="tB") { - //factory->PrepareTrainingAndTestTree( lepton+" good > 10 && sip3d < 3.5", lepton+" good == 0 && sip3d < 3.5", "" ); - //factory->PrepareTrainingAndTestTree( lepton+" good > 10 && sip3d > 3.5 && sip3d < 6", lepton+" good <= 0 && sip3d > 3.5 && sip3d < 6", "" ); - } else { + if (train=="GoodvsBad") { + factory->PrepareTrainingAndTestTree( lepton+" mcMatchId > 0", lepton+" mcMatchId <= 0", "" ); + } else if (train=="GoodvsLight") { + factory->PrepareTrainingAndTestTree( lepton+" mcMatchId > 0", lepton+" mcMatchId <= 0 && mcMatchAny <= 1", "" ); + } else { std::cerr << "ERROR: No idea of what training you want." << std::endl; return; } - //factory->BookMethod( TMVA::Types::kLikelihood, "Likelihood", "!H:!V:!TransformOutput:PDFInterpol=Spline2:NSmooth=1:NAvEvtPerBin=50"); factory->BookMethod( TMVA::Types::kLD, "LD", "!H:!V:VarTransform=None" ); - - // Cut optmisation using Genetic Algorithm - // factory->BookMethod( TMVA::Types::kCuts, "CutsGA", "!H:!V:FitMethod=GA" ); - + // Boosted Decision Trees with gradient boosting - TString BDTGopt = "!H:!V:NTrees=200:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=2000:nEventsMin=100:NNodesMax=9:UseNvars=9:PruneStrength=5:PruneMethod=CostComplexity:MaxDepth=8"; - // BDTGopt = "!H:!V:NTrees=1000:BoostType=Grad:Shrinkage=0.30:UseBaggedGrad:GradBaggingFraction=0.6:SeparationType=GiniIndex:nCuts=2000:PruneMethod=CostComplexity:PruneStrength=50:NNodesMax=5"; - // BDTGopt = "!H:!V:NTrees=6000:BoostType=Grad:Shrinkage=0.50:UseBaggedGrad:GradBaggingFraction=0.6:SeparationType=GiniIndex:nCuts=2000:PruneMethod=CostComplexity:PruneStrength=50:NNodesMax=5"; - if (name.Contains("_t1.1")) { - BDTGopt = "!H:!V:NTrees=1000:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } else if (name.Contains("_t1.5")) { - BDTGopt = "!H:!V:NTrees=2000:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:MaxDepth=5"; - } else if (name.Contains("_t1")) { - BDTGopt = "!H:!V:NTrees=400:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } else if (name.Contains("_t0")) { - BDTGopt = "!H:!V:NTrees=200:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } else { - if (name.Contains("mu_pteta_high_b") || name.Contains("el_pteta_high_cb")) { - // very high stat. use more trees (preset t1.1) - BDTGopt = "!H:!V:NTrees=1000:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } else if (name.Contains("mu_pteta_low_e") || name.Contains("el_pteta_low")) { - // very low stat. use less trees (t0) to avoid overtrain - BDTGopt = "!H:!V:NTrees=200:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } else { - // default (t1) - BDTGopt = "!H:!V:NTrees=400:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=200:nEventsMin=100:NNodesMax=9:MaxDepth=8"; - } - } - // TString BDTGopt = "!H:!V:NTrees=500:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=2000:nEventsMin=100:NNodesMax=9:UseNvars=9:PruneStrength=5:PruneMethod=CostComplexity:MaxDepth=8"; + TString BDTGopt = "!H:!V:NTrees=500:BoostType=Grad:Shrinkage=0.10:!UseBaggedGrad:nCuts=2000:nEventsMin=100:NNodesMax=9:UseNvars=9:PruneStrength=5:PruneMethod=CostComplexity:MaxDepth=8"; BDTGopt += ":CreateMVAPdfs"; // Create Rarity distribution factory->BookMethod( TMVA::Types::kBDT, "BDTG", BDTGopt); @@ -126,19 +93,6 @@ void trainLeptonID(TString name, TString train="GB") { BDTG_Cat_pteta->AddMethod("pt > 15 && abs(eta) < 1.5", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_high_b", BDTGopt); BDTG_Cat_pteta->AddMethod("pt > 15 && abs(eta) > 1.5", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_high_e", BDTGopt); - /* - TMVA::MethodCategory* BDTG_Cat_pteta2 = dynamic_cast(factory->BookMethod( TMVA::Types::kCategory, "BDTG_Cat_pteta2","" )); - BDTG_Cat_pteta2->AddMethod("pt < 15 && abs(eta) < 1.2", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta2_low_b", BDTGopt); - BDTG_Cat_pteta2->AddMethod("pt < 15 && abs(eta) > 1.2", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta2_low_e", BDTGopt); - BDTG_Cat_pteta2->AddMethod("pt > 15 && abs(eta) < 1.2", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta2_high_b", BDTGopt); - BDTG_Cat_pteta2->AddMethod("pt > 15 && abs(eta) > 1.2", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta2_high_e", BDTGopt); - - TMVA::MethodCategory* BDTG_Cat_pteta3 = dynamic_cast(factory->BookMethod( TMVA::Types::kCategory, "BDTG_Cat_pteta3","" )); - BDTG_Cat_pteta3->AddMethod("pt < 15 && abs(eta) < 1.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta3_low_b", BDTGopt); - BDTG_Cat_pteta3->AddMethod("pt < 15 && abs(eta) > 1.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta3_low_e", BDTGopt); - BDTG_Cat_pteta3->AddMethod("pt > 15 && abs(eta) < 1.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta3_high_b", BDTGopt); - BDTG_Cat_pteta3->AddMethod("pt > 15 && abs(eta) > 1.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta3_high_e", BDTGopt); - */ } else if (name.Contains("el") && !name.Contains("pteta")){ TMVA::MethodCategory* BDTG_Cat_pteta = dynamic_cast(factory->BookMethod( TMVA::Types::kCategory, "BDTG_Cat_pteta","" )); BDTG_Cat_pteta->AddMethod("pt <= 10 && abs(eta) < 0.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_low_cb", BDTGopt); @@ -147,9 +101,6 @@ void trainLeptonID(TString name, TString train="GB") { BDTG_Cat_pteta->AddMethod("pt > 10 && abs(eta) < 0.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_high_cb", BDTGopt); BDTG_Cat_pteta->AddMethod("pt > 10 && abs(eta) < 1.479 && abs(eta) >= 0.8", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_high_fb", BDTGopt); BDTG_Cat_pteta->AddMethod("pt > 10 && abs(eta) >= 1.479", allvars, TMVA::Types::kBDT, "BDTG_Cat_pteta_high_e", BDTGopt); - - /* - */ } factory->TrainAllMethods(); diff --git a/CMGTools/TTHAnalysis/macros/prepareEventVariablesFriendTree.py b/CMGTools/TTHAnalysis/macros/prepareEventVariablesFriendTree.py index 07a1bc2ed20ae..14ad7eb410a05 100644 --- a/CMGTools/TTHAnalysis/macros/prepareEventVariablesFriendTree.py +++ b/CMGTools/TTHAnalysis/macros/prepareEventVariablesFriendTree.py @@ -11,8 +11,8 @@ #MODULES.append( ('2lss_mva', FinalMVA_2LSS()) ) #from CMGTools.TTHAnalysis.tools.finalMVA_3l import FinalMVA_3L #MODULES.append( ('3l_mva', FinalMVA_3L()) ) -from CMGTools.TTHAnalysis.tools.bbvars import bbVars -MODULES.append( ('bbvars', bbVars()) ) +#from CMGTools.TTHAnalysis.tools.bbvars import bbVars +#MODULES.append( ('bbvars', bbVars()) ) #from CMGTools.TTHAnalysis.tools.finalMVA_2lss_2 import FinalMVA_2LSS_2 #MODULES.append( ('finalMVA_2lss_2', FinalMVA_2LSS_2()) ) #from CMGTools.TTHAnalysis.tools.ttbarEventReco_2lss import TTEventReco_MC @@ -20,6 +20,8 @@ #from CMGTools.TTHAnalysis.tools.ttbarEventReco_2lss import TTEventReco #MODULES.append( ('ttreco', TTEventReco(sortersToUse={"BestGuess":"", "BestBySum4NoTJJb":"_bySum4"})) ) #MODULES.append( ('ttreco', TTEventReco(sortersToUse={"BestGuess":"","ByGuessLL2B":"_byLL"})) ) +from CMGTools.TTHAnalysis.tools.LepMVAFriend import LepMVAFriend +MODULES.append( ('LepMVAFriend', LepMVAFriend("/afs/cern.ch/user/b/botta/CMGToolsGit/newRecipe/CMSSW_5_3_19/src/CMGTools/TTHAnalysis/macros/leptons")) ) class VariableProducer(Module): def __init__(self,name,booker,modules): @@ -27,9 +29,21 @@ def __init__(self,name,booker,modules): self._modules = modules def beginJob(self): self.t = PyTree(self.book("TTree","t","t")) + self.branches = {} for name,mod in self._modules: for B in mod.listBranches(): - self.t.branch(B ,"F") + # don't add the same branch twice + if B in self.branches: + print "Will not add branch %s twice" % (B,) + continue + self.branches[B] = True + if type(B) == tuple: + if len(B) == 2: + self.t.branch(B[0],B[1]) + elif len(B) == 4: + self.t.branch(B[0],B[1],n=B[2],lenVar=B[3]) + else: + self.t.branch(B ,"F") def analyze(self,event): for name,mod in self._modules: keyvals = mod(event) diff --git a/CMGTools/TTHAnalysis/python/analyzers/ntupleTypes.py b/CMGTools/TTHAnalysis/python/analyzers/ntupleTypes.py index 07169a4e36ff4..ec86db37e9c03 100644 --- a/CMGTools/TTHAnalysis/python/analyzers/ntupleTypes.py +++ b/CMGTools/TTHAnalysis/python/analyzers/ntupleTypes.py @@ -75,6 +75,8 @@ # Muon-speficic info NTupleVariable("nStations", lambda lepton : lepton.numberOfMatchedStations() if abs(lepton.pdgId()) == 13 else 4, help="Number of matched muons stations (4 for electrons)"), NTupleVariable("trkKink", lambda lepton : lepton.combinedQuality().trkKink if abs(lepton.pdgId()) == 13 else 0, help="Tracker kink-finder"), + NTupleVariable("caloCompatibility", lambda lepton : lepton.caloCompatibility() if abs(lepton.pdgId()) == 13 else 0, help="Calorimetric compatibility"), + NTupleVariable("globalTrackChi2", lambda lepton : lepton.globalTrack().normalizedChi2() if abs(lepton.pdgId()) == 13 and lepton.globalTrack().isNonnull() else 0, help="Tracker kink-finder"), # Extra tracker-related id variables NTupleVariable("trackerLayers", lambda x : (x.track() if abs(x.pdgId())==13 else x.gsfTrack()).hitPattern().trackerLayersWithMeasurement(), int, help="Tracker Layers"), NTupleVariable("pixelLayers", lambda x : (x.track() if abs(x.pdgId())==13 else x.gsfTrack()).hitPattern().pixelLayersWithMeasurement(), int, help="Pixel Layers"), diff --git a/CMGTools/TTHAnalysis/python/analyzers/treeProducerSusyMultilepton.py b/CMGTools/TTHAnalysis/python/analyzers/treeProducerSusyMultilepton.py index 27538cd5e54eb..4f68b6b286e68 100644 --- a/CMGTools/TTHAnalysis/python/analyzers/treeProducerSusyMultilepton.py +++ b/CMGTools/TTHAnalysis/python/analyzers/treeProducerSusyMultilepton.py @@ -53,7 +53,56 @@ def __init__(self, cfg_ana, cfg_comp, looperName): NTupleVariable("GenHiggsDecayMode", lambda ev : ev.genHiggsDecayMode, int, mcOnly=True, help="H decay mode (15 = tau, 23/24 = W/Z)"), NTupleVariable("LepEff_3lep", lambda ev : ev.LepEff_3lep, mcOnly=True, help="Lepton preselection SF (3 lep)"), NTupleVariable("LepEff_4lep", lambda ev : ev.LepEff_4lep, mcOnly=True, help="Lepton preselection SF (4 lep)"), - ##------------------------------------------------ + ##--------vertex variables------------------------------------------ + #A = selectedLeptons[0], B = selectedLeptons[1], C = selectedLeptons[2], D = selectedLeptons[3] + ##Variables related to IP + #Of one lepton w.r.t. the PV of the event + NTupleVariable("absIP3DAval", lambda ev: ev.absIP3DA[0], help="Absolute IP of A w.r.t. PV of evt"), + NTupleVariable("absIP3DAerr", lambda ev: ev.absIP3DA[1], help="Error of absIP3DAval"), + NTupleVariable("absIP3DBval", lambda ev: ev.absIP3DB[0], help="Absolute IP of B w.r.t. PV of evt"), + NTupleVariable("absIP3DBerr", lambda ev: ev.absIP3DB[1], help="Error of absIP3DBval"), + + NTupleVariable("absIP3DCval", lambda ev: ev.absIP3DC[0], help="Absolute IP of C w.r.t. PV of evt"), + NTupleVariable("absIP3DCerr", lambda ev: ev.absIP3DC[1], help="Error of absIP3DCval"), + + NTupleVariable("absIP3DDval", lambda ev: ev.absIP3DD[0], help="Absolute IP of D w.r.t. PV of evt"), + NTupleVariable("absIP3DDerr", lambda ev: ev.absIP3DD[1], help="Error of absIP3DDval"), + + #Of one lepton w.r.t. the PV of the PV of the other leptons only + NTupleVariable("absIP3DApvBCval", lambda ev: ev.absIP3DApvBC[0], help="Absolute IP of A w.r.t. PV of BC"), + NTupleVariable("absIP3DApvBCerr", lambda ev: ev.absIP3DApvBC[1], help="Error of absIP3DApvBCval"), + NTupleVariable("absIP3DBpvACval", lambda ev: ev.absIP3DBpvAC[0], help="Absolute IP of B w.r.t. PV of AC"), + NTupleVariable("absIP3DBpvACerr", lambda ev: ev.absIP3DBpvAC[1], help="Error of absIP3DBpvACval"), + NTupleVariable("absIP3DCpvABval", lambda ev: ev.absIP3DCpvAB[0], help="Absolute IP of C w.r.t. PV of AB"), + NTupleVariable("absIP3DCpvABerr", lambda ev: ev.absIP3DCpvAB[1], help="Error of absIP3DCpvABval"), + + NTupleVariable("absIP3DApvBCDval", lambda ev: ev.absIP3DApvBCD[0], help="Absolute IP of A w.r.t. PV of BCD"), + NTupleVariable("absIP3DApvBCDerr", lambda ev: ev.absIP3DApvBCD[1], help="Error of absIP3DApvBCDval"), + NTupleVariable("absIP3DBpvACDval", lambda ev: ev.absIP3DBpvACD[0], help="Absolute IP of B w.r.t. PV of ACD"), + NTupleVariable("absIP3DBpvACDerr", lambda ev: ev.absIP3DBpvACD[1], help="Error of absIP3DBpvACDval"), + NTupleVariable("absIP3DCpvABDval", lambda ev: ev.absIP3DCpvABD[0], help="Absolute IP of C w.r.t. PV of ABD"), + NTupleVariable("absIP3DCpvABDerr", lambda ev: ev.absIP3DCpvABD[1], help="Error of absIP3DCpvABDval"), + NTupleVariable("absIP3DDpvABCval", lambda ev: ev.absIP3DDpvABC[0], help="Absolute IP of D w.r.t. PV of ABC"), + NTupleVariable("absIP3DDpvABCerr", lambda ev: ev.absIP3DDpvABC[1], help="Error of absIP3DDpvABCval"), + + ##Variables related to chi2 + #Chi2 of all the good leptons of the event but one lepton + NTupleVariable("chi2pvtrksBCbutAval", lambda ev: ev.chi2pvtrksBCbutA[0], help="chi2 of the fit to the PV of B,C"), + NTupleVariable("chi2pvtrksBCbutAdof", lambda ev: ev.chi2pvtrksBCbutA[1], help="DOF from the fit to the PV of B,C"), + NTupleVariable("chi2pvtrksACbutBval", lambda ev: ev.chi2pvtrksACbutB[0], help="chi2 of the fit to the PV of A,C"), + NTupleVariable("chi2pvtrksACbutBdof", lambda ev: ev.chi2pvtrksACbutB[1], help="DOF from the fit to the PV of A,C"), + NTupleVariable("chi2pvtrksABbutCval", lambda ev: ev.chi2pvtrksABbutC[0], help="chi2 of the fit to the PV of A,B"), + NTupleVariable("chi2pvtrksABbutCdof", lambda ev: ev.chi2pvtrksABbutC[1], help="DOF from the fit to the PV of A,B"), + + NTupleVariable("chi2pvtrksBCDbutAval", lambda ev: ev.chi2pvtrksBCDbutA[0], help="chi2 of the fit to the PV of B,C,D"), + NTupleVariable("chi2pvtrksBCDbutAdof", lambda ev: ev.chi2pvtrksBCDbutA[1], help="DOF from the fit to the PV of B,C,D"), + NTupleVariable("chi2pvtrksACDbutBval", lambda ev: ev.chi2pvtrksACDbutB[0], help="chi2 of the fit to the PV of A,C,D"), + NTupleVariable("chi2pvtrksACDbutBdof", lambda ev: ev.chi2pvtrksACDbutB[1], help="DOF from the fit to the PV of A,C,D"), + NTupleVariable("chi2pvtrksABDbutCval", lambda ev: ev.chi2pvtrksABDbutC[0], help="chi2 of the fit to the PV of A,B,D"), + NTupleVariable("chi2pvtrksABDbutCdof", lambda ev: ev.chi2pvtrksABDbutC[1], help="DOF from the fit to the PV of A,B,D"), + NTupleVariable("chi2pvtrksABCbutDval", lambda ev: ev.chi2pvtrksABCbutD[0], help="chi2 of the fit to the PV of A,B,C"), + NTupleVariable("chi2pvtrksABCbutDdof", lambda ev: ev.chi2pvtrksABCbutD[1], help="DOF from the fit to the PV of A,B,C"), + ] self.globalObjects.update({ diff --git a/CMGTools/TTHAnalysis/python/analyzers/ttHCoreEventAnalyzer.py b/CMGTools/TTHAnalysis/python/analyzers/ttHCoreEventAnalyzer.py index 6ee71887e98f1..ad11eab99f8f6 100644 --- a/CMGTools/TTHAnalysis/python/analyzers/ttHCoreEventAnalyzer.py +++ b/CMGTools/TTHAnalysis/python/analyzers/ttHCoreEventAnalyzer.py @@ -17,7 +17,7 @@ from CMGTools.RootTools.utils.DeltaR import * from CMGTools.TTHAnalysis.leptonMVA import LeptonMVA -from CMGTools.TTHAnalysis.signedSip import twoTrackChi2 +from CMGTools.TTHAnalysis.signedSip import * import os class ttHCoreEventAnalyzer( Analyzer ): @@ -210,7 +210,40 @@ def process(self, iEvent, event): event.htJet40ja = sum([x.pt() for x in objects40ja]) event.mhtJet40jveca = ROOT.reco.Particle.LorentzVector(-1.*(sum([x.px() for x in objects40ja])) , -1.*(sum([x.py() for x in objects40ja])), 0, 0 ) event.mhtJet40ja = event.mhtJet40jveca.pt() - event.mhtPhiJet40ja = event.mhtJet40jveca.phi() + event.mhtPhiJet40ja = event.mhtJet40jveca.phi() + + #For the vertex related variables + #A = selectedLeptons[0], B = selectedLeptons[1], C = selectedLeptons[2], D = selectedLeptons[3] + nlep = len(event.selectedLeptons) + + ##Variables related to IP + #Of one lepton w.r.t. the PV of the event + event.absIP3DA = absIP3D(event.selectedLeptons[0],event.goodVertices[0]) if nlep > 0 else (-1,-1) + event.absIP3DB = absIP3D(event.selectedLeptons[1],event.goodVertices[0]) if nlep > 1 else (-1,-1) + + event.absIP3DC = absIP3D(event.selectedLeptons[2],event.goodVertices[0]) if nlep > 2 else (-1,-1) + + event.absIP3DD = absIP3D(event.selectedLeptons[3],event.goodVertices[0]) if nlep > 3 else (-1,-1) + #Of one lepton w.r.t. the PV of the PV of the other leptons only + event.absIP3DApvBC = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[0],3,0) if nlep > 2 else (-1,-1) + event.absIP3DBpvAC = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[0],3,1) if nlep > 2 else (-1,-1) + event.absIP3DCpvAB = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[0],3,2) if nlep > 2 else (-1,-1) + + event.absIP3DApvBCD = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[3],4,0) if nlep > 3 else (-1,-1) + event.absIP3DBpvACD = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[3],4,1) if nlep > 3 else (-1,-1) + event.absIP3DCpvABD = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[3],4,2) if nlep > 3 else (-1,-1) + event.absIP3DDpvABC = absIP3Dtrkpvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[3],4,3) if nlep > 3 else (-1,-1) + + ##Variables related to chi2 + #Chi2 of all the good leptons of the event but one lepton + event.chi2pvtrksBCbutA = chi2pvtrks(event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[1],event.selectedLeptons[1],2) if nlep > 2 else (-1,-1) + event.chi2pvtrksACbutB = chi2pvtrks(event.selectedLeptons[0],event.selectedLeptons[2],event.selectedLeptons[0],event.selectedLeptons[0],2) if nlep > 2 else (-1,-1) + event.chi2pvtrksABbutC = chi2pvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[0],event.selectedLeptons[0],2) if nlep > 2 else (-1,-1) + + event.chi2pvtrksBCDbutA = chi2pvtrks(event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[3],event.selectedLeptons[1],3) if nlep > 3 else (-1,-1) + event.chi2pvtrksACDbutB = chi2pvtrks(event.selectedLeptons[0],event.selectedLeptons[2],event.selectedLeptons[3],event.selectedLeptons[0],3) if nlep > 3 else (-1,-1) + event.chi2pvtrksABDbutC = chi2pvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[3],event.selectedLeptons[0],3) if nlep > 3 else (-1,-1) + event.chi2pvtrksABCbutD = chi2pvtrks(event.selectedLeptons[0],event.selectedLeptons[1],event.selectedLeptons[2],event.selectedLeptons[0],3) if nlep > 3 else (-1,-1) self.makeMETs(event); diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_ee.txt b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_ee.txt index ed500608040e4..9fefd525f3e38 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_ee.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_ee.txt @@ -1,8 +1,8 @@ -== 2 good leptons: nLepGood == 2 || LepGood3_mva < 0.7 +== 2 good leptons: nLepGood10 == 2 cleanup: minMllAFAS > 12 pt2010: LepGood1_pt>20 && LepGood2_pt>10 pt2020_htllv100 : LepGood2_pt > 20 && LepGood1_pt+LepGood2_pt+met > 100 -lep MVA: min(LepGood1_mva,LepGood2_mva)> 0.7 +lep MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH)> 0.7 el el: abs(LepGood1_pdgId) == 11 && abs(LepGood2_pdgId) == 11 same-sign: LepGood1_charge*LepGood2_charge > 0 tight-charge: LepGood1_tightCharge > 1 && LepGood2_tightCharge > 1 diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_em.txt b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_em.txt index d362d8aa33b85..ab743010241be 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_em.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_em.txt @@ -1,8 +1,8 @@ -== 2 good leptons: nLepGood == 2 || LepGood3_mva < 0.7 +== 2 good leptons: nLepGood10 == 2 cleanup: minMllAFAS > 12 pt2010: LepGood1_pt>20 && LepGood2_pt>10 pt2020_htllv100 : LepGood2_pt > 20 && LepGood1_pt+LepGood2_pt+met > 100 -lep MVA: min(LepGood1_mva,LepGood2_mva)>0.7 +lep MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH) > 0.7 el mu: abs(LepGood1_pdgId) != abs(LepGood2_pdgId) same-sign: LepGood1_charge*LepGood2_charge > 0 tight-charge: LepGood1_tightCharge > (abs(LepGood1_pdgId) == 11) && LepGood2_tightCharge > (abs(LepGood2_pdgId) == 11) diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_mumu.txt b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_mumu.txt index 445b799ea76c5..0271c19bd07bb 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/2lss_mumu.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/2lss_mumu.txt @@ -1,8 +1,8 @@ -== 2 good leptons: nLepGood == 2 || LepGood3_mva < 0.7 +== 2 good leptons: nLepGood10 == 2 cleanup: minMllAFAS > 12 pt2010: LepGood1_pt>20 && LepGood2_pt>10 pt2020_htllv100 : LepGood2_pt > 20 && LepGood1_pt+LepGood2_pt+met > 100 -lep MVA: min(LepGood1_mva,LepGood2_mva) > 0.7 +lep MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH) > 0.7 mu mu: abs(LepGood1_pdgId) == 13 && abs(LepGood2_pdgId) == 13 same-sign: LepGood1_charge*LepGood2_charge > 0 tight-charge: LepGood1_tightCharge && LepGood2_tightCharge diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_3l_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_3l_plots.txt new file mode 100644 index 0000000000000..41b8c98df1afc --- /dev/null +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_3l_plots.txt @@ -0,0 +1,51 @@ +pt: LepGood3_pt: 20,0,100; XTitle="Fake lepton p_{T} [GeV]", Legend='TR' +pt_coarse: LepGood3_pt: [15,20,25,30,35,45,50,60,75,90 ] ; XTitle="Fake lepton p_{T} (GeV)", Density=True +eta: abs(LepGood3_eta): 20,0,2.5; XTitle="Fake lepton |#eta|", Legend='TR' +# Iso +relIso03: LepGood3_relIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3)", Legend='TL' +relIso04: LepGood3_relIso04: 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4)", Legend='TL' +chHadRIso04: LepGood3_chargedHadRelIso04: 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4\, ch had)", Legend='TR' +chHadRIso03: LepGood3_chargedHadRelIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, ch had)", Legend='TR' +neutRIso03: LepGood3_relIso03 - LepGood3_chargedHadRelIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +neutRIso04: LepGood3_relIso04 - LepGood3_chargedHadRelIso04: 20,0,1.0; XTitle="Fake lepton Iso/p_{T} (R 0.4\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +# Jet +jetDR: LepGood3_jetDR: 20,0,0.3; XTitle="Fake lepton #DeltaR(l\,jet)", Legend='TR' +jetBTag: max(LepGood3_jetBTagCSV,0): 20,0,1; XTitle="Fake lepton's jet b-tag disc.", Legend='TL', MoreY=1.25 +jetPtF: min(LepGood3_jetPtRatio,1.5): 24,0,1.2; XTitle="Fake lepton p_{T}(l)/p_{T}(jet)", Legend='TL' +# IP +sip3d: LepGood3_sip3d: 20,0,40; XTitle="Fake lepton SIP_{3D}", Legend='TR' +dxy: abs(LepGood3_dxy): 20,0,0.05; XTitle="Fake lepton |dxy|/1cm", Legend='TR', XNDiv=505 +dz: abs(LepGood3_dz): 20,0,0.2; XTitle="Fake lepton |dz|/1cm", Legend='TR', XNDiv=505 +# Common id +tightId: LepGood3_tightId: [-0.5,0.5,1.5]; XTitle="Lepton passes tight?", Legend='TL', XNDiv=505, Logy=True +trackerLayers: LepGood3_trackerLayers: 19,-0.5,18.5; XTitle="Tracker layers", Legend='TL' +pixelLayers: LepGood3_pixelLayers: [-0.5,0.5,1.5,2.5,3.5,4.5]; XTitle="Pixel layers", Legend='TL' +lostHits: LepGood3_lostHits: [-0.5,0.5,1.5,2.5,3.5]; XTitle="Lost inner hits", Legend='TR' +mvaTTH: LepGood3_mvaTTH: 20,-1,1; XTitle="TTH MVA Id", Legend='TR' +# Muon vars +nStations: LepGood3_nStations: [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Matched stations", Legend='TL' +trkKink: LepGood3_trkKink: 20,0,30; XTitle="Kink finder #chi^{2}", Legend='TR' +globalTrackChi2: LepGood3_globalTrackChi2: 20,0,4; XTitle="Global track #chi^{2}/ndf", Legend='TR' +caloCompatibility: LepGood3_caloCompatibility: 20,0,1; XTitle="Calo compatibility", Legend='TL' +# Electron vars +mvaId: LepGood3_mvaId: 20,-1,1; XTitle="Non-trig Ele MVA Id", Legend='TL' +mvaIdTrig: LepGood3_mvaIdTrig: 20,-1,1; XTitle="Trig Ele MVA Id", Legend='TL' +eleCutId: LepGood3_eleCutId: [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Ele CB Id: fail/V/L/M/T", Legend='TL' + + + + +#nJet25 : nJet25 : 8,-0.5,7.5 ; XTitle='N(jet\, p_{T} > 25)' +#nBJetLoose25 : nBJetLoose25 : 4,-0.5,3.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Loose)',XNDiv=505, Logy +#nBJetMedium25 : nBJetMedium25 : 3,-0.5,2.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Medium)',XNDiv=505, Logy +#nvtx: nVert: 20,0.5,40.5 ; XTitle="N(vertices)", Legend='TR' +#met: met: 40,0,40 ; XTitle="E_{T}^{miss} [GeV]" +#mht: mhtJet25 : 30,0,60 ; XTitle="H_{T}^{miss} [GeV]" +#metLD: met*0.00397 + mhtJet25*0.00265 : 60,-0.1,0.5 ; XTitle="E_{T}^{miss} LD" +#mZ1: mZ1: 20,81.2,101.2 ; XTitle="best m(l^{+}l^{-}) [GeV]", Legend='TR' +#mZ1_wide: mZ1: 70,40,120 ; XTitle="best m(l^{+}l^{-}) [GeV]", Legend='TR' +#m3l: m3l: 45,70,180 ; XTitle="m(l^{+}l^{-} l) [GeV]", Legend='TR' +#minMllAFAS: minMllAFAS: 10,0,120 ; XTitle="min m(ll') [GeV]", Legend='TR' +#nExtraLep : nLepGood-2 : 4,-0.5,3.5 ; XTitle='N extra lep.',XNDiv=505 +#ZZCand: mZ2 > 0: 2,-0.5,1.5 ; XTitle="Has ZZ* cand", Legend='TL', XNDiv=202 +#mtW: mtw_wz3l(LepGood1_pt,LepGood1_eta,LepGood1_phi,LepGood1_mass,LepGood2_pt,LepGood2_eta,LepGood2_phi,LepGood2_mass,LepGood3_pt,LepGood3_eta,LepGood3_phi,LepGood3_mass,mZ1,met,met_phi) : 36,0,180 ; XTitle="M_{T}(W#rightarrowlv)" diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l.txt index ef188ce2ee8e6..686e48eb611fd 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l.txt @@ -1,11 +1,11 @@ 2L OF/OS: nLepGood >= 3 && abs(LepGood1_pdgId+LepGood2_pdgId)==2 pt2010: LepGood1_pt>20 && LepGood2_pt>10 -lep MVA: min(LepGood1_mva,LepGood2_mva)>0.7 +lep MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH)>0.7 conv veto: (abs(LepGood1_pdgId) == 13 || (LepGood1_convVeto > 0 && LepGood1_lostHits == 0)) && (abs(LepGood2_pdgId) == 13 || (LepGood2_convVeto > 0 && LepGood2_lostHits == 0)) mll > 12: minMllAFAS > 12 Z veto: abs(mZ1-91.2) > 15 -met LD: nJet25 >= 4 || met*0.00397 + mhtJet25*0.00265 > 0.2 + 0.1*(mZ1 > 0) +met LD: nJet25 >= 4 || met_pt*0.00397 + mhtJet25*0.00265 > 0.2 + 0.1*(mZ1 > 0) 2j: nJet25>=2 2b loose: nBJetLoose25 >= 2 || nBJetMedium25 >= 1 2B tight: nBJetMedium25 >= 2 -3l loose: LepGood3_mva < 0.7 +3l loose: LepGood3_mvaTTH < 0.7 diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l_plots.txt deleted file mode 100644 index a9dd3a1a2fa9c..0000000000000 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_3l_plots.txt +++ /dev/null @@ -1,24 +0,0 @@ -#nJet25 : nJet25 : 8,-0.5,7.5 ; XTitle='N(jet\, p_{T} > 25)' -#nBJetLoose25 : nBJetLoose25 : 3,-0.5,2.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Loose)',XNDiv=505 -#nBJetMedium25 : nBJetMedium25 : 3,-0.5,2.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Medium)',XNDiv=505 -met: met: 30,0,300 ; XTitle="E_{T}^{miss} [GeV]" -met_log: met: 30,0,300 ; XTitle="E_{T}^{miss} [GeV]",Logy -metLD: met*0.00397 + mhtJet25*0.00265 : 30,-0.1,1.4 ; XTitle="E_{T}^{miss} LD" -metLD_log: met*0.00397 + mhtJet25*0.00265 : 30,-0.1,1.4 ; XTitle="E_{T}^{miss} LD",Logy -minmll: minMllAFAS: 30,0,150; XTitle="min m(ll) [GeV]", Legend='TR' -lepMVA2: min(LepGood1_mva,LepGood2_mva) : 20,-1,1; XTitle="Lepton MVA(l_{1}\,l_{2})",Legend='TL' -muMVA: (abs(LepGood1_pdgId)==13)*LepGood1_mva + (abs(LepGood2_pdgId)==13)*LepGood2_mva : 20,-1,1; XTitle="Muon MVA(l_{1} or l_{2})",Legend='TL' -elMVA: (abs(LepGood1_pdgId)==11)*LepGood1_mva + (abs(LepGood2_pdgId)==11)*LepGood2_mva : 20,-1,1; XTitle="Electron MVA(l_{1} or l_{2})",Legend='TL' -l1Pt: LepGood1_pt: 40,0,200; XTitle="Leading lepton p_{T} [GeV]", Legend='TR' -l2Pt: LepGood2_pt: 24,0,120; XTitle="Subleading lepton p_{T} [GeV]", Legend='TR' -l3Pt: LepGood3_pt: 20,0,100; XTitle="Third lepton p_{T} [GeV]", Legend='TR' -l3MVA: LepGood3_mva : 20,-1,1; XTitle="Third lepton MVA",Legend='TR' -l3MVACoarse: LepGood3_mva : [-1,-0.75,-0.5,-0.3,0.0,0.3,0.7,1.0]; XTitle="Third lepton MVA",Legend='TR',Density=True -l3chIso: LepGood3_chargedRelIso: 20,0,0.4; XTitle="Third lepton Iso/p_{T} (charged)", Legend='TR',Logy, LegendCutoff=0.003 -l3neIso: LepGood3_relIso - LepGood3_chargedRelIso: 20,0,0.4; XTitle="Third lepton Iso/p_{T} (neutral)", Legend='TR',Logy, LegendCutoff=0.003 -l3jetDR: LepGood3_jetDR: 20,0,0.5; XTitle="Third lepton #DeltaR(l\,jet)", Legend='TR' -l3jetBTag: max(LepGood3_jetBTagCSV,0): 20,0,1; XTitle="Third lepton's jet b-tag disc.", Legend='TR' -l3jetPtF: min(LepGood3_jetPtRatio,1.5): 20,0,1.5; XTitle="Third lepton p_{T}(l)/p_{T}(jet)", Legend='TR' -l3sip3d: LepGood3_sip3d: 20,0,10; XTitle="Third lepton SIP_{3D}", Legend='TR' -l3ldxy: log(abs(LepGood3_dxy)): 20,-15,0; XTitle="Third lepton log(|dxy|/1cm)", Legend='TL' -l3ldz: log(abs(LepGood3_dz)): 20,-15,0; XTitle="Third lepton log(|dz|/1cm)", Legend='TL' diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_ldatafake_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_ldatafake_plots.txt new file mode 100644 index 0000000000000..f7a65c166707d --- /dev/null +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_ldatafake_plots.txt @@ -0,0 +1,35 @@ +pt: if3(LepGood1_mvaTTH<0.7,LepGood1_pt,LepGood2_pt): 20,0,100; XTitle="Fake lepton p_{T} [GeV]", Legend='TR' +pt_coarse: if3(LepGood1_mvaTTH<0.7,LepGood1_pt,LepGood2_pt): [15,20,25,30,35,45,50,60,75,90 ] ; XTitle="Fake lepton p_{T} (GeV)", Density=True +eta: abs(if3(LepGood1_mvaTTH<0.7,LepGood1_eta,LepGood2_eta)): 20,0,2.5; XTitle="Fake lepton |#eta|", Legend='TR' +# Iso +relIso03: if3(LepGood1_mvaTTH<0.7,LepGood1_relIso03,LepGood2_relIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3)", Legend='TL' +relIso04: if3(LepGood1_mvaTTH<0.7,LepGood1_relIso04,LepGood2_relIso04): 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4)", Legend='TL' +chHadRIso04: if3(LepGood1_mvaTTH<0.7,LepGood1_chargedHadRelIso04,LepGood2_chargedHadRelIso04): 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4\, ch had)", Legend='TR' +chHadRIso03: if3(LepGood1_mvaTTH<0.7,LepGood1_chargedHadRelIso03,LepGood2_chargedHadRelIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, ch had)", Legend='TR' +neutRIso03: if3(LepGood1_mvaTTH<0.7,LepGood1_relIso03,LepGood2_relIso03) - if3(LepGood1_mvaTTH<0.7,LepGood1_chargedHadRelIso03,LepGood2_chargedHadRelIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +neutRIso04: if3(LepGood1_mvaTTH<0.7,LepGood1_relIso04,LepGood2_relIso04) - if3(LepGood1_mvaTTH<0.7,LepGood1_chargedHadRelIso04,LepGood2_chargedHadRelIso04): 20,0,1.0; XTitle="Fake lepton Iso/p_{T} (R 0.4\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +# Jet +jetDR: if3(LepGood1_mvaTTH<0.7,LepGood1_jetDR,LepGood2_jetDR): 20,0,0.3; XTitle="Fake lepton #DeltaR(l\,jet)", Legend='TR' +jetBTag: max(if3(LepGood1_mvaTTH<0.7,LepGood1_jetBTagCSV,LepGood2_jetBTagCSV),0): 20,0,1; XTitle="Fake lepton's jet b-tag disc.", Legend='TL', MoreY=1.25 +jetPtF: min(if3(LepGood1_mvaTTH<0.7,LepGood1_jetPtRatio,LepGood2_jetPtRatio),1.5): 24,0,1.2; XTitle="Fake lepton p_{T}(l)/p_{T}(jet)", Legend='TL' +# IP +sip3d: if3(LepGood1_mvaTTH<0.7,LepGood1_sip3d,LepGood2_sip3d): 20,0,40; XTitle="Fake lepton SIP_{3D}", Legend='TR' +dxy: abs(if3(LepGood1_mvaTTH<0.7,LepGood1_dxy,LepGood2_dxy)): 20,0,0.05; XTitle="Fake lepton |dxy|/1cm", Legend='TR', XNDiv=505 +dz: abs(if3(LepGood1_mvaTTH<0.7,LepGood1_dz,LepGood2_dz)): 20,0,0.2; XTitle="Fake lepton |dz|/1cm", Legend='TR', XNDiv=505 +# Common id +tightId: if3(LepGood1_mvaTTH<0.7,LepGood1_tightId,LepGood2_tightId): [-0.5,0.5,1.5]; XTitle="Lepton passes tight?", Legend='TL', XNDiv=505, Logy=True +trackerLayers: if3(LepGood1_mvaTTH<0.7,LepGood1_trackerLayers,LepGood2_trackerLayers): 19,-0.5,18.5; XTitle="Tracker layers", Legend='TL' +pixelLayers: if3(LepGood1_mvaTTH<0.7,LepGood1_pixelLayers,LepGood2_pixelLayers): [-0.5,0.5,1.5,2.5,3.5,4.5]; XTitle="Pixel layers", Legend='TL' +lostHits: if3(LepGood1_mvaTTH<0.7,LepGood1_lostHits,LepGood2_lostHits): [-0.5,0.5,1.5,2.5,3.5]; XTitle="Lost inner hits", Legend='TR' +mvaTTH: if3(LepGood1_mvaTTH<0.7,LepGood1_mvaTTH,LepGood2_mvaTTH): 20,-1,1; XTitle="TTH MVA Id", Legend='TR' +# Muon vars +nStations: if3(LepGood1_mvaTTH<0.7,LepGood1_nStations,LepGood2_nStations): [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Matched stations", Legend='TL' +trkKink: if3(LepGood1_mvaTTH<0.7,LepGood1_trkKink,LepGood2_trkKink): 20,0,30; XTitle="Kink finder #chi^{2}", Legend='TR' +globalTrackChi2: if3(LepGood1_mvaTTH<0.7,LepGood1_globalTrackChi2,LepGood2_globalTrackChi2): 20,0,4; XTitle="Global track #chi^{2}/ndf", Legend='TR' +caloCompatibility: if3(LepGood1_mvaTTH<0.7,LepGood1_caloCompatibility,LepGood2_caloCompatibility): 20,0,1; XTitle="Calo compatibility", Legend='TL' +# Electron vars +mvaId: if3(LepGood1_mvaTTH<0.7,LepGood1_mvaId,LepGood2_mvaId): 20,-1,1; XTitle="Non-trig Ele MVA Id", Legend='TL' +mvaIdTrig: if3(LepGood1_mvaTTH<0.7,LepGood1_mvaIdTrig,LepGood2_mvaIdTrig): 20,-1,1; XTitle="Trig Ele MVA Id", Legend='TL' +eleCutId: if3(LepGood1_mvaTTH<0.7,LepGood1_eleCutId,LepGood2_eleCutId): [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Ele CB Id: fail/V/L/M/T", Legend='TL' +#jetPt: if3(LepGood1_mvaTTH<0.7,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", Legend='TR', Density=True +#profile: if3(LepGood1_mvaTTH<0.7,LepGood1_pt,LepGood2_pt)\:if3(LepGood1_mvaTTH<0.7,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", YTitle="Lepton p_{T}", Legend='TL', Profile1D=True diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake.txt index 7138472d1e8ff..7218a7be1fda7 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake.txt @@ -1,12 +1,9 @@ -2L OF/OS: nLepGood10 == 2 +2L OF/OS: nLepGood10 == 2 && abs(LepGood1_pdgId+LepGood2_pdgId)==24 pt2020: LepGood1_pt>20 && LepGood2_pt>20 -same-sign: -pass MVA: max(LepGood1_tightFakeId,LepGood2_tightFakeId)>0.7 -fail MVA: max(LepGood1_tightFakeId,LepGood2_tightFakeId)>0.7 +pass MVA: max(LepGood1_mvaTTH,LepGood2_mvaTTH)>0.7 +fail MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH)<0.7 mll > 12: minMllAFAS > 12 -Z veto: abs(mZ1-91.2) > 15 -met LD: nJet25 >= 4 || met*0.00397 + mhtJet25*0.00265 > 0.2 + 0.1*(mZ1 > 0) +met LD: nJet25 >= 4 || met_pt*0.00397 + mhtJet25*0.00265 > 0.2 + 0.1*(mZ1 > 0) 2j: nJet25>=2 2b loose: nBJetLoose25 >= 2 || nBJetMedium25 >= 1 2B tight: nBJetMedium25 >= 2 -3l loose: LepGood3_mva < 0.7 diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake_plots.txt deleted file mode 100644 index 45b0723ec7812..0000000000000 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lfake_plots.txt +++ /dev/null @@ -1,11 +0,0 @@ -l3Pt: if3(LepGood1_tightFakeId==0,LepGood1_pt,LepGood2_pt): 20,0,100; XTitle="Failing lepton p_{T} [GeV]", Legend='TR' -l3relIso03: if3(LepGood1_tightFakeId==0,LepGood1_relIso03,LepGood2_relIso03): 20,0,1.0; XTitle="Failing lepton Iso/p_{T} (charged)", Legend='TR' -l3relIso: if3(LepGood1_tightFakeId==0,LepGood1_relIso,LepGood2_relIso): 20,0,1.0; XTitle="Failing lepton Iso/p_{T} (charged)", Legend='TR' -#l3chIso: if3(LepGood1_tightFakeId==0,LepGood1_chargedRelIso,LepGood2_chargedRelIso): 20,0,0.4; XTitle="Failing lepton Iso/p_{T} (charged)", Legend='TR',Logy, LegendCutoff=0.003 -#l3neIso: if3(LepGood1_tightFakeId==0,LepGood1_relIso,LepGood2_relIso) - if3(LepGood1_tightFakeId==0,LepGood1_chargedRelIso,LepGood2_chargedRelIso): 20,0,0.4; XTitle="Failing lepton Iso/p_{T} (neutral)", Legend='TR',Logy, LegendCutoff=0.003 -#l3jetDR: if3(LepGood1_tightFakeId==0,LepGood1_jetDR,LepGood2_jetDR): 20,0,0.5; XTitle="Failing lepton #DeltaR(l\,jet)", Legend='TR' -#l3jetBTag: max(if3(LepGood1_tightFakeId==0,LepGood1_jetBTagCSV,LepGood2_jetBTagCSV),0): 20,0,1; XTitle="Failing lepton's jet b-tag disc.", Legend='TR' -l3jetPtF: min(if3(LepGood1_tightFakeId==0,LepGood1_jetPtRatio,LepGood2_jetPtRatio),1.5): 20,0,1.5; XTitle="Failing lepton p_{T}(l)/p_{T}(jet)", Legend='TR' -l3sip3d: if3(LepGood1_tightFakeId==0,LepGood1_sip3d,LepGood2_sip3d): 20,0,10; XTitle="Failing lepton SIP_{3D}", Legend='TR' -l3dxy: abs(if3(LepGood1_tightFakeId==0,LepGood1_dxy,LepGood2_dxy)): 20,0,0.1; XTitle="Failing lepton |dxy|/1cm", Legend='TL' -l3dz: abs(if3(LepGood1_tightFakeId==0,LepGood1_dz,LepGood2_dz)): 20,0,1.0; XTitle="Failing lepton |dz|/1cm", Legend='TL' diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lmcfake_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lmcfake_plots.txt index 72d8f2fa1e140..cf81d51398468 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lmcfake_plots.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_tt_l_lmcfake_plots.txt @@ -1,16 +1,35 @@ -#l3Pt: if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt): 20,0,100; XTitle="Fake lepton p_{T} [GeV]", Legend='TR' -l3Pt : if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt): [15,20,25,30,35,45,50,60,75,90 ] ; XTitle="Fake lepton p_{T} (GeV)", Density=True -l3Eta: abs(if3(LepGood1_mcMatchId<=0,LepGood1_eta,LepGood2_eta)): 20,0,2.5; XTitle="Fake lepton |#eta|", Legend='TR' -l3relIso03: if3(LepGood1_mcMatchId<=0,LepGood1_relIso03,LepGood2_relIso03): 20,0,1.0; XTitle="Fake lepton Iso/p_{T}", Legend='TL' -#l3relIso: if3(LepGood1_mcMatchId<=0,LepGood1_relIso,LepGood2_relIso): 20,0,1.0; XTitle="Fake lepton Iso/p_{T} (charged)", Legend='TR' -#l3chIso: if3(LepGood1_mcMatchId<=0,LepGood1_chargedRelIso,LepGood2_chargedRelIso): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (charged)", Legend='TR',Logy, LegendCutoff=0.003 -#l3neIso: if3(LepGood1_mcMatchId<=0,LepGood1_relIso,LepGood2_relIso) - if3(LepGood1_mcMatchId<=0,LepGood1_chargedRelIso,LepGood2_chargedRelIso): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (neutral)", Legend='TR',Logy, LegendCutoff=0.003 -l3jetDR: if3(LepGood1_mcMatchId<=0,LepGood1_jetDR,LepGood2_jetDR): 20,0,0.5; XTitle="Fake lepton #DeltaR(l\,jet)", Legend='TR' -#l3jetBTag: max(if3(LepGood1_mcMatchId<=0,LepGood1_jetBTagCSV,LepGood2_jetBTagCSV),0): 20,0,1; XTitle="Fake lepton's jet b-tag disc.", Legend='TR' -l3jetPtF: min(if3(LepGood1_mcMatchId<=0,LepGood1_jetPtRatio,LepGood2_jetPtRatio),1.5): 20,0,1.0; XTitle="Fake lepton p_{T}(l)/p_{T}(jet)", Legend='TR' -l3sip3d: if3(LepGood1_mcMatchId<=0,LepGood1_sip3d,LepGood2_sip3d): 20,0,40; XTitle="Fake lepton SIP_{3D}", Legend='TR' -l3dxy: abs(if3(LepGood1_mcMatchId<=0,LepGood1_dxy,LepGood2_dxy)): 20,0,0.05; XTitle="Fake lepton |dxy|/1cm", Legend='TR', XNDiv=505 -l3dz: abs(if3(LepGood1_mcMatchId<=0,LepGood1_dz,LepGood2_dz)): 20,0,1.0; XTitle="Fake lepton |dz|/1cm", Legend='TR' -l3tight: if3(LepGood1_mcMatchId<=0,LepGood1_tightFakeId,LepGood2_tightFakeId): [-0.5,0.5,1.5]; XTitle="Lepton passes tight?", Legend='TL', XNDiv=505, Logy=True -l3jetPt: if3(LepGood1_mcMatchId<=0,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", Legend='TR', Density=True -l3profile: if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt)\:if3(LepGood1_mcMatchId<=0,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", YTitle="Lepton p_{T}", Legend='TL', Profile1D=True +pt: if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt): 20,0,100; XTitle="Fake lepton p_{T} [GeV]", Legend='TR' +pt_coarse: if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt): [15,20,25,30,35,45,50,60,75,90 ] ; XTitle="Fake lepton p_{T} (GeV)", Density=True +eta: abs(if3(LepGood1_mcMatchId<=0,LepGood1_eta,LepGood2_eta)): 20,0,2.5; XTitle="Fake lepton |#eta|", Legend='TR' +# Iso +relIso03: if3(LepGood1_mcMatchId<=0,LepGood1_relIso03,LepGood2_relIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3)", Legend='TL' +relIso04: if3(LepGood1_mcMatchId<=0,LepGood1_relIso04,LepGood2_relIso04): 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4)", Legend='TL' +chHadRIso04: if3(LepGood1_mcMatchId<=0,LepGood1_chargedHadRelIso04,LepGood2_chargedHadRelIso04): 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4\, ch had)", Legend='TR' +chHadRIso03: if3(LepGood1_mcMatchId<=0,LepGood1_chargedHadRelIso03,LepGood2_chargedHadRelIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, ch had)", Legend='TR' +neutRIso03: if3(LepGood1_mcMatchId<=0,LepGood1_relIso03,LepGood2_relIso03) - if3(LepGood1_mcMatchId<=0,LepGood1_chargedHadRelIso03,LepGood2_chargedHadRelIso03): 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +neutRIso04: if3(LepGood1_mcMatchId<=0,LepGood1_relIso04,LepGood2_relIso04) - if3(LepGood1_mcMatchId<=0,LepGood1_chargedHadRelIso04,LepGood2_chargedHadRelIso04): 20,0,1.0; XTitle="Fake lepton Iso/p_{T} (R 0.4\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +# Jet +jetDR: if3(LepGood1_mcMatchId<=0,LepGood1_jetDR,LepGood2_jetDR): 20,0,0.3; XTitle="Fake lepton #DeltaR(l\,jet)", Legend='TR' +jetBTag: max(if3(LepGood1_mcMatchId<=0,LepGood1_jetBTagCSV,LepGood2_jetBTagCSV),0): 20,0,1; XTitle="Fake lepton's jet b-tag disc.", Legend='TL', MoreY=1.25 +jetPtF: min(if3(LepGood1_mcMatchId<=0,LepGood1_jetPtRatio,LepGood2_jetPtRatio),1.5): 24,0,1.2; XTitle="Fake lepton p_{T}(l)/p_{T}(jet)", Legend='TL' +# IP +sip3d: if3(LepGood1_mcMatchId<=0,LepGood1_sip3d,LepGood2_sip3d): 20,0,40; XTitle="Fake lepton SIP_{3D}", Legend='TR' +dxy: abs(if3(LepGood1_mcMatchId<=0,LepGood1_dxy,LepGood2_dxy)): 20,0,0.05; XTitle="Fake lepton |dxy|/1cm", Legend='TR', XNDiv=505 +dz: abs(if3(LepGood1_mcMatchId<=0,LepGood1_dz,LepGood2_dz)): 20,0,0.2; XTitle="Fake lepton |dz|/1cm", Legend='TR', XNDiv=505 +# Common id +tightId: if3(LepGood1_mcMatchId<=0,LepGood1_tightId,LepGood2_tightId): [-0.5,0.5,1.5]; XTitle="Lepton passes tight?", Legend='TL', XNDiv=505, Logy=True +trackerLayers: if3(LepGood1_mcMatchId<=0,LepGood1_trackerLayers,LepGood2_trackerLayers): 19,-0.5,18.5; XTitle="Tracker layers", Legend='TL' +pixelLayers: if3(LepGood1_mcMatchId<=0,LepGood1_pixelLayers,LepGood2_pixelLayers): [-0.5,0.5,1.5,2.5,3.5,4.5]; XTitle="Pixel layers", Legend='TL' +lostHits: if3(LepGood1_mcMatchId<=0,LepGood1_lostHits,LepGood2_lostHits): [-0.5,0.5,1.5,2.5,3.5]; XTitle="Lost inner hits", Legend='TR' +mvaTTH: if3(LepGood1_mcMatchId<=0,LepGood1_mvaTTH,LepGood2_mvaTTH): 20,-1,1; XTitle="TTH MVA Id", Legend='TR' +# Muon vars +nStations: if3(LepGood1_mcMatchId<=0,LepGood1_nStations,LepGood2_nStations): [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Matched stations", Legend='TL' +trkKink: if3(LepGood1_mcMatchId<=0,LepGood1_trkKink,LepGood2_trkKink): 20,0,30; XTitle="Kink finder #chi^{2}", Legend='TR' +globalTrackChi2: if3(LepGood1_mcMatchId<=0,LepGood1_globalTrackChi2,LepGood2_globalTrackChi2): 20,0,4; XTitle="Global track #chi^{2}/ndf", Legend='TR' +caloCompatibility: if3(LepGood1_mcMatchId<=0,LepGood1_caloCompatibility,LepGood2_caloCompatibility): 20,0,1; XTitle="Calo compatibility", Legend='TL' +# Electron vars +mvaId: if3(LepGood1_mcMatchId<=0,LepGood1_mvaId,LepGood2_mvaId): 20,-1,1; XTitle="Non-trig Ele MVA Id", Legend='TL' +mvaIdTrig: if3(LepGood1_mcMatchId<=0,LepGood1_mvaIdTrig,LepGood2_mvaIdTrig): 20,-1,1; XTitle="Trig Ele MVA Id", Legend='TL' +eleCutId: if3(LepGood1_mcMatchId<=0,LepGood1_eleCutId,LepGood2_eleCutId): [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Ele CB Id: fail/V/L/M/T", Legend='TL' +#jetPt: if3(LepGood1_mcMatchId<=0,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", Legend='TR', Density=True +#profile: if3(LepGood1_mcMatchId<=0,LepGood1_pt,LepGood2_pt)\:if3(LepGood1_mcMatchId<=0,LepGood1_pt/LepGood1_jetPtRatio,LepGood2_pt/LepGood2_jetPtRatio) : [20,27.5,35,42.5,50,57.5,65,72.5,80,87.5,95,110,125,140]; XTitle="Lepton p_{T}(jet)", YTitle="Lepton p_{T}", Legend='TL', Profile1D=True diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l.txt index 1ab6467aa5e2e..7db9b30f2b24f 100644 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l.txt +++ b/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l.txt @@ -1,10 +1,10 @@ 2L SF/OS: nLepGood >= 3 && abs(LepGood1_pdgId+LepGood2_pdgId)==0 -lep MVA: min(LepGood1_mva,LepGood2_mva)>0.7 +lep MVA: min(LepGood1_mvaTTH,LepGood2_mvaTTH)>0.7 conv veto: (abs(LepGood1_pdgId) == 13 || (LepGood1_convVeto > 0 && LepGood1_lostHits == 0)) && (abs(LepGood2_pdgId) == 13 || (LepGood2_convVeto > 0 && LepGood2_lostHits == 0)) mll > 12: minMllAFAS > 12 Z peak: abs(mZ1-91.2) < 10 Z12: abs(mZ1 - mass_2(LepGood1_pt,LepGood1_eta,LepGood1_phi,LepGood1_mass,LepGood2_pt,LepGood2_eta,LepGood2_phi,LepGood2_mass)) < 0.01 -mtW40: mtw_wz3l(LepGood1_pt,LepGood1_eta,LepGood1_phi,LepGood1_mass,LepGood2_pt,LepGood2_eta,LepGood2_phi,LepGood2_mass,LepGood3_pt,LepGood3_eta,LepGood3_phi,LepGood3_mass,mZ1,met,met_phi) < 40 -met LD < 0.30: met*0.00397 + mhtJet25*0.00265 < 0.30 +mtW40: mtw_wz3l(LepGood1_pt,LepGood1_eta,LepGood1_phi,LepGood1_mass,LepGood2_pt,LepGood2_eta,LepGood2_phi,LepGood2_mass,LepGood3_pt,LepGood3_eta,LepGood3_phi,LepGood3_mass,mZ1,met_pt,met_phi) < 40 +met LD < 0.30: met_pt*0.00397 + mhtJet25*0.00265 < 0.30 lep veto: nLepGood == 3 #l3pt : LepGood3_pt < 30 diff --git a/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l_plots.txt b/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l_plots.txt deleted file mode 100644 index b56b0f52ed423..0000000000000 --- a/CMGTools/TTHAnalysis/python/plotter/bins/cr_z_3l_plots.txt +++ /dev/null @@ -1,37 +0,0 @@ -nJet25 : nJet25 : 8,-0.5,7.5 ; XTitle='N(jet\, p_{T} > 25)' -nBJetLoose25 : nBJetLoose25 : 4,-0.5,3.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Loose)',XNDiv=505, Logy -#nBJetMedium25 : nBJetMedium25 : 3,-0.5,2.5 ; XTitle='N(jet\, p_{T} > 25\, CVS Medium)',XNDiv=505, Logy -nvtx: nVert: 20,0.5,40.5 ; XTitle="N(vertices)", Legend='TR' -met: met: 40,0,40 ; XTitle="E_{T}^{miss} [GeV]" -#mht: mhtJet25 : 30,0,60 ; XTitle="H_{T}^{miss} [GeV]" -metLD: met*0.00397 + mhtJet25*0.00265 : 60,-0.1,0.5 ; XTitle="E_{T}^{miss} LD" -mZ1: mZ1: 20,81.2,101.2 ; XTitle="best m(l^{+}l^{-}) [GeV]", Legend='TR' -#mZ1_wide: mZ1: 70,40,120 ; XTitle="best m(l^{+}l^{-}) [GeV]", Legend='TR' -m3l: m3l: 45,70,180 ; XTitle="m(l^{+}l^{-} l) [GeV]", Legend='TR' -#minMllAFAS: minMllAFAS: 10,0,120 ; XTitle="min m(ll') [GeV]", Legend='TR' -#nExtraLep : nLepGood-2 : 4,-0.5,3.5 ; XTitle='N extra lep.',XNDiv=505 -#ZZCand: mZ2 > 0: 2,-0.5,1.5 ; XTitle="Has ZZ* cand", Legend='TL', XNDiv=202 -#lepMVA2: min(LepGood1_mva,LepGood2_mva) : 20,-1,1; XTitle="Lepton MVA(l_{1}\,l_{2})",Legend='TL' -#lepMVA2: min(LepGood1_mva,LepGood2_mva) : 20,-1,1; XTitle="Lepton MVA(l_{1}\,l_{2})",Legend='TL' -#l1Pt: LepGood1_pt: 40,0,100; XTitle="Leading lepton p_{T} [GeV]", Legend='TR' -#l2Pt: LepGood2_pt: 40,0,80; XTitle="Subleading lepton p_{T} [GeV]", Legend='TR' -#l3q: LepGood3_charge: 5,-1.5,3.5; XTitle="Third lepton charge", Legend='TR', XNDiv=505 -l3Pt: LepGood3_pt: 20,0,50; XTitle="Third lepton p_{T} [GeV]", Legend='TR' -l3Pt_log: LepGood3_pt: 20,0,50; XTitle="Third lepton p_{T} [GeV]", Legend='TR', Logy -l3MVA: LepGood3_mva : 20,-1,1; XTitle="Third lepton MVA",Legend='TR' -l3MVA_log: LepGood3_mva : 20,-1,1; XTitle="Third lepton MVA",Legend='TR',Logy, LegendCutoff=1e-3 -l3chIso: LepGood3_chargedRelIso: 20,0,0.4; XTitle="Third lepton Iso/p_{T} (charged)", Legend='TR',Logy, LegendCutoff=0.003 -l3neIso: LepGood3_relIso - LepGood3_chargedRelIso: 20,0,0.4; XTitle="Third lepton Iso/p_{T} (neutral)", Legend='TR',Logy, LegendCutoff=0.003 -l3jetDR: LepGood3_jetDR: 20,0,0.5; XTitle="Third lepton #DeltaR(l\,jet)", Legend='TR' -l3jetBTag: max(LepGood3_jetBTagCSV,0): 20,0,1; XTitle="Third lepton's jet b-tag disc.", Legend='TR' -l3jetPtF: min(LepGood3_jetPtRatio,1.5): 20,0,1.5; XTitle="Third lepton p_{T}(l)/p_{T}(jet)", Legend='TR' -l3sip3d: LepGood3_sip3d: 20,0,10; XTitle="Third lepton SIP_{3D}", Legend='TR' -l3ldxy: log(abs(LepGood3_dxy)): 24,-12,0; XTitle="Third lepton log(|dx|/1cm)", Legend='TL' -l3ldz: log(abs(LepGood3_dz)): 24,-12,0; XTitle="Third lepton log(|dz|/1cm)", Legend='TL' -l3mvaId: LepGood3_mvaId : 50,-1,1; XTitle="Third electron ID MVA",Legend='TL' -l3mvaId_zoom: LepGood3_mvaId : 30,0.4,1; XTitle="Third electron ID MVA",Legend='TL' -l3mvaId_zoom2: LepGood3_mvaId : 40,0.9,1; XTitle="Third electron ID MVA",Legend='TL' -l3innerHits: LepGood3_lostHits : 2,-0.5,1.5; XTitle="Third electron lost hits",Legend='TL' -l3tkHits: (abs(LepGood3_pdgId)==13)*LepGood3_lostHits : 15,0.5,30.5; XTitle="Third muon hits",Legend='TL' -l3tightId: (abs(LepGood3_pdgId)==13)*LepGood3_tightId : 2,-0.5,1.5; XTitle="Third muon tight id",Legend='TL' -mtW: mtw_wz3l(LepGood1_pt,LepGood1_eta,LepGood1_phi,LepGood1_mass,LepGood2_pt,LepGood2_eta,LepGood2_phi,LepGood2_mass,LepGood3_pt,LepGood3_eta,LepGood3_phi,LepGood3_mass,mZ1,met,met_phi) : 36,0,180 ; XTitle="M_{T}(W#rightarrowlv)" diff --git a/CMGTools/TTHAnalysis/python/plotter/mca-ttsplit.txt b/CMGTools/TTHAnalysis/python/plotter/mca-ttsplit.txt index 22302ace2fa24..80d9d7d39ae51 100644 --- a/CMGTools/TTHAnalysis/python/plotter/mca-ttsplit.txt +++ b/CMGTools/TTHAnalysis/python/plotter/mca-ttsplit.txt @@ -4,7 +4,7 @@ # --- TT+W/Z/WW (TTWW usually quite negligible) ttV : TTWJets: 0.232 ; FillColor=ROOT.kBlue-9 ttV : TTZJets: 0.208 ; FillColor=ROOT.kBlue-9 -ttV : TTWWJets: 0.002037 ; FillColor=ROOT.kBlue-9 +#ttV : TTWWJets: 0.002037 ; FillColor=ROOT.kBlue-9 # --- Multiboson #VVV : WWWJets: 0.08217 ; FillColor=ROOT.kViolet #VVV : WWZJets: 0.0633 ; FillColor=ROOT.kViolet @@ -20,10 +20,10 @@ ttV : TTWWJets: 0.002037 ; FillColor=ROOT.kBlue-9 #ZZ : ZZTo4tau: 0.07691 ; FillColor=ROOT.kAzure-9 # -- TTbar and single top -TTb : TTJetsSem: 107.53*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)) : LepGood3_mcMatchAny > 1; FillColor=ROOT.kGreen-5, Label="tt + b\#rightarrowl" -TTl : TTJetsSem: 107.53*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)) : LepGood3_mcMatchAny <= 1; FillColor=ROOT.kGray, Label="tt + j\#rightarrowl" -TTb : TTJetsLep: 25.77*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)): LepGood3_mcMatchAny > 1; FillColor=ROOT.kGreen-5, Label="tt + b\#rightarrowl" -TTl : TTJetsLep: 25.77*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)): LepGood3_mcMatchAny <= 1; FillColor=ROOT.kGray, Label="tt + j\#rightarrowl" +TT1lb : TTJetsSem: 107.53*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)) : LepGood1_mcMatchAny > 1 || LepGood2_mcMatchAny > 1; FillColor=ROOT.kGreen-5, Label="tt\, b\#rightarrowl" +TT1lj : TTJetsSem: 107.53*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)) : LepGood1_mcMatchAny <= 1 && LepGood2_mcMatchAny <= 1; FillColor=ROOT.kGray, Label="tt\, j\#rightarrowl" +TT2lb : TTJetsLep: 25.77*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)): LepGood3_mcMatchAny > 1; FillColor=ROOT.kGreen-5, Label="tt2l + b\#rightarrowl" +TT2lj : TTJetsLep: 25.77*(1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312)): LepGood3_mcMatchAny <= 1; FillColor=ROOT.kGray, Label="tt2l + j\#rightarrowl" # # Top+W associated prod. TW : TtW: 11.73 ; FillColor=ROOT.kGray+2, Label="tW" diff --git a/CMGTools/TTHAnalysis/python/plotter/mca.txt b/CMGTools/TTHAnalysis/python/plotter/mca.txt index 5acf1797c7fa7..f37195479f05e 100644 --- a/CMGTools/TTHAnalysis/python/plotter/mca.txt +++ b/CMGTools/TTHAnalysis/python/plotter/mca.txt @@ -55,7 +55,8 @@ WWDPI: WWDPI : 0.5879; FillColor=ROOT.kViolet-6, Label="WW DPI" # # leptonic and inclusive decays (NNLO+NNLL cross sections) TT : TTJetsLep: 25.77: 1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312) ; FillColor=ROOT.kGray, NormSystematic=0.2 -TT : TTJetsSem: 107.53: 1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312) ; FillColor=ROOT.kGray, NormSystematic=0.2 +TT : TTJetsSem: 107.53/2: 1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312) ; FillColor=ROOT.kGray, NormSystematic=0.2 +TT : TTJetsSem2: 107.53/2: 1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312) ; FillColor=ROOT.kGray, NormSystematic=0.2 TT : TTJetsHad: 112.16: 1.18246 + 0.00000210061*GenTop1_pt*(GenTop1_pt - 2*463.312) ; FillColor=ROOT.kGray, NormSystematic=0.2 # --- older samples #TT : TTLep: 25.77 ; FillColor=ROOT.kGray diff --git a/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva.txt b/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva.txt index 60d541ca42640..3d9e2cc796898 100644 --- a/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva.txt +++ b/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva.txt @@ -1,5 +1,5 @@ -2L SF/OS: nLepGood >= 2 && LepGood1_pdgId == -LepGood2_pdgId && LepGood3_pt < 10 +2L SF/OS: nLepGood10 == 2 && LepGood1_pdgId == -LepGood2_pdgId muon: abs(LepGood1_pdgId) == 13 -metVeto: met < 30 -tightTag: LepGood1_pt > 25 && LepGood1_relIso < 0.2 +metVeto: met_pt < 30 +tightTag: LepGood1_pt > 25 && LepGood1_relIso03 < 0.2 m(ll): minMllAFAS > 60 && mZ1>0 && mZ1 < 120 diff --git a/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva_plots.txt b/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva_plots.txt index a31778ac7e751..31ea8280e4227 100644 --- a/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva_plots.txt +++ b/CMGTools/TTHAnalysis/python/plotter/standard-candles/zmm-4mva_plots.txt @@ -1,18 +1,36 @@ -mll: mZ1: 80,70,110 ; XTitle="best m(l^{+}l^{-}') [GeV]", Legend='TR' -mll_log: mZ1: 180,60,120 ; XTitle="best m(l^{+}l^{-}') [GeV]", Legend='TR', Logy -nvtx: nVert: 40,0.5,40.5 ; XTitle="N(vertices)", Legend='TR' -lep2MVA: LepGood2_mva: 40,-1.0,1.0; XTitle="Second lepton MVA", Legend='TL' -lep2pt: LepGood2_pt: 100,0,100; XTitle="Second lepton p_{T} [GeV]", Legend='TR' -lep2eta: LepGood2_eta: 50,-2.5,2.5; XTitle="Second lepton #eta ", Legend='TR' -lep2chIso: LepGood2_chargedRelIso: 40,0,0.4; XTitle="leading lepton Iso/p_{T} (Ch Had)", Legend='TR',Logy -lep2neIso: LepGood2_relIso - LepGood2_chargedRelIso: 40,0,0.4; XTitle="leading lepton Iso/p_{T} (Ne Had)", Legend='TR',Logy -lep2jetDR: LepGood2_jetDR: 50,0,0.25; XTitle="Second lepton #DeltaR(l\,jet)", Legend='TR' -lep2jetBTag: max(LepGood2_jetBTagCSV,0): 20,0,1; XTitle="Second lepton's jet b-tag disc.", Legend='TR' -lep2jetPtF: min(LepGood2_jetPtRatio,1.5): 50,0,1.5; XTitle="Second lepton p_{T}(l)/p_{T}(jet)", Legend='TR' -lep2sip3d: LepGood2_sip3d: 50,0,5; XTitle="Second lepton SIP_{3D}", Legend='TR' -lep2ldxy: log(abs(LepGood2_dxy)): 50,-15,0; XTitle="Second lepton log(|dx|/1cm)", Legend='TR' -lep2ldz: log(abs(LepGood2_dz)): 50,-15,0; XTitle="Second lepton log(|dz|/1cm)", Legend='TR' -lep2mvaId: LepGood2_mvaId : 50,-1,1; XTitle="Second electron ID MVA",Legend='TL' -lep2mvaId_zoom: LepGood2_mvaId : 30,0.4,1; XTitle="Second electron ID MVA",Legend='TL' -lep2mvaId_zoom2: LepGood2_mvaId : 40,0.9,1; XTitle="Second electron ID MVA",Legend='TL' -lep2innerHits: LepGood2_lostHits : 2,-0.5,1.5; XTitle="Second electron lost hits hits",Legend='TR' +pt: LepGood2_pt: 20,0,100; XTitle="Fake lepton p_{T} [GeV]", Legend='TR' +pt_coarse: LepGood2_pt: [15,20,25,30,35,45,50,60,75,90 ] ; XTitle="Fake lepton p_{T} (GeV)", Density=True +eta: abs(LepGood2_eta): 20,0,2.5; XTitle="Fake lepton |#eta|", Legend='TR' +# Iso +relIso03: LepGood2_relIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3)", Legend='TL' +relIso04: LepGood2_relIso04: 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4)", Legend='TL' +chHadRIso04: LepGood2_chargedHadRelIso04: 20,0,0.8; XTitle="Fake lepton Iso/p_{T} (R 0.4\, ch had)", Legend='TR' +chHadRIso03: LepGood2_chargedHadRelIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, ch had)", Legend='TR' +neutRIso03: LepGood2_relIso03 - LepGood2_chargedHadRelIso03: 20,0,0.4; XTitle="Fake lepton Iso/p_{T} (R 0.3\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +neutRIso04: LepGood2_relIso04 - LepGood2_chargedHadRelIso04: 20,0,1.0; XTitle="Fake lepton Iso/p_{T} (R 0.4\, neutral)", Legend='TR',Logy, LegendCutoff=0.003 +# Jet +jetDR: LepGood2_jetDR: 20,0,0.3; XTitle="Fake lepton #DeltaR(l\,jet)", Legend='TR' +jetBTag: max(LepGood2_jetBTagCSV,0): 20,0,1; XTitle="Fake lepton's jet b-tag disc.", Legend='TL', MoreY=1.25 +jetPtF: min(LepGood2_jetPtRatio,1.5): 24,0,1.2; XTitle="Fake lepton p_{T}(l)/p_{T}(jet)", Legend='TL' +# IP +sip3d: LepGood2_sip3d: 20,0,40; XTitle="Fake lepton SIP_{3D}", Legend='TR' +dxy: abs(LepGood2_dxy): 20,0,0.05; XTitle="Fake lepton |dxy|/1cm", Legend='TR', XNDiv=505 +dz: abs(LepGood2_dz): 20,0,0.2; XTitle="Fake lepton |dz|/1cm", Legend='TR', XNDiv=505 +# Common id +tightId: LepGood2_tightId: [-0.5,0.5,1.5]; XTitle="Lepton passes tight?", Legend='TL', XNDiv=505, Logy=True +trackerLayers: LepGood2_trackerLayers: 19,-0.5,18.5; XTitle="Tracker layers", Legend='TL' +pixelLayers: LepGood2_pixelLayers: [-0.5,0.5,1.5,2.5,3.5,4.5]; XTitle="Pixel layers", Legend='TL' +lostHits: LepGood2_lostHits: [-0.5,0.5,1.5,2.5,3.5]; XTitle="Lost inner hits", Legend='TR' +mvaTTH: LepGood2_mvaTTH: 20,-1,1; XTitle="TTH MVA Id", Legend='TR' +# Muon vars +nStations: LepGood2_nStations: [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Matched stations", Legend='TL' +trkKink: LepGood2_trkKink: 20,0,30; XTitle="Kink finder #chi^{2}", Legend='TR' +globalTrackChi2: LepGood2_globalTrackChi2: 20,0,4; XTitle="Global track #chi^{2}/ndf", Legend='TR' +caloCompatibility: LepGood2_caloCompatibility: 20,0,1; XTitle="Calo compatibility", Legend='TL' +# Electron vars +mvaId: LepGood2_mvaId: 20,-1,1; XTitle="Non-trig Ele MVA Id", Legend='TL' +mvaIdTrig: LepGood2_mvaIdTrig: 20,-1,1; XTitle="Trig Ele MVA Id", Legend='TL' +eleCutId: LepGood2_eleCutId: [-0.5,0.5,1.5,2.5,3.5,4.5,5.5]; XTitle="Ele CB Id: fail/V/L/M/T", Legend='TL' + + + diff --git a/CMGTools/TTHAnalysis/python/samples/ComponentCreator.py b/CMGTools/TTHAnalysis/python/samples/ComponentCreator.py index f17fca91166a3..793dca6d61cf9 100644 --- a/CMGTools/TTHAnalysis/python/samples/ComponentCreator.py +++ b/CMGTools/TTHAnalysis/python/samples/ComponentCreator.py @@ -1,6 +1,8 @@ import CMGTools.RootTools.fwlite.Config as cfg from CMGTools.Production.datasetToSource import datasetToSource, myDatasetToSource from CMGTools.Production.datasetInformation import DatasetInformation +from CMGTools.Production import eostools +import re class ComponentCreator(object): def makeMCComponent(self,name,dataset,user,pattern): @@ -41,24 +43,9 @@ def makePrivateMCComponent(self,name,dataset,files): ### MM def makeMyPrivateMCComponent(self,name,dataset,user,pattern,dbsInstance): - #entries = findMyPrimaryDatasetNumFiles(dataset, -1, -1) - #dbs = 'das_client.py --query="file dataset=%s instance=prod/phys03"' % dataset - #dbsOut = os.popen(dbs) - #files = [] - #filesDBS = [] - #for line in dbsOut: - # if line.find('/store')==-1: - # continue - # line = line.rstrip() - # # print 'line',line - # filesDBS.append(line) - component = cfg.MCComponent( dataset=dataset, name = name, - ##files = ['root://eoscms//eos/cms%s' % f for f in filesDBS], - ##files = self.getListOfFilesDBS(dataset, dbsInstance), - #files = getListOfFilesDBS(dataset, dbsInstance), files = self.getMyFiles(dataset, user, pattern, dbsInstance), xSection = 1, nGenEvents = 1, @@ -69,6 +56,30 @@ def makeMyPrivateMCComponent(self,name,dataset,user,pattern,dbsInstance): return component ### MM + def makeMCComponentFromEOS(self,name,dataset,path,pattern=".*root"): + from CMGTools.Production.dataset import getDatasetFromCache, writeDatasetToCache + if "%" in path: path = path % dataset; + print path + try: + files = getDatasetFromCache('EOS%{path}%{pattern}.pck'.format(path = path.replace('/','_'), pattern = pattern)) + except IOError: + files = [ 'root://eoscms/'+x for x in eostools.listFiles('/eos/cms'+path) if re.match(pattern,x) ] + if len(files) == 0: + raise RuntimeError, "ERROR making component %s: no files found under %s matching '%s'" % (name,path,pattern) + writeDatasetToCache('EOS%{path}%{pattern}.pck'.format(path = path.replace('/','_'), pattern = pattern), files) + component = cfg.MCComponent( + dataset=dataset, + name = name, + files = files, + xSection = 1, + nGenEvents = 1, + triggers = [], + effCorrFactor = 1, + ) + return component + + + def makeDataComponent(self,name,datasets,user,pattern): files=[] @@ -108,43 +119,3 @@ def getSkimEfficiency(self,dataset,user): print 'ERROR FRACTION IS ONLY ',fraction return fraction - -#### MM -# ### Function to get files on DBS prod/phys03 -# def getListOfFilesDBS(self, dataset, dbsInstance): -# entries = findMyPrimaryDatasetNumFiles(dataset, dbsInstance, -1, -1) -# #print entries -# filesDBS = [] -# dbs = 'das_client.py --query="file dataset=%s instance=prod/%s" --limit=%s' % (dataset, dbsInstance, entries) -# dbsOut = os.popen(dbs) -# for line in dbsOut: -# if line.find('/store')==-1: -# continue -# line = line.rstrip() -# # print 'line',line -# filesDBS.append(line) -# return ['root://eoscms//eos/cms%s' % f for f in filesDBS] -# -# -#def findMyPrimaryDatasetNumFiles(dataset, dbsInstance, runmin, runmax): -# -# query, qwhat = dataset, "dataset" -# if "#" in dataset: qwhat = "block" -# if runmin >0 or runmax > 0: -# if runmin == runmax: -# query = "%s run=%d" % (query,runmin) -# else: -# print "WARNING: queries with run ranges are slow in DAS" -# query = "%s run between [%d, %d]" % (query,runmin if runmin > 0 else 1, runmax if runmax > 0 else 999999) -# dbs='das_client.py --query="summary %s=%s instance=prod/%s"'%(qwhat, query, dbsInstance) -# dbsOut = os.popen(dbs).readlines() -# entries = [] -# for line in dbsOut: -# line = line.replace('\n','') -# if "nfiles" in line: -# entries.append(int(line.split(":")[1])) -# if entries: -# return sum(entries) -# return -1 -#### MM - diff --git a/CMGTools/TTHAnalysis/python/samples/samples_13TeV_CSA14.py b/CMGTools/TTHAnalysis/python/samples/samples_13TeV_CSA14.py index 60be79baf4f44..89da635b1b946 100644 --- a/CMGTools/TTHAnalysis/python/samples/samples_13TeV_CSA14.py +++ b/CMGTools/TTHAnalysis/python/samples/samples_13TeV_CSA14.py @@ -125,9 +125,9 @@ GluGluToHToGG_Flat20to50 = kreator.makePrivateMCComponent("GluGluToHToGG_Flat20to50", "/GluGluToHToGG_M-125_13TeV-powheg-pythia6/Spring14dr-Flat20to50_POSTLS170_V5-v1/AODSIM", [ "/store/cmst3/user/gpetrucc/miniAOD/v1/GluGluToHToGG_M-125_13TeV-powheg-pythia6_Flat20to50_PAT_big.root" ]) VBFHTauTau_PUS14 = kreator.makePrivateMCComponent("VBFHTauTau_PUS14", "/VBF_HToTauTau_M-125_13TeV-powheg-pythia6/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM", ["/store/cmst3/user/gpetrucc/miniAOD/v1/VBF_HToTauTau_M-125_13TeV-powheg-pythia6_PU_S14_PAT.root" ]) TTHToWW_PUS14 = kreator.makePrivateMCComponent("TTHToWW_PUS14", "/TTbarH_HToWWTo2LAndTauNu_M-125_13TeV_pythia6/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM", [ "/store/cmst3/user/gpetrucc/miniAOD/v1/TTbarH_HToWWTo2LAndTauNu_M-125_13TeV_pythia6_PU_S14_PAT.root" ]) +TTHnlo_S14 = kreator.makeMCComponentFromEOS('TTHnlo_S14', '/TTbarH_M-125_13TeV_amcatnlo-pythia8-tauola/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM', '/store/cmst3/user/gpetrucc/%s/miniAODTest_CMSSW708_PR5037') - -mcSamplesTest = [ DYJetsM50_Flat20to50, GluGluToHToZZTo4L_PUS14, GluGluToHToGG_Flat20to50, VBFHTauTau_PUS14, TTHToWW_PUS14 ] +mcSamplesTest = [ DYJetsM50_Flat20to50, GluGluToHToZZTo4L_PUS14, GluGluToHToGG_Flat20to50, VBFHTauTau_PUS14, TTHToWW_PUS14, TTHnlo_S14] ## SOME PRIVATELY PRODUCED 50ns SAMPLES @@ -167,11 +167,21 @@ ZJetsToNuNu_HT200to400_PU_S14_POSTLS170 = kreator.makeMyPrivateMCComponent("ZJetsToNuNu_HT200to400_PU_S14_POSTLS170", "/ZJetsToNuNu_HT-200to400_Tune4C_13TeV-madgraph-tauola/phys_susy-miniAODforSusy_ZJetsToNuNu_HT-200to400_Tune4C_13TeV-madgraph-tauola_Spring14dr-PU_S14_POSTLS170-af38aa319b7b7c91a6797b31c3be19b7/USER", "PRIVATE", ".*root", "phys03") -#mcSamplesCSA14_PU40bx50 = [ DYJetsM50_HT100to200_PU_S14_POSTLS170, DYJetsM50_HT200to400_PU_S14_POSTLS170, DYJetsM50_HT400to600_PU_S14_POSTLS170, DYJetsM50_HT600toInf_PU_S14_POSTLS170, GJets_HT100to200_PU_S14_POSTLS170, GJets_HT200to400_PU_S14_POSTLS170, GJets_HT400to600_PU_S14_POSTLS170, QCD_Pt1000to1400_PU_S14_POSTLS170, QCD_Pt10to15_PU_S14_POSTLS170, QCD_Pt120to170_PU_S14_POSTLS170, QCD_Pt1400to1800_PU_S14_POSTLS170, QCD_Pt1800_PU_S14_POSTLS170, QCD_Pt300to470_PU_S14_POSTLS170, QCD_Pt30to50_PU_S14_POSTLS170, QCD_Pt470to600_PU_S14_POSTLS170, QCD_Pt50to80_PU_S14_POSTLS170, QCD_Pt5to10_PU_S14_POSTLS170, QCD_Pt600to800_PU_S14_POSTLS170, QCD_Pt800to1000_PU_S14_POSTLS170, QCD_Pt80to120_PU_S14_POSTLS170, TTJets_MSDecaysCKM_central_PU_S14_POSTLS170, WJetsToLNu_HT100to200_PU_S14_POSTLS170, WJetsToLNu_HT200to400_PU_S14_POSTLS170, WJetsToLNu_HT400to600_PU_S14_POSTLS170, WJetsToLNu_HT600toInf_PU_S14_POSTLS170, ZJetsToNuNu_HT200to400_PU_S14_POSTLS170 ] +T1tttt2J_6_PU_S14_POSTLS170 = kreator.makeMyPrivateMCComponent("T1tttt2J_6_PU_S14_POSTLS170","/SMS-T1tttt_2J_mGl-1500_mLSP-100_Tune4C_13TeV-madgraph-tauola/phys_susy-miniAODforSusy_SMS-T1tttt_2J_mGl-1500_mLSP-100_Tune4C_13TeV-madgraph-tauola_PU_S14_POSTLS170-af38aa319b7b7c91a6797b31c3be19b7/USER", "PRIVATE", ".*root", "phys03") +T1tttt2J_7_PU_S14_POSTLS170 = kreator.makeMyPrivateMCComponent("T1tttt2J_7_PU_S14_POSTLS170","/SMS-T1tttt_2J_mGl-1200_mLSP-800_Tune4C_13TeV-madgraph-tauola/phys_susy-miniAODforSusy_SMS-T1tttt_2J_mGl-1200_mLSP-800_Tune4C_13TeV-madgraph-tauola_PU_S14_POSTLS170-af38aa319b7b7c91a6797b31c3be19b7/USER", "PRIVATE", ".*root", "phys03") + +mcSamplesCSA14_PU40bx50 = [DYJetsM50_HT100to200_PU_S14_POSTLS170, DYJetsM50_HT200to400_PU_S14_POSTLS170, DYJetsM50_HT400to600_PU_S14_POSTLS170, DYJetsM50_HT600toInf_PU_S14_POSTLS170, GJets_HT100to200_PU_S14_POSTLS170, GJets_HT200to400_PU_S14_POSTLS170, GJets_HT400to600_PU_S14_POSTLS170, QCD_Pt1000to1400_PU_S14_POSTLS170, QCD_Pt10to15_PU_S14_POSTLS170, QCD_Pt120to170_PU_S14_POSTLS170, QCD_Pt1400to1800_PU_S14_POSTLS170, QCD_Pt1800_PU_S14_POSTLS170, QCD_Pt300to470_PU_S14_POSTLS170, QCD_Pt30to50_PU_S14_POSTLS170, QCD_Pt470to600_PU_S14_POSTLS170, QCD_Pt50to80_PU_S14_POSTLS170, QCD_Pt5to10_PU_S14_POSTLS170, QCD_Pt600to800_PU_S14_POSTLS170, QCD_Pt800to1000_PU_S14_POSTLS170, QCD_Pt80to120_PU_S14_POSTLS170, TTJets_MSDecaysCKM_central_PU_S14_POSTLS170, WJetsToLNu_HT100to200_PU_S14_POSTLS170, WJetsToLNu_HT200to400_PU_S14_POSTLS170, WJetsToLNu_HT400to600_PU_S14_POSTLS170, WJetsToLNu_HT600toInf_PU_S14_POSTLS170, ZJetsToNuNu_HT200to400_PU_S14_POSTLS170, T1tttt2J_6_PU_S14_POSTLS170, T1tttt2J_7_PU_S14_POSTLS170] + + -mcSamplesCSA14_PU40bx50 = [ DYJetsM50_HT400to600_PU_S14_POSTLS170 ] +### MORE private samples on EOS +TTHWWnlo_S14 = kreator.makeMCComponentFromEOS('TTHWWnlo_S14', '/TTbarH_HToWWTo2L2Nu_M-125_13TeV_amcatnlo-pythia8-tauola/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM', '/store/cmst3/user/gpetrucc/%s/miniAODTest_CMSSW708_PR5037') +TTHWWpy6_S14 = kreator.makeMCComponentFromEOS('TTHWWpy6_S14', '/TTbarH_HToWWTo2LAndTauNu_M-125_13TeV_pythia6/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM', '/store/cmst3/user/gpetrucc/%s/miniAODTest_CMSSW708_PR5037') +TTHTTnlo_S14 = kreator.makeMCComponentFromEOS('TTHTTnlo_S14', '/TTbarH_HToTauTau_M-125_13TeV_amcatnlo-pythia8-tauola/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM', '/store/cmst3/user/gpetrucc/%s/miniAODTest_CMSSW708_PR5037') +TTHTTpy6_S14 = kreator.makeMCComponentFromEOS('TTHTTpy6_S14', '/TTbarH_HToTauTau_M-125_13TeV_pythia6/Spring14dr-PU_S14_POSTLS170_V6-v1/AODSIM', '/store/cmst3/user/gpetrucc/%s/miniAODTest_CMSSW708_PR5037') +TTHs_S14 = [ TTHWWnlo_S14, TTHWWpy6_S14, TTHTTpy6_S14, TTHTTnlo_S14 ] -mcSamples = mcSamplesCSA14_PU20bx25 + mcSamplesTest + mcSamplesCSA14_PU40bx50 +mcSamples = mcSamplesCSA14_PU20bx25 + mcSamplesTest + mcSamplesCSA14_PU40bx50 + TTHs_S14 #-----------DATA--------------- @@ -211,7 +221,7 @@ for comp in mcSamples: comp.isMC = True comp.isData = False - comp.splitFactor = 1 # if comp.name in [ "WJets", "DY3JetsM50", "DY4JetsM50","W1Jets","W2Jets","W3Jets","W4Jets","TTJetsHad" ] else 100 + comp.splitFactor = 250 # if comp.name in [ "WJets", "DY3JetsM50", "DY4JetsM50","W1Jets","W2Jets","W3Jets","W4Jets","TTJetsHad" ] else 100 comp.puFileMC=dataDir+"/puProfile_Summer12_53X.root" comp.puFileData=dataDir+"/puProfile_Data12.root" comp.efficiency = eff2012 diff --git a/CMGTools/TTHAnalysis/python/signedSip.py b/CMGTools/TTHAnalysis/python/signedSip.py index e27b925f2cc53..a1d8eb73ebad9 100644 --- a/CMGTools/TTHAnalysis/python/signedSip.py +++ b/CMGTools/TTHAnalysis/python/signedSip.py @@ -25,3 +25,31 @@ def twoTrackChi2(lepton1,lepton2): track2 = lepton2.gsfTrack() if abs(lepton2.pdgId()) == 11 else lepton2.track() pair = SignedImpactParameterComputer.twoTrackChi2(track1.get(),track2.get()) return (pair.first,pair.second) + + +#For the vertex related variables +#A = selectedLeptons[0], B = selectedLeptons[1], C = selectedLeptons[2], D = selectedLeptons[3] +##Variables related to IP +#Of one lepton w.r.t. the PV of the event +def absIP3D(lepton, pv=None): + if pv is None: + pv = lepton.associatedVertex + track = lepton.gsfTrack() if abs(lepton.pdgId()) == 11 else lepton.track() + pairvalerr = SignedImpactParameterComputer.absIP3D(track.get(), pv) + return (pairvalerr.first,pairvalerr.second) +#Of one lepton w.r.t. the PV of the PV of the other leptons only +def absIP3Dtrkpvtrks(leptonA,leptonB,leptonC,leptonD,nlep,iptrk): + leptrkA = leptonA.gsfTrack() if abs(leptonA.pdgId()) == 11 else leptonA.track() + leptrkB = leptonB.gsfTrack() if abs(leptonB.pdgId()) == 11 else leptonB.track() + leptrkC = leptonC.gsfTrack() if abs(leptonC.pdgId()) == 11 else leptonC.track() + leptrkD = leptonD.gsfTrack() if abs(leptonD.pdgId()) == 11 else leptonD.track() + pairvalerr = SignedImpactParameterComputer.absIP3Dtrkpvtrks(leptrkA.get(),leptrkB.get(),leptrkC.get(),leptrkD.get(),nlep,iptrk) + return (pairvalerr.first,pairvalerr.second) +##Variables related to chi2 +def chi2pvtrks(leptonA,leptonB,leptonC,leptonD,nlep): + leptrkA = leptonA.gsfTrack() if abs(leptonA.pdgId()) == 11 else leptonA.track() + leptrkB = leptonB.gsfTrack() if abs(leptonB.pdgId()) == 11 else leptonB.track() + leptrkC = leptonC.gsfTrack() if abs(leptonC.pdgId()) == 11 else leptonC.track() + leptrkD = leptonD.gsfTrack() if abs(leptonD.pdgId()) == 11 else leptonD.track() + pairvalerr = SignedImpactParameterComputer.chi2pvtrks(leptrkA.get(),leptrkB.get(),leptrkC.get(),leptrkD.get(),nlep) + return (pairvalerr.first,pairvalerr.second) diff --git a/CMGTools/TTHAnalysis/python/tools/LepMVAFriend.py b/CMGTools/TTHAnalysis/python/tools/LepMVAFriend.py new file mode 100644 index 0000000000000..775092c31c703 --- /dev/null +++ b/CMGTools/TTHAnalysis/python/tools/LepMVAFriend.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +from CMGTools.TTHAnalysis.treeReAnalyzer import * +from array import array +from glob import glob +import os.path + +import os, ROOT +if "/smearer_cc.so" not in ROOT.gSystem.GetLibraries(): + ROOT.gROOT.ProcessLine(".L %s/src/CMGTools/TTHAnalysis/python/plotter/smearer.cc+" % os.environ['CMSSW_BASE']); +if "/mcCorrections_cc.so" not in ROOT.gSystem.GetLibraries(): + ROOT.gROOT.ProcessLine(".L %s/src/CMGTools/TTHAnalysis/python/plotter/mcCorrections.cc+" % os.environ['CMSSW_BASE']); + + +class MVAVar: + def __init__(self,name,func,corrfunc=None): + self.name = name + self.var = array('f',[0.]) + self.func = func + self.corrfunc = corrfunc + def set(self,lep,ncorr): ## apply correction ncorr times + self.var[0] = self.func(lep) + if self.corrfunc: + for i in range(ncorr): + self.var[0] = self.corrfunc(self.var[0], lep.pdgId,lep.pt,lep.eta,lep.mcMatchId,lep.mcMatchAny) +class MVATool: + def __init__(self,name,xml,specs,vars): + self.name = name + self.reader = ROOT.TMVA.Reader("Silent") + self.specs = specs + self.vars = vars + for s in specs: self.reader.AddSpectator(s.name,s.var) + for v in vars: self.reader.AddVariable(v.name,v.var) + #print "Would like to load %s from %s! " % (name,xml) + self.reader.BookMVA(name,xml) + def __call__(self,lep,ncorr): ## apply correction ncorr times + for s in self.specs: s.set(lep,ncorr) + for s in self.vars: s.set(lep,ncorr) + return self.reader.EvaluateMVA(self.name) +class CategorizedMVA: + def __init__(self,catMvaPairs): + self.catMvaPairs = catMvaPairs + def __call__(self,lep,ncorr): + for c,m in self.catMvaPairs: + if c(lep): return m(lep,ncorr) + return -99. + +_CommonSpect = [ +] +_CommonVars = [ + MVAVar("neuRelIso03 := relIso03 - chargedHadRelIso03",lambda x: x.relIso03 - x.chargedHadRelIso03), + MVAVar("chRelIso03 := chargedHadRelIso03",lambda x: x.chargedHadRelIso03), + MVAVar("jetDR := min(jetDR,0.5)", lambda x : min(x.jetDR,0.5), corrfunc=ROOT.correctJetDRMC), + MVAVar("jetPtRatio := min(jetPtRatio,1.5)", lambda x : min(x.jetPtRatio,1.5), corrfunc=ROOT.correctJetPtRatioMC), + MVAVar("jetBTagCSV := max(jetBTagCSV,0)", lambda x : max(x.jetBTagCSV,0.)), + MVAVar("sip3d",lambda x: x.sip3d, corrfunc=ROOT.scaleSip3dMC), + MVAVar("dxy := log(abs(dxy))",lambda x: log(abs(x.dxy)), corrfunc=ROOT.scaleDxyMC), + MVAVar("dz := log(abs(dz))", lambda x: log(abs(x.dz)), corrfunc=ROOT.scaleDzMC), +] +_ElectronVars = [ + MVAVar("mvaId",lambda x: x.mvaId) +] +class LeptonMVA: + def __init__(self,basepath): + global _CommonVars, _CommonSpect, _ElectronVars + self.mu = CategorizedMVA([ + ( lambda x: x.pt <= 15 and abs(x.eta) < 1.5 , MVATool("BDTG",basepath%"mu_pteta_low_b", _CommonSpect,_CommonVars) ), + ( lambda x: x.pt <= 15 and abs(x.eta) >= 1.5 , MVATool("BDTG",basepath%"mu_pteta_low_e", _CommonSpect,_CommonVars) ), + ( lambda x: x.pt > 15 and abs(x.eta) < 1.5 , MVATool("BDTG",basepath%"mu_pteta_high_b",_CommonSpect,_CommonVars) ), + ( lambda x: x.pt > 15 and abs(x.eta) >= 1.5 , MVATool("BDTG",basepath%"mu_pteta_high_e",_CommonSpect,_CommonVars) ), + ]) + self.el = CategorizedMVA([ + ( lambda x: x.pt <= 10 and abs(x.eta) < 0.8 , MVATool("BDTG",basepath%"el_pteta_low_cb", _CommonSpect,_CommonVars+_ElectronVars) ), + ( lambda x: x.pt <= 10 and abs(x.eta) >= 0.8 and abs(x.eta) < 1.479 , MVATool("BDTG",basepath%"el_pteta_low_fb", _CommonSpect,_CommonVars+_ElectronVars) ), + ( lambda x: x.pt <= 10 and abs(x.eta) >= 1.479 , MVATool("BDTG",basepath%"el_pteta_low_ec", _CommonSpect,_CommonVars+_ElectronVars) ), + ( lambda x: x.pt > 10 and abs(x.eta) < 0.8 , MVATool("BDTG",basepath%"el_pteta_high_cb",_CommonSpect,_CommonVars+_ElectronVars) ), + ( lambda x: x.pt > 10 and abs(x.eta) >= 0.8 and abs(x.eta) < 1.479 , MVATool("BDTG",basepath%"el_pteta_high_fb",_CommonSpect,_CommonVars+_ElectronVars) ), + ( lambda x: x.pt > 10 and abs(x.eta) >= 1.479 , MVATool("BDTG",basepath%"el_pteta_high_ec",_CommonSpect,_CommonVars+_ElectronVars) ), + ]) + def __call__(self,lep,ncorr=0): + if abs(lep.pdgId) == 11: return self.el(lep,ncorr) + elif abs(lep.pdgId) == 13: return self.mu(lep,ncorr) + else: return -99 + +class LepMVAFriend: + def __init__(self,path,fast=True): + print path + self.mva = LeptonMVA(path+"/weights/%s_BDTG.weights.xml") + self.fast = fast + def listBranches(self): + return [ ("nLepGood","I"), ("LepGood_mvaNew","F",8,"nLepGood") ] + def __call__(self,event): + lep = Collection(event,"LepGood","nLepGood",8) + ret = { 'nLepGood' : event.nLepGood } + if event.run >= 1: # DATA + ret['LepGood_mvaNew'] = [ self.mva(l, ncorr=0) for l in lep ] + else: # MC + ret['LepGood_mvaNew'] = [ self.mva(l, ncorr=0) for l in lep ] + return ret + +if __name__ == '__main__': + from sys import argv + file = ROOT.TFile(argv[1]) + tree = file.Get("treeProducerSusyMultilepton") + tree.vectorTree = True + class Tester(Module): + def __init__(self, name): + Module.__init__(self,name,None) + self.sf = LepMVAFriend("/afs/cern.ch/user/b/botta/CMGToolsGit/newRecipe/CMSSW_5_3_19/src/CMGTools/TTHAnalysis/macros/leptons") + def analyze(self,ev): + print "\nrun %6d lumi %4d event %d: leps %d" % (ev.run, ev.lumi, ev.evt, ev.nLepGood) + print self.sf(ev) + el = EventLoop([ Tester("tester") ]) + el.loop([tree], maxEvents = 50) + + diff --git a/CMGTools/TTHAnalysis/python/treeReAnalyzer.py b/CMGTools/TTHAnalysis/python/treeReAnalyzer.py index f3d9d338f05e6..1c71d4ebe7070 100644 --- a/CMGTools/TTHAnalysis/python/treeReAnalyzer.py +++ b/CMGTools/TTHAnalysis/python/treeReAnalyzer.py @@ -165,13 +165,16 @@ class PyTree: def __init__(self,tree): self.tree = tree self._branches = {} ## must be the last line - def branch(self,name,type,n=1): + def branch(self,name,type,n=1,lenVar=None): arr = array(type.lower(), n*[0 if type in 'iI' else 0.]) self._branches[name] = arr if n == 1: self.tree.Branch(name, arr, name+"/"+type.upper()) else: - self.tree.Branch(name, arr, "%s[%d]/%s" % (name,n,type.upper())) + if lenVar != None: + self.tree.Branch(name, arr, "%s[%s]/%s" % (name,lenVar,type.upper())) + else: + self.tree.Branch(name, arr, "%s[%d]/%s" % (name,n,type.upper())) def __setattr__(self,name,val): if hasattr(self,'_branches'): arr = self._branches[name] diff --git a/CMGTools/TTHAnalysis/src/SignedImpactParameter.cc b/CMGTools/TTHAnalysis/src/SignedImpactParameter.cc index 0aa4ffc4a6aeb..780d3656dcb11 100644 --- a/CMGTools/TTHAnalysis/src/SignedImpactParameter.cc +++ b/CMGTools/TTHAnalysis/src/SignedImpactParameter.cc @@ -1,11 +1,13 @@ #include "CMGTools/TTHAnalysis/interface/SignedImpactParameter.h" - #include "MagneticField/UniformEngine/src/UniformMagneticField.h" #include "MagneticField/ParametrizedEngine/plugins/OAEParametrizedMagneticField.h" - +#include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h" +#include "TrackingTools/TransientTrack/interface/TransientTrack.h" #include "TrackingTools/IPTools/interface/IPTools.h" #include "RecoVertex/KalmanVertexFit/interface/KalmanVertexFitter.h" #include +#include +#include MagneticField *SignedImpactParameter::paramField_ = 0; @@ -32,3 +34,116 @@ SignedImpactParameter::twoTrackChi2(const reco::Track &tk1, const reco::Track &t TransientVertex myVertex = vtxFitter.vertex(ttks); return std::make_pair(myVertex.totalChiSquared(),myVertex.degreesOfFreedom()); } + +//Helping functions +std::vector SignedImpactParameter::ttrksf(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep) const { + std::vector ttrks; + if (paramField_ == 0) paramField_ = new OAEParametrizedMagneticField("3_8T"); + if(nlep==2){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + }else if(nlep==3){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + }else if(nlep==4){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + ttrks.push_back(reco::TransientTrack(trkD,paramField_)); + } + return ttrks; +} + +std::vector SignedImpactParameter::ttrksbuthef(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const { + std::vector ttrks; + if (paramField_ == 0) paramField_ = new OAEParametrizedMagneticField("3_8T"); + if(nlep==3){ + if(iptrk==0){ + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + }else if(iptrk==1){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + }else if(iptrk==2){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + } + }else if(nlep==4){ + if(iptrk==0){ + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + ttrks.push_back(reco::TransientTrack(trkD,paramField_)); + }else if(iptrk==1){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + ttrks.push_back(reco::TransientTrack(trkD,paramField_)); + }else if(iptrk==2){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkD,paramField_)); + }else if(iptrk==3){ + ttrks.push_back(reco::TransientTrack(trkA,paramField_)); + ttrks.push_back(reco::TransientTrack(trkB,paramField_)); + ttrks.push_back(reco::TransientTrack(trkC,paramField_)); + } + } + return ttrks; +} + +reco::TransientTrack SignedImpactParameter::thettrkf(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const { + reco::TransientTrack thettrk; + if (paramField_ == 0) paramField_ = new OAEParametrizedMagneticField("3_8T"); + if(nlep==3){ + if(iptrk==0){ + reco::TransientTrack tmpttrk(trkA,paramField_); thettrk = tmpttrk; + }else if(iptrk==1){ + reco::TransientTrack tmpttrk(trkB,paramField_); thettrk = tmpttrk; + }else if(iptrk==2){ + reco::TransientTrack tmpttrk(trkC,paramField_); thettrk = tmpttrk; + } + }else if(nlep==4){ + if(iptrk==0){ + reco::TransientTrack tmpttrk(trkA,paramField_); thettrk = tmpttrk; + }else if(iptrk==1){ + reco::TransientTrack tmpttrk(trkB,paramField_); thettrk = tmpttrk; + }else if(iptrk==2){ + reco::TransientTrack tmpttrk(trkC,paramField_); thettrk = tmpttrk; + }else if(iptrk==3){ + reco::TransientTrack tmpttrk(trkD,paramField_); thettrk = tmpttrk; + } + } + return thettrk; +} + +//Variables related to IP +//Of one lepton w.r.t. the PV of the event +std::pair SignedImpactParameter::absIP3D(const reco::Track &trk, const reco::Vertex &pv) const { + if (paramField_ == 0) paramField_ = new OAEParametrizedMagneticField("3_8T"); + reco::TransientTrack ttrk(trk,paramField_); + Measurement1D aIP3Dtrk = IPTools::absoluteImpactParameter3D(ttrk, pv).second; + return std::make_pair(aIP3Dtrk.value(), aIP3Dtrk.error()); +} +//Of one lepton w.r.t. the PV of the PV of the other leptons only +std::pair SignedImpactParameter::absIP3Dtrkpvtrks(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep, int iptrk) const { + //Take the transient tracks + reco::TransientTrack thettrk = thettrkf(trkA,trkB,trkC,trkD,nlep,iptrk); + std::vector ttrks = ttrksbuthef(trkA,trkB,trkC,trkD,nlep,iptrk); + //Build new vertex + KalmanVertexFitter vtxFitter; + TransientVertex trkspv = vtxFitter.vertex(ttrks); + //Measure 3DIP + Measurement1D aIP3Dtrk = IPTools::absoluteImpactParameter3D(thettrk,reco::Vertex(trkspv)).second; + return std::make_pair(aIP3Dtrk.value(), aIP3Dtrk.error()); +} + +//Variables related to chi2 +std::pair SignedImpactParameter::chi2pvtrks(const reco::Track &trkA, const reco::Track &trkB, const reco::Track &trkC, const reco::Track &trkD, int nlep) const { + //Take transient tracks + std::vector ttrks = ttrksf(trkA,trkB,trkC,trkD,nlep); + //Build new vertex + KalmanVertexFitter vtxFitter; + TransientVertex trkspv = vtxFitter.vertex(ttrks); + //Take interested values + return std::make_pair(trkspv.totalChiSquared(),trkspv.degreesOfFreedom()); +}