CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/PhysicsTools/PatExamples/src/PatBTagCommonHistos.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    PatBTag
00004 // Class:      PatBTagCommonHistos
00005 // 
00014 //
00015 // Original Author:  J. E. Ramirez
00016 //
00017 //
00018 
00019 
00020 // system include files
00021 #include <memory>
00022 
00023 // user include files
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 // constructors and destructor
00034 //
00035 PatBTagCommonHistos::PatBTagCommonHistos(const edm::ParameterSet& iConfig):
00036   histocontainer_()
00037 ,BTagger(iConfig.getParameter< edm::ParameterSet >("BJetOperatingPoints"))
00038    //now do what ever initialization is needed
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    // do anything here that needs to be done at desctruction time
00051    // (e.g. close files, deallocate resources etc.)
00052 
00053 }
00054 
00055 
00056 //
00057 // member functions
00058 //
00059 
00060 // ------------ method called to for each event  ------------
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 // no pt cut histograms
00068 //
00069 if(
00070         fabs(jet_iter->eta()) < 2.4
00071         && fabs(jet_iter->eta()) > 0
00072 ){
00073         //
00074         //Fill histos for Loose(defined in configuration file) cut
00075         //tagged using auxiliar function (Loose)
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         // Fill histos 
00084         //    tagged minimum discriminant cut criteria
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         //fill taggable jets histograms (tracks in jet > 0,1,2) 
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         // Fill histos needed for normalization
00112         // uncorrected pt distributions
00113         // corrected pt distributions
00114         // eta distributions
00115         // scatter plots for pts 
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  }//endif
00187 }//end function
00188 // ------------ method called once each job just before starting event loop  ------------
00189 // ------------  This function is needed to set a group of histogram  -------------------
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   //Define histograms
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   //tagged min cut
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   //#tracks per jet
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   // pt of tracks in bins of jet pt 0-30,30-50,50
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   // pt of tracks in bins of jet eta abs(eta)<1.5, 1.5<abs(eta)<2.4
00253   // combined with bins of jet pt
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   //taggable 0,1,2
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 }//end function Set
00294 
00295 // ------------ method called once each job just before starting event loop  ------------
00296 // ------------              after setting histograms                --------------------
00297 // ------------  This function is needed to save histogram errors -----------------------
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 }//end function Sumw2
00307