CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PatBTagAnalyzer.cc
Go to the documentation of this file.
1 #include <map>
2 #include <string>
3 
4 #include "TH1D.h"
5 #include "TH2D.h"
6 #include "TGraphErrors.h"
7 
15 
20 
21 
23 
24 public:
25 
26  explicit PatBTagAnalyzer(const edm::ParameterSet&);
28 
29 private:
30 
31  virtual void beginJob() override ;
32  virtual void analyze(const edm::Event&, const edm::EventSetup&) override;
33  virtual void endJob() override ;
34 
35 
38 
42 
44  double BTagdisccut_;
45  double BTagdiscmax_;
46 
47 
52  std::map<int,std::string> udsgname;
53 
56  std::map<std::string,TH1D*> histocontainer_;
59  std::map<std::string,TH2D*> h2_;
62  std::map<std::string,TGraph*> graphcontainer_;
65  std::map<std::string,TGraphErrors*> grapherrorscontainer_;
66 
69 };
70 
72  jetToken_(consumes<edm::View<pat::Jet> >(iConfig.getUntrackedParameter<edm::InputTag>("jetTag"))),
73  PatBjet_(iConfig.getParameter< edm::ParameterSet >("BjetTag")),
74  BTagpurity_(PatBjet_.getParameter<std::string>("purity")),
75  BTagmethod_(PatBjet_.getUntrackedParameter<std::string>("tagger","TC2")),
76  BTagdiscriminator_(PatBjet_.getParameter<std::string>("discriminator")),
77  BTagverbose(PatBjet_.getUntrackedParameter<bool>("verbose",false)),
78  BTagdisccut_(PatBjet_.getUntrackedParameter<double>("mindiscriminatorcut",5.0)),
79  BTagdiscmax_(PatBjet_.getUntrackedParameter<double>("maxdiscriminatorcut",15.0)),
80  BTagger(iConfig.getParameter< edm::ParameterSet >("BJetOperatingPoints")),
81  BTagHistograms(iConfig)
82 {
83  //now do what ever initialization is needed
84 }
85 
86 
88 {
89 
90  // do anything here that needs to be done at desctruction time
91  // (e.g. close files, deallocate resources etc.)
92 
93 }
94 
95 // ------------ method called to for each event ------------
96 void
98 {
99  using namespace edm;
100 
101  // first: get all objects from the event.
102 
104  iEvent.getByToken(jetToken_,jetHandle);
105  edm::View<pat::Jet> jets = *jetHandle; // get JETS
106 
107  // LOOP over all jets
108 
109  for(edm::View<pat::Jet>::const_iterator jet_iter = jets.begin(); jet_iter!=jets.end(); ++jet_iter){
110 
111  float bdiscriminator = jet_iter->bDiscriminator(BTagdiscriminator_);
112  int flavor = jet_iter->partonFlavour();
113  //
114  // Fill in for performance standard pt(uncorrected) >10 and abs(eta)<2.4
115  if( jet_iter->correctedJet("raw").pt() > 10 &&
116  fabs(jet_iter->eta()) < 2.4 ) {
117 
118  BTagPerf[0].Add(bdiscriminator,abs(flavor));
119 
120  }
121 
122  //Fill histograms
123  BTagHistograms.Fill(jet_iter,"all");
124  if (flavor == 0 ) BTagHistograms.Fill(jet_iter,"no_flavor");
125  if (flavor == 5 || flavor == -5 ) BTagHistograms.Fill(jet_iter,"b");
126  if (flavor == 4 || flavor == -4 ) BTagHistograms.Fill(jet_iter,"c");
127  if ((-4 < flavor && flavor < 4 && flavor != 0 )||(flavor == 21 || flavor == -21 ))
128  BTagHistograms.Fill(jet_iter,"udsg");
129 
130 
131  }//end loop over jets
132 
133 }
134 // ------------ method called once each job just before starting event loop ------------
135 void
137 {
138  //
139  // define some histograms using the framework tfileservice. Define the output file name in your .cfg.
140  //
142 
143  TString suffix1="_test";
144 
145  //set performance variables collector
146  for (int i=0; i < 10; i++){
150  }
151 
152  histocontainer_["njets"]=fs->make<TH1D>("njets","jet multiplicity for jets with p_{T} > 50 GeV/c",10,0,10);
153 // Std. 30 pt uncorr cut for performance
154  discname[0]="disc"+BTagmethod_+"_udsg";
155  bname[0] ="g"+BTagmethod_+"_b";
156  cname[0] ="g"+BTagmethod_+"_c";
157  udsgname[0]="g"+BTagmethod_+"_udsg";
158 
159 // 10 pt uncorr for performance + all,>0,>1,>2 tracks
160  discname[1]="Uncor10_disc"+BTagmethod_+"_udsg";
161  bname[1] ="Uncor10_g"+BTagmethod_+"_b";
162  cname[1] ="Uncor10_g"+BTagmethod_+"_c";
163  udsgname[1]="Uncor10_g"+BTagmethod_+"_udsg";
164  discname[2]="Uncor10t0_disc"+BTagmethod_+"_udsg";
165  bname[2] ="Uncor10t0_g"+BTagmethod_+"_b";
166  cname[2] ="Uncor10t0_g"+BTagmethod_+"_c";
167  udsgname[2]="Uncor10t0_g"+BTagmethod_+"_udsg";
168  discname[3]="Uncor10t1_disc"+BTagmethod_+"_udsg";
169  bname[3] ="Uncor10t1_g"+BTagmethod_+"_b";
170  cname[3] ="Uncor10t1_g"+BTagmethod_+"_c";
171  udsgname[3]="Uncor10t1_g"+BTagmethod_+"_udsg";
172  discname[4]="Uncor10t2_disc"+BTagmethod_+"_udsg";
173  bname[4] ="Uncor10t2_g"+BTagmethod_+"_b";
174  cname[4] ="Uncor10t2_g"+BTagmethod_+"_c";
175  udsgname[4]="Uncor10t2_g"+BTagmethod_+"_udsg";
176 
177 // 30 pt corr for performance + all,>0,>1,>2 tracks
178  discname[5]="Corr30_disc"+BTagmethod_+"_udsg";
179  bname[5] ="Corr30_g"+BTagmethod_+"_b";
180  cname[5] ="Corr30_g"+BTagmethod_+"_c";
181  udsgname[5]="Corr30_g"+BTagmethod_+"_udsg";
182  discname[6]="Corr30t0_disc"+BTagmethod_+"_udsg";
183  bname[6] ="Corr30t0_g"+BTagmethod_+"_b";
184  cname[6] ="Corr30t0_g"+BTagmethod_+"_c";
185  udsgname[6]="Corr30t0_g"+BTagmethod_+"_udsg";
186  discname[7]="Corr30t1_disc"+BTagmethod_+"_udsg";
187  bname[7] ="Corr30t1_g"+BTagmethod_+"_b";
188  cname[7] ="Corr30t1_g"+BTagmethod_+"_c";
189  udsgname[7]="Corr30t1_g"+BTagmethod_+"_udsg";
190  discname[8]="Corr30t2_disc"+BTagmethod_+"_udsg";
191  bname[8] ="Corr30t2_g"+BTagmethod_+"_b";
192  cname[8] ="Corr30t2_g"+BTagmethod_+"_c";
193  udsgname[8]="Corr30t2_g"+BTagmethod_+"_udsg";
194 
195 // check filter
196  discname[9]="check_disc"+BTagmethod_+"_udsg";
197  bname[9] ="check_g"+BTagmethod_+"_b";
198  cname[9] ="check_g"+BTagmethod_+"_c";
199  udsgname[9]="check_g"+BTagmethod_+"_udsg";
200 
201  for(int i=1; i<10;i++){
202  graphcontainer_[discname[i]] =fs->make<TGraph>(BTagPerf[i].GetN()); graphcontainer_[discname[i]]->SetName(discname[i].c_str());
203  grapherrorscontainer_[bname[i]] =fs->make<TGraphErrors>(BTagPerf[i].GetN()); grapherrorscontainer_[bname[i]] ->SetName(bname[i].c_str());
204  grapherrorscontainer_[cname[i]] =fs->make<TGraphErrors>(BTagPerf[i].GetN()); grapherrorscontainer_[cname[i]] ->SetName(cname[i].c_str());
205  grapherrorscontainer_[udsgname[i]]=fs->make<TGraphErrors>(BTagPerf[i].GetN()); grapherrorscontainer_[udsgname[i]]->SetName(udsgname[i].c_str());
206  }
207  //Define histograms
208  BTagHistograms.Set("all");
209  BTagHistograms.Set("no_flavor");
210  BTagHistograms.Set("b");
211  BTagHistograms.Set("c");
212  BTagHistograms.Set("udsg");
213 
214  // Set to save histogram errors
216 
217 }
218 
219 // ------------ method called once each job just after ending the event loop ------------
220 void
222 //ed++
224 
225 // Save performance plots as Tgraphs
226 
227 
228  for (int i=1;i<10;i++){
229  BTagPerf[i].Eval();
230  for (int n=0; n<BTagPerf[i].GetN(); n++ ){
231  graphcontainer_[discname[i]] ->SetPoint(n,BTagPerf[i].GetArray("udsg")[n],BTagPerf[i].GetArray("discriminator")[n]);
232  grapherrorscontainer_[bname[i]] ->SetPoint(n,BTagPerf[i].GetArray("b")[n],BTagPerf[i].GetArray("b")[n]);
233  grapherrorscontainer_[cname[i]] ->SetPoint(n,BTagPerf[i].GetArray("b")[n],BTagPerf[i].GetArray("c")[n]);
234  grapherrorscontainer_[udsgname[i]] ->SetPoint(n,BTagPerf[i].GetArray("b")[n],BTagPerf[i].GetArray("udsg")[n]);
235  grapherrorscontainer_[bname[i]] ->SetPointError(n,BTagPerf[i].GetArray("bErr")[n],BTagPerf[i].GetArray("bErr")[n]);
236  grapherrorscontainer_[cname[i]] ->SetPointError(n,BTagPerf[i].GetArray("bErr")[n],BTagPerf[i].GetArray("cErr")[n]);
237  grapherrorscontainer_[udsgname[i]] ->SetPointError(n,BTagPerf[i].GetArray("bErr")[n],BTagPerf[i].GetArray("udsgErr")[n]);
238  }//end for over BTagPerf[i] elements
239  graphcontainer_[discname[i]] ->SetTitle("Jet udsg-mistagging");
240  grapherrorscontainer_[bname[i]] ->SetTitle("Jet b-efficiency");
241  grapherrorscontainer_[cname[i]] ->SetTitle("Jet c-mistagging");
242  grapherrorscontainer_[udsgname[i]]->SetTitle("discriminator vs udsg-mistagging");
243  }//end for over [i]
244 
245 
246 // Save default cut performance plot
247  BTagPerf[0].Eval();
248 
249 // TFileDirectory TaggerDir = fs->mkdir(BTagmethod_);
250 // TGraphErrors *BTagger_b = new TGraphErrors(BTagTool.GetN(),
251  TGraphErrors *BTagger_b = fs->mkdir(BTagmethod_).make<TGraphErrors>(BTagPerf[0].GetN(),
252  BTagPerf[0].GetArray("b").GetArray(),BTagPerf[0].GetArray("b").GetArray(),
253  BTagPerf[0].GetArray("bErr").GetArray(),BTagPerf[0].GetArray("bErr").GetArray());
254 
255  TGraphErrors *BTagger_c = new TGraphErrors(BTagPerf[0].GetN(),
256  BTagPerf[0].GetArray("b").GetArray(),BTagPerf[0].GetArray("c").GetArray(),
257  BTagPerf[0].GetArray("bErr").GetArray(),BTagPerf[0].GetArray("cErr").GetArray());
258 
259  TGraphErrors *BTagger_udsg = new TGraphErrors(BTagPerf[0].GetN(),
260  BTagPerf[0].GetArray("b").GetArray(),BTagPerf[0].GetArray("udsg").GetArray(),
261  BTagPerf[0].GetArray("bErr").GetArray(),BTagPerf[0].GetArray("udsgErr").GetArray());
262  TGraph *discBTagger_udsg = new TGraph(BTagPerf[0].GetN(),
263  BTagPerf[0].GetArray("udsg").GetArray(),
264  BTagPerf[0].GetArray("discriminator").GetArray());
265 
266  BTagger_b->SetName(bname[0].c_str());
267  BTagger_c->SetName(cname[0].c_str());
268  BTagger_udsg->SetName(udsgname[0].c_str());
269  discBTagger_udsg->SetName(discname[0].c_str());
270 
271  BTagger_b->SetTitle("Jet b-efficiency");
272  BTagger_c->SetTitle("Jet c-mistagging");
273  BTagger_udsg->SetTitle("Jet udsg-mistagging");
274  discBTagger_udsg->SetTitle("discriminator vs udsg-mistagging");
275 
276 
277  for (int i=1;i<10;i++){
278  graphcontainer_[discname[i]] ->Write();
279  grapherrorscontainer_[bname[i]] ->Write();
280  grapherrorscontainer_[cname[i]] ->Write();
281  grapherrorscontainer_[udsgname[i]]->Write();
282  }
283 
284  BTagger_b->Write();
285  BTagger_c->Write();
286  BTagger_udsg->Write();
287  discBTagger_udsg->Write();
288 
289 
290 }
291 
292 //define this as a plug-in
bJetSelector BTagger
int i
Definition: DBlmapReader.cc:9
void Fill(edm::View< pat::Jet >::const_iterator &, std::string)
void SetMaxDiscriminator(double value)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
std::map< std::string, TGraphErrors * > grapherrorscontainer_
std::string BTagmethod_
PatBTagCommonHistos BTagHistograms
std::map< int, std::string > udsgname
int iEvent
Definition: GenABIO.cc:230
void Set(std::string name)
vector< PseudoJet > jets
std::string BTagpurity_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TArrayD GetArray(TString option="b")
T * make(const Args &...args) const
make new ROOT object
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
virtual void endJob() override
std::string BTagdiscriminator_
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
std::string cname[10]
std::string discname[10]
std::map< std::string, TGraph * > graphcontainer_
virtual void beginJob() override
BTagPerformance BTagPerf[10]
void Add(double discriminator, int flavor)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:85
std::map< std::string, TH1D * > histocontainer_
std::map< std::string, TH2D * > h2_
volatile std::atomic< bool > shutdown_flag false
edm::EDGetTokenT< edm::View< pat::Jet > > jetToken_
std::string bname[10]
PatBTagAnalyzer(const edm::ParameterSet &)
void SetMinDiscriminator(double value)
edm::ParameterSet PatBjet_