00001
00002
00003
00004
00005
00014
00015
00016
00017
00018
00019
00020
00021 #include <memory>
00022
00023
00024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00025 #include "FWCore/Utilities/interface/InputTag.h"
00026 #include "DataFormats/PatCandidates/interface/Jet.h"
00027 #include "PhysicsTools/PatExamples/interface/PatBTagCommonHistos.h"
00028
00029 #include "FWCore/ServiceRegistry/interface/Service.h"
00030 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00031
00032
00033
00034
00035 PatBTagCommonHistos::PatBTagCommonHistos(const edm::ParameterSet& iConfig):
00036 histocontainer_()
00037 ,BTagger(iConfig.getParameter< edm::ParameterSet >("BJetOperatingPoints"))
00038
00039 {
00040 edm::ParameterSet PatBjet_(iConfig.getParameter< edm::ParameterSet >("BjetTag"));
00041 BTagdisccut_ = PatBjet_.getUntrackedParameter<double>("mindiscriminatorcut",5.0);
00042 BTagdiscriminator_= PatBjet_.getParameter<std::string>("discriminator");
00043 BTagpurity_ = PatBjet_.getParameter<std::string>("purity");
00044 }
00045
00046
00047 PatBTagCommonHistos::~PatBTagCommonHistos()
00048 {
00049
00050
00051
00052
00053 }
00054
00055
00056
00057
00058
00059
00060
00061 void
00062 PatBTagCommonHistos::Fill( edm::View<pat::Jet>::const_iterator& jet_iter, std::string flavor)
00063 {
00064
00065 float isb =jet_iter->bDiscriminator(BTagdiscriminator_);
00066
00067
00068
00069 if(
00070 fabs(jet_iter->eta()) < 2.4
00071 && fabs(jet_iter->eta()) > 0
00072 ){
00073
00074
00075
00076
00077 if(BTagger.IsbTag(*jet_iter,BTagpurity_,BTagdiscriminator_)){
00078 histocontainer_["jet_pt_uncorr_"+flavor+"_tagged"]->Fill(jet_iter->correctedJet("raw").pt());
00079 histocontainer_["jet_pt_"+flavor+"_tagged"]->Fill(jet_iter->pt());
00080 histocontainer_["jet_eta_"+flavor+"_tagged"]->Fill(jet_iter->eta());
00081 }
00082
00083
00084
00085
00086 if( isb > float(BTagdisccut_) ){
00087 histocontainer_["jet_pt_uncorr_"+flavor+"_taggedmincut"]->Fill(jet_iter->correctedJet("raw").pt());
00088 histocontainer_["jet_pt_"+flavor+"_taggedmincut"]->Fill(jet_iter->pt());
00089 histocontainer_["jet_eta_"+flavor+"_taggedmincut"]->Fill(jet_iter->eta());
00090 }
00091
00092
00093 std::map<int,std::string> tagbl;
00094 tagbl[0]="0";tagbl[1]="1";tagbl[2]="2";
00095 for (size_t i=0; i < tagbl.size(); i++)
00096 if( jet_iter->associatedTracks().size() > i ){
00097 histocontainer_["jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->correctedJet("raw").pt());
00098 histocontainer_["jet_pt_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->pt());
00099 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]]->Fill(jet_iter->eta());
00100 if (jet_iter->pt() < 30 ){
00101 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030"]->Fill(jet_iter->eta());
00102 }
00103 if (jet_iter->pt() > 30 && jet_iter->pt() < 50){
00104 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050"]->Fill(jet_iter->eta());
00105 }
00106 if (jet_iter->pt() > 50 ){
00107 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50"]->Fill(jet_iter->eta());
00108 }
00109 }
00110
00111
00112
00113
00114
00115
00116 histocontainer_["jet_pt_uncorr_"+flavor]->Fill(jet_iter->correctedJet("raw").pt());
00117 histocontainer_["jet_pt_"+flavor]->Fill(jet_iter->pt());
00118 histocontainer_["jet_eta_"+flavor]->Fill(jet_iter->eta());
00119 histocontainer_["tracks_in_jet_"+flavor]->Fill(jet_iter->associatedTracks().size());
00120 h2_["jet_scatter_pt_"+flavor]->Fill(jet_iter->pt(),jet_iter->correctedJet("raw").pt());
00121 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00122 histocontainer_["pt_tracks_in_jet_"+flavor]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00123 }
00124 if (jet_iter->pt() < 30 ){
00125 histocontainer_["jet_eta_"+flavor+"030"]->Fill(jet_iter->eta());
00126 histocontainer_["tracks_in_jet_"+flavor+"030"]->Fill(jet_iter->associatedTracks().size());
00127 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00128 histocontainer_["pt_tracks_in_jet_"+flavor+"030"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00129 }
00130 if (fabs(jet_iter->eta()) < 1.5 ){
00131 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00132 histocontainer_["pt_tracks_in_jet_"+flavor+"_center030"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00133 }
00134 }
00135 if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){
00136 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00137 histocontainer_["pt_tracks_in_jet_"+flavor+"_sides030"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00138 }
00139 }
00140 }
00141 if (jet_iter->pt() > 30 && jet_iter->pt() < 50){
00142 histocontainer_["jet_eta_"+flavor+"3050"]->Fill(jet_iter->eta());
00143 histocontainer_["tracks_in_jet_"+flavor+"3050"]->Fill(jet_iter->associatedTracks().size());
00144 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00145 histocontainer_["pt_tracks_in_jet_"+flavor+"3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00146 }
00147 if (fabs(jet_iter->eta()) < 1.5 ){
00148 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00149 histocontainer_["pt_tracks_in_jet_"+flavor+"_center3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00150 }
00151 }
00152 if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){
00153 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00154 histocontainer_["pt_tracks_in_jet_"+flavor+"_sides3050"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00155 }
00156 }
00157 }
00158 if (jet_iter->pt() > 50 ){
00159 histocontainer_["jet_eta_"+flavor+"50"]->Fill(jet_iter->eta());
00160 histocontainer_["tracks_in_jet_"+flavor+"50"]->Fill(jet_iter->associatedTracks().size());
00161 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00162 histocontainer_["pt_tracks_in_jet_"+flavor+"50"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00163 }
00164 if (fabs(jet_iter->eta()) < 1.5 ){
00165 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00166 histocontainer_["pt_tracks_in_jet_"+flavor+"_center50"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00167 }
00168 }
00169 if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){
00170 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00171 histocontainer_["pt_tracks_in_jet_"+flavor+"_sides50"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00172 }
00173 }
00174 }
00175 if (fabs(jet_iter->eta()) < 1.5 ){
00176 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00177 histocontainer_["pt_tracks_in_jet_"+flavor+"_center"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00178 }
00179 }
00180 if (fabs(jet_iter->eta()) > 1.5 && fabs(jet_iter->eta()) < 2.4){
00181 for(size_t itrack=0;itrack < jet_iter->associatedTracks().size() ;++itrack){
00182 histocontainer_["pt_tracks_in_jet_"+flavor+"_sides"]->Fill(jet_iter->associatedTracks()[itrack]->pt());
00183 }
00184 }
00185
00186 }
00187 }
00188
00189
00190 void
00191 PatBTagCommonHistos::Set(std::string flavor)
00192 {
00193
00194 const int ntptarray = 23;
00195 const int njptarray = 14;
00196 const int netaarray = 19;
00197 Double_t jetetabins[netaarray] = {-2.5,-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0,0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.5};
00198 Double_t jetptxbins[njptarray] = {0.,10.,20.,30., 40., 50., 60., 70., 80, 90., 100., 120., 140., 230.};
00199 Double_t jetpttbins[ntptarray] = {0.,1.,2.,4.,6.,8.,10.,15.,20.,25.,30., 35.,40., 45., 50., 60., 70., 80, 90., 100., 120., 140., 230.};
00200 edm::Service<TFileService> fs;
00201 std::string histoid;
00202 std::string histotitle;
00203
00204
00205 histoid = "jet_pt_"+flavor; histotitle = flavor+" jet p_{T} [GeV/c]";
00206 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins);
00207 histoid = "jet_pt_uncorr_"+flavor; histotitle = flavor+" jet uncorrected p_{T} [GeV/c]";
00208 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins);
00209 histoid = "jet_eta_"+flavor;
00210 histocontainer_["jet_eta_"+flavor]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00211 histoid = "jet_eta_"+flavor+"030";
00212 histocontainer_["jet_eta_"+flavor+"030"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00213 histoid = "jet_eta_"+flavor+"3050";
00214 histocontainer_["jet_eta_"+flavor+"3050"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00215 histoid = "jet_eta_"+flavor+"50";
00216 histocontainer_["jet_eta_"+flavor+"50"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00217 histoid = "jet_pt_"+flavor+"_tagged";
00218 histocontainer_["jet_pt_"+flavor+"_tagged"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins);
00219 histoid = "jet_pt_uncorr_"+flavor+"_tagged";
00220 histocontainer_["jet_pt_uncorr_"+flavor+"_tagged"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins);
00221 histoid = "jet_eta_"+flavor+"_tagged";
00222 histocontainer_["jet_eta_"+flavor+"_tagged"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged #eta",netaarray-1,jetetabins);
00223
00224
00225 histoid = "jet_pt_"+flavor+"_taggedmincut";
00226 histocontainer_["jet_pt_"+flavor+"_taggedmincut"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins);
00227 histoid = "jet_pt_uncorr_"+flavor+"_taggedmincut";
00228 histocontainer_["jet_pt_uncorr_"+flavor+"_taggedmincut"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged p_{T} [GeV/c]",njptarray-1,jetptxbins);
00229 histoid = "jet_eta_"+flavor+"_taggedmincut";
00230 histocontainer_["jet_eta_"+flavor+"_taggedmincut"]=fs->make<TH1D>(histoid.c_str(),"jet_tagged #eta",netaarray-1,jetetabins);
00231
00232
00233 histoid = "tracks_in_jet_"+flavor; histotitle = "traks per jet "+flavor;
00234 histocontainer_["tracks_in_jet_"+flavor]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5);
00235 histoid = "tracks_in_jet_"+flavor+"030"; histotitle = "traks per jet "+flavor+ "pt_{T} < 30[GeV/c]";
00236 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5);
00237 histoid = "tracks_in_jet_"+flavor+"3050"; histotitle = "traks per jet "+flavor+ "30 < pt_{T} < 50[GeV/c]";
00238 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5);
00239 histoid = "tracks_in_jet_"+flavor+"50"; histotitle = "traks per jet "+flavor+ "pt_{T} > 50[GeV/c]";
00240 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),31,-0.5,30.5);
00241
00242
00243 histoid= "pt_tracks_in_jet_"+flavor; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00244 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00245 histoid= "pt_tracks_in_jet_"+flavor+"030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00246 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00247 histoid= "pt_tracks_in_jet_"+flavor+"3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00248 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00249 histoid= "pt_tracks_in_jet_"+flavor+"50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00250 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00251
00252
00253
00254 histoid= "pt_tracks_in_jet_"+flavor+"_center"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00255 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00256 histoid= "pt_tracks_in_jet_"+flavor+"_center030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00257 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00258 histoid= "pt_tracks_in_jet_"+flavor+"_center3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00259 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00260 histoid= "pt_tracks_in_jet_"+flavor+"_center50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00261 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00262 histoid= "pt_tracks_in_jet_"+flavor+"_sides"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00263 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00264 histoid= "pt_tracks_in_jet_"+flavor+"_sides030"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00265 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00266 histoid= "pt_tracks_in_jet_"+flavor+"_sides3050"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00267 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00268 histoid= "pt_tracks_in_jet_"+flavor+"_sides50"; histotitle = "track p_{T} [GeV/c] "+ flavor+" jets";
00269 histocontainer_[histoid]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),ntptarray-1,jetpttbins);
00270
00271
00272 std::map<int,std::string> tagbl;
00273 tagbl[0]="0";tagbl[1]="1";tagbl[2]="2";
00274 for (size_t i=0; i < tagbl.size(); i++){
00275 histoid = "jet_pt_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable p_{T} [GeV/c]";
00276 histocontainer_["jet_pt_"+flavor+"_taggable"+tagbl[i]]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins);
00277 histoid = "jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable p_{T} uncorr [GeV/c]";
00278 histocontainer_["jet_pt_uncorr_"+flavor+"_taggable"+tagbl[i]]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),njptarray-1,jetptxbins);
00279 histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]; histotitle = flavor+" jet_taggable #eta";
00280 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]]=fs->make<TH1D>(histoid.c_str(),histotitle.c_str(),netaarray-1,jetetabins);
00281 histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030";
00282 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_030"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00283 histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050";
00284 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_3050"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00285 histoid = "jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50";
00286 histocontainer_["jet_eta_"+flavor+"_taggable"+tagbl[i]+"_50"]=fs->make<TH1D>(histoid.c_str(),"jet #eta",netaarray-1,jetetabins);
00287 }
00288
00289 histoid = "jet_scatter_pt_"+flavor;
00290 h2_["jet_scatter_pt_"+flavor]=fs->make<TH2D>(histoid.c_str(),"jet p_{T} uncorr(y) vs corr(x) [GeV/c]",
00291 njptarray-1,jetptxbins,njptarray-1,jetptxbins);
00292
00293 }
00294
00295
00296
00297
00298 void
00299 PatBTagCommonHistos::Sumw2()
00300 {
00301 for (std::map<std::string,TH1D*>::const_iterator ih=histocontainer_.begin();
00302 ih!= histocontainer_.end(); ++ih) {
00303 TH1D *htemp = (TH1D*) ih->second;
00304 htemp->Sumw2();
00305 }
00306 }
00307