CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.cc

Go to the documentation of this file.
00001 
00002 // -*- C++ -*-
00003 //
00004 // Package:    RecoEgamma/Examples
00005 // Class:      GsfElectronDataAnalyzer
00006 //
00014 //
00015 // Original Author:  Ursula Berthon
00016 //         Created:  Mon Mar 27 13:22:06 CEST 2006
00017 // $Id: GsfElectronDataAnalyzer.cc,v 1.41 2012/09/13 20:08:32 wdd Exp $
00018 //
00019 //
00020 
00021 // user include files
00022 #include "RecoEgamma/Examples/plugins/GsfElectronDataAnalyzer.h"
00023 
00024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00025 #include "FWCore/Framework/interface/EDAnalyzer.h"
00026 #include "FWCore/Framework/interface/Event.h"
00027 #include "FWCore/Framework/interface/MakerMacros.h"
00028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00029 #include "FWCore/Common/interface/TriggerNames.h"
00030 
00031 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00032 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00033 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
00034 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
00035 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00036 #include "DataFormats/EgammaReco/interface/ElectronSeed.h"
00037 #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
00038 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00039 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
00040 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00041 #include "DataFormats/Common/interface/TriggerResults.h"
00042 
00043 #include "HLTrigger/HLTfilters/interface/HLTHighLevel.h"
00044 
00045 #include "CLHEP/Units/GlobalPhysicalConstants.h"
00046 #include <iostream>
00047 #include "TMath.h"
00048 #include "TFile.h"
00049 #include "TH1F.h"
00050 #include "TH1I.h"
00051 #include "TH2F.h"
00052 #include "TProfile.h"
00053 #include "TTree.h"
00054 #include <iostream>
00055 
00056 using namespace reco;
00057 
00058 GsfElectronDataAnalyzer::GsfElectronDataAnalyzer(const edm::ParameterSet& conf) :
00059   beamSpot_(conf.getParameter<edm::InputTag>("beamSpot"))
00060 {
00061 
00062   outputFile_ = conf.getParameter<std::string>("outputFile");
00063   histfile_ = new TFile(outputFile_.c_str(),"RECREATE");
00064   electronCollection_=conf.getParameter<edm::InputTag>("electronCollection");
00065   readAOD_ = conf.getParameter<bool>("readAOD");
00066 
00067   matchingObjectCollection_ = conf.getParameter<edm::InputTag>("matchingObjectCollection");
00068   matchingCondition_ = conf.getParameter<std::string>("matchingCondition");
00069   // currently only one possible matching conditions
00070   assert (matchingCondition_ == "Cone");
00071   maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
00072   maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
00073   deltaR_ = conf.getParameter<double>("DeltaR");
00074 
00075   triggerResults_ = conf.getParameter<edm::InputTag>("triggerResults");
00076   HLTPathsByName_= conf.getParameter<std::vector<std::string > >("hltPaths");
00077   HLTPathsByIndex_.resize(HLTPathsByName_.size());
00078 
00079   minEt_ = conf.getParameter<double>("MinEt");
00080   minPt_ = conf.getParameter<double>("MinPt");
00081   maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
00082   isEB_ = conf.getParameter<bool>("SelectEB");
00083   isEE_ = conf.getParameter<bool>("SelectEE");
00084   isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEBEEGap");
00085   isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
00086   isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
00087   eOverPMinBarrel_ = conf.getParameter<double>("MinEOverPBarrel");
00088   eOverPMaxBarrel_ = conf.getParameter<double>("MaxEOverPBarrel");
00089   eOverPMinEndcaps_ = conf.getParameter<double>("MinEOverPEndcaps");
00090   eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEOverPEndcaps");
00091   dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
00092   dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
00093   dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
00094   dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
00095   dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
00096   dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
00097   dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
00098   dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
00099   sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
00100   sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
00101   sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
00102   sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
00103   hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoEBarrel");
00104   hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoEEndcaps");
00105   mvaMin_ = conf.getParameter<double>("MinMVA");
00106   tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
00107   tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
00108   tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
00109   hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
00110   hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
00111   hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
00112   ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
00113   ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
00114 
00115   edm::ParameterSet pset =
00116    conf.getParameter<edm::ParameterSet>("HistosConfigurationData") ;
00117 
00118   etamin=pset.getParameter<double>("Etamin");
00119   etamax=pset.getParameter<double>("Etamax");
00120   phimin=pset.getParameter<double>("Phimin");
00121   phimax=pset.getParameter<double>("Phimax");
00122   ptmax=pset.getParameter<double>("Ptmax");
00123   pmax=pset.getParameter<double>("Pmax");
00124   eopmax=pset.getParameter<double>("Eopmax");
00125   eopmaxsht=pset.getParameter<double>("Eopmaxsht");
00126   detamin=pset.getParameter<double>("Detamin");
00127   detamax=pset.getParameter<double>("Detamax");
00128   dphimin=pset.getParameter<double>("Dphimin");
00129   dphimax=pset.getParameter<double>("Dphimax");
00130   detamatchmin=pset.getParameter<double>("Detamatchmin");
00131   detamatchmax=pset.getParameter<double>("Detamatchmax");
00132   dphimatchmin=pset.getParameter<double>("Dphimatchmin");
00133   dphimatchmax=pset.getParameter<double>("Dphimatchmax");
00134   fhitsmax=pset.getParameter<double>("Fhitsmax");
00135   lhitsmax=pset.getParameter<double>("Lhitsmax");
00136   nbineta=pset.getParameter<int>("Nbineta");
00137   nbineta2D=pset.getParameter<int>("Nbineta2D");
00138   nbinp=pset.getParameter<int>("Nbinp");
00139   nbinpt=pset.getParameter<int>("Nbinpt");
00140   nbinp2D=pset.getParameter<int>("Nbinp2D");
00141   nbinpt2D=pset.getParameter<int>("Nbinpt2D");
00142   nbinpteff=pset.getParameter<int>("Nbinpteff");
00143   nbinphi=pset.getParameter<int>("Nbinphi");
00144   nbinphi2D=pset.getParameter<int>("Nbinphi2D");
00145   nbineop=pset.getParameter<int>("Nbineop");
00146   nbineop2D=pset.getParameter<int>("Nbineop2D");
00147   nbinfhits=pset.getParameter<int>("Nbinfhits");
00148   nbinlhits=pset.getParameter<int>("Nbinlhits");
00149   nbinxyz=pset.getParameter<int>("Nbinxyz");
00150   nbindeta=pset.getParameter<int>("Nbindeta");
00151   nbindphi=pset.getParameter<int>("Nbindphi");
00152   nbindetamatch=pset.getParameter<int>("Nbindetamatch");
00153   nbindphimatch=pset.getParameter<int>("Nbindphimatch");
00154   nbindetamatch2D=pset.getParameter<int>("Nbindetamatch2D");
00155   nbindphimatch2D=pset.getParameter<int>("Nbindphimatch2D");
00156   nbinpoptrue= pset.getParameter<int>("Nbinpoptrue");
00157   poptruemin=pset.getParameter<double>("Poptruemin");
00158   poptruemax=pset.getParameter<double>("Poptruemax");
00159   nbinmee= pset.getParameter<int>("Nbinmee");
00160   meemin=pset.getParameter<double>("Meemin");
00161   meemax=pset.getParameter<double>("Meemax");
00162   nbinhoe= pset.getParameter<int>("Nbinhoe");
00163   hoemin=pset.getParameter<double>("Hoemin");
00164   hoemax=pset.getParameter<double>("Hoemax");
00165 
00166 }
00167 
00168 GsfElectronDataAnalyzer::~GsfElectronDataAnalyzer()
00169 {
00170 
00171   // do anything here that needs to be done at desctruction time
00172   // (e.g. close files, deallocate resources etc.)
00173   histfile_->Write();
00174   histfile_->Close();
00175 }
00176 
00177 void GsfElectronDataAnalyzer::beginJob(){
00178 
00179   histfile_->cd();
00180 
00181   nEvents_ = 0;
00182   nAfterTrigger_ = 0;
00183 
00184   // matching object
00185   std::string::size_type locSC = matchingObjectCollection_.label().find( "SuperCluster", 0 );
00186   std::string type_;
00187   if ( locSC != std::string::npos ) {
00188     std::cout << "Matching objects are SuperClusters "<< std::endl;
00189     type_ = "SC";
00190   } else {
00191     std::cout << "Didn't recognize input matching objects!! " << std::endl;
00192   }
00193 
00194   std::string htitle, hlabel;
00195   hlabel="h_"+type_+"Num"; htitle="# "+type_+"s";
00196   h_matchingObjectNum              = new TH1F( hlabel.c_str(), htitle.c_str(),    nbinfhits,0.,fhitsmax );
00197 
00198   // rec event
00199 
00200   histNum_= new TH1F("h_recEleNum","# rec electrons",20, 0.,20.);
00201 
00202   // matching object distributions
00203   hlabel="h_"+type_+"_eta"; htitle=type_+" #eta";
00204   h_matchingObjectEta             = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta,etamin,etamax);
00205   hlabel="h_"+type_+"_abseta"; htitle=type_+" |#eta|";
00206   h_matchingObjectAbsEta             = new TH1F( hlabel.c_str(), htitle.c_str(), nbineta/2,0.,etamax);
00207   hlabel="h_"+type_+"_P"; htitle=type_+" p";
00208   h_matchingObjectP               = new TH1F( hlabel.c_str(), htitle.c_str(),              nbinp,0.,pmax);
00209   hlabel="h_"+type_+"_Pt"; htitle=type_+" pt";
00210   h_matchingObjectPt               = new TH1F( hlabel.c_str(),htitle.c_str(),            nbinpteff,5.,ptmax);
00211   hlabel="h_"+type_+"_phi"; htitle=type_+" phi";
00212   h_matchingObjectPhi               = new TH1F( hlabel.c_str(), htitle.c_str(),        nbinphi,phimin,phimax);
00213   hlabel="h_"+type_+"_z"; htitle=type_+" z";
00214   h_matchingObjectZ      = new TH1F( hlabel.c_str(), htitle.c_str(),   nbinxyz , -25, 25 );
00215 
00216   // mee
00217   h_ele_mee_all      = new TH1F( "h_ele_mee_all", "ele pairs invariant mass, all charge combinations", nbinmee, meemin, meemax );
00218   h_ele_mee_os      = new TH1F( "h_ele_mee_os", "ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax );
00219   h_ele_mee_os_ebeb      = new TH1F( "h_ele_mee_os_ebeb", "ele pairs invariant mass, opp. sign, EB-EB", nbinmee, meemin, meemax );
00220   h_ele_mee_os_ebeb->Sumw2();
00221   h_ele_mee_os_ebee      = new TH1F( "h_ele_mee_os_ebee", "ele pairs invariant mass, opp. sign, EB-EE", nbinmee, meemin, meemax );
00222   h_ele_mee_os_ebee->Sumw2();
00223   h_ele_mee_os_eeee      = new TH1F( "h_ele_mee_os_eeee", "ele pairs invariant mass, opp. sign, EE-EE", nbinmee, meemin, meemax );
00224   h_ele_mee_os_eeee->Sumw2();
00225   h_ele_mee_os_gg      = new TH1F( "h_ele_mee_os_gg", "ele pairs invariant mass, opp. sign, good-good", nbinmee, meemin, meemax );
00226   h_ele_mee_os_gg->Sumw2();
00227   h_ele_mee_os_gb      = new TH1F( "h_ele_mee_os_gb", "ele pairs invariant mass, opp. sign, good-bad", nbinmee, meemin, meemax );
00228   h_ele_mee_os_gb->Sumw2();
00229   h_ele_mee_os_bb      = new TH1F( "h_ele_mee_os_bb", "ele pairs invariant mass, opp. sign, bad-bad", nbinmee, meemin, meemax );
00230   h_ele_mee_os_bb->Sumw2();
00231 
00232   // duplicates
00233   h_ele_E2mnE1vsMee_all = new TH2F("h_ele_E2mnE1vsMee_all", "E2 - E1 vs ele pairs invariant mass, all electrons", nbinmee, meemin, meemax, 100, -50., 50. );
00234   h_ele_E2mnE1vsMee_egeg_all = new TH2F("h_ele_E2mnE1vsMee_egeg_all", "E2 - E1 vs ele pairs invariant mass, ecal driven pairs, all electrons", nbinmee, meemin, meemax, 100, -50., 50. );
00235 
00236   // recoed and matched electrons
00237   h_ele_charge         = new TH1F( "h_ele_charge",         "ele charge",             5,-2.,2.);
00238   h_ele_chargeVsEta    = new TH2F( "h_ele_chargeVsEta",         "ele charge vs eta", nbineta2D,etamin,etamax,5,-2.,2.);
00239   h_ele_chargeVsPhi    = new TH2F( "h_ele_chargeVsPhi",         "ele charge vs phi", nbinphi2D,phimin,phimax,5,-2.,2.);
00240   h_ele_chargeVsPt    = new TH2F( "h_ele_chargeVsPt",         "ele charge vs pt", nbinpt,0.,100.,5,-2.,2.);
00241   h_ele_vertexP        = new TH1F( "h_ele_vertexP",        "ele momentum",       nbinp,0.,pmax);
00242   h_ele_vertexPt       = new TH1F( "h_ele_vertexPt",       "ele transverse momentum",  nbinpt,0.,ptmax);
00243   h_ele_Et       = new TH1F( "h_ele_Et",       "ele SC transverse energy",  nbinpt,0.,ptmax);
00244   h_ele_vertexPtVsEta   = new TH2F( "h_ele_vertexPtVsEta",       "ele transverse momentum vs eta",nbineta2D,etamin,etamax,nbinpt2D,0.,ptmax);
00245   h_ele_vertexPtVsPhi   = new TH2F( "h_ele_vertexPtVsPhi",       "ele transverse momentum vs phi",nbinphi2D,phimin,phimax,nbinpt2D,0.,ptmax);
00246   h_ele_matchingObjectPt_matched       = new TH1F( "h_ele_matchingObjectPt_matched",       "Efficiency vs matching SC E_{T}",  nbinpteff,5.,ptmax);
00247   h_ele_matchingObjectPt_matched->Sumw2();
00248   h_ele_vertexEta      = new TH1F( "h_ele_vertexEta",      "ele momentum eta",    nbineta,etamin,etamax);
00249   h_ele_vertexEtaVsPhi  = new TH2F( "h_ele_vertexEtaVsPhi",      "ele momentum eta vs phi",nbineta2D,etamin,etamax,nbinphi2D,phimin,phimax );
00250   h_ele_matchingObjectAbsEta_matched      = new TH1F( "h_ele_matchingObjectAbsEta_matched",      "Efficiency vs matching SC |#eta|",    nbineta/2,0.,2.5);
00251   h_ele_matchingObjectAbsEta_matched->Sumw2();
00252   h_ele_matchingObjectEta_matched      = new TH1F( "h_ele_matchingObjectEta_matched",      "Efficiency vs matching SC #eta",    nbineta,etamin,etamax);
00253   h_ele_matchingObjectEta_matched->Sumw2();
00254   h_ele_matchingObjectPhi_matched               = new TH1F( "h_ele_matchingObjectPhi_matched", "Efficiency vs matching SC phi",        nbinphi,phimin,phimax);
00255   h_ele_matchingObjectPhi_matched->Sumw2();
00256   h_ele_vertexPhi      = new TH1F( "h_ele_vertexPhi",      "ele  momentum #phi",    nbinphi,phimin,phimax);
00257   h_ele_vertexX      = new TH1F( "h_ele_vertexX",      "ele vertex x",    nbinxyz,-0.1,0.1 );
00258   h_ele_vertexY      = new TH1F( "h_ele_vertexY",      "ele vertex y",    nbinxyz,-0.1,0.1 );
00259   h_ele_vertexZ      = new TH1F( "h_ele_vertexZ",      "ele vertex z",    nbinxyz,-25, 25 );
00260   h_ele_matchingObjectZ_matched      = new TH1F( "h_ele_matchingObjectZ_matched",      "Efficiency vs matching SC z",    nbinxyz,-25,25);
00261   h_ele_matchingObjectZ_matched->Sumw2();
00262   h_ele_vertexTIP      = new TH1F( "h_ele_vertexTIP",      "ele transverse impact parameter (wrt bs)",    90,0.,0.15);
00263   h_ele_vertexTIPVsEta      = new TH2F( "h_ele_vertexTIPVsEta",      "ele transverse impact parameter (wrt bs) vs eta", nbineta2D,etamin,etamax,45,0.,0.15);
00264   h_ele_vertexTIPVsPhi      = new TH2F( "h_ele_vertexTIPVsPhi",      "ele transverse impact parameter (wrt bs) vs phi", nbinphi2D,phimin,phimax,45,0.,0.15);
00265   h_ele_vertexTIPVsPt      = new TH2F( "h_ele_vertexTIPVsPt",      "ele transverse impact parameter (wrt bs) vs transverse momentum", nbinpt2D,0.,ptmax,45,0.,0.15);
00266   h_ele_PoPmatchingObject_matched        = new TH1F( "h_ele_PoPmatchingObject_matched",        "ele momentum / matching SC energy", nbinpoptrue,poptruemin,poptruemax);
00267   h_ele_PtoPtmatchingObject_matched        = new TH1F( "h_ele_PtoPtmatchingObject_matched",        "ele trans momentum / matching SC trans energy", nbinpoptrue,poptruemin,poptruemax);
00268   h_ele_PoPmatchingObjectVsEta_matched   = new TH2F( "h_ele_PoPmatchingObjectVsEta_matched",        "ele momentum / matching SC energy vs eta", nbineta2D,etamin,etamax,50,poptruemin,poptruemax);
00269   h_ele_PoPmatchingObjectVsPhi_matched   = new TH2F( "h_ele_PoPmatchingObjectVsPhi_matched",        "ele momentum / matching SC energy vs phi", nbinphi2D,phimin,phimax,50,poptruemin,poptruemax);
00270   h_ele_PoPmatchingObjectVsPt_matched   = new TH2F( "h_ele_PoPmatchingObjectVsPt_matched",        "ele momentum / matching SC energy vs eta", nbinpt2D,0.,ptmax,50,poptruemin,poptruemax);
00271   h_ele_PoPmatchingObject_barrel_matched         = new TH1F( "h_ele_PoPmatchingObject_barrel_matched",        "ele momentum / matching SC energy, barrel",nbinpoptrue,poptruemin,poptruemax);
00272   h_ele_PoPmatchingObject_endcaps_matched        = new TH1F( "h_ele_PoPmatchingObject_endcaps_matched",        "ele momentum / matching SC energy, endcaps",nbinpoptrue,poptruemin,poptruemax);
00273   h_ele_PtoPtmatchingObject_barrel_matched         = new TH1F( "h_ele_PtoPmatchingObject_barrel_matched",        "ele trans momentum / matching SC trans energy, barrel",nbinpoptrue,poptruemin,poptruemax);
00274   h_ele_PtoPtmatchingObject_endcaps_matched        = new TH1F( "h_ele_PtoPmatchingObject_endcaps_matched",        "ele trans momentum / matching SC trans energy, endcaps",nbinpoptrue,poptruemin,poptruemax);
00275   h_ele_EtaMnEtamatchingObject_matched   = new TH1F( "h_ele_EtaMnEtamatchingObject_matched",   "ele momentum eta - matching SC eta",nbindeta,detamin,detamax);
00276   h_ele_EtaMnEtamatchingObjectVsEta_matched   = new TH2F( "h_ele_EtaMnEtamatchingObjectVsEta_matched",   "ele momentum eta - matching SC eta vs eta",nbineta2D,etamin,etamax,nbindeta/2,detamin,detamax);
00277   h_ele_EtaMnEtamatchingObjectVsPhi_matched   = new TH2F( "h_ele_EtaMnEtamatchingObjectVsPhi_matched",   "ele momentum eta - matching SC eta vs phi",nbinphi2D,phimin,phimax,nbindeta/2,detamin,detamax);
00278   h_ele_EtaMnEtamatchingObjectVsPt_matched   = new TH2F( "h_ele_EtaMnEtamatchingObjectVsPt_matched",   "ele momentum eta - matching SC eta vs pt",nbinpt,0.,ptmax,nbindeta/2,detamin,detamax);
00279   h_ele_PhiMnPhimatchingObject_matched   = new TH1F( "h_ele_PhiMnPhimatchingObject_matched",   "ele momentum phi - matching SC phi",nbindphi,dphimin,dphimax);
00280   h_ele_PhiMnPhimatchingObject2_matched   = new TH1F( "h_ele_PhiMnPhimatchingObject2_matched",   "ele momentum phi - matching SC phi",nbindphimatch2D,dphimatchmin,dphimatchmax);
00281   h_ele_PhiMnPhimatchingObjectVsEta_matched   = new TH2F( "h_ele_PhiMnPhimatchingObjectVsEta_matched",   "ele momentum phi - matching SC phi vs eta",nbineta2D,etamin,etamax,nbindphi/2,dphimin,dphimax);
00282   h_ele_PhiMnPhimatchingObjectVsPhi_matched   = new TH2F( "h_ele_PhiMnPhimatchingObjectVsPhi_matched",   "ele momentum phi - matching SC phi vs phi",nbinphi2D,phimin,phimax,nbindphi/2,dphimin,dphimax);
00283   h_ele_PhiMnPhimatchingObjectVsPt_matched   = new TH2F( "h_ele_PhiMnPhimatchingObjectVsPt_matched",   "ele momentum phi - matching SC phi vs pt",nbinpt2D,0.,ptmax,nbindphi/2,dphimin,dphimax);
00284 
00285   // matched electron, superclusters
00286   histSclEn_ = new TH1F("h_scl_energy","ele supercluster energy",nbinp,0.,pmax);
00287   histSclEoEmatchingObject_barrel_matched = new TH1F("h_scl_EoEmatchingObject_barrel_matched","ele supercluster energy / matching SC energy, barrel",50,0.2,1.2);
00288   histSclEoEmatchingObject_endcaps_matched = new TH1F("h_scl_EoEmatchingObject_endcaps_matched","ele supercluster energy / matching SC energy, endcaps",50,0.2,1.2);
00289   histSclEoEmatchingObject_barrel_new_matched = new TH1F("h_scl_EoEmatchingObject_barrel_new_matched","ele supercluster energy / matching SC energy, barrel",nbinpoptrue,poptruemin,poptruemax);
00290   histSclEoEmatchingObject_endcaps_new_matched = new TH1F("h_scl_EoEmatchingObject_endcaps_new_matched","ele supercluster energy / matching SC energy, endcaps",nbinpoptrue,poptruemin,poptruemax);
00291   histSclEt_ = new TH1F("h_scl_et","ele supercluster transverse energy",nbinpt,0.,ptmax);
00292   histSclEtVsEta_ = new TH2F("h_scl_etVsEta","ele supercluster transverse energy vs eta",nbineta2D,etamin,etamax,nbinpt,0.,ptmax);
00293   histSclEtVsPhi_ = new TH2F("h_scl_etVsPhi","ele supercluster transverse energy vs phi",nbinphi2D,phimin,phimax,nbinpt,0.,ptmax);
00294   histSclEtaVsPhi_ = new TH2F("h_scl_etaVsPhi","ele supercluster eta vs phi",nbinphi2D,phimin,phimax,nbineta2D,etamin,etamax);
00295   histSclEta_ = new TH1F("h_scl_eta","ele supercluster eta",nbineta,etamin,etamax);
00296   histSclPhi_ = new TH1F("h_scl_phi","ele supercluster phi",nbinphi,phimin,phimax);
00297 
00298   histSclSigEtaEta_ =  new TH1F("h_scl_sigetaeta","ele supercluster sigma eta eta",100,0.,0.05);
00299   histSclSigIEtaIEta_barrel_ =  new TH1F("h_scl_sigietaieta_barrel","ele supercluster sigma ieta ieta, barrel",100,0.,0.05);
00300   histSclSigIEtaIEta_endcaps_ =  new TH1F("h_scl_sigietaieta_endcaps","ele supercluster sigma ieta ieta, endcaps",100,0.,0.05);
00301   histSclE1x5_ =  new TH1F("h_scl_E1x5","ele supercluster energy in 1x5",nbinp,0.,pmax);
00302   histSclE1x5_barrel_ =  new TH1F("h_scl_E1x_barrel5","ele supercluster energy in 1x5 barrel",nbinp,0.,pmax);
00303   histSclE1x5_endcaps_ =  new TH1F("h_scl_E1x5_endcaps","ele supercluster energy in 1x5 endcaps",nbinp,0.,pmax);
00304   histSclE2x5max_ =  new TH1F("h_scl_E2x5max","ele supercluster energy in 2x5 max",nbinp,0.,pmax);
00305   histSclE2x5max_barrel_ =  new TH1F("h_scl_E2x5max_barrel","ele supercluster energy in 2x5 max barrel",nbinp,0.,pmax);
00306   histSclE2x5max_endcaps_ =  new TH1F("h_scl_E2x5max_endcaps","ele supercluster energy in 2x5 max endcaps",nbinp,0.,pmax);
00307   histSclE5x5_ =  new TH1F("h_scl_E5x5","ele supercluster energy in 5x5",nbinp,0.,pmax);
00308   histSclE5x5_barrel_ =  new TH1F("h_scl_E5x5_barrel","ele supercluster energy in 5x5 barrel",nbinp,0.,pmax);
00309   histSclE5x5_endcaps_ =  new TH1F("h_scl_E5x5_endcaps","ele supercluster energy in 5x5 endcaps",nbinp,0.,pmax);
00310 
00311   // matched electron, gsf tracks
00312   h_ele_ambiguousTracks      = new TH1F( "h_ele_ambiguousTracks", "ele # ambiguous tracks",  5,0.,5.);
00313   h_ele_ambiguousTracksVsEta      = new TH2F( "h_ele_ambiguousTracksVsEta","ele # ambiguous tracks  vs eta",  nbineta2D,etamin,etamax,5,0.,5.);
00314   h_ele_ambiguousTracksVsPhi      = new TH2F( "h_ele_ambiguousTracksVsPhi", "ele # ambiguous tracks  vs phi",  nbinphi2D,phimin,phimax,5,0.,5.);
00315   h_ele_ambiguousTracksVsPt      = new TH2F( "h_ele_ambiguousTracksVsPt", "ele # ambiguous tracks vs pt",  nbinpt2D,0.,ptmax,5,0.,5.);
00316   h_ele_foundHits      = new TH1F( "h_ele_foundHits",      "ele track # found hits",      nbinfhits,0.,fhitsmax);
00317   h_ele_foundHitsVsEta      = new TH2F( "h_ele_foundHitsVsEta",      "ele track # found hits vs eta",  nbineta2D,etamin,etamax,nbinfhits,0.,fhitsmax);
00318   h_ele_foundHitsVsPhi      = new TH2F( "h_ele_foundHitsVsPhi",      "ele track # found hits vs phi",  nbinphi2D,phimin,phimax,nbinfhits,0.,fhitsmax);
00319   h_ele_foundHitsVsPt      = new TH2F( "h_ele_foundHitsVsPt",      "ele track # found hits vs pt",  nbinpt2D,0.,ptmax,nbinfhits,0.,fhitsmax);
00320   h_ele_lostHits       = new TH1F( "h_ele_lostHits",       "ele track # lost hits",       5,0.,5.);
00321   h_ele_lostHitsVsEta       = new TH2F( "h_ele_lostHitsVsEta",       "ele track # lost hits vs eta",   nbineta2D,etamin,etamax,nbinlhits,0.,lhitsmax);
00322   h_ele_lostHitsVsPhi       = new TH2F( "h_ele_lostHitsVsPhi",       "ele track # lost hits vs eta",   nbinphi2D,phimin,phimax,nbinlhits,0.,lhitsmax);
00323   h_ele_lostHitsVsPt       = new TH2F( "h_ele_lostHitsVsPt",       "ele track # lost hits vs eta",   nbinpt2D,0.,ptmax,nbinlhits,0.,lhitsmax);
00324   h_ele_chi2           = new TH1F( "h_ele_chi2",           "ele track #chi^{2}",         100,0.,15.);
00325   h_ele_chi2VsEta           = new TH2F( "h_ele_chi2VsEta",           "ele track #chi^{2} vs eta",  nbineta2D,etamin,etamax,50,0.,15.);
00326   h_ele_chi2VsPhi           = new TH2F( "h_ele_chi2VsPhi",           "ele track #chi^{2} vs phi",  nbinphi2D,phimin,phimax,50,0.,15.);
00327   h_ele_chi2VsPt           = new TH2F( "h_ele_chi2VsPt",           "ele track #chi^{2} vs pt",  nbinpt2D,0.,ptmax,50,0.,15.);
00328   h_ele_PinMnPout      = new TH1F( "h_ele_PinMnPout",      "ele track inner p - outer p, mean"   ,nbinp,0.,200.);
00329   h_ele_PinMnPout_mode      = new TH1F( "h_ele_PinMnPout_mode",      "ele track inner p - outer p, mode"   ,nbinp,0.,100.);
00330   h_ele_PinMnPoutVsEta_mode = new TH2F( "h_ele_PinMnPoutVsEta_mode",      "ele track inner p - outer p vs eta, mode" ,nbineta2D, etamin,etamax,nbinp2D,0.,100.);
00331   h_ele_PinMnPoutVsPhi_mode = new TH2F( "h_ele_PinMnPoutVsPhi_mode",      "ele track inner p - outer p vs phi, mode" ,nbinphi2D, phimin,phimax,nbinp2D,0.,100.);
00332   h_ele_PinMnPoutVsPt_mode = new TH2F( "h_ele_PinMnPoutVsPt_mode",      "ele track inner p - outer p vs pt, mode" ,nbinpt2D, 0.,ptmax,nbinp2D,0.,100.);
00333   h_ele_PinMnPoutVsE_mode = new TH2F( "h_ele_PinMnPoutVsE_mode",      "ele track inner p - outer p vs E, mode" ,nbinp2D, 0.,200.,nbinp2D,0.,100.);
00334   h_ele_PinMnPoutVsChi2_mode = new TH2F( "h_ele_PinMnPoutVsChi2_mode",      "ele track inner p - outer p vs track chi2, mode" ,50, 0.,20.,nbinp2D,0.,100.);
00335   h_ele_outerP         = new TH1F( "h_ele_outerP",         "ele track outer p, mean",          nbinp,0.,pmax);
00336   h_ele_outerP_mode         = new TH1F( "h_ele_outerP_mode",         "ele track outer p, mode",          nbinp,0.,pmax);
00337   h_ele_outerPVsEta_mode         = new TH2F( "h_ele_outerPVsEta_mode",         "ele track outer p vs eta mode", nbineta2D,etamin,etamax,50,0.,pmax);
00338   h_ele_outerPt        = new TH1F( "h_ele_outerPt",        "ele track outer p_{T}, mean",      nbinpt,0.,ptmax);
00339   h_ele_outerPt_mode        = new TH1F( "h_ele_outerPt_mode",        "ele track outer p_{T}, mode",      nbinpt,0.,ptmax);
00340   h_ele_outerPtVsEta_mode        = new TH2F( "h_ele_outerPtVsEta_mode", "ele track outer p_{T} vs eta, mode", nbineta2D,etamin,etamax,nbinpt2D,0.,ptmax);
00341   h_ele_outerPtVsPhi_mode        = new TH2F( "h_ele_outerPtVsPhi_mode", "ele track outer p_{T} vs phi, mode", nbinphi2D,phimin,phimax,nbinpt2D,0.,ptmax);
00342   h_ele_outerPtVsPt_mode        = new TH2F( "h_ele_outerPtVsPt_mode", "ele track outer p_{T} vs pt, mode", nbinpt2D,0.,100.,nbinpt2D,0.,ptmax);
00343 
00344   // matched electrons, matching
00345   h_ele_EoP            = new TH1F( "h_ele_EoP",            "ele E/P_{vertex}",        nbineop,0.,eopmax);
00346   h_ele_EoPVsEta            = new TH2F( "h_ele_EoPVsEta",            "ele E/P_{vertex} vs eta",  nbineta2D,etamin,etamax,nbineop2D,0.,eopmaxsht);
00347   h_ele_EoPVsPhi            = new TH2F( "h_ele_EoPVsPhi",            "ele E/P_{vertex} vs phi",  nbinphi2D,phimin,phimax,nbineop2D,0.,eopmaxsht);
00348   h_ele_EoPVsE            = new TH2F( "h_ele_EoPVsE",            "ele E/P_{vertex} vs E",  50,0.,pmax ,50,0.,5.);
00349   h_ele_EseedOP            = new TH1F( "h_ele_EseedOP",            "ele E_{seed}/P_{vertex}",        nbineop,0.,eopmax);
00350   h_ele_EseedOPVsEta            = new TH2F( "h_ele_EseedOPVsEta",            "ele E_{seed}/P_{vertex} vs eta",  nbineta2D,etamin,etamax,nbineop2D,0.,eopmaxsht);
00351   h_ele_EseedOPVsPhi            = new TH2F( "h_ele_EseedOPVsPhi",            "ele E_{seed}/P_{vertex} vs phi",  nbinphi2D,phimin,phimax,nbineop2D,0.,eopmaxsht);
00352   h_ele_EseedOPVsE            = new TH2F( "h_ele_EseedOPVsE",            "ele E_{seed}/P_{vertex} vs E",  50,0.,pmax ,50,0.,5.);
00353   h_ele_EoPout         = new TH1F( "h_ele_EoPout",         "ele E/P_{out}",           nbineop,0.,eopmax);
00354   h_ele_EoPoutVsEta         = new TH2F( "h_ele_EoPoutVsEta",         "ele E/P_{out} vs eta",    nbineta2D,etamin,etamax,nbineop2D,0.,eopmaxsht);
00355   h_ele_EoPoutVsPhi         = new TH2F( "h_ele_EoPoutVsPhi",         "ele E/P_{out} vs phi",    nbinphi2D,phimin,phimax,nbineop2D,0.,eopmaxsht);
00356   h_ele_EoPoutVsE         = new TH2F( "h_ele_EoPoutVsE",         "ele E/P_{out} vs E",    nbinp2D,0.,pmax,nbineop2D,0.,eopmaxsht);
00357   h_ele_EeleOPout         = new TH1F( "h_ele_EeleOPout",         "ele E_{ele}/P_{out}",           nbineop,0.,eopmax);
00358   h_ele_EeleOPoutVsEta         = new TH2F( "h_ele_EeleOPoutVsEta",         "ele E_{ele}/P_{out} vs eta",    nbineta2D,etamin,etamax,nbineop2D,0.,eopmaxsht);
00359   h_ele_EeleOPoutVsPhi         = new TH2F( "h_ele_EeleOPoutVsPhi",         "ele E_{ele}/P_{out} vs phi",    nbinphi2D,phimin,phimax,nbineop2D,0.,eopmaxsht);
00360   h_ele_EeleOPoutVsE         = new TH2F( "h_ele_EeleOPoutVsE",         "ele E_{ele}/P_{out} vs E",    nbinp2D,0.,pmax,nbineop2D,0.,eopmaxsht);
00361   h_ele_dEtaSc_propVtx = new TH1F( "h_ele_dEtaSc_propVtx", "ele #eta_{sc} - #eta_{tr}, prop from vertex",      nbindetamatch,detamatchmin,detamatchmax);
00362   h_ele_dEtaScVsEta_propVtx = new TH2F( "h_ele_dEtaScVsEta_propVtx", "ele #eta_{sc} - #eta_{tr} vs eta, prop from vertex", nbineta2D,etamin,etamax,nbindetamatch2D,detamatchmin,detamatchmax);
00363   h_ele_dEtaScVsPhi_propVtx = new TH2F( "h_ele_dEtaScVsPhi_propVtx", "ele #eta_{sc} - #eta_{tr} vs phi, prop from vertex", nbinphi2D,phimin,phimax,nbindetamatch2D,detamatchmin,detamatchmax);
00364   h_ele_dEtaScVsPt_propVtx = new TH2F( "h_ele_dEtaScVsPt_propVtx", "ele #eta_{sc} - #eta_{tr} vs pt, prop from vertex", nbinpt2D,0.,ptmax,nbindetamatch2D,detamatchmin,detamatchmax);
00365   h_ele_dPhiSc_propVtx = new TH1F( "h_ele_dPhiSc_propVtx", "ele #phi_{sc} - #phi_{tr}, prop from vertex",      nbindphimatch,dphimatchmin,dphimatchmax);
00366   h_ele_dPhiScVsEta_propVtx = new TH2F( "h_ele_dPhiScVsEta_propVtx", "ele #phi_{sc} - #phi_{tr} vs eta, prop from vertex", nbineta2D,etamin,etamax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00367   h_ele_dPhiScVsPhi_propVtx = new TH2F( "h_ele_dPhiScVsPhi_propVtx", "ele #phi_{sc} - #phi_{tr} vs phi, prop from vertex", nbinphi2D,phimin,phimax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00368   h_ele_dPhiScVsPt_propVtx = new TH2F( "h_ele_dPhiScVsPt_propVtx", "ele #phi_{sc} - #phi_{tr} vs pt, prop from vertex", nbinpt2D,0.,ptmax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00369   h_ele_dEtaCl_propOut = new TH1F( "h_ele_dEtaCl_propOut", "ele #eta_{cl} - #eta_{tr}, prop from outermost",   nbindetamatch,detamatchmin,detamatchmax);
00370   h_ele_dEtaClVsEta_propOut = new TH2F( "h_ele_dEtaClVsEta_propOut", "ele #eta_{cl} - #eta_{tr} vs eta, prop from out", nbineta2D,etamin,etamax,nbindetamatch2D,detamatchmin,detamatchmax);
00371   h_ele_dEtaClVsPhi_propOut = new TH2F( "h_ele_dEtaClVsPhi_propOut", "ele #eta_{cl} - #eta_{tr} vs phi, prop from out", nbinphi2D,phimin,phimax,nbindetamatch2D,detamatchmin,detamatchmax);
00372   h_ele_dEtaClVsPt_propOut = new TH2F( "h_ele_dEtaScVsPt_propOut", "ele #eta_{cl} - #eta_{tr} vs pt, prop from out", nbinpt2D,0.,ptmax,nbindetamatch2D,detamatchmin,detamatchmax);
00373   h_ele_dPhiCl_propOut = new TH1F( "h_ele_dPhiCl_propOut", "ele #phi_{cl} - #phi_{tr}, prop from outermost",   nbindphimatch,dphimatchmin,dphimatchmax);
00374   h_ele_dPhiClVsEta_propOut = new TH2F( "h_ele_dPhiClVsEta_propOut", "ele #phi_{cl} - #phi_{tr} vs eta, prop from out", nbineta2D,etamin,etamax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00375   h_ele_dPhiClVsPhi_propOut = new TH2F( "h_ele_dPhiClVsPhi_propOut", "ele #phi_{cl} - #phi_{tr} vs phi, prop from out", nbinphi2D,phimin,phimax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00376   h_ele_dPhiClVsPt_propOut = new TH2F( "h_ele_dPhiSClsPt_propOut", "ele #phi_{cl} - #phi_{tr} vs pt, prop from out", nbinpt2D,0.,ptmax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00377   h_ele_dEtaEleCl_propOut = new TH1F( "h_ele_dEtaEleCl_propOut", "ele #eta_{EleCl} - #eta_{tr}, prop from outermost",   nbindetamatch,detamatchmin,detamatchmax);
00378   h_ele_dEtaEleClVsEta_propOut = new TH2F( "h_ele_dEtaEleClVsEta_propOut", "ele #eta_{EleCl} - #eta_{tr} vs eta, prop from out", nbineta2D,etamin,etamax,nbindetamatch2D,detamatchmin,detamatchmax);
00379   h_ele_dEtaEleClVsPhi_propOut = new TH2F( "h_ele_dEtaEleClVsPhi_propOut", "ele #eta_{EleCl} - #eta_{tr} vs phi, prop from out", nbinphi2D,phimin,phimax,nbindetamatch2D,detamatchmin,detamatchmax);
00380   h_ele_dEtaEleClVsPt_propOut = new TH2F( "h_ele_dEtaScVsPt_propOut", "ele #eta_{EleCl} - #eta_{tr} vs pt, prop from out", nbinpt2D,0.,ptmax,nbindetamatch2D,detamatchmin,detamatchmax);
00381   h_ele_dPhiEleCl_propOut = new TH1F( "h_ele_dPhiEleCl_propOut", "ele #phi_{EleCl} - #phi_{tr}, prop from outermost",   nbindphimatch,dphimatchmin,dphimatchmax);
00382   h_ele_dPhiEleClVsEta_propOut = new TH2F( "h_ele_dPhiEleClVsEta_propOut", "ele #phi_{EleCl} - #phi_{tr} vs eta, prop from out", nbineta2D,etamin,etamax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00383   h_ele_dPhiEleClVsPhi_propOut = new TH2F( "h_ele_dPhiEleClVsPhi_propOut", "ele #phi_{EleCl} - #phi_{tr} vs phi, prop from out", nbinphi2D,phimin,phimax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00384   h_ele_dPhiEleClVsPt_propOut = new TH2F( "h_ele_dPhiSEleClsPt_propOut", "ele #phi_{EleCl} - #phi_{tr} vs pt, prop from out", nbinpt2D,0.,ptmax,nbindphimatch2D,dphimatchmin,dphimatchmax);
00385 
00386   h_ele_HoE = new TH1F("h_ele_HoE", "ele hadronic energy / em energy", nbinhoe, hoemin, hoemax) ;
00387   h_ele_HoE_fiducial = new TH1F("h_ele_HoE_fiducial", "ele hadronic energy / em energy, fiducial region", nbinhoe, hoemin, hoemax) ;
00388   h_ele_HoEVsEta = new TH2F("h_ele_HoEVsEta", "ele hadronic energy / em energy vs eta", nbineta,etamin,etamax,nbinhoe, hoemin, hoemax) ;
00389   h_ele_HoEVsPhi = new TH2F("h_ele_HoEVsPhi", "ele hadronic energy / em energy vs phi", nbinphi2D,phimin,phimax,nbinhoe, hoemin, hoemax) ;
00390   h_ele_HoEVsE = new TH2F("h_ele_HoEVsE", "ele hadronic energy / em energy vs E", nbinp, 0.,300.,nbinhoe, hoemin, hoemax) ;
00391 
00392   h_ele_seed_dphi2_ = new TH1F("h_ele_seedDphi2", "ele seed dphi 2nd layer", 50,-0.003,+0.003) ;
00393   h_ele_seed_dphi2VsEta_ = new TH2F("h_ele_seedDphi2VsEta", "ele seed dphi 2nd layer vs eta", nbineta2D,etamin,etamax,50,-0.003,+0.003) ;
00394   h_ele_seed_dphi2VsPt_ = new TH2F("h_ele_seedDphi2VsPt", "ele seed dphi 2nd layer vs pt", nbinpt2D,0.,ptmax,50,-0.003,+0.003) ;
00395   h_ele_seed_drz2_ = new TH1F("h_ele_seedDrz2", "ele seed dr/dz 2nd layer", 50,-0.03,+0.03) ;
00396   h_ele_seed_drz2VsEta_ = new TH2F("h_ele_seedDrz2VsEta", "ele seed dr/dz 2nd layer vs eta", nbineta2D,etamin,etamax,50,-0.03,+0.03) ;
00397   h_ele_seed_drz2VsPt_ = new TH2F("h_ele_seedDrz2VsPt", "ele seed dr/dz 2nd layer vs pt", nbinpt2D,0.,ptmax,50,-0.03,+0.03) ;
00398   h_ele_seed_subdet2_ = new TH1F("h_ele_seedSubdet2", "ele seed subdet 2nd layer", 10,0.,10.) ;
00399 
00400   // classes
00401   h_ele_classes = new TH1F( "h_ele_classes", "electron classes",      20,0.0,20.);
00402   h_ele_eta = new TH1F( "h_ele_eta", "ele electron eta",  nbineta/2,0.0,etamax);
00403   h_ele_eta_golden = new TH1F( "h_ele_eta_golden", "ele electron eta golden",  nbineta/2,0.0,etamax);
00404   h_ele_eta_bbrem = new TH1F( "h_ele_eta_bbrem", "ele electron eta bbrem",  nbineta/2,0.0,etamax);
00405   h_ele_eta_narrow = new TH1F( "h_ele_eta_narrow", "ele electron eta narrow",  nbineta/2,0.0,etamax);
00406   h_ele_eta_shower = new TH1F( "h_ele_eta_show", "ele electron eta showering",  nbineta/2,0.0,etamax);
00407   h_ele_PinVsPoutGolden_mode = new TH2F( "h_ele_PinVsPoutGolden_mode",      "ele track inner p vs outer p vs eta, golden, mode" ,nbinp2D,0.,pmax,50,0.,pmax);
00408   h_ele_PinVsPoutShowering_mode = new TH2F( "h_ele_PinVsPoutShowering_mode",      "ele track inner p vs outer p vs eta, Showering, mode" ,nbinp2D,0.,pmax,50,0.,pmax);
00409   h_ele_PinVsPoutGolden_mean = new TH2F( "h_ele_PinVsPoutGolden_mean",      "ele track inner p vs outer p vs eta, golden, mean" ,nbinp2D,0.,pmax,50,0.,pmax);
00410   h_ele_PinVsPoutShowering_mean = new TH2F( "h_ele_PinVsPoutShowering_mean",      "ele track inner p vs outer p vs eta, Showering, mean" ,nbinp2D,0.,pmax,50,0.,pmax);
00411   h_ele_PtinVsPtoutGolden_mode = new TH2F( "h_ele_PtinVsPtoutGolden_mode",      "ele track inner pt vs outer pt vs eta, golden, mode" ,nbinpt2D,0.,ptmax,50,0.,ptmax);
00412   h_ele_PtinVsPtoutShowering_mode = new TH2F( "h_ele_PtinVsPtoutShowering_mode",      "ele track inner pt vs outer pt vs eta, showering, mode" ,nbinpt2D,0.,ptmax,50,0.,ptmax);
00413   h_ele_PtinVsPtoutGolden_mean = new TH2F( "h_ele_PtinVsPtoutGolden_mean",      "ele track inner pt vs outer pt vs eta, golden, mean" ,nbinpt2D,0.,ptmax,50,0.,ptmax);
00414   h_ele_PtinVsPtoutShowering_mean = new TH2F( "h_ele_PtinVsPtoutShowering_mean",      "ele track inner pt vs outer pt vs eta, showering, mean" ,nbinpt2D,0.,ptmax,50,0.,ptmax);
00415   histSclEoEmatchingObjectGolden_barrel = new TH1F("h_scl_EoEmatchingObject golden, barrel","ele supercluster energy over matchingObject energy, golden, barrel",100,0.2,1.2);
00416   histSclEoEmatchingObjectGolden_endcaps = new TH1F("h_scl_EoEmatchingObject golden, endcaps","ele supercluster energy over matchingObject energy, golden, endcaps",100,0.2,1.2);
00417   histSclEoEmatchingObjectShowering_barrel = new TH1F("h_scl_EoEmatchingObject Showering, barrel","ele supercluster energy over matchingObject energy, showering, barrel",100,0.2,1.2);
00418   histSclEoEmatchingObjectShowering_endcaps = new TH1F("h_scl_EoEmatchingObject Showering, endcaps","ele supercluster energy over matchingObject energy, showering, endcaps",100,0.2,1.2);
00419 
00420   // isolation
00421   h_ele_tkSumPt_dr03 = new TH1F("h_ele_tkSumPt_dr03","tk isolation sum, dR=0.3",100,0.0,20.);
00422   h_ele_ecalRecHitSumEt_dr03= new TH1F("h_ele_ecalRecHitSumEt_dr03","ecal isolation sum, dR=0.3",100,0.0,20.);
00423   h_ele_hcalDepth1TowerSumEt_dr03= new TH1F("h_ele_hcalDepth1TowerSumEt_dr03","hcal depth1 isolation sum, dR=0.3",100,0.0,20.);
00424   h_ele_hcalDepth2TowerSumEt_dr03= new TH1F("h_ele_hcalDepth2TowerSumEt_dr03","hcal depth2 isolation sum, dR=0.3",100,0.0,20.);
00425   h_ele_tkSumPt_dr04= new TH1F("h_ele_tkSumPt_dr04","hcal isolation sum",100,0.0,20.);
00426   h_ele_ecalRecHitSumEt_dr04= new TH1F("h_ele_ecalRecHitSumEt_dr04","ecal isolation sum, dR=0.4",100,0.0,20.);
00427   h_ele_hcalDepth1TowerSumEt_dr04= new TH1F("h_ele_hcalDepth1TowerSumEt_dr04","hcal depth1 isolation sum, dR=0.4",100,0.0,20.);
00428   h_ele_hcalDepth2TowerSumEt_dr04= new TH1F("h_ele_hcalDepth2TowerSumEt_dr04","hcal depth2 isolation sum, dR=0.4",100,0.0,20.);
00429 
00430   // fbrem
00431   h_ele_fbrem = new TH1F( "h_ele_fbrem","ele brem fraction, mode",100,0.,1.);
00432   h_ele_fbremVsEta_mode = new TProfile( "h_ele_fbremvsEtamode","mean ele brem fraction vs eta, mode",nbineta2D,etamin,etamax,0.,1.);
00433   h_ele_fbremVsEta_mean = new TProfile( "h_ele_fbremvsEtamean","mean ele brem fraction vs eta, mean",nbineta2D,etamin,etamax,0.,1.);
00434 
00435   // e/g et pflow electrons
00436   h_ele_mva = new TH1F( "h_ele_mva","ele identification mva",100,-1.,1.);
00437   h_ele_provenance = new TH1F( "h_ele_provenance","ele provenance",5,-2.,3.);
00438 
00439   // histos titles
00440   h_matchingObjectNum              -> GetXaxis()-> SetTitle("N_{SC}");
00441   h_matchingObjectNum              -> GetYaxis()-> SetTitle("Events");
00442   h_matchingObjectEta             -> GetXaxis()-> SetTitle("#eta_{SC}");
00443   h_matchingObjectEta             -> GetYaxis()-> SetTitle("Events");
00444   h_matchingObjectP               -> GetXaxis()-> SetTitle("E_{SC} (GeV)");
00445   h_matchingObjectP               -> GetYaxis()-> SetTitle("Events");
00446   h_ele_foundHits      -> GetXaxis()-> SetTitle("N_{hits}");
00447   h_ele_foundHits      -> GetYaxis()-> SetTitle("Events");
00448   h_ele_ambiguousTracks      -> GetXaxis()-> SetTitle("N_{ambiguous tracks}");
00449   h_ele_ambiguousTracks      -> GetYaxis()-> SetTitle("Events");
00450   h_ele_lostHits       -> GetXaxis()-> SetTitle("N_{lost hits}");
00451   h_ele_lostHits       -> GetYaxis()-> SetTitle("Events");
00452   h_ele_chi2           -> GetXaxis()-> SetTitle("#Chi^{2}");
00453   h_ele_chi2           -> GetYaxis()-> SetTitle("Events");
00454   h_ele_charge         -> GetXaxis()-> SetTitle("charge");
00455   h_ele_charge         -> GetYaxis()-> SetTitle("Events");
00456   h_ele_vertexP        -> GetXaxis()-> SetTitle("p_{vertex} (GeV/c)");
00457   h_ele_vertexP        -> GetYaxis()-> SetTitle("Events");
00458   h_ele_vertexPt       -> GetXaxis()-> SetTitle("p_{T vertex} (GeV/c)");
00459   h_ele_vertexPt       -> GetYaxis()-> SetTitle("Events");
00460   h_ele_Et       -> GetXaxis()-> SetTitle("E_{T} (GeV)");
00461   h_ele_Et       -> GetYaxis()-> SetTitle("Events");
00462   h_ele_vertexEta      -> GetXaxis()-> SetTitle("#eta");
00463   h_ele_vertexEta      -> GetYaxis()-> SetTitle("Events");
00464   h_ele_vertexPhi      -> GetXaxis()-> SetTitle("#phi (rad)");
00465   h_ele_vertexPhi      -> GetYaxis()-> SetTitle("Events");
00466   h_ele_PoPmatchingObject_matched        -> GetXaxis()-> SetTitle("P/E_{SC}");
00467   h_ele_PoPmatchingObject_matched        -> GetYaxis()-> SetTitle("Events");
00468   h_ele_PoPmatchingObject_barrel_matched        -> GetXaxis()-> SetTitle("P/E_{SC}");
00469   h_ele_PoPmatchingObject_barrel_matched        -> GetYaxis()-> SetTitle("Events");
00470   h_ele_PoPmatchingObject_endcaps_matched        -> GetXaxis()-> SetTitle("P/E_{SC}");
00471   h_ele_PoPmatchingObject_endcaps_matched        -> GetYaxis()-> SetTitle("Events");
00472   h_ele_PtoPtmatchingObject_matched        -> GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
00473   h_ele_PtoPtmatchingObject_matched        -> GetYaxis()-> SetTitle("Events");
00474   h_ele_PtoPtmatchingObject_barrel_matched        -> GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
00475   h_ele_PtoPtmatchingObject_barrel_matched        -> GetYaxis()-> SetTitle("Events");
00476   h_ele_PtoPtmatchingObject_endcaps_matched        -> GetXaxis()-> SetTitle("P_{T}/E_{T}^{SC}");
00477   h_ele_PtoPtmatchingObject_endcaps_matched        -> GetYaxis()-> SetTitle("Events");
00478   histSclSigEtaEta_-> GetXaxis()-> SetTitle("#sigma_{#eta #eta}") ;
00479   histSclSigEtaEta_-> GetYaxis()-> SetTitle("Events") ;
00480   histSclSigIEtaIEta_barrel_-> GetXaxis()-> SetTitle("#sigma_{i#eta i#eta}") ;
00481   histSclSigIEtaIEta_barrel_-> GetYaxis()-> SetTitle("Events") ;
00482   histSclSigIEtaIEta_endcaps_-> GetXaxis()-> SetTitle("#sigma_{i#eta i#eta}") ;
00483   histSclSigIEtaIEta_endcaps_-> GetYaxis()-> SetTitle("Events") ;
00484   histSclE1x5_-> GetXaxis()-> SetTitle("E1x5 (GeV)") ;
00485   histSclE1x5_-> GetYaxis()-> SetTitle("Events") ;
00486   histSclE1x5_barrel_-> GetXaxis()-> SetTitle("E1x5 (GeV)") ;
00487   histSclE1x5_barrel_-> GetYaxis()-> SetTitle("Events") ;
00488   histSclE1x5_endcaps_-> GetXaxis()-> SetTitle("E1x5 (GeV)") ;
00489   histSclE1x5_endcaps_-> GetYaxis()-> SetTitle("Events") ;
00490   histSclE2x5max_-> GetXaxis()-> SetTitle("E2x5 (GeV)") ;
00491   histSclE2x5max_-> GetYaxis()-> SetTitle("Events") ;
00492   histSclE2x5max_barrel_-> GetXaxis()-> SetTitle("E2x5 (GeV)") ;
00493   histSclE2x5max_barrel_-> GetYaxis()-> SetTitle("Events") ;
00494   histSclE2x5max_endcaps_-> GetXaxis()-> SetTitle("E2x5 (GeV)") ;
00495   histSclE2x5max_endcaps_-> GetYaxis()-> SetTitle("Events") ;
00496   histSclE5x5_-> GetXaxis()-> SetTitle("E5x5 (GeV)") ;
00497   histSclE5x5_-> GetYaxis()-> SetTitle("Events") ;
00498   histSclE5x5_barrel_-> GetXaxis()-> SetTitle("E5x5 (GeV)") ;
00499   histSclE5x5_barrel_-> GetYaxis()-> SetTitle("Events") ;
00500   histSclE5x5_endcaps_-> GetXaxis()-> SetTitle("E5x5 (GeV)") ;
00501   histSclE5x5_endcaps_-> GetYaxis()-> SetTitle("Events") ;
00502   h_ele_EtaMnEtamatchingObject_matched   -> GetXaxis()-> SetTitle("#eta_{rec} - #eta_{SC}");
00503   h_ele_EtaMnEtamatchingObject_matched   -> GetYaxis()-> SetTitle("Events");
00504   h_ele_PhiMnPhimatchingObject_matched   -> GetXaxis()-> SetTitle("#phi_{rec} - #phi_{SC} (rad)");
00505   h_ele_PhiMnPhimatchingObject_matched   -> GetYaxis()-> SetTitle("Events");
00506   h_ele_PinMnPout      -> GetXaxis()-> SetTitle("P_{vertex} - P_{out} (GeV/c)");
00507   h_ele_PinMnPout      -> GetYaxis()-> SetTitle("Events");
00508   h_ele_PinMnPout_mode      -> GetXaxis()-> SetTitle("P_{vertex} - P_{out}, mode (GeV/c)");
00509   h_ele_PinMnPout_mode      -> GetYaxis()-> SetTitle("Events");
00510   h_ele_outerP         -> GetXaxis()-> SetTitle("P_{out} (GeV/c)");
00511   h_ele_outerP         -> GetYaxis()-> SetTitle("Events");
00512   h_ele_outerP_mode         -> GetXaxis()-> SetTitle("P_{out} (GeV/c)");
00513   h_ele_outerP_mode         -> GetYaxis()-> SetTitle("Events");
00514   h_ele_outerPt        -> GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
00515   h_ele_outerPt        -> GetYaxis()-> SetTitle("Events");
00516   h_ele_outerPt_mode        -> GetXaxis()-> SetTitle("P_{T out} (GeV/c)");
00517   h_ele_outerPt_mode        -> GetYaxis()-> SetTitle("Events");
00518   h_ele_EoP            -> GetXaxis()-> SetTitle("E/P_{vertex}");
00519   h_ele_EoP            -> GetYaxis()-> SetTitle("Events");
00520   h_ele_EseedOP            -> GetXaxis()-> SetTitle("E_{seed}/P_{vertex}");
00521   h_ele_EseedOP            -> GetYaxis()-> SetTitle("Events");
00522   h_ele_EoPout         -> GetXaxis()-> SetTitle("E_{seed}/P_{out}");
00523   h_ele_EoPout         -> GetYaxis()-> SetTitle("Events");
00524   h_ele_EeleOPout         -> GetXaxis()-> SetTitle("E_{ele}/P_{out}");
00525   h_ele_EeleOPout         -> GetYaxis()-> SetTitle("Events");
00526   h_ele_vertexX-> GetXaxis()-> SetTitle("x (cm)");
00527   h_ele_vertexX-> GetYaxis()-> SetTitle("Events");
00528   h_ele_vertexY-> GetXaxis()-> SetTitle("y (cm)");
00529   h_ele_vertexY-> GetYaxis()-> SetTitle("Events");
00530   h_ele_vertexZ-> GetXaxis()-> SetTitle("z (cm)");
00531   h_ele_vertexZ-> GetYaxis()-> SetTitle("Events");
00532   h_ele_vertexTIP-> GetXaxis()-> SetTitle("TIP (cm)");
00533   h_ele_vertexTIP-> GetYaxis()-> SetTitle("Events");
00534   h_ele_vertexTIPVsEta-> GetYaxis()-> SetTitle("TIP (cm)");
00535   h_ele_vertexTIPVsEta-> GetXaxis()-> SetTitle("#eta");
00536   h_ele_vertexTIPVsPhi-> GetYaxis()-> SetTitle("TIP (cm)");
00537   h_ele_vertexTIPVsPhi-> GetXaxis()-> SetTitle("#phi (rad)");
00538   h_ele_vertexTIPVsPt-> GetYaxis()-> SetTitle("TIP (cm)");
00539   h_ele_vertexTIPVsEta-> GetXaxis()-> SetTitle("p_{T} (GeV/c)");
00540   h_ele_dEtaSc_propVtx-> GetXaxis()-> SetTitle("#eta_{sc} - #eta_{tr}");
00541   h_ele_dEtaSc_propVtx-> GetYaxis()-> SetTitle("Events");
00542   h_ele_dEtaCl_propOut-> GetXaxis()-> SetTitle("#eta_{seedcl} - #eta_{tr}");
00543   h_ele_dEtaCl_propOut-> GetYaxis()-> SetTitle("Events");
00544   h_ele_dEtaEleCl_propOut-> GetXaxis()-> SetTitle("#eta_{elecl} - #eta_{tr}");
00545   h_ele_dEtaEleCl_propOut-> GetYaxis()-> SetTitle("Events");
00546   h_ele_dPhiSc_propVtx-> GetXaxis()-> SetTitle("#phi_{sc} - #phi_{tr} (rad)");
00547   h_ele_dPhiSc_propVtx-> GetYaxis()-> SetTitle("Events");
00548   h_ele_dPhiCl_propOut-> GetXaxis()-> SetTitle("#phi_{seedcl} - #phi_{tr} (rad)");
00549   h_ele_dPhiCl_propOut-> GetYaxis()-> SetTitle("Events");
00550   h_ele_dPhiEleCl_propOut-> GetXaxis()-> SetTitle("#phi_{elecl} - #phi_{tr} (rad)");
00551   h_ele_dPhiEleCl_propOut-> GetYaxis()-> SetTitle("Events");
00552   h_ele_HoE-> GetXaxis()-> SetTitle("H/E") ;
00553   h_ele_HoE-> GetYaxis()-> SetTitle("Events") ;
00554   h_ele_HoE_fiducial-> GetXaxis()-> SetTitle("H/E") ;
00555   h_ele_HoE_fiducial-> GetYaxis()-> SetTitle("Events") ;
00556   h_ele_fbrem-> GetXaxis()-> SetTitle("P_{in} - P_{out} / P_{in}");
00557   h_ele_fbrem-> GetYaxis()-> SetTitle("Events");
00558   h_ele_seed_dphi2_-> GetXaxis()-> SetTitle("#phi_{hit}-#phi_{pred} (rad)") ;
00559   h_ele_seed_dphi2_-> GetYaxis()-> SetTitle("Events") ;
00560   h_ele_seed_drz2_-> GetXaxis()-> SetTitle("r(z)_{hit}-r(z)_{pred} (cm)") ;
00561   h_ele_seed_drz2_-> GetYaxis()-> SetTitle("Events") ;
00562   h_ele_seed_subdet2_-> GetXaxis()-> SetTitle("2nd hit subdet Id") ;
00563   h_ele_seed_subdet2_-> GetYaxis()-> SetTitle("Events") ;
00564   h_ele_classes-> GetXaxis()-> SetTitle("class Id") ;
00565   h_ele_classes-> GetYaxis()-> SetTitle("Events") ;
00566   h_ele_mee_all-> GetXaxis()-> SetTitle("m_{ee} (GeV/c^{2})");
00567   h_ele_mee_all-> GetYaxis()-> SetTitle("Events");
00568   h_ele_mee_os-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00569   h_ele_mee_os-> GetYaxis()-> SetTitle("Events");
00570   h_ele_mee_os_ebeb-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00571   h_ele_mee_os_ebeb-> GetYaxis()-> SetTitle("Events");
00572   h_ele_mee_os_ebee-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00573   h_ele_mee_os_ebee-> GetYaxis()-> SetTitle("Events");
00574   h_ele_mee_os_eeee-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00575   h_ele_mee_os_eeee-> GetYaxis()-> SetTitle("Events");
00576   h_ele_mee_os_gg-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00577   h_ele_mee_os_gg-> GetYaxis()-> SetTitle("Events");
00578   h_ele_mee_os_gb-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00579   h_ele_mee_os_gb-> GetYaxis()-> SetTitle("Events");
00580   h_ele_mee_os_bb-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00581   h_ele_mee_os_bb-> GetYaxis()-> SetTitle("Events");
00582   h_ele_E2mnE1vsMee_all-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00583   h_ele_E2mnE1vsMee_all-> GetYaxis()-> SetTitle("E2 - E1 (GeV)");
00584   h_ele_E2mnE1vsMee_egeg_all-> GetXaxis()-> SetTitle("m_{e^{+}e^{-}} (GeV/c^{2})");
00585   h_ele_E2mnE1vsMee_egeg_all-> GetYaxis()-> SetTitle("E2 - E1 (GeV)");
00586   histNum_-> GetXaxis()-> SetTitle("N_{ele}");
00587   histNum_-> GetYaxis()-> SetTitle("Events");
00588   h_ele_fbremVsEta_mode-> GetXaxis()-> SetTitle("#eta");
00589   h_ele_fbremVsEta_mean-> GetXaxis()-> SetTitle("#eta");
00590 
00591 }
00592 
00593 void
00594 GsfElectronDataAnalyzer::endJob(){
00595 
00596   histfile_->cd();
00597   std::cout << "efficiency calculation " << std::endl;
00598   // efficiency vs eta
00599   TH1F *h_ele_etaEff = (TH1F*)h_ele_matchingObjectEta_matched->Clone("h_ele_etaEff");
00600   h_ele_etaEff->Reset();
00601   h_ele_etaEff->Divide(h_ele_matchingObjectEta_matched,h_matchingObjectEta,1,1,"b");
00602   h_ele_etaEff->Print();
00603   h_ele_etaEff->GetXaxis()->SetTitle("#eta");
00604   h_ele_etaEff->GetYaxis()->SetTitle("Efficiency");
00605 
00606   // efficiency vs z
00607   TH1F *h_ele_zEff = (TH1F*)h_ele_matchingObjectZ_matched->Clone("h_ele_zEff");
00608   h_ele_zEff->Reset();
00609   h_ele_zEff->Divide(h_ele_matchingObjectZ_matched,h_matchingObjectZ,1,1,"b");
00610   h_ele_zEff->Print();
00611   h_ele_zEff->GetXaxis()->SetTitle("z (cm)");
00612   h_ele_zEff->GetYaxis()->SetTitle("Efficiency");
00613 
00614   // efficiency vs |eta|
00615   TH1F *h_ele_absetaEff = (TH1F*)h_ele_matchingObjectAbsEta_matched->Clone("h_ele_absetaEff");
00616   h_ele_absetaEff->Reset();
00617   h_ele_absetaEff->Divide(h_ele_matchingObjectAbsEta_matched,h_matchingObjectAbsEta,1,1,"b");
00618   h_ele_absetaEff->GetXaxis()->SetTitle("|#eta|");
00619   h_ele_absetaEff->GetYaxis()->SetTitle("Efficiency");
00620 
00621   // efficiency vs pt
00622   TH1F *h_ele_ptEff = (TH1F*)h_ele_matchingObjectPt_matched->Clone("h_ele_ptEff");
00623   h_ele_ptEff->Reset();
00624   h_ele_ptEff->Divide(h_ele_matchingObjectPt_matched,h_matchingObjectPt,1,1,"b");
00625   h_ele_ptEff->GetXaxis()->SetTitle("p_{T} (GeV/c)");
00626   h_ele_ptEff->GetYaxis()->SetTitle("Efficiency");
00627 
00628   // efficiency vs phi
00629   TH1F *h_ele_phiEff = (TH1F*)h_ele_matchingObjectPhi_matched->Clone("h_ele_phiEff");
00630   h_ele_phiEff->Reset();
00631   h_ele_phiEff->Divide(h_ele_matchingObjectPhi_matched,h_matchingObjectPhi,1,1,"b");
00632   h_ele_phiEff->GetXaxis()->SetTitle("#phi (rad)");
00633   h_ele_phiEff->GetYaxis()->SetTitle("Efficiency");
00634 
00635   // classes
00636   TH1F *h_ele_eta_goldenFrac = (TH1F*)h_ele_eta_golden->Clone("h_ele_eta_goldenFrac");
00637   h_ele_eta_goldenFrac->Reset();
00638   h_ele_eta_goldenFrac->Divide(h_ele_eta_golden,h_ele_eta,1,1);
00639   h_ele_eta_goldenFrac->GetXaxis()->SetTitle("|#eta|");
00640   h_ele_eta_goldenFrac->GetYaxis()->SetTitle("Fraction of electrons");
00641   h_ele_eta_goldenFrac->SetTitle("fraction of golden electrons vs eta");
00642   TH1F *h_ele_eta_bbremFrac = (TH1F*)h_ele_eta_bbrem->Clone("h_ele_eta_bbremFrac");
00643   h_ele_eta_bbremFrac->Reset();
00644   h_ele_eta_bbremFrac->Divide(h_ele_eta_bbrem,h_ele_eta,1,1);
00645   h_ele_eta_bbremFrac->GetXaxis()->SetTitle("|#eta|");
00646   h_ele_eta_bbremFrac->GetYaxis()->SetTitle("Fraction of electrons");
00647   h_ele_eta_bbremFrac->SetTitle("fraction of big brem electrons vs eta");
00648   TH1F *h_ele_eta_narrowFrac = (TH1F*)h_ele_eta_narrow->Clone("h_ele_eta_narrowFrac");
00649   h_ele_eta_narrowFrac->Reset();
00650   h_ele_eta_narrowFrac->Divide(h_ele_eta_narrow,h_ele_eta,1,1);
00651   h_ele_eta_narrowFrac->GetXaxis()->SetTitle("|#eta|");
00652   h_ele_eta_narrowFrac->GetYaxis()->SetTitle("Fraction of electrons");
00653   h_ele_eta_narrowFrac->SetTitle("fraction of narrow electrons vs eta");
00654   TH1F *h_ele_eta_showerFrac = (TH1F*)h_ele_eta_shower->Clone("h_ele_eta_showerFrac");
00655   h_ele_eta_showerFrac->Reset();
00656   h_ele_eta_showerFrac->Divide(h_ele_eta_shower,h_ele_eta,1,1);
00657   h_ele_eta_showerFrac->GetXaxis()->SetTitle("|#eta|");
00658   h_ele_eta_showerFrac->GetYaxis()->SetTitle("Fraction of electrons");
00659   h_ele_eta_showerFrac->SetTitle("fraction of showering electrons vs eta");
00660 
00661   // fbrem
00662   TH1F *h_ele_xOverX0VsEta = new TH1F( "h_ele_xOverx0VsEta","mean X/X_0 vs eta",nbineta/2,0.0,2.5);
00663   for (int ibin=1;ibin<h_ele_fbremVsEta_mean->GetNbinsX()+1;ibin++) {
00664     double xOverX0 = 0.;
00665     if (h_ele_fbremVsEta_mean->GetBinContent(ibin)>0.) xOverX0 = -log(h_ele_fbremVsEta_mean->GetBinContent(ibin));
00666     h_ele_xOverX0VsEta->SetBinContent(ibin,xOverX0);
00667   }
00668 
00669   //profiles from 2D histos
00670   TProfile *p_ele_PoPmatchingObjectVsEta_matched = h_ele_PoPmatchingObjectVsEta_matched->ProfileX();
00671   p_ele_PoPmatchingObjectVsEta_matched->SetTitle("mean ele momentum / matching SC energy vs eta");
00672   p_ele_PoPmatchingObjectVsEta_matched->GetXaxis()->SetTitle("#eta");
00673   p_ele_PoPmatchingObjectVsEta_matched->GetYaxis()->SetTitle("<P/E_{matching SC}>");
00674   p_ele_PoPmatchingObjectVsEta_matched->Write();
00675   TProfile *p_ele_PoPmatchingObjectVsPhi_matched = h_ele_PoPmatchingObjectVsPhi_matched->ProfileX();
00676   p_ele_PoPmatchingObjectVsPhi_matched->SetTitle("mean ele momentum / gen momentum vs phi");
00677   p_ele_PoPmatchingObjectVsPhi_matched->GetXaxis()->SetTitle("#phi (rad)");
00678   p_ele_PoPmatchingObjectVsPhi_matched->GetYaxis()->SetTitle("<P/E_{matching SC}>");
00679   p_ele_PoPmatchingObjectVsPhi_matched->Write();
00680   TProfile *p_ele_EtaMnEtamatchingObjectVsEta_matched = h_ele_EtaMnEtamatchingObjectVsEta_matched->ProfileX();
00681   p_ele_EtaMnEtamatchingObjectVsEta_matched->GetXaxis()->SetTitle("#eta");
00682   p_ele_EtaMnEtamatchingObjectVsEta_matched->GetYaxis()->SetTitle("<#eta_{rec} - #eta_{matching SC}>");
00683   p_ele_EtaMnEtamatchingObjectVsEta_matched->Write();
00684   TProfile *p_ele_EtaMnEtamatchingObjectVsPhi_matched = h_ele_EtaMnEtamatchingObjectVsPhi_matched->ProfileX();
00685   p_ele_EtaMnEtamatchingObjectVsPhi_matched-> GetXaxis()-> SetTitle("#phi");
00686   p_ele_EtaMnEtamatchingObjectVsPhi_matched-> GetYaxis()-> SetTitle("<#eta_{rec} - #eta_{matching SC}>");
00687   p_ele_EtaMnEtamatchingObjectVsPhi_matched->Write();
00688   TProfile *p_ele_PhiMnPhimatchingObjectVsEta_matched = h_ele_PhiMnPhimatchingObjectVsEta_matched->ProfileX();
00689   p_ele_PhiMnPhimatchingObjectVsEta_matched-> GetXaxis()-> SetTitle("#eta");
00690   p_ele_PhiMnPhimatchingObjectVsEta_matched-> GetYaxis()-> SetTitle("<#phi_{rec} - #phi_{matching SC}> (rad)");
00691   p_ele_PhiMnPhimatchingObjectVsEta_matched->Write();
00692   TProfile *p_ele_PhiMnPhimatchingObjectVsPhi_matched = h_ele_PhiMnPhimatchingObjectVsPhi_matched->ProfileX();
00693   p_ele_PhiMnPhimatchingObjectVsPhi_matched-> GetXaxis()-> SetTitle("#phi");
00694   p_ele_PhiMnPhimatchingObjectVsPhi_matched-> GetYaxis()-> SetTitle("<#phi_{rec} - #phi_{matching SC}> (rad)");
00695   p_ele_PhiMnPhimatchingObjectVsPhi_matched->Write();
00696   TProfile *p_ele_vertexPtVsEta = h_ele_vertexPtVsEta->ProfileX();
00697   p_ele_vertexPtVsEta->GetXaxis()->SetTitle("#eta");
00698   p_ele_vertexPtVsEta->GetYaxis()->SetTitle("<p_{T}> (GeV/c)");
00699   p_ele_vertexPtVsEta->Write();
00700   TProfile *p_ele_vertexPtVsPhi = h_ele_vertexPtVsPhi->ProfileX();
00701   p_ele_vertexPtVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00702   p_ele_vertexPtVsPhi->GetYaxis()->SetTitle("<p_{T}> (GeV/c)");
00703   p_ele_vertexPtVsPhi->Write();
00704   TProfile *p_ele_EoPVsEta = h_ele_EoPVsEta->ProfileX();
00705   p_ele_EoPVsEta->GetXaxis()->SetTitle("#eta");
00706   p_ele_EoPVsEta->GetYaxis()->SetTitle("<E/P_{vertex}>");
00707   p_ele_EoPVsEta->Write();
00708   TProfile *p_ele_EoPVsPhi = h_ele_EoPVsPhi->ProfileX();
00709   p_ele_EoPVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00710   p_ele_EoPVsPhi->GetYaxis()->SetTitle("<E/P_{vertex}>");
00711   p_ele_EoPVsPhi->Write();
00712   TProfile *p_ele_EoPoutVsEta = h_ele_EoPoutVsEta->ProfileX();
00713   p_ele_EoPoutVsEta->GetXaxis()->SetTitle("#eta");
00714   p_ele_EoPoutVsEta->GetYaxis()->SetTitle("<E_{seed}/P_{out}>");
00715   p_ele_EoPoutVsEta->Write();
00716   TProfile *p_ele_EoPoutVsPhi = h_ele_EoPoutVsPhi->ProfileX();
00717   p_ele_EoPoutVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00718   p_ele_EoPoutVsPhi->GetYaxis()->SetTitle("<E_{seed}/P_{out}>");
00719   p_ele_EoPoutVsPhi->Write();
00720   TProfile *p_ele_EeleOPoutVsEta = h_ele_EeleOPoutVsEta->ProfileX();
00721   p_ele_EeleOPoutVsEta->SetTitle("mean ele Eele/pout vs eta");
00722   p_ele_EeleOPoutVsEta->GetXaxis()->SetTitle("#eta");
00723   p_ele_EeleOPoutVsEta->GetYaxis()->SetTitle("<E_{ele}/P_{out}>");
00724   p_ele_EeleOPoutVsEta->Write();
00725   TProfile *p_ele_EeleOPoutVsPhi = h_ele_EeleOPoutVsPhi->ProfileX();
00726   p_ele_EeleOPoutVsPhi->SetTitle("mean ele Eele/pout vs phi");
00727   p_ele_EeleOPoutVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00728   p_ele_EeleOPoutVsPhi->GetYaxis()->SetTitle("<E_{ele}/P_{out}>");
00729   p_ele_EeleOPoutVsPhi->Write();
00730   TProfile *p_ele_HoEVsEta = h_ele_HoEVsEta->ProfileX();
00731   p_ele_HoEVsEta->GetXaxis()->SetTitle("#eta");
00732   p_ele_HoEVsEta->GetYaxis()->SetTitle("<H/E>");
00733   p_ele_HoEVsEta->Write();
00734   TProfile *p_ele_HoEVsPhi = h_ele_HoEVsPhi->ProfileX();
00735   p_ele_HoEVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00736   p_ele_HoEVsPhi->GetYaxis()->SetTitle("<H/E>");
00737   p_ele_HoEVsPhi->Write();
00738   TProfile *p_ele_chi2VsEta = h_ele_chi2VsEta->ProfileX();
00739   p_ele_chi2VsEta->GetXaxis()->SetTitle("#eta");
00740   p_ele_chi2VsEta->GetYaxis()->SetTitle("<#Chi^{2}>");
00741   p_ele_chi2VsEta->Write();
00742   TProfile *p_ele_chi2VsPhi = h_ele_chi2VsPhi->ProfileX();
00743   p_ele_chi2VsPhi->GetXaxis()->SetTitle("#phi (rad)");
00744   p_ele_chi2VsPhi->GetYaxis()->SetTitle("<#Chi^{2}>");
00745   p_ele_chi2VsPhi->Write();
00746   TProfile *p_ele_foundHitsVsEta = h_ele_foundHitsVsEta->ProfileX();
00747   p_ele_foundHitsVsEta->GetXaxis()->SetTitle("#eta");
00748   p_ele_foundHitsVsEta->GetYaxis()->SetTitle("<N_{hits}>");
00749   p_ele_foundHitsVsEta->Write();
00750   TProfile *p_ele_foundHitsVsPhi = h_ele_foundHitsVsPhi->ProfileX();
00751   p_ele_foundHitsVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00752   p_ele_foundHitsVsPhi->GetYaxis()->SetTitle("<N_{hits}>");
00753   p_ele_foundHitsVsPhi->Write();
00754   TProfile *p_ele_lostHitsVsEta = h_ele_lostHitsVsEta->ProfileX();
00755   p_ele_lostHitsVsEta->GetXaxis()->SetTitle("#eta");
00756   p_ele_lostHitsVsEta->GetYaxis()->SetTitle("<N_{hits}>");
00757   p_ele_lostHitsVsEta->Write();
00758   TProfile *p_ele_lostHitsVsPhi = h_ele_lostHitsVsPhi->ProfileX();
00759   p_ele_lostHitsVsPhi->GetXaxis()->SetTitle("#phi (rad)");
00760   p_ele_lostHitsVsPhi->GetYaxis()->SetTitle("<N_{hits}>");
00761   p_ele_lostHitsVsPhi->Write();
00762   TProfile *p_ele_vertexTIPVsEta = h_ele_vertexTIPVsEta->ProfileX();
00763   p_ele_vertexTIPVsEta->SetTitle("mean tip (wrt gen vtx) vs eta");
00764   p_ele_vertexTIPVsEta->GetXaxis()->SetTitle("#eta");
00765   p_ele_vertexTIPVsEta->GetYaxis()->SetTitle("<TIP> (cm)");
00766   p_ele_vertexTIPVsEta->Write();
00767   TProfile *p_ele_vertexTIPVsPhi = h_ele_vertexTIPVsPhi->ProfileX();
00768   p_ele_vertexTIPVsPhi->SetTitle("mean tip (wrt gen vtx) vs phi");
00769   p_ele_vertexTIPVsPhi->GetXaxis()->SetTitle("#phi");
00770   p_ele_vertexTIPVsPhi->GetYaxis()->SetTitle("<TIP> (cm)");
00771   p_ele_vertexTIPVsPhi->Write();
00772   TProfile *p_ele_vertexTIPVsPt = h_ele_vertexTIPVsPt->ProfileX();
00773   p_ele_vertexTIPVsPt->SetTitle("mean tip (wrt gen vtx) vs phi");
00774   p_ele_vertexTIPVsPt->GetXaxis()->SetTitle("p_{T} (GeV/c)");
00775   p_ele_vertexTIPVsPt->GetYaxis()->SetTitle("<TIP> (cm)");
00776   p_ele_vertexTIPVsPt->Write();
00777 
00778   // mc truth
00779 
00780   h_matchingObjectNum->Write();
00781 
00782   // rec event
00783 
00784   histNum_->Write();
00785 
00786   // mc
00787   h_matchingObjectEta->Write();
00788   h_matchingObjectAbsEta->Write();
00789   h_matchingObjectP->Write();
00790   h_matchingObjectPt->Write();
00791   h_matchingObjectPhi->Write();
00792   h_matchingObjectZ->Write();
00793 
00794   h_ele_mee_all->Write();
00795   h_ele_mee_os->Write();
00796   h_ele_mee_os_ebeb->Write();
00797   h_ele_mee_os_ebee->Write();
00798   h_ele_mee_os_eeee->Write();
00799   h_ele_mee_os_gg->Write();
00800   h_ele_mee_os_gb->Write();
00801   h_ele_mee_os_bb->Write();
00802   h_ele_E2mnE1vsMee_all ->Write();
00803   h_ele_E2mnE1vsMee_egeg_all->Write();
00804 
00805   // matched electrons
00806   h_ele_charge->Write();
00807   h_ele_chargeVsEta->Write();
00808   h_ele_chargeVsPhi->Write();
00809   h_ele_chargeVsPt->Write();
00810   h_ele_vertexP->Write();
00811   h_ele_vertexPt->Write();
00812   h_ele_Et->Write();
00813   h_ele_vertexPtVsEta->Write();
00814   h_ele_vertexPtVsPhi->Write();
00815   h_ele_matchingObjectPt_matched->Write();
00816   h_ele_vertexEta->Write();
00817   h_ele_vertexEtaVsPhi->Write();
00818   h_ele_matchingObjectAbsEta_matched->Write();
00819   h_ele_matchingObjectEta_matched->Write();
00820   h_ele_matchingObjectPhi_matched->Write();
00821   h_ele_vertexPhi->Write();
00822   h_ele_vertexX->Write();
00823   h_ele_vertexY ->Write();
00824   h_ele_vertexZ->Write();
00825   h_ele_vertexTIP->Write();
00826   h_ele_matchingObjectZ_matched->Write();
00827   h_ele_vertexTIPVsEta->Write();
00828   h_ele_vertexTIPVsPhi->Write();
00829   h_ele_vertexTIPVsPt->Write();
00830   h_ele_PoPmatchingObject_matched->Write();
00831   h_ele_PtoPtmatchingObject_matched->Write();
00832   h_ele_PoPmatchingObjectVsEta_matched ->Write();
00833   h_ele_PoPmatchingObjectVsPhi_matched->Write();
00834   h_ele_PoPmatchingObjectVsPt_matched->Write();
00835   h_ele_PoPmatchingObject_barrel_matched ->Write();
00836   h_ele_PoPmatchingObject_endcaps_matched->Write();
00837   h_ele_PtoPtmatchingObject_barrel_matched ->Write();
00838   h_ele_PtoPtmatchingObject_endcaps_matched->Write();
00839   h_ele_EtaMnEtamatchingObject_matched->Write();
00840   h_ele_EtaMnEtamatchingObjectVsEta_matched ->Write();
00841   h_ele_EtaMnEtamatchingObjectVsPhi_matched->Write();
00842   h_ele_EtaMnEtamatchingObjectVsPt_matched->Write();
00843   h_ele_PhiMnPhimatchingObject_matched ->Write();
00844   h_ele_PhiMnPhimatchingObject2_matched ->Write();
00845   h_ele_PhiMnPhimatchingObjectVsEta_matched->Write();
00846   h_ele_PhiMnPhimatchingObjectVsPhi_matched->Write();
00847   h_ele_PhiMnPhimatchingObjectVsPt_matched->Write();
00848 
00849   // matched electron, superclusters
00850   histSclEn_->Write();
00851   histSclEoEmatchingObject_barrel_matched->Write();
00852   histSclEoEmatchingObject_endcaps_matched->Write();
00853   histSclEoEmatchingObject_barrel_new_matched->Write();
00854   histSclEoEmatchingObject_endcaps_new_matched->Write();
00855   histSclEt_->Write();
00856   histSclEtVsEta_->Write();
00857   histSclEtVsPhi_->Write();
00858   histSclEtaVsPhi_ ->Write();
00859   histSclEta_->Write();
00860   histSclPhi_->Write();
00861   histSclSigEtaEta_->Write();
00862   histSclSigIEtaIEta_barrel_->Write();
00863   histSclSigIEtaIEta_endcaps_->Write();
00864   histSclE1x5_->Write();
00865   histSclE1x5_barrel_->Write();
00866   histSclE1x5_endcaps_->Write();
00867   histSclE2x5max_->Write();
00868   histSclE2x5max_barrel_->Write();
00869   histSclE2x5max_endcaps_->Write();
00870   histSclE5x5_->Write();
00871   histSclE5x5_barrel_->Write();
00872   histSclE5x5_endcaps_->Write();
00873 
00874   // matched electron, gsf tracks
00875   h_ele_ambiguousTracks->Write();
00876   h_ele_ambiguousTracksVsEta->Write();
00877   h_ele_ambiguousTracksVsPhi->Write();
00878   h_ele_ambiguousTracksVsPt->Write();
00879   h_ele_foundHits->Write();
00880   h_ele_foundHitsVsEta->Write();
00881   h_ele_foundHitsVsPhi->Write();
00882   h_ele_foundHitsVsPt->Write();
00883   h_ele_lostHits->Write();
00884   h_ele_lostHitsVsEta->Write();
00885   h_ele_lostHitsVsPhi->Write();
00886   h_ele_lostHitsVsPt->Write();
00887   h_ele_chi2 ->Write();
00888   h_ele_chi2VsEta ->Write();
00889   h_ele_chi2VsPhi ->Write();
00890   h_ele_chi2VsPt->Write();
00891   h_ele_PinMnPout->Write();
00892   h_ele_PinMnPout_mode->Write();
00893   h_ele_PinMnPoutVsEta_mode->Write();
00894   h_ele_PinMnPoutVsPhi_mode->Write();
00895   h_ele_PinMnPoutVsPt_mode->Write();
00896   h_ele_PinMnPoutVsE_mode->Write();
00897   h_ele_PinMnPoutVsChi2_mode->Write();
00898   h_ele_outerP ->Write();
00899   h_ele_outerP_mode->Write();
00900   h_ele_outerPVsEta_mode->Write();
00901   h_ele_outerPt->Write();
00902   h_ele_outerPt_mode ->Write();
00903   h_ele_outerPtVsEta_mode->Write();
00904   h_ele_outerPtVsPhi_mode->Write();
00905   h_ele_outerPtVsPt_mode->Write();
00906 
00907   // matched electrons, matching
00908   h_ele_EoP ->Write();
00909   h_ele_EoPVsEta ->Write();
00910   h_ele_EoPVsPhi->Write();
00911   h_ele_EoPVsE->Write();
00912   h_ele_EseedOP ->Write();
00913   h_ele_EseedOPVsEta ->Write();
00914   h_ele_EseedOPVsPhi->Write();
00915   h_ele_EseedOPVsE->Write();
00916   h_ele_EoPout->Write();
00917   h_ele_EoPoutVsEta->Write();
00918   h_ele_EoPoutVsPhi->Write();
00919   h_ele_EoPoutVsE ->Write();
00920   h_ele_EeleOPout->Write();
00921   h_ele_EeleOPoutVsEta->Write();
00922   h_ele_EeleOPoutVsPhi->Write();
00923   h_ele_EeleOPoutVsE ->Write();
00924   h_ele_dEtaSc_propVtx->Write();
00925   h_ele_dEtaScVsEta_propVtx->Write();
00926   h_ele_dEtaScVsPhi_propVtx->Write();
00927   h_ele_dEtaScVsPt_propVtx ->Write();
00928   h_ele_dPhiSc_propVtx->Write();
00929   h_ele_dPhiScVsEta_propVtx ->Write();
00930   h_ele_dPhiScVsPhi_propVtx->Write();
00931   h_ele_dPhiScVsPt_propVtx->Write();
00932   h_ele_dEtaCl_propOut->Write();
00933   h_ele_dEtaClVsEta_propOut->Write();
00934   h_ele_dEtaClVsPhi_propOut->Write();
00935   h_ele_dEtaClVsPt_propOut->Write();
00936   h_ele_dPhiCl_propOut->Write();
00937   h_ele_dPhiClVsEta_propOut->Write();
00938   h_ele_dPhiClVsPhi_propOut->Write();
00939   h_ele_dPhiClVsPt_propOut->Write();
00940   h_ele_dEtaEleCl_propOut->Write();
00941   h_ele_dEtaEleClVsEta_propOut->Write();
00942   h_ele_dEtaEleClVsPhi_propOut->Write();
00943   h_ele_dEtaEleClVsPt_propOut->Write();
00944   h_ele_dPhiEleCl_propOut->Write();
00945   h_ele_dPhiEleClVsEta_propOut->Write();
00946   h_ele_dPhiEleClVsPhi_propOut->Write();
00947   h_ele_dPhiEleClVsPt_propOut->Write();
00948   h_ele_HoE->Write();
00949   h_ele_HoE_fiducial->Write();
00950   h_ele_HoEVsEta->Write();
00951   h_ele_HoEVsPhi->Write();
00952   h_ele_HoEVsE->Write();
00953 
00954   h_ele_seed_dphi2_->Write();
00955   h_ele_seed_subdet2_->Write();
00956   TProfile *p_ele_seed_dphi2VsEta_ = h_ele_seed_dphi2VsEta_->ProfileX();
00957   p_ele_seed_dphi2VsEta_->SetTitle("mean ele seed dphi 2nd layer vs eta");
00958   p_ele_seed_dphi2VsEta_->GetXaxis()->SetTitle("#eta");
00959   p_ele_seed_dphi2VsEta_->GetYaxis()->SetTitle("<#phi_{pred} - #phi_{hit}, 2nd layer> (rad)");
00960   p_ele_seed_dphi2VsEta_->SetMinimum(-0.004);
00961   p_ele_seed_dphi2VsEta_->SetMaximum(0.004);
00962   p_ele_seed_dphi2VsEta_->Write();
00963   TProfile *p_ele_seed_dphi2VsPt_ = h_ele_seed_dphi2VsPt_->ProfileX();
00964   p_ele_seed_dphi2VsPt_->SetTitle("mean ele seed dphi 2nd layer vs pt");
00965   p_ele_seed_dphi2VsPt_->GetXaxis()->SetTitle("p_{T} (GeV/c)");
00966   p_ele_seed_dphi2VsPt_->GetYaxis()->SetTitle("<#phi_{pred} - #phi_{hit}, 2nd layer> (rad)");
00967   p_ele_seed_dphi2VsPt_->Write();
00968   p_ele_seed_dphi2VsPt_->SetMinimum(-0.004);
00969   p_ele_seed_dphi2VsPt_->SetMaximum(0.004);
00970   h_ele_seed_drz2_->Write();
00971   TProfile *p_ele_seed_drz2VsEta_ = h_ele_seed_drz2VsEta_->ProfileX();
00972   p_ele_seed_drz2VsEta_->SetTitle("mean ele seed dr(dz) 2nd layer vs eta");
00973   p_ele_seed_drz2VsEta_->GetXaxis()->SetTitle("#eta");
00974   p_ele_seed_drz2VsEta_->GetYaxis()->SetTitle("<r(z)_{pred} - r(z)_{hit}, 2nd layer> (cm)");
00975   p_ele_seed_drz2VsEta_->SetMinimum(-0.15);
00976   p_ele_seed_drz2VsEta_->SetMaximum(0.15);
00977   p_ele_seed_drz2VsEta_->Write();
00978   TProfile *p_ele_seed_drz2VsPt_ = h_ele_seed_drz2VsPt_->ProfileX();
00979   p_ele_seed_drz2VsPt_->SetTitle("mean ele seed dr(dz) 2nd layer vs pt");
00980   p_ele_seed_drz2VsPt_->GetXaxis()->SetTitle("p_{T} (GeV/c)");
00981   p_ele_seed_drz2VsPt_->GetYaxis()->SetTitle("<r(z)_{pred} - r(z)_{hit}, 2nd layer> (cm)");
00982   p_ele_seed_drz2VsPt_->SetMinimum(-0.15);
00983   p_ele_seed_drz2VsPt_->SetMaximum(0.15);
00984   p_ele_seed_drz2VsPt_->Write();
00985 
00986   // classes
00987   h_ele_classes->Write();
00988   h_ele_eta->Write();
00989   h_ele_eta_golden->Write();
00990   h_ele_eta_bbrem->Write();
00991   h_ele_eta_narrow->Write();
00992   h_ele_eta_shower->Write();
00993   h_ele_PinVsPoutGolden_mode->Write();
00994   h_ele_PinVsPoutShowering_mode->Write();
00995   h_ele_PinVsPoutGolden_mean->Write();
00996   h_ele_PinVsPoutShowering_mean->Write();
00997   h_ele_PtinVsPtoutGolden_mode->Write();
00998   h_ele_PtinVsPtoutShowering_mode->Write();
00999   h_ele_PtinVsPtoutGolden_mean->Write();
01000   h_ele_PtinVsPtoutShowering_mean->Write();
01001   histSclEoEmatchingObjectGolden_barrel->Write();
01002   histSclEoEmatchingObjectGolden_endcaps->Write();
01003   histSclEoEmatchingObjectShowering_barrel->Write();
01004   histSclEoEmatchingObjectShowering_endcaps->Write();
01005 
01006   // fbrem
01007   h_ele_fbrem->Write();
01008   h_ele_fbremVsEta_mode->Write();
01009   h_ele_fbremVsEta_mean->Write();
01010   h_ele_etaEff->Write();
01011   h_ele_zEff->Write();
01012   h_ele_phiEff->Write();
01013   h_ele_absetaEff->Write();
01014   h_ele_ptEff->Write();
01015   h_ele_eta_goldenFrac->Write();
01016   h_ele_eta_bbremFrac->Write();
01017   h_ele_eta_narrowFrac->Write();
01018   h_ele_eta_showerFrac->Write();
01019   h_ele_xOverX0VsEta->Write();
01020 
01021   // e/g et pflow electrons
01022   h_ele_mva->Write();
01023   h_ele_provenance->Write();
01024 
01025   // isolation
01026   h_ele_tkSumPt_dr03->GetXaxis()->SetTitle("TkIsoSum, cone 0.3 (GeV/c)");
01027   h_ele_tkSumPt_dr03->GetYaxis()->SetTitle("Events");
01028   h_ele_tkSumPt_dr03->Write();
01029   h_ele_ecalRecHitSumEt_dr03->GetXaxis()->SetTitle("EcalIsoSum, cone 0.3 (GeV)");
01030   h_ele_ecalRecHitSumEt_dr03->GetYaxis()->SetTitle("Events");
01031   h_ele_ecalRecHitSumEt_dr03->Write();
01032   h_ele_hcalDepth1TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.3 (GeV)");
01033   h_ele_hcalDepth1TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
01034   h_ele_hcalDepth1TowerSumEt_dr03->Write();
01035   h_ele_hcalDepth2TowerSumEt_dr03->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.3 (GeV)");
01036   h_ele_hcalDepth2TowerSumEt_dr03->GetYaxis()->SetTitle("Events");
01037   h_ele_hcalDepth2TowerSumEt_dr03->Write();
01038   h_ele_tkSumPt_dr04->GetXaxis()->SetTitle("TkIsoSum, cone 0.4 (GeV/c)");
01039   h_ele_tkSumPt_dr04->GetYaxis()->SetTitle("Events");
01040   h_ele_tkSumPt_dr04->Write();
01041   h_ele_ecalRecHitSumEt_dr04->GetXaxis()->SetTitle("EcalIsoSum, cone 0.4 (GeV)");
01042   h_ele_ecalRecHitSumEt_dr04->GetYaxis()->SetTitle("Events");
01043   h_ele_ecalRecHitSumEt_dr04->Write();
01044   h_ele_hcalDepth1TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal1IsoSum, cone 0.4 (GeV)");
01045   h_ele_hcalDepth1TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
01046   h_ele_hcalDepth1TowerSumEt_dr04->Write();
01047   h_ele_hcalDepth2TowerSumEt_dr04->GetXaxis()->SetTitle("Hcal2IsoSum, cone 0.4 (GeV)");
01048   h_ele_hcalDepth2TowerSumEt_dr04->GetYaxis()->SetTitle("Events");
01049   h_ele_hcalDepth2TowerSumEt_dr04->Write();
01050 
01051 
01052 }
01053 
01054 void
01055 GsfElectronDataAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
01056 {
01057 
01058   std::cout << "analyzing new event " << std::endl;
01059   nEvents_++;
01060 
01061   // check event pass requested triggers if any
01062   if (!trigger(iEvent)) return;
01063 
01064   std::cout << "new event passing trigger " << std::endl;
01065   nAfterTrigger_++;
01066 
01067   // get reco electrons
01068   edm::Handle<reco::GsfElectronCollection> gsfElectrons;
01069   iEvent.getByLabel(electronCollection_,gsfElectrons);
01070   edm::LogInfo("")<<"\n\n =================> Treating event "<<iEvent.id()<<" Number of electrons "<<gsfElectrons.product()->size();
01071 
01072   // get reco supercluster collection
01073   edm::Handle<reco::SuperClusterCollection> recoClusters;
01074   iEvent.getByLabel(matchingObjectCollection_,recoClusters);
01075 
01076   // get the beamspot from the Event:
01077   edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
01078   iEvent.getByLabel(beamSpot_, recoBeamSpotHandle);
01079   const BeamSpot bs = *recoBeamSpotHandle;
01080 
01081   histNum_->Fill((*gsfElectrons).size());
01082 
01083   // selected rec electrons
01084   for (reco::GsfElectronCollection::const_iterator gsfIter=gsfElectrons->begin();
01085    gsfIter!=gsfElectrons->end(); gsfIter++){
01086 
01087         // select electrons
01088         if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_) continue;
01089         if (std::abs(gsfIter->eta())>maxAbsEta_) continue;
01090         if (gsfIter->pt()<minPt_) continue;
01091 
01092         if (gsfIter->isEB() && isEE_) continue;
01093         if (gsfIter->isEE() && isEB_) continue;
01094         if (gsfIter->isEBEEGap() && isNotEBEEGap_) continue;
01095 
01096         if (gsfIter->ecalDrivenSeed() && isTrackerDriven_) continue;
01097         if (gsfIter->trackerDrivenSeed() && isEcalDriven_) continue;
01098 
01099         if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_) continue;
01100         if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_) continue;
01101         if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_) continue;
01102         if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_) continue;
01103         if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_) continue;
01104         if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_) continue;
01105         if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_) continue;
01106         if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_) continue;
01107         if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_) continue;
01108         if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_) continue;
01109         if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_) continue;
01110         if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_) continue;
01111         if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_) continue;
01112         if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_) continue;
01113         if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_) continue;
01114         if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_) continue;
01115         if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_) continue;
01116         if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_) continue;
01117         if (gsfIter->mva() < mvaMin_) continue;
01118 
01119         double d = (gsfIter->vertex().x()-bs.position().x())
01120                   *(gsfIter->vertex().x()-bs.position().x())+
01121                    (gsfIter->vertex().y()-bs.position().y())
01122                   *(gsfIter->vertex().y()-bs.position().y());
01123         d = sqrt(d);
01124         if (gsfIter->isEB() && d > tipMaxBarrel_) continue;
01125         if (gsfIter->isEE() && d > tipMaxEndcaps_) continue;
01126 
01127         if (gsfIter->dr03TkSumPt() > tkIso03Max_) continue;
01128         if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_) continue;
01129         if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_) continue;
01130         if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_) continue;
01131         if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_) continue;
01132         if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_) continue;
01133 
01134         // electron related distributions
01135         h_ele_charge        -> Fill( gsfIter->charge() );
01136         h_ele_chargeVsEta        -> Fill( gsfIter->eta(),gsfIter->charge() );
01137         h_ele_chargeVsPhi        -> Fill( gsfIter->phi(),gsfIter->charge() );
01138         h_ele_chargeVsPt        -> Fill( gsfIter->pt(),gsfIter->charge() );
01139         h_ele_vertexP       -> Fill( gsfIter->p() );
01140         h_ele_vertexPt      -> Fill( gsfIter->pt() );
01141         h_ele_Et      -> Fill( gsfIter->superCluster()->energy()/cosh( gsfIter->superCluster()->eta()) );
01142         h_ele_vertexPtVsEta      -> Fill(  gsfIter->eta(),gsfIter->pt() );
01143         h_ele_vertexPtVsPhi      -> Fill(  gsfIter->phi(),gsfIter->pt() );
01144         h_ele_vertexEta     -> Fill( gsfIter->eta() );
01145 
01146         h_ele_vertexEtaVsPhi     -> Fill(  gsfIter->phi(),gsfIter->eta() );
01147         h_ele_vertexPhi     -> Fill( gsfIter->phi() );
01148         h_ele_vertexX     -> Fill( gsfIter->vertex().x() );
01149         h_ele_vertexY     -> Fill( gsfIter->vertex().y() );
01150         h_ele_vertexZ     -> Fill( gsfIter->vertex().z() );
01151         h_ele_vertexTIP     -> Fill( d );
01152         h_ele_vertexTIPVsEta     -> Fill(  gsfIter->eta(), d );
01153         h_ele_vertexTIPVsPhi     -> Fill(  gsfIter->phi(), d );
01154         h_ele_vertexTIPVsPt     -> Fill(  gsfIter->pt(), d );
01155 
01156         // supercluster related distributions
01157         reco::SuperClusterRef sclRef = gsfIter->superCluster();
01158         if (!gsfIter->ecalDrivenSeed()&&gsfIter->trackerDrivenSeed()) sclRef = gsfIter->pflowSuperCluster();
01159         histSclEn_->Fill(sclRef->energy());
01160         double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
01161         double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
01162         histSclEt_->Fill(sclRef->energy()*(Rt/R));
01163         histSclEtVsEta_->Fill(sclRef->eta(),sclRef->energy()*(Rt/R));
01164         histSclEtVsPhi_->Fill(sclRef->phi(),sclRef->energy()*(Rt/R));
01165         histSclEta_->Fill(sclRef->eta());
01166         histSclEtaVsPhi_->Fill(sclRef->phi(),sclRef->eta());
01167         histSclPhi_->Fill(sclRef->phi());
01168         histSclSigEtaEta_->Fill(gsfIter->scSigmaEtaEta());
01169         if (gsfIter->isEB()) histSclSigIEtaIEta_barrel_->Fill(gsfIter->scSigmaIEtaIEta());
01170         if (gsfIter->isEE()) histSclSigIEtaIEta_endcaps_->Fill(gsfIter->scSigmaIEtaIEta());
01171         histSclE1x5_->Fill(gsfIter->scE1x5());
01172         if (gsfIter->isEB()) histSclE1x5_barrel_->Fill(gsfIter->scE1x5());
01173         if (gsfIter->isEE()) histSclE1x5_endcaps_->Fill(gsfIter->scE1x5());
01174         histSclE2x5max_->Fill(gsfIter->scE2x5Max());
01175         if (gsfIter->isEB()) histSclE2x5max_barrel_->Fill(gsfIter->scE2x5Max());
01176         if (gsfIter->isEE()) histSclE2x5max_endcaps_->Fill(gsfIter->scE2x5Max());
01177         histSclE5x5_->Fill(gsfIter->scE5x5());
01178         if (gsfIter->isEB()) histSclE5x5_barrel_->Fill(gsfIter->scE5x5());
01179         if (gsfIter->isEE()) histSclE5x5_endcaps_->Fill(gsfIter->scE5x5());
01180 
01181         // track related distributions
01182         h_ele_ambiguousTracks     -> Fill( gsfIter->ambiguousGsfTracksSize() );
01183         h_ele_ambiguousTracksVsEta     -> Fill( gsfIter->eta(), gsfIter->ambiguousGsfTracksSize() );
01184         h_ele_ambiguousTracksVsPhi     -> Fill( gsfIter->phi(), gsfIter->ambiguousGsfTracksSize() );
01185         h_ele_ambiguousTracksVsPt     -> Fill( gsfIter->pt(), gsfIter->ambiguousGsfTracksSize() );
01186         if (!readAOD_) { // track extra does not exist in AOD
01187           h_ele_foundHits     -> Fill( gsfIter->gsfTrack()->numberOfValidHits() );
01188           h_ele_foundHitsVsEta     -> Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
01189           h_ele_foundHitsVsPhi     -> Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
01190           h_ele_foundHitsVsPt     -> Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfValidHits() );
01191           h_ele_lostHits      -> Fill( gsfIter->gsfTrack()->numberOfLostHits() );
01192           h_ele_lostHitsVsEta      -> Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
01193           h_ele_lostHitsVsPhi      -> Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
01194           h_ele_lostHitsVsPt      -> Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfLostHits() );
01195           h_ele_chi2          -> Fill( gsfIter->gsfTrack()->normalizedChi2() );
01196           h_ele_chi2VsEta          -> Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
01197           h_ele_chi2VsPhi          -> Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
01198           h_ele_chi2VsPt          -> Fill( gsfIter->pt(), gsfIter->gsfTrack()->normalizedChi2() );
01199         }
01200         // from gsf track interface, hence using mean
01201         if (!readAOD_) { // track extra does not exist in AOD
01202           h_ele_PinMnPout     -> Fill( gsfIter->gsfTrack()->innerMomentum().R() - gsfIter->gsfTrack()->outerMomentum().R() );
01203           h_ele_outerP        -> Fill( gsfIter->gsfTrack()->outerMomentum().R() );
01204           h_ele_outerPt       -> Fill( gsfIter->gsfTrack()->outerMomentum().Rho() );
01205         }
01206         // from electron interface, hence using mode
01207         h_ele_PinMnPout_mode     -> Fill( gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01208         h_ele_PinMnPoutVsEta_mode     -> Fill(  gsfIter->eta(), gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01209         h_ele_PinMnPoutVsPhi_mode     -> Fill(  gsfIter->phi(), gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01210         h_ele_PinMnPoutVsPt_mode     -> Fill(  gsfIter->pt(), gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01211         h_ele_PinMnPoutVsE_mode     -> Fill(  gsfIter->caloEnergy(), gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01212         if (!readAOD_)  // track extra does not exist in AOD
01213          h_ele_PinMnPoutVsChi2_mode     -> Fill(  gsfIter->gsfTrack()->normalizedChi2(), gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
01214         h_ele_outerP_mode        -> Fill( gsfIter->trackMomentumOut().R() );
01215         h_ele_outerPVsEta_mode        -> Fill(gsfIter->eta(),  gsfIter->trackMomentumOut().R() );
01216         h_ele_outerPt_mode       -> Fill( gsfIter->trackMomentumOut().Rho() );
01217         h_ele_outerPtVsEta_mode       -> Fill(gsfIter->eta(),  gsfIter->trackMomentumOut().Rho() );
01218         h_ele_outerPtVsPhi_mode       -> Fill(gsfIter->phi(),  gsfIter->trackMomentumOut().Rho() );
01219         h_ele_outerPtVsPt_mode       -> Fill(gsfIter->pt(),  gsfIter->trackMomentumOut().Rho() );
01220 
01221         if (!readAOD_) { // track extra does not exist in AOD
01222           edm::RefToBase<TrajectorySeed> seed = gsfIter->gsfTrack()->extra()->seedRef();
01223           ElectronSeedRef elseed=seed.castTo<ElectronSeedRef>();
01224           h_ele_seed_dphi2_-> Fill(elseed->dPhi2());
01225           h_ele_seed_dphi2VsEta_-> Fill(gsfIter->eta(), elseed->dPhi2());
01226           h_ele_seed_dphi2VsPt_-> Fill(gsfIter->pt(), elseed->dPhi2()) ;
01227           h_ele_seed_drz2_-> Fill(elseed->dRz2());
01228           h_ele_seed_drz2VsEta_-> Fill(gsfIter->eta(), elseed->dRz2());
01229           h_ele_seed_drz2VsPt_-> Fill(gsfIter->pt(), elseed->dRz2());
01230           h_ele_seed_subdet2_-> Fill(elseed->subDet2());
01231         }
01232         // match distributions
01233         h_ele_EoP    -> Fill( gsfIter->eSuperClusterOverP() );
01234         h_ele_EoPVsEta    -> Fill(gsfIter->eta(),  gsfIter->eSuperClusterOverP() );
01235         h_ele_EoPVsPhi    -> Fill(gsfIter->phi(),  gsfIter->eSuperClusterOverP() );
01236         h_ele_EoPVsE    -> Fill(gsfIter->caloEnergy(),  gsfIter->eSuperClusterOverP() );
01237         h_ele_EseedOP    -> Fill( gsfIter->eSeedClusterOverP() );
01238         h_ele_EseedOPVsEta    -> Fill(gsfIter->eta(),  gsfIter->eSeedClusterOverP() );
01239         h_ele_EseedOPVsPhi    -> Fill(gsfIter->phi(),  gsfIter->eSeedClusterOverP() );
01240         h_ele_EseedOPVsE    -> Fill(gsfIter->caloEnergy(),  gsfIter->eSeedClusterOverP() );
01241         h_ele_EoPout -> Fill( gsfIter->eSeedClusterOverPout() );
01242         h_ele_EoPoutVsEta -> Fill( gsfIter->eta(), gsfIter->eSeedClusterOverPout() );
01243         h_ele_EoPoutVsPhi -> Fill( gsfIter->phi(), gsfIter->eSeedClusterOverPout() );
01244         h_ele_EoPoutVsE -> Fill( gsfIter->caloEnergy(), gsfIter->eSeedClusterOverPout() );
01245         h_ele_EeleOPout -> Fill( gsfIter->eEleClusterOverPout() );
01246         h_ele_EeleOPoutVsEta -> Fill( gsfIter->eta(), gsfIter->eEleClusterOverPout() );
01247         h_ele_EeleOPoutVsPhi -> Fill( gsfIter->phi(), gsfIter->eEleClusterOverPout() );
01248         h_ele_EeleOPoutVsE -> Fill( gsfIter->caloEnergy(), gsfIter->eEleClusterOverPout() );
01249         h_ele_dEtaSc_propVtx -> Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
01250         h_ele_dEtaScVsEta_propVtx -> Fill( gsfIter->eta(),gsfIter->deltaEtaSuperClusterTrackAtVtx());
01251         h_ele_dEtaScVsPhi_propVtx -> Fill(gsfIter->phi(),gsfIter->deltaEtaSuperClusterTrackAtVtx());
01252         h_ele_dEtaScVsPt_propVtx -> Fill(gsfIter->pt(),gsfIter->deltaEtaSuperClusterTrackAtVtx());
01253         h_ele_dPhiSc_propVtx -> Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
01254         h_ele_dPhiScVsEta_propVtx -> Fill( gsfIter->eta(),gsfIter->deltaPhiSuperClusterTrackAtVtx());
01255         h_ele_dPhiScVsPhi_propVtx -> Fill(gsfIter->phi(),gsfIter->deltaPhiSuperClusterTrackAtVtx());
01256         h_ele_dPhiScVsPt_propVtx -> Fill(gsfIter->pt(),gsfIter->deltaPhiSuperClusterTrackAtVtx());
01257         h_ele_dEtaCl_propOut -> Fill(gsfIter->deltaEtaSeedClusterTrackAtCalo());
01258         h_ele_dEtaClVsEta_propOut -> Fill( gsfIter->eta(),gsfIter->deltaEtaSeedClusterTrackAtCalo());
01259         h_ele_dEtaClVsPhi_propOut -> Fill(gsfIter->phi(),gsfIter->deltaEtaSeedClusterTrackAtCalo());
01260         h_ele_dEtaClVsPt_propOut -> Fill(gsfIter->pt(),gsfIter->deltaEtaSeedClusterTrackAtCalo());
01261         h_ele_dPhiCl_propOut -> Fill(gsfIter->deltaPhiSeedClusterTrackAtCalo());
01262         h_ele_dPhiClVsEta_propOut -> Fill( gsfIter->eta(),gsfIter->deltaPhiSeedClusterTrackAtCalo());
01263         h_ele_dPhiClVsPhi_propOut -> Fill(gsfIter->phi(),gsfIter->deltaPhiSeedClusterTrackAtCalo());
01264         h_ele_dPhiClVsPt_propOut -> Fill(gsfIter->pt(),gsfIter->deltaPhiSeedClusterTrackAtCalo());
01265         h_ele_dEtaEleCl_propOut -> Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
01266         h_ele_dEtaEleClVsEta_propOut -> Fill( gsfIter->eta(),gsfIter->deltaEtaEleClusterTrackAtCalo());
01267         h_ele_dEtaEleClVsPhi_propOut -> Fill(gsfIter->phi(),gsfIter->deltaEtaEleClusterTrackAtCalo());
01268         h_ele_dEtaEleClVsPt_propOut -> Fill(gsfIter->pt(),gsfIter->deltaEtaEleClusterTrackAtCalo());
01269         h_ele_dPhiEleCl_propOut -> Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
01270         h_ele_dPhiEleClVsEta_propOut -> Fill( gsfIter->eta(),gsfIter->deltaPhiEleClusterTrackAtCalo());
01271         h_ele_dPhiEleClVsPhi_propOut -> Fill(gsfIter->phi(),gsfIter->deltaPhiEleClusterTrackAtCalo());
01272         h_ele_dPhiEleClVsPt_propOut -> Fill(gsfIter->pt(),gsfIter->deltaPhiEleClusterTrackAtCalo());
01273         h_ele_HoE -> Fill(gsfIter->hadronicOverEm());
01274         if (!gsfIter->isEBEtaGap() && !gsfIter->isEBPhiGap()&& !gsfIter->isEBEEGap() &&
01275             !gsfIter->isEERingGap() && !gsfIter->isEEDeeGap()) h_ele_HoE_fiducial -> Fill(gsfIter->hadronicOverEm());
01276         h_ele_HoEVsEta -> Fill( gsfIter->eta(),gsfIter->hadronicOverEm());
01277         h_ele_HoEVsPhi -> Fill(gsfIter->phi(),gsfIter->hadronicOverEm());
01278         h_ele_HoEVsE -> Fill(gsfIter->caloEnergy(),gsfIter->hadronicOverEm());
01279 
01280         //classes
01281         int eleClass = gsfIter->classification();
01282         if (gsfIter->isEE()) eleClass+=10;
01283         h_ele_classes ->Fill(eleClass);
01284 
01285   h_ele_eta->Fill(std::abs(gsfIter->eta()));
01286   if (gsfIter->classification() == GsfElectron::GOLDEN) h_ele_eta_golden ->Fill(std::abs(gsfIter->eta()));
01287   if (gsfIter->classification() == GsfElectron::BIGBREM) h_ele_eta_bbrem ->Fill(std::abs(gsfIter->eta()));
01288   //if (gsfIter->classification() == GsfElectron::OLDNARROW) h_ele_eta_narrow ->Fill(std::abs(gsfIter->eta()));
01289   if (gsfIter->classification() == GsfElectron::SHOWERING) h_ele_eta_shower ->Fill(std::abs(gsfIter->eta()));
01290 
01291         //fbrem
01292         double fbrem_mean=0.;
01293         if (!readAOD_) // track extra does not exist in AOD
01294          fbrem_mean =  1. - gsfIter->gsfTrack()->outerMomentum().R()/gsfIter->gsfTrack()->innerMomentum().R();
01295         double fbrem_mode =  gsfIter->fbrem();
01296         h_ele_fbrem->Fill(fbrem_mode);
01297         h_ele_fbremVsEta_mode->Fill(gsfIter->eta(),fbrem_mode);
01298         if (!readAOD_) // track extra does not exist in AOD
01299          h_ele_fbremVsEta_mean->Fill(gsfIter->eta(),fbrem_mean);
01300 
01301         if (gsfIter->classification() == GsfElectron::GOLDEN) h_ele_PinVsPoutGolden_mode -> Fill(gsfIter->trackMomentumOut().R(), gsfIter->trackMomentumAtVtx().R());
01302         if (gsfIter->classification() == GsfElectron::SHOWERING)
01303          h_ele_PinVsPoutShowering_mode -> Fill(gsfIter->trackMomentumOut().R(), gsfIter->trackMomentumAtVtx().R());
01304         if (!readAOD_) // track extra does not exist in AOD
01305          if (gsfIter->classification() == GsfElectron::GOLDEN) h_ele_PinVsPoutGolden_mean -> Fill(gsfIter->gsfTrack()->outerMomentum().R(), gsfIter->gsfTrack()->innerMomentum().R());
01306         if (!readAOD_) // track extra does not exist in AOD
01307          if (gsfIter->classification() == GsfElectron::SHOWERING)
01308           h_ele_PinVsPoutShowering_mean ->  Fill(gsfIter->gsfTrack()->outerMomentum().R(), gsfIter->gsfTrack()->innerMomentum().R());
01309         if (gsfIter->classification() == GsfElectron::GOLDEN) h_ele_PtinVsPtoutGolden_mode -> Fill(gsfIter->trackMomentumOut().Rho(), gsfIter->trackMomentumAtVtx().Rho());
01310         if (gsfIter->classification() == GsfElectron::SHOWERING)
01311          h_ele_PtinVsPtoutShowering_mode -> Fill(gsfIter->trackMomentumOut().Rho(), gsfIter->trackMomentumAtVtx().Rho());
01312         if (!readAOD_) // track extra does not exist in AOD
01313          if (gsfIter->classification() == GsfElectron::GOLDEN) h_ele_PtinVsPtoutGolden_mean -> Fill(gsfIter->gsfTrack()->outerMomentum().Rho(), gsfIter->gsfTrack()->innerMomentum().Rho());
01314         if (!readAOD_) // track extra does not exist in AOD
01315          if (gsfIter->classification() == GsfElectron::SHOWERING)
01316           h_ele_PtinVsPtoutShowering_mean ->  Fill(gsfIter->gsfTrack()->outerMomentum().Rho(), gsfIter->gsfTrack()->innerMomentum().Rho());
01317 
01318         h_ele_mva->Fill(gsfIter->mva());
01319         if (gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(1.);
01320         if (gsfIter->trackerDrivenSeed()) h_ele_provenance->Fill(-1.);
01321         if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(0.);
01322         if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(-2.);
01323         if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(2.);
01324 
01325         h_ele_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
01326         h_ele_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
01327         h_ele_hcalDepth1TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth1TowerSumEt());
01328         h_ele_hcalDepth2TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth2TowerSumEt());
01329         h_ele_tkSumPt_dr04->Fill(gsfIter->dr04TkSumPt());
01330         h_ele_ecalRecHitSumEt_dr04->Fill(gsfIter->dr04EcalRecHitSumEt());
01331         h_ele_hcalDepth1TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth1TowerSumEt());
01332         h_ele_hcalDepth2TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth2TowerSumEt());
01333 
01334         float enrj1=gsfIter->superCluster()->energy();
01335         // mee
01336         for (reco::GsfElectronCollection::const_iterator gsfIter2=gsfIter+1;
01337          gsfIter2!=gsfElectrons->end(); gsfIter2++){
01338 
01339             math::XYZTLorentzVector p12 = (*gsfIter).p4()+(*gsfIter2).p4();
01340             float mee2 = p12.Dot(p12);
01341             float enrj2=gsfIter2->superCluster()->energy();
01342             h_ele_mee_all -> Fill(sqrt(mee2));
01343             h_ele_E2mnE1vsMee_all->Fill(sqrt(mee2),enrj2-enrj1);
01344             if (gsfIter->ecalDrivenSeed() && gsfIter2->ecalDrivenSeed()) h_ele_E2mnE1vsMee_egeg_all->Fill(sqrt(mee2),enrj2-enrj1);
01345             if (gsfIter->charge()*gsfIter2->charge()<0.) {
01346               h_ele_mee_os -> Fill(sqrt(mee2));
01347               if (gsfIter->isEB() && gsfIter2->isEB()) h_ele_mee_os_ebeb -> Fill(sqrt(mee2));
01348               if ((gsfIter->isEB() && gsfIter2->isEE()) || (gsfIter->isEE() && gsfIter2->isEB())) h_ele_mee_os_ebee -> Fill(sqrt(mee2));
01349               if (gsfIter->isEE() && gsfIter2->isEE()) h_ele_mee_os_eeee -> Fill(sqrt(mee2));
01350               if ((gsfIter->classification()==GsfElectron::GOLDEN && gsfIter2->classification()==GsfElectron::GOLDEN) ||
01351                  (gsfIter->classification()==GsfElectron::GOLDEN && gsfIter2->classification()==GsfElectron::BIGBREM) ||
01352                  //(gsfIter->classification()==GsfElectron::GOLDEN && gsfIter2->classification()==GsfElectron::OLDNARROW) ||
01353                  (gsfIter->classification()==GsfElectron::BIGBREM && gsfIter2->classification()==GsfElectron::GOLDEN) ||
01354                  (gsfIter->classification()==GsfElectron::BIGBREM && gsfIter2->classification()==GsfElectron::BIGBREM)/* ||
01355                  (gsfIter->classification()==GsfElectron::BIGBREM && gsfIter2->classification()==GsfElectron::OLDNARROW) ||
01356                  (gsfIter->classification()==GsfElectron::OLDNARROW && gsfIter2->classification()==GsfElectron::GOLDEN) ||
01357                  (gsfIter->classification()==GsfElectron::OLDNARROW && gsfIter2->classification()==GsfElectron::BIGBREM) ||
01358                  (gsfIter->classification()==GsfElectron::OLDNARROW && gsfIter2->classification()==GsfElectron::OLDNARROW)*/)
01359                { h_ele_mee_os_gg -> Fill(sqrt(mee2));}
01360               else if (
01361                  (gsfIter->classification()==GsfElectron::SHOWERING && gsfIter2->classification()==GsfElectron::SHOWERING) ||
01362                  (gsfIter->classification()==GsfElectron::SHOWERING && gsfIter2->isGap()) ||
01363                  (gsfIter->isGap() && gsfIter2->classification()==GsfElectron::SHOWERING) ||
01364                  (gsfIter->isGap() && gsfIter2->isGap()))
01365                { h_ele_mee_os_bb -> Fill(sqrt(mee2));}
01366               else
01367                { h_ele_mee_os_gb -> Fill(sqrt(mee2));}
01368             }
01369 
01370         }
01371 
01372   }
01373 
01374   // association matching object-reco electrons
01375   int matchingObjectNum=0;
01376 
01377   for ( reco::SuperClusterCollection::const_iterator moIter=recoClusters->begin();
01378    moIter!=recoClusters->end(); moIter++ ) {
01379 
01380     // number of matching objects
01381     matchingObjectNum++;
01382 
01383       if (moIter->energy()/cosh(moIter->eta())> maxPtMatchingObject_ || std::abs(moIter->eta())> maxAbsEtaMatchingObject_) continue;
01384 
01385       // suppress the endcaps
01386       //if (std::abs(moIter->eta()) > 1.5) continue;
01387       // select central z
01388       //if ( std::abs((*mcIter)->production_vertex()->position().z())>50.) continue;
01389 
01390       h_matchingObjectEta -> Fill( moIter->eta() );
01391       h_matchingObjectAbsEta -> Fill( std::abs(moIter->eta()) );
01392       h_matchingObjectP   -> Fill( moIter->energy() );
01393       h_matchingObjectPt   -> Fill( moIter->energy()/cosh(moIter->eta()) );
01394       h_matchingObjectPhi   -> Fill( moIter->phi() );
01395       h_matchingObjectZ   -> Fill(  moIter->z() );
01396 
01397       // looking for the best matching gsf electron
01398       bool okGsfFound = false;
01399       double gsfOkRatio = 999999.;
01400 
01401       // find matching electron
01402       reco::GsfElectron bestGsfElectron;
01403       for (reco::GsfElectronCollection::const_iterator gsfIter=gsfElectrons->begin();
01404        gsfIter!=gsfElectrons->end(); gsfIter++){
01405 
01406         // matching with a cone in eta phi
01407         if (matchingCondition_ == "Cone") {
01408         double dphi = gsfIter->phi()-moIter->phi();
01409         if (std::abs(dphi)>CLHEP::pi)
01410          dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi;
01411         double deltaR = sqrt(std::pow((moIter->eta()-gsfIter->eta()),2) + std::pow(dphi,2));
01412         if ( deltaR < deltaR_ ){
01413         //if ( (genPc->pdg_id() == 11) && (gsfIter->charge() < 0.) || (genPc->pdg_id() == -11) &&
01414         //(gsfIter->charge() > 0.) ){
01415           double tmpGsfRatio = gsfIter->p()/moIter->energy();
01416           if ( std::abs(tmpGsfRatio-1) < std::abs(gsfOkRatio-1) ) {
01417             gsfOkRatio = tmpGsfRatio;
01418             bestGsfElectron=*gsfIter;
01419             okGsfFound = true;
01420           }
01421         //}
01422         }
01423         }
01424       } // loop over rec ele to look for the best one
01425 
01426       // analysis when the matching object is matched by a rec electron
01427      if (okGsfFound){
01428 
01429         // generated distributions for matched electrons
01430         h_ele_matchingObjectPt_matched      -> Fill( moIter->energy()/cosh(moIter->eta()) );
01431         h_ele_matchingObjectPhi_matched   -> Fill( moIter->phi() );
01432         h_ele_matchingObjectAbsEta_matched     -> Fill( std::abs(moIter->eta()) );
01433         h_ele_matchingObjectEta_matched     -> Fill( moIter->eta() );
01434         h_ele_matchingObjectZ_matched   -> Fill( moIter->z() );
01435 
01436         // comparison electron vs matching object
01437         h_ele_EtaMnEtamatchingObject_matched  -> Fill( bestGsfElectron.eta()-moIter->eta());
01438         h_ele_EtaMnEtamatchingObjectVsEta_matched  -> Fill( bestGsfElectron.eta(), bestGsfElectron.eta()-moIter->eta());
01439         h_ele_EtaMnEtamatchingObjectVsPhi_matched  -> Fill( bestGsfElectron.phi(), bestGsfElectron.eta()-moIter->eta());
01440         h_ele_EtaMnEtamatchingObjectVsPt_matched  -> Fill( bestGsfElectron.pt(), bestGsfElectron.eta()-moIter->eta());
01441         h_ele_PhiMnPhimatchingObject_matched  -> Fill( bestGsfElectron.phi()-moIter->phi());
01442         h_ele_PhiMnPhimatchingObject2_matched  -> Fill( bestGsfElectron.phi()-moIter->phi());
01443         h_ele_PhiMnPhimatchingObjectVsEta_matched  -> Fill( bestGsfElectron.eta(), bestGsfElectron.phi()-moIter->phi());
01444         h_ele_PhiMnPhimatchingObjectVsPhi_matched  -> Fill( bestGsfElectron.phi(), bestGsfElectron.phi()-moIter->phi());
01445         h_ele_PhiMnPhimatchingObjectVsPt_matched  -> Fill( bestGsfElectron.pt(), bestGsfElectron.phi()-moIter->phi());
01446         h_ele_PoPmatchingObject_matched       -> Fill( bestGsfElectron.p()/moIter->energy());
01447         h_ele_PtoPtmatchingObject_matched       -> Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
01448         h_ele_PoPmatchingObjectVsEta_matched       -> Fill( bestGsfElectron.eta(), bestGsfElectron.p()/moIter->energy());
01449         h_ele_PoPmatchingObjectVsPhi_matched       -> Fill( bestGsfElectron.phi(), bestGsfElectron.p()/moIter->energy());
01450         h_ele_PoPmatchingObjectVsPt_matched       -> Fill( bestGsfElectron.py(), bestGsfElectron.p()/moIter->energy());
01451         if (bestGsfElectron.isEB()) h_ele_PoPmatchingObject_barrel_matched       -> Fill( bestGsfElectron.p()/moIter->energy());
01452         if (bestGsfElectron.isEE()) h_ele_PoPmatchingObject_endcaps_matched       -> Fill( bestGsfElectron.p()/moIter->energy());
01453         if (bestGsfElectron.isEB()) h_ele_PtoPtmatchingObject_barrel_matched       -> Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
01454         if (bestGsfElectron.isEE()) h_ele_PtoPtmatchingObject_endcaps_matched       -> Fill( bestGsfElectron.pt()/moIter->energy()/cosh(moIter->eta()));
01455 
01456         reco::SuperClusterRef sclRef = bestGsfElectron.superCluster();
01457         if (bestGsfElectron.isEB())  histSclEoEmatchingObject_barrel_matched->Fill(sclRef->energy()/moIter->energy());
01458         if (bestGsfElectron.isEE())  histSclEoEmatchingObject_endcaps_matched->Fill(sclRef->energy()/moIter->energy());
01459         if (bestGsfElectron.isEB())  histSclEoEmatchingObject_barrel_new_matched->Fill(sclRef->energy()/moIter->energy());
01460         if (bestGsfElectron.isEE())  histSclEoEmatchingObject_endcaps_new_matched->Fill(sclRef->energy()/moIter->energy());
01461 
01462         // add here distributions for matched electrons as for all electrons
01463         //..
01464 
01465       } // gsf electron found
01466 
01467   } // loop overmatching object
01468 
01469   h_matchingObjectNum->Fill(matchingObjectNum);
01470 
01471 }
01472 
01473 bool GsfElectronDataAnalyzer::trigger(const edm::Event & e)
01474 {
01475 
01476   // retreive TriggerResults from the event
01477   edm::Handle<edm::TriggerResults> triggerResults;
01478   e.getByLabel(triggerResults_,triggerResults);
01479 
01480   bool accept = false;
01481 
01482   if (triggerResults.isValid()) {
01483     //std::cout << "TriggerResults found, number of HLT paths: " << triggerResults->size() << std::endl;
01484 
01485     // get trigger names
01486     const edm::TriggerNames & triggerNames = e.triggerNames(*triggerResults);
01487     if (nEvents_==1) {
01488       for (unsigned int i=0; i<triggerNames.size(); i++) {
01489         std::cout << "trigger path= " << triggerNames.triggerName(i) << std::endl;
01490       }
01491     }
01492 
01493     unsigned int n = HLTPathsByName_.size();
01494     for (unsigned int i=0; i!=n; i++) {
01495       HLTPathsByIndex_[i]=triggerNames.triggerIndex(HLTPathsByName_[i]);
01496     }
01497 
01498     // empty input vectors (n==0) means any trigger paths
01499     if (n==0) {
01500       n=triggerResults->size();
01501       HLTPathsByName_.resize(n);
01502       HLTPathsByIndex_.resize(n);
01503       for (unsigned int i=0; i!=n; i++) {
01504         HLTPathsByName_[i]=triggerNames.triggerName(i);
01505         HLTPathsByIndex_[i]=i;
01506       }
01507     }
01508 
01509     if (nEvents_==1){
01510       if (n>0) {
01511         std::cout << "HLT trigger paths requested: index, name and valididty:" << std::endl;
01512         for (unsigned int i=0; i!=n; i++) {
01513           bool validity = HLTPathsByIndex_[i]<triggerResults->size();
01514           std::cout << " " << HLTPathsByIndex_[i]
01515                << " " << HLTPathsByName_[i]
01516                << " " << validity << std::endl;
01517         }
01518       }
01519     }
01520 
01521     // count number of requested HLT paths which have fired
01522     unsigned int fired=0;
01523     for (unsigned int i=0; i!=n; i++) {
01524       if (HLTPathsByIndex_[i]<triggerResults->size()) {
01525         if (triggerResults->accept(HLTPathsByIndex_[i])) {
01526           fired++;
01527           std::cout << "Fired HLT path= " << HLTPathsByName_[i] << std::endl;
01528           accept = true;
01529         }
01530       }
01531     }
01532 
01533   }
01534 
01535   return accept;
01536 
01537 }
01538 
01539