00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #include "ElectroWeakAnalysis/WENu/interface/WenuPlots.h"
00053 #include "DataFormats/Math/interface/deltaR.h"
00054 #include "DataFormats/JetReco/interface/PFJet.h"
00055 #include "DataFormats/JetReco/interface/CaloJet.h"
00056 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00057 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00058 #include "DataFormats/VertexReco/interface/Vertex.h"
00059
00060
00061 WenuPlots::WenuPlots(const edm::ParameterSet& iConfig)
00062
00063 {
00065
00067
00069
00070
00071
00072 wenuCollectionTag_ = iConfig.getUntrackedParameter<edm::InputTag>
00073 ("wenuCollectionTag");
00074
00075
00076
00077 std::string outputFile_D = "histos.root";
00078 outputFile_ = iConfig.getUntrackedParameter<std::string>("outputFile", outputFile_D);
00079 WENU_VBTFselectionFileName_ = iConfig.getUntrackedParameter<std::string>("WENU_VBTFselectionFileName");
00080 WENU_VBTFpreseleFileName_ = iConfig.getUntrackedParameter<std::string>("WENU_VBTFpreseleFileName");
00081 DatasetTag_ = iConfig.getUntrackedParameter<Int_t>("DatasetTag");
00082
00083
00084
00085 usePrecalcID_ = iConfig.getUntrackedParameter<Bool_t>("usePrecalcID",false);
00086 if (usePrecalcID_) {
00087 usePrecalcIDType_ = iConfig.getUntrackedParameter<std::string>("usePrecalcIDType");
00088 usePrecalcIDSign_ = iConfig.getUntrackedParameter<std::string>("usePrecalcIDSign","=");
00089 usePrecalcIDValue_= iConfig.getUntrackedParameter<Double_t>("usePrecalcIDValue");
00090 }
00091 useValidFirstPXBHit_ = iConfig.getUntrackedParameter<Bool_t>("useValidFirstPXBHit",false);
00092 useConversionRejection_ = iConfig.getUntrackedParameter<Bool_t>("useConversionRejection",false);
00093 useExpectedMissingHits_ = iConfig.getUntrackedParameter<Bool_t>("useExpectedMissingHits",false);
00094
00095 maxNumberOfExpectedMissingHits_ = iConfig.getUntrackedParameter<Int_t>("maxNumberOfExpectedMissingHits",1);
00096 if (not usePrecalcID_) {
00097 if (useValidFirstPXBHit_) std::cout << "WenuPlots: Warning: you have demanded a valid 1st layer PXB hit" << std::endl;
00098 if (useConversionRejection_) std::cout << "WenuPlots: Warning: you have demanded egamma conversion rejection criteria to be applied" << std::endl;
00099 if (useExpectedMissingHits_) std::cout << "WenuPlots: Warning: you have demanded at most "
00100 <<maxNumberOfExpectedMissingHits_ << " missing inner hits "<< std::endl;
00101 }
00102 else {
00103 std::cout << "WenuPlots: Using Precalculated ID with type " << usePrecalcIDType_
00104 << usePrecalcIDSign_ << usePrecalcIDValue_ << std::endl;
00105 }
00106 if ((useValidFirstPXBHit_ || useExpectedMissingHits_ || useConversionRejection_) && (not usePrecalcID_)) {
00107 usePreselection_ = true;
00108 } else { usePreselection_ = false; }
00109 includeJetInformationInNtuples_ = iConfig.getUntrackedParameter<Bool_t>("includeJetInformationInNtuples", false);
00110 if (includeJetInformationInNtuples_) {
00111 caloJetCollectionTag_ = iConfig.getUntrackedParameter<edm::InputTag>("caloJetCollectionTag");
00112 pfJetCollectionTag_ = iConfig.getUntrackedParameter<edm::InputTag>("pfJetCollectionTag");
00113 DRJetFromElectron_ = iConfig.getUntrackedParameter<Double_t>("DRJetFromElectron");
00114 }
00115 storeExtraInformation_ = iConfig.getUntrackedParameter<Bool_t>("storeExtraInformation");
00116 storeAllSecondElectronVariables_ = iConfig.getUntrackedParameter<Bool_t>("storeAllSecondElectronVariables", false);
00117
00118 PrimaryVerticesCollection_=iConfig.getUntrackedParameter<edm::InputTag>
00119 ("PrimaryVerticesCollection", edm::InputTag("offlinePrimaryVertices"));
00120 PrimaryVerticesCollectionBS_=iConfig.getUntrackedParameter<edm::InputTag>
00121 ("PrimaryVerticesCollectionBS",edm::InputTag("offlinePrimaryVerticesWithBS"));
00122
00123
00124 trackIso_EB_ = iConfig.getUntrackedParameter<Double_t>("trackIso_EB", 1000.);
00125 ecalIso_EB_ = iConfig.getUntrackedParameter<Double_t>("ecalIso_EB", 1000.);
00126 hcalIso_EB_ = iConfig.getUntrackedParameter<Double_t>("hcalIso_EB", 1000.);
00127
00128 trackIso_EE_ = iConfig.getUntrackedParameter<Double_t>("trackIso_EE", 1000.);
00129 ecalIso_EE_ = iConfig.getUntrackedParameter<Double_t>("ecalIso_EE", 1000.);
00130 hcalIso_EE_ = iConfig.getUntrackedParameter<Double_t>("hcalIso_EE", 1000.);
00131
00132 sihih_EB_ = iConfig.getUntrackedParameter<Double_t>("sihih_EB");
00133 dphi_EB_ = iConfig.getUntrackedParameter<Double_t>("dphi_EB");
00134 deta_EB_ = iConfig.getUntrackedParameter<Double_t>("deta_EB");
00135 hoe_EB_ = iConfig.getUntrackedParameter<Double_t>("hoe_EB");
00136 cIso_EB_ = iConfig.getUntrackedParameter<Double_t>("cIso_EB", 1000.);
00137 tip_bspot_EB_=iConfig.getUntrackedParameter<Double_t>("tip_bspot_EB", 1000.);
00138 eop_EB_=iConfig.getUntrackedParameter<Double_t>("eop_EB", 1000.);
00139
00140 sihih_EE_ = iConfig.getUntrackedParameter<Double_t>("sihih_EE");
00141 dphi_EE_ = iConfig.getUntrackedParameter<Double_t>("dphi_EE");
00142 deta_EE_ = iConfig.getUntrackedParameter<Double_t>("deta_EE");
00143 hoe_EE_ = iConfig.getUntrackedParameter<Double_t>("hoe_EE");
00144 cIso_EE_ = iConfig.getUntrackedParameter<Double_t>("cIso_EE", 1000.);
00145 tip_bspot_EE_=iConfig.getUntrackedParameter<Double_t>("tip_bspot_EE", 1000.);
00146 eop_EE_=iConfig.getUntrackedParameter<Double_t>("eop_EE", 1000.);
00147
00148 trackIsoUser_EB_ = iConfig.getUntrackedParameter<Double_t>("trackIsoUser_EB", 1000.);
00149 ecalIsoUser_EB_ = iConfig.getUntrackedParameter<Double_t>("ecalIsoUser_EB", 1000.);
00150 hcalIsoUser_EB_ = iConfig.getUntrackedParameter<Double_t>("hcalIsoUser_EB", 1000.);
00151 trackIsoUser_EE_ = iConfig.getUntrackedParameter<Double_t>("trackIsoUser_EE", 1000.);
00152 ecalIsoUser_EE_ = iConfig.getUntrackedParameter<Double_t>("ecalIsoUser_EE", 1000.);
00153 hcalIsoUser_EE_ = iConfig.getUntrackedParameter<Double_t>("hcalIsoUser_EE", 1000.);
00154
00155 trackIso_EB_inv = iConfig.getUntrackedParameter<Bool_t>("trackIso_EB_inv", false);
00156 ecalIso_EB_inv = iConfig.getUntrackedParameter<Bool_t>("ecalIso_EB_inv", false);
00157 hcalIso_EB_inv = iConfig.getUntrackedParameter<Bool_t>("hcalIso_EB_inv", false);
00158
00159 trackIso_EE_inv = iConfig.getUntrackedParameter<Bool_t>("trackIso_EE_inv", false);
00160 ecalIso_EE_inv = iConfig.getUntrackedParameter<Bool_t>("ecalIso_EE_inv", false);
00161 hcalIso_EE_inv = iConfig.getUntrackedParameter<Bool_t>("hcalIso_EE_inv", false);
00162
00163 sihih_EB_inv = iConfig.getUntrackedParameter<Bool_t>("sihih_EB_inv", false);
00164 dphi_EB_inv = iConfig.getUntrackedParameter<Bool_t>("dphi_EB_inv", false);
00165 deta_EB_inv = iConfig.getUntrackedParameter<Bool_t>("deta_EB_inv", false);
00166 hoe_EB_inv = iConfig.getUntrackedParameter<Bool_t>("hoe_EB_inv", false);
00167 cIso_EB_inv = iConfig.getUntrackedParameter<Bool_t>("cIso_EB_inv", false);
00168 tip_bspot_EB_inv=iConfig.getUntrackedParameter<Bool_t>("tip_bspot_EB_inv", false);
00169 eop_EB_inv=iConfig.getUntrackedParameter<Bool_t>("eop_EB_inv", false);
00170
00171 sihih_EE_inv = iConfig.getUntrackedParameter<Bool_t>("sihih_EE_inv", false);
00172 dphi_EE_inv = iConfig.getUntrackedParameter<Bool_t>("dphi_EE_inv", false);
00173 deta_EE_inv = iConfig.getUntrackedParameter<Bool_t>("deta_EE_inv", false);
00174 hoe_EE_inv = iConfig.getUntrackedParameter<Bool_t>("hoe_EE_inv", false);
00175 cIso_EE_inv = iConfig.getUntrackedParameter<Bool_t>("cIso_EE_inv", false);
00176 tip_bspot_EE_inv=iConfig.getUntrackedParameter<Bool_t>("tip_bspot_EE_inv", false);
00177 eop_EE_inv=iConfig.getUntrackedParameter<Bool_t>("eop_EE_inv", false);
00178
00179 trackIsoUser_EB_inv = iConfig.getUntrackedParameter<Bool_t>("trackIsoUser_EB_inv", false);
00180 ecalIsoUser_EB_inv = iConfig.getUntrackedParameter<Bool_t>("ecalIsoUser_EB_inv", false);
00181 hcalIsoUser_EB_inv = iConfig.getUntrackedParameter<Bool_t>("hcalIsoUser_EB_inv", false);
00182 trackIsoUser_EE_inv = iConfig.getUntrackedParameter<Bool_t>("trackIsoUser_EE_inv", false);
00183 ecalIsoUser_EE_inv = iConfig.getUntrackedParameter<Bool_t>("ecalIsoUser_EE_inv", false);
00184 hcalIsoUser_EE_inv = iConfig.getUntrackedParameter<Bool_t>("hcalIsoUser_EE_inv", false);
00185
00186 }
00187
00188
00189
00190 WenuPlots::~WenuPlots()
00191 {
00192
00193
00194
00195
00196 }
00197
00198
00199
00200
00201
00202
00203
00204 void
00205 WenuPlots::analyze(const edm::Event& iEvent, const edm::EventSetup& es)
00206 {
00207 using namespace std;
00208
00209
00210
00211 edm::Handle<pat::CompositeCandidateCollection> WenuCands;
00212 iEvent.getByLabel(wenuCollectionTag_, WenuCands);
00213
00214 if (not WenuCands.isValid()) {
00215 cout << "Warning: no wenu candidates in this event..." << endl;
00216 return;
00217 }
00218 const pat::CompositeCandidateCollection *wcands = WenuCands.product();
00219 const pat::CompositeCandidateCollection::const_iterator
00220 wenuIter = wcands->begin();
00221 const pat::CompositeCandidate wenu = *wenuIter;
00222
00223
00224 const pat::Electron * myElec=
00225 dynamic_cast<const pat::Electron*> (wenu.daughter("electron"));
00226 const pat::MET * myMet=
00227 dynamic_cast<const pat::MET*> (wenu.daughter("met"));
00228 const pat::MET * myPfMet=
00229 dynamic_cast<const pat::MET*> (wenu.daughter("pfmet"));
00230 const pat::MET * myTcMet=
00231 dynamic_cast<const pat::MET*> (wenu.daughter("tcmet"));
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244 runNumber = iEvent.run();
00245 eventNumber = Long64_t( iEvent.eventAuxiliary().event() );
00246 lumiSection = (Int_t) iEvent.luminosityBlock();
00247
00248 ele_sc_eta = (Float_t) myElec->superCluster()->eta();
00249 ele_sc_phi = (Float_t) myElec->superCluster()->phi();
00250 double scx = myElec->superCluster()->x();
00251 double scy = myElec->superCluster()->y();
00252 double scz = myElec->superCluster()->z();
00253 ele_sc_rho = (Float_t) sqrt( scx*scx + scy*scy + scz*scz );
00254 ele_sc_energy = (Float_t) myElec->superCluster()->energy();
00255 ele_sc_gsf_et = (Float_t) myElec->superCluster()->energy()/TMath::CosH(myElec->gsfTrack()->eta());
00256 ele_cand_eta = (Float_t) myElec->eta();
00257 ele_cand_phi = (Float_t) myElec->phi();
00258 ele_cand_et = (Float_t) myElec->et();
00259
00260 ele_iso_track = (Float_t) myElec->dr03IsolationVariables().tkSumPt / ele_cand_et;
00261 ele_iso_ecal = (Float_t) myElec->dr03IsolationVariables().ecalRecHitSumEt/ele_cand_et;
00262 ele_iso_hcal = (Float_t) ( myElec->dr03IsolationVariables().hcalDepth1TowerSumEt +
00263 myElec->dr03IsolationVariables().hcalDepth2TowerSumEt) / ele_cand_et;
00264
00265 ele_id_sihih = (Float_t) myElec->sigmaIetaIeta();
00266 ele_id_deta = (Float_t) myElec->deltaEtaSuperClusterTrackAtVtx();
00267 ele_id_dphi = (Float_t) myElec->deltaPhiSuperClusterTrackAtVtx();
00268 ele_id_hoe = (Float_t) myElec->hadronicOverEm();
00269
00270 ele_cr_mhitsinner= myElec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();
00271 ele_cr_dcot = myElec->convDcot();
00272 ele_cr_dist = myElec->convDist();
00273
00274 ele_vx = (Float_t) myElec->vx();
00275 ele_vy = (Float_t) myElec->vy();
00276 ele_vz = (Float_t) myElec->vz();
00277
00278
00279 edm::Handle< std::vector<reco::Vertex> > pVtx;
00280 iEvent.getByLabel(PrimaryVerticesCollection_, pVtx);
00281 const std::vector<reco::Vertex> Vtx = *(pVtx.product());
00282
00283 edm::Handle< std::vector<reco::Vertex> > pVtxBS;
00284 iEvent.getByLabel(PrimaryVerticesCollectionBS_, pVtxBS);
00285 const std::vector<reco::Vertex> VtxBS = *(pVtxBS.product());
00286 if (Vtx.size() > 0) {
00287 pv_x = Float_t(Vtx[0].position().x());
00288 pv_y = Float_t(Vtx[0].position().y());
00289 pv_z = Float_t(Vtx[0].position().z());
00290 ele_tip_pv = myElec->gsfTrack()->dxy(Vtx[0].position());
00291 } else {
00292 pv_x = -999999.;
00293 pv_y = -999999.;
00294 pv_z = -999999.;
00295 ele_tip_pv = -999999.;
00296 }
00297 if (VtxBS.size() > 0) {
00298 pvbs_x = Float_t(VtxBS[0].position().x());
00299 pvbs_y = Float_t(VtxBS[0].position().y());
00300 pvbs_z = Float_t(VtxBS[0].position().z());
00301 ele_tip_pvbs = myElec->gsfTrack()->dxy(VtxBS[0].position());
00302 } else {
00303 pvbs_x = -999999.;
00304 pvbs_y = -999999.;
00305 pvbs_z = -999999.;
00306 ele_tip_pvbs = -999999.;
00307 }
00308
00309
00310 ele_gsfCharge = (Int_t) myElec->gsfTrack()->charge();
00311
00312 ele_ctfCharge = (Int_t) myElec->closestCtfTrackRef().isNonnull() ? myElec->closestCtfTrackRef()->charge():-9999;
00313 ele_scPixCharge = (Int_t) myElec->chargeInfo().scPixCharge;
00314 ele_eop = (Float_t) myElec->eSuperClusterOverP();
00315 ele_tip_bs = (Float_t) -myElec->dB();
00316
00317 ele_pin = (Float_t) myElec->trackMomentumAtVtx().R();
00318 ele_pout = (Float_t) myElec->trackMomentumOut().R();
00319
00320 event_caloMET = (Float_t) myMet->et();
00321 event_pfMET = (Float_t) myPfMet->et();
00322 event_tcMET = (Float_t) myTcMet->et();
00323 event_caloMET_phi= (Float_t) myMet->phi();
00324 event_pfMET_phi = (Float_t) myPfMet->phi();
00325 event_tcMET_phi = (Float_t) myTcMet->phi();
00326 event_caloSumEt = (Float_t) myMet->sumEt();
00327 event_pfSumEt = (Float_t) myPfMet->sumEt();
00328 event_tcSumEt = (Float_t) myTcMet->sumEt();
00329
00330 event_caloMT = (Float_t) TMath::Sqrt(2.*(ele_sc_gsf_et*event_caloMET -
00331 (ele_sc_gsf_et*TMath::Cos(ele_sc_phi)*event_caloMET*TMath::Cos(event_caloMET_phi)
00332 + ele_sc_gsf_et*TMath::Sin(ele_sc_phi)*event_caloMET*TMath::Sin(event_caloMET_phi)
00333 ) ) );
00334 event_pfMT = (Float_t) TMath::Sqrt(2.*(ele_sc_gsf_et*event_pfMET -
00335 (ele_sc_gsf_et*TMath::Cos(ele_sc_phi)*event_pfMET*TMath::Cos(event_pfMET_phi)
00336 + ele_sc_gsf_et*TMath::Sin(ele_sc_phi)*event_pfMET*TMath::Sin(event_pfMET_phi)
00337 ) ) );
00338 event_tcMT = (Float_t) TMath::Sqrt(2.*(ele_sc_gsf_et*event_tcMET -
00339 (ele_sc_gsf_et*TMath::Cos(ele_sc_phi)*event_tcMET*TMath::Cos(event_tcMET_phi)
00340 + ele_sc_gsf_et*TMath::Sin(ele_sc_phi)*event_tcMET*TMath::Sin(event_tcMET_phi)
00341 ) ) );
00342 event_datasetTag = DatasetTag_;
00343
00344
00345 if (includeJetInformationInNtuples_) {
00346
00347 for (int i=0; i<5; ++i) {
00348 calojet_et[i] = -999999; calojet_eta[i] = -999999; calojet_phi[i] = -999999;
00349 pfjet_et[i] = -999999; pfjet_eta[i] = -999999; pfjet_phi[i] = -999999;
00350 }
00351
00352 edm::Handle< reco::CaloJetCollection > pCaloJets;
00353 edm::Handle< reco::PFJetCollection > pPfJets;
00354 iEvent.getByLabel(caloJetCollectionTag_, pCaloJets);
00355 iEvent.getByLabel(pfJetCollectionTag_, pPfJets);
00356
00357
00358 if (pCaloJets.isValid()) {
00359 const reco::CaloJetCollection *caloJets = pCaloJets.product();
00360 int nCaloJets = (int) caloJets->size();
00361 if (nCaloJets>0) {
00362 float *nCaloET = new float[nCaloJets];
00363 float *nCaloEta = new float[nCaloJets];
00364 float *nCaloPhi = new float[nCaloJets];
00365 reco::CaloJetCollection::const_iterator cjet = caloJets->begin();
00366 int counter = 0;
00367 for (; cjet != caloJets->end(); ++cjet) {
00368
00369 Double_t DR = reco::deltaR(cjet->eta(), cjet->phi(), myElec->gsfTrack()->eta(), ele_sc_phi);
00370 if (DR > DRJetFromElectron_) {
00371 nCaloET[counter] = cjet->et();
00372 nCaloEta[counter] = cjet->eta();
00373 nCaloPhi[counter] = cjet->phi();
00374 ++counter;
00375 }
00376 }
00377 int *caloJetSorted = new int[nCaloJets];
00378 TMath::Sort(nCaloJets, nCaloET, caloJetSorted, true);
00379 for (int i=0; i<nCaloJets; ++i) {
00380 if (i>=5) break;
00381 calojet_et[i] = nCaloET[ caloJetSorted[i] ];
00382 calojet_eta[i] = nCaloEta[ caloJetSorted[i] ];
00383 calojet_phi[i] = nCaloPhi[ caloJetSorted[i] ];
00384 }
00385 delete [] caloJetSorted;
00386 delete [] nCaloET;
00387 delete [] nCaloEta;
00388 delete [] nCaloPhi;
00389 }
00390 } else {
00391 std::cout << "WenuPlots: Could not get caloJet collection with name "
00392 << caloJetCollectionTag_ << std::endl;
00393 }
00394
00395
00396 if (pPfJets.isValid()) {
00397 const reco::PFJetCollection *pfJets = pPfJets.product();
00398 int nPfJets = (int) pfJets->size();
00399 if (nPfJets>0) {
00400 float *nPfET = new float[nPfJets];
00401 float *nPfEta = new float[nPfJets];
00402 float *nPfPhi = new float[nPfJets];
00403 reco::PFJetCollection::const_iterator pjet = pfJets->begin();
00404 int counter = 0;
00405 for (; pjet != pfJets->end(); ++pjet) {
00406
00407 Double_t DR = reco::deltaR(pjet->eta(), pjet->phi(), myElec->gsfTrack()->eta(), ele_sc_phi);
00408 if (DR > DRJetFromElectron_) {
00409 nPfET[counter] = pjet->et();
00410 nPfEta[counter] = pjet->eta();
00411 nPfPhi[counter] = pjet->phi();
00412 ++counter;
00413 }
00414 }
00415 int *pfJetSorted = new int[nPfJets];
00416 TMath::Sort(nPfJets, nPfET, pfJetSorted, true);
00417 for (int i=0; i<nPfJets; ++i) {
00418 if (i>=5) break;
00419 pfjet_et[i] = nPfET[ pfJetSorted[i] ];
00420 pfjet_eta[i] = nPfEta[ pfJetSorted[i] ];
00421 pfjet_phi[i] = nPfPhi[ pfJetSorted[i] ];
00422 }
00423 delete [] pfJetSorted;
00424 delete [] nPfET;
00425 delete [] nPfEta;
00426 delete [] nPfPhi;
00427 }
00428 } else {
00429 std::cout << "WenuPlots: Could not get pfJet collection with name "
00430 << pfJetCollectionTag_ << std::endl;
00431 }
00432
00433 }
00434
00435 ele2nd_sc_gsf_et = -1;
00436 ele2nd_sc_eta = -1;
00437 ele2nd_sc_phi = -1;
00438 ele2nd_sc_rho = 0;
00439 ele2nd_cand_eta = 0;
00440 ele2nd_cand_phi = 0;
00441 ele2nd_cand_et = 0;
00442 ele2nd_pin = 0;
00443 ele2nd_pout = 0;
00444 ele2nd_passes_selection = -1;
00445 ele2nd_ecalDriven= 0;
00446
00447
00448
00449 ele2nd_iso_track = 0;
00450 ele2nd_iso_ecal = 0;
00451 ele2nd_iso_hcal = 0;
00452
00453 ele2nd_id_sihih = 0;
00454 ele2nd_id_deta = 0;
00455 ele2nd_id_dphi = 0;
00456 ele2nd_id_hoe = 0;
00457
00458 ele2nd_cr_mhitsinner = 0;
00459 ele2nd_cr_dcot = 0;
00460 ele2nd_cr_dist = 0;
00461
00462 ele2nd_vx = 0;
00463 ele2nd_vy = 0;
00464 ele2nd_vz = 0;
00465
00466 ele2nd_gsfCharge = 0;
00467
00468 ele2nd_ctfCharge = 0;
00469 ele2nd_scPixCharge = 0;
00470 ele2nd_eop = 0;
00471 ele2nd_tip_bs = 0;
00472 ele2nd_tip_pv = 0;
00473 ele2nd_hltmatched_dr = 0;
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483 if (myElec->userInt("hasSecondElectron") == 1 && storeExtraInformation_) {
00484 const pat::Electron * mySecondElec=
00485 dynamic_cast<const pat::Electron*> (wenu.daughter("secondElec"));
00486 ele2nd_sc_gsf_et = (Float_t) mySecondElec->superCluster()->energy()/TMath::CosH(mySecondElec->gsfTrack()->eta());
00487
00488 ele2nd_sc_eta = (Float_t) mySecondElec->superCluster()->eta();
00489 ele2nd_sc_phi = (Float_t) mySecondElec->superCluster()->phi();
00490 double sc2x = mySecondElec->superCluster()->x();
00491 double sc2y = mySecondElec->superCluster()->y();
00492 double sc2z = mySecondElec->superCluster()->z();
00493 ele2nd_sc_rho = (Float_t) sqrt(sc2x*sc2x + sc2y*sc2y + sc2z*sc2z);
00494 ele2nd_cand_eta = (Float_t) mySecondElec->eta();
00495 ele2nd_cand_phi = (Float_t) mySecondElec->phi();
00496 ele2nd_cand_et = (Float_t) mySecondElec->et();
00497 ele2nd_pin = (Float_t) mySecondElec->trackMomentumAtVtx().R();;
00498 ele2nd_pout = (Float_t) mySecondElec->trackMomentumOut().R();
00499 ele2nd_ecalDriven= (Int_t) mySecondElec->ecalDrivenSeed();
00500
00501 bool isIDCalc = mySecondElec->isElectronIDAvailable("simpleEleId95relIso") &&
00502 mySecondElec->isElectronIDAvailable("simpleEleId90relIso") &&
00503 mySecondElec->isElectronIDAvailable("simpleEleId85relIso") &&
00504 mySecondElec->isElectronIDAvailable("simpleEleId80relIso") &&
00505 mySecondElec->isElectronIDAvailable("simpleEleId70relIso") &&
00506 mySecondElec->isElectronIDAvailable("simpleEleId60relIso");
00507 if (isIDCalc) {
00508 ele2nd_passes_selection = 0;
00509 if (fabs(mySecondElec->electronID("simpleEleId60relIso")-7) < 0.1) ele2nd_passes_selection = 6;
00510 else if (fabs(mySecondElec->electronID("simpleEleId70relIso")-7) < 0.1) ele2nd_passes_selection = 5;
00511 else if (fabs(mySecondElec->electronID("simpleEleId80relIso")-7) < 0.1) ele2nd_passes_selection = 4;
00512 else if (fabs(mySecondElec->electronID("simpleEleId85relIso")-7) < 0.1) ele2nd_passes_selection = 3;
00513 else if (fabs(mySecondElec->electronID("simpleEleId90relIso")-7) < 0.1) ele2nd_passes_selection = 2;
00514 else if (fabs(mySecondElec->electronID("simpleEleId95relIso")-7) < 0.1) ele2nd_passes_selection = 1;
00515 }
00516 if (storeAllSecondElectronVariables_) {
00517 ele2nd_iso_track = (Float_t) mySecondElec->dr03IsolationVariables().tkSumPt / ele2nd_cand_et;
00518 ele2nd_iso_ecal = (Float_t) mySecondElec->dr03IsolationVariables().ecalRecHitSumEt/ele2nd_cand_et;
00519 ele2nd_iso_hcal = (Float_t) ( mySecondElec->dr03IsolationVariables().hcalDepth1TowerSumEt +
00520 mySecondElec->dr03IsolationVariables().hcalDepth2TowerSumEt) / ele2nd_cand_et;
00521 ele2nd_id_sihih = (Float_t) mySecondElec->sigmaIetaIeta();
00522 ele2nd_id_deta = (Float_t) mySecondElec->deltaEtaSuperClusterTrackAtVtx();
00523 ele2nd_id_dphi = (Float_t) mySecondElec->deltaPhiSuperClusterTrackAtVtx();
00524 ele2nd_id_hoe = (Float_t) mySecondElec->hadronicOverEm();
00525
00526 ele2nd_cr_mhitsinner = mySecondElec->gsfTrack()->trackerExpectedHitsInner().numberOfHits();
00527 ele2nd_cr_dcot = mySecondElec->convDcot();
00528 ele2nd_cr_dist = mySecondElec->convDist();
00529
00530 ele2nd_vx = (Float_t) mySecondElec->vx();
00531 ele2nd_vy = (Float_t) mySecondElec->vy();
00532 ele2nd_vz = (Float_t) mySecondElec->vz();
00533 ele2nd_gsfCharge = (Int_t) mySecondElec->gsfTrack()->charge();
00534
00535 ele2nd_ctfCharge = (Int_t) mySecondElec->closestCtfTrackRef().isNonnull() ? mySecondElec->closestCtfTrackRef()->charge():-9999;
00536 ele2nd_scPixCharge = (Int_t) mySecondElec->chargeInfo().scPixCharge;
00537 ele2nd_eop = (Float_t) mySecondElec->eSuperClusterOverP();
00538 ele2nd_tip_bs = (Float_t) -mySecondElec->dB();
00539 if (Vtx.size() > 0) {
00540 ele2nd_tip_pv = mySecondElec->gsfTrack()->dxy(Vtx[0].position());
00541 }
00542 if (VtxBS.size() > 0) {
00543 ele2nd_tip_pvbs = mySecondElec->gsfTrack()->dxy(VtxBS[0].position());
00544 }
00545 ele2nd_hltmatched_dr = mySecondElec->userFloat("HLTMatchingDR");
00546 }
00547 }
00548
00549 event_triggerDecision = -1;
00550 ele_hltmatched_dr = -999.;
00551 VtxTracksSize.clear();
00552 VtxNormalizedChi2.clear();
00553 VtxTracksSizeBS.clear();
00554 VtxNormalizedChi2BS.clear();
00555 if (storeExtraInformation_) {
00556 if (myElec->hasUserFloat("HLTMatchingDR")) {
00557 ele_hltmatched_dr = myElec->userFloat("HLTMatchingDR");
00558 }
00559 if (myElec->hasUserInt("triggerDecision")) {
00560 event_triggerDecision = myElec->userInt("triggerDecision");
00561 }
00562
00563 for (Int_t i=0; i < (Int_t) Vtx.size(); ++i) {
00564 VtxTracksSize.push_back(Vtx[i].tracksSize());
00565 VtxNormalizedChi2.push_back(Vtx[i].normalizedChi2());
00566 }
00567 for (Int_t i=0; i < (Int_t) VtxBS.size(); ++i) {
00568 VtxTracksSizeBS.push_back(VtxBS[i].tracksSize());
00569 VtxNormalizedChi2BS.push_back(VtxBS[i].normalizedChi2());
00570 }
00571 }
00572
00573
00574
00575 if (CheckCuts(myElec) && myElec->userInt("failsSecondElectronCut") == 0) {
00576 vbtfSele_tree->Fill();
00577 }
00578 vbtfPresele_tree->Fill();
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589 if (usePreselection_) {
00590 if (not PassPreselectionCriteria(myElec)) return;
00591 }
00592
00593
00594 Double_t scEta = myElec->superCluster()->eta();
00595 Double_t scPhi = myElec->superCluster()->phi();
00596 Double_t scEt = myElec->superCluster()->energy()/TMath::CosH(scEta);
00597 Double_t met = myMet->et();
00598 Double_t metPhi = myMet->phi();
00599 Double_t mt = TMath::Sqrt(2.0*scEt*met*(1.0-(TMath::Cos(scPhi)*TMath::Cos(metPhi)+TMath::Sin(scPhi)*TMath::Sin(metPhi))));
00600
00601 Double_t trackIso = myElec->userIsolation(pat::TrackIso);
00602 Double_t ecalIso = myElec->userIsolation(pat::EcalIso);
00603 Double_t hcalIso = myElec->userIsolation(pat::HcalIso);
00604 Double_t sihih = myElec->scSigmaIEtaIEta();
00605 Double_t dphi = myElec->deltaPhiSuperClusterTrackAtVtx();
00606 Double_t deta = myElec->deltaEtaSuperClusterTrackAtVtx();
00607 Double_t HoE = myElec->hadronicOverEm();
00608
00609
00610
00611
00612
00613 if (not usePrecalcID_) {
00614 if (CheckCutsInverse(myElec)){
00615
00616 h_met_inverse->Fill(met);
00617 h_mt_inverse->Fill(mt);
00618 if(TMath::Abs(scEta)<1.479){
00619 h_met_inverse_EB->Fill(met);
00620 h_mt_inverse_EB->Fill(mt);
00621 }
00622 if(TMath::Abs(scEta)>1.479){
00623 h_met_inverse_EE->Fill(met);
00624 h_mt_inverse_EE->Fill(mt);
00625 }
00626 }
00627 }
00628
00630
00631
00632
00633
00634 if (not usePrecalcID_) {
00635 if ( TMath::Abs(scEta) < 1.479) {
00636
00637 if (CheckCutsNminusOne(myElec, 0))
00638 h_trackIso_eb_NmOne->Fill(trackIso);
00639 }
00640 else {
00641 if (CheckCutsNminusOne(myElec, 0))
00642 h_trackIso_ee_NmOne->Fill(trackIso);
00643 }
00644 }
00645
00646
00647
00648
00649 if (not CheckCuts(myElec)) return;
00651
00652 h_met->Fill(met);
00653 h_mt->Fill(mt);
00654 if(TMath::Abs(scEta)<1.479){
00655 h_met_EB->Fill(met);
00656 h_mt_EB->Fill(mt);
00657
00658 h_EB_trkiso->Fill( trackIso );
00659 h_EB_ecaliso->Fill( ecalIso );
00660 h_EB_hcaliso->Fill( hcalIso );
00661 h_EB_sIetaIeta->Fill( sihih );
00662 h_EB_dphi->Fill( dphi );
00663 h_EB_deta->Fill( deta );
00664 h_EB_HoE->Fill( HoE );
00665
00666 }
00667 if(TMath::Abs(scEta)>1.479){
00668 h_met_EE->Fill(met);
00669 h_mt_EE->Fill(mt);
00670
00671 h_EE_trkiso->Fill( trackIso );
00672 h_EE_ecaliso->Fill( ecalIso );
00673 h_EE_hcaliso->Fill( hcalIso );
00674 h_EE_sIetaIeta->Fill( sihih );
00675 h_EE_dphi->Fill( dphi );
00676 h_EE_deta->Fill( deta );
00677 h_EE_HoE->Fill( HoE );
00678
00679 }
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702 h_scEt->Fill(scEt);
00703 h_scEta->Fill(scEta);
00704 h_scPhi->Fill(scPhi);
00705
00706 }
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723 Bool_t WenuPlots::CheckCuts( const pat::Electron *ele)
00724 {
00725 if (usePrecalcID_) {
00726 if (not ele-> isElectronIDAvailable(usePrecalcIDType_)) {
00727 std::cout << "Error! not existing ID with name: "
00728 << usePrecalcIDType_ << " function will return true!"
00729 << std::endl;
00730 return true;
00731 }
00732 Double_t val = ele->electronID(usePrecalcIDType_);
00733 if (usePrecalcIDSign_ == "<") {
00734 return val < usePrecalcIDValue_;
00735 }
00736 else if (usePrecalcIDSign_ == ">") {
00737 return val > usePrecalcIDValue_;
00738 }
00739 else {
00740 return TMath::Abs(val-usePrecalcIDValue_)<0.1;
00741 }
00742 }
00743 else {
00744 for (int i=0; i<nBarrelVars_; ++i) {
00745 if (not CheckCut(ele, i)) return false;
00746 }
00747 return true;
00748 }
00749 }
00751
00752 Bool_t WenuPlots::CheckCutsInverse(const pat::Electron *ele)
00753 {
00754 for (int i=0; i<nBarrelVars_; ++i){
00755 if ( CheckCutInv(ele, i) == false) return false;
00756 }
00757 return true;
00758
00759 }
00761 Bool_t WenuPlots::CheckCutsNminusOne(const pat::Electron *ele, int jj)
00762 {
00763 for (int i=0; i<nBarrelVars_; ++i){
00764 if (i==jj) continue;
00765 if ( CheckCut(ele, i) == false) return false;
00766 }
00767 return true;
00768 }
00770 Bool_t WenuPlots::CheckCut(const pat::Electron *ele, int i) {
00771 Double_t fabseta = TMath::Abs(ele->superCluster()->eta());
00772 if ( fabseta<1.479) {
00773 return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i];
00774 }
00775 return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i+nBarrelVars_];
00776 }
00778 Bool_t WenuPlots::CheckCutInv(const pat::Electron *ele, int i) {
00779 Double_t fabseta = TMath::Abs(ele->superCluster()->eta());
00780 if ( fabseta<1.479) {
00781 if (InvVars_[i])
00782 return TMath::Abs(ReturnCandVar(ele, i))>CutVars_[i];
00783 return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i];
00784 }
00785 if (InvVars_[i+nBarrelVars_]) {
00786 if (InvVars_[i])
00787 return TMath::Abs(ReturnCandVar(ele, i))>CutVars_[i+nBarrelVars_];
00788 }
00789 return TMath::Abs(ReturnCandVar(ele, i)) < CutVars_[i+nBarrelVars_];
00790 }
00792 Double_t WenuPlots::ReturnCandVar(const pat::Electron *ele, int i) {
00793 if (i==0) return ele->dr03TkSumPt()/ele->p4().Pt();
00794 else if (i==1) return ele->dr03EcalRecHitSumEt()/ele->p4().Pt();
00795 else if (i==2) return ele->dr03HcalTowerSumEt()/ele->p4().Pt();
00796 else if (i==3) return ele->scSigmaIEtaIEta();
00797 else if (i==4) return ele->deltaPhiSuperClusterTrackAtVtx();
00798 else if (i==5) return ele->deltaEtaSuperClusterTrackAtVtx();
00799 else if (i==6) return ele->hadronicOverEm();
00800 else if (i==7) {
00801 if (ele->isEB()){
00802 return ( ele->dr03TkSumPt()+std::max(float(0.),ele->dr03EcalRecHitSumEt()-1)
00803 + ele->dr03HcalTowerSumEt())/ele->p4().Pt(); }
00804 else {
00805 return ( ele->dr03TkSumPt()+ele->dr03EcalRecHitSumEt()
00806 + ele->dr03HcalTowerSumEt())/ele->p4().Pt(); }
00807 }
00808
00809 else if (i==8) return fabs(ele->dB());
00810 else if (i==9) return ele->eSuperClusterOverP();
00811 else if (i==10) return ele->userIsolation(pat::TrackIso);
00812 else if (i==11) return ele->userIsolation(pat::EcalIso);
00813 else if (i==12) return ele->userIsolation(pat::HcalIso);
00814 std::cout << "Error in WenuPlots::ReturnCandVar" << std::endl;
00815 return -1.;
00816
00817 }
00819 Bool_t WenuPlots::PassPreselectionCriteria(const pat::Electron *ele) {
00820 Bool_t passConvRej = true;
00821 Bool_t passPXB = true;
00822 Bool_t passEMH = true;
00823 if (useConversionRejection_) {
00824 if (ele->hasUserInt("PassConversionRejection")) {
00825
00826 if (not (ele->userInt("PassConversionRejection")==1)) passConvRej = false;
00827 }
00828 else {
00829 std::cout << "WenuPlots: WARNING: Conversion Rejection Request Disregarded: "
00830 << "you must calculate it before " << std::endl;
00831
00832 }
00833 }
00834 if (useValidFirstPXBHit_) {
00835 if (ele->hasUserInt("PassValidFirstPXBHit")) {
00836
00837 if (not (ele->userInt("PassValidFirstPXBHit")==1)) passPXB = false;
00838 }
00839 else {
00840 std::cout << "WenuPlots: WARNING: Valid First PXB Hit Request Disregarded: "
00841 << "you must calculate it before " << std::endl;
00842
00843 }
00844 }
00845 if (useExpectedMissingHits_) {
00846 if (ele->hasUserInt("NumberOfExpectedMissingHits")) {
00847
00848 if (ele->userInt("NumberOfExpectedMissingHits")>maxNumberOfExpectedMissingHits_)
00849 passEMH = false;
00850 }
00851 else {
00852 std::cout << "WenuPlots: WARNING: Number of Expected Missing Hits Request Disregarded: "
00853 << "you must calculate it before " << std::endl;
00854
00855 }
00856 }
00857 return passConvRej && passPXB && passEMH;
00858 }
00859
00860 void
00861 WenuPlots::beginJob()
00862 {
00863
00864
00865
00866
00867
00868 h_met = new TH1F("h_met", "h_met", 200, 0, 200);
00869 h_met_inverse = new TH1F("h_met_inverse", "h_met_inverse", 200, 0, 200);
00870
00871 h_mt = new TH1F("h_mt", "h_mt", 200, 0, 200);
00872 h_mt_inverse = new TH1F("h_mt_inverse", "h_mt_inverse", 200, 0, 200);
00873
00874
00875 h_met_EB = new TH1F("h_met_EB", "h_met_EB", 200, 0, 200);
00876 h_met_inverse_EB = new TH1F("h_met_inverse_EB", "h_met_inverse_EB", 200, 0, 200);
00877
00878 h_mt_EB = new TH1F("h_mt_EB", "h_mt_EB", 200, 0, 200);
00879 h_mt_inverse_EB = new TH1F("h_mt_inverse_EB", "h_mt_inverse_EB", 200, 0, 200);
00880
00881
00882 h_met_EE = new TH1F("h_met_EE", "h_met_EE", 200, 0, 200);
00883 h_met_inverse_EE = new TH1F("h_met_inverse_EE", "h_met_inverse_EE", 200, 0, 200);
00884
00885 h_mt_EE = new TH1F("h_mt_EE", "h_mt_EE", 200, 0, 200);
00886 h_mt_inverse_EE = new TH1F("h_mt_inverse_EE", "h_mt_inverse_EE", 200, 0, 200);
00887
00888
00889 h_scEt = new TH1F("h_scEt", "h_scEt", 200, 0, 100);
00890 h_scEta = new TH1F("h_scEta", "h_scEta", 200, -3, 3);
00891 h_scPhi = new TH1F("h_scPhi", "h_scPhi", 200, -4, 4);
00892
00893
00894
00895
00896 h_EB_trkiso = new TH1F("h_EB_trkiso","h_EB_trkiso",200 , 0.0, 9.0);
00897 h_EB_ecaliso = new TH1F("h_EB_ecaliso","h_EB_ecaliso",200, 0.0 , 9.0);
00898 h_EB_hcaliso = new TH1F("h_EB_hcaliso","h_EB_hcaliso",200, 0.0 , 9.0);
00899 h_EB_sIetaIeta = new TH1F("h_EB_sIetaIeta","h_EB_sIetaIeta",200, 0.0 , 0.02 );
00900 h_EB_dphi = new TH1F("h_EB_dphi","h_EB_dphi",200, -0.03 , 0.03 );
00901 h_EB_deta = new TH1F("h_EB_deta","h_EB_deta",200, -0.01 , 0.01) ;
00902 h_EB_HoE = new TH1F("h_EB_HoE","h_EB_HoE",200, 0.0 , 0.2 );
00903
00904 h_EE_trkiso = new TH1F("h_EE_trkiso","h_EE_trkiso",200 , 0.0, 9.0);
00905 h_EE_ecaliso = new TH1F("h_EE_ecaliso","h_EE_ecaliso",200, 0.0 , 9.0);
00906 h_EE_hcaliso = new TH1F("h_EE_hcaliso","h_EE_hcaliso",200, 0.0 , 9.0);
00907 h_EE_sIetaIeta = new TH1F("h_EE_sIetaIeta","h_EE_sIetaIeta",200, 0.0 , 0.1 );
00908 h_EE_dphi = new TH1F("h_EE_dphi","h_EE_dphi",200, -0.03 , 0.03 );
00909 h_EE_deta = new TH1F("h_EE_deta","h_EE_deta",200, -0.01 , 0.01) ;
00910 h_EE_HoE = new TH1F("h_EE_HoE","h_EE_HoE",200, 0.0 , 0.2 );
00911
00912
00913
00914
00915 h_trackIso_eb_NmOne =
00916 new TH1F("h_trackIso_eb_NmOne","trackIso EB N-1 plot",80,0,8);
00917 h_trackIso_ee_NmOne =
00918 new TH1F("h_trackIso_ee_NmOne","trackIso EE N-1 plot",80,0,8);
00919
00920
00921
00922
00923
00924 nBarrelVars_ = 13;
00925
00926
00927
00928
00929 CutVars_.push_back( trackIso_EB_ );
00930 CutVars_.push_back( ecalIso_EB_ );
00931 CutVars_.push_back( hcalIso_EB_ );
00932 CutVars_.push_back( sihih_EB_ );
00933 CutVars_.push_back( dphi_EB_ );
00934 CutVars_.push_back( deta_EB_ );
00935 CutVars_.push_back( hoe_EB_ );
00936 CutVars_.push_back( cIso_EB_ );
00937 CutVars_.push_back( tip_bspot_EB_);
00938 CutVars_.push_back( eop_EB_ );
00939 CutVars_.push_back( trackIsoUser_EB_ );
00940 CutVars_.push_back( ecalIsoUser_EB_ );
00941 CutVars_.push_back( hcalIsoUser_EB_ );
00942
00943 CutVars_.push_back( trackIso_EE_);
00944 CutVars_.push_back( ecalIso_EE_);
00945 CutVars_.push_back( hcalIso_EE_);
00946 CutVars_.push_back( sihih_EE_);
00947 CutVars_.push_back( dphi_EE_);
00948 CutVars_.push_back( deta_EE_);
00949 CutVars_.push_back( hoe_EE_ );
00950 CutVars_.push_back( cIso_EE_ );
00951 CutVars_.push_back(tip_bspot_EE_);
00952 CutVars_.push_back( eop_EE_ );
00953 CutVars_.push_back( trackIsoUser_EE_ );
00954 CutVars_.push_back( ecalIsoUser_EE_ );
00955 CutVars_.push_back( hcalIsoUser_EE_ );
00956
00957 InvVars_.push_back( trackIso_EB_inv);
00958 InvVars_.push_back( ecalIso_EB_inv);
00959 InvVars_.push_back( hcalIso_EB_inv);
00960 InvVars_.push_back( sihih_EB_inv);
00961 InvVars_.push_back( dphi_EB_inv);
00962 InvVars_.push_back( deta_EB_inv);
00963 InvVars_.push_back( hoe_EB_inv);
00964 InvVars_.push_back( cIso_EB_inv);
00965 InvVars_.push_back(tip_bspot_EB_inv);
00966 InvVars_.push_back( eop_EB_inv);
00967 InvVars_.push_back( trackIsoUser_EB_inv );
00968 InvVars_.push_back( ecalIsoUser_EB_inv );
00969 InvVars_.push_back( hcalIsoUser_EB_inv );
00970
00971 InvVars_.push_back( trackIso_EE_inv);
00972 InvVars_.push_back( ecalIso_EE_inv);
00973 InvVars_.push_back( hcalIso_EE_inv);
00974 InvVars_.push_back( sihih_EE_inv);
00975 InvVars_.push_back( dphi_EE_inv);
00976 InvVars_.push_back( deta_EE_inv);
00977 InvVars_.push_back( hoe_EE_inv);
00978 InvVars_.push_back( cIso_EE_inv);
00979 InvVars_.push_back(tip_bspot_EE_inv);
00980 InvVars_.push_back( eop_EE_inv);
00981 InvVars_.push_back( trackIsoUser_EE_inv );
00982 InvVars_.push_back( ecalIsoUser_EE_inv );
00983 InvVars_.push_back( hcalIsoUser_EE_inv );
00984
00985
00986
00987
00988
00989
00990
00991 WENU_VBTFselectionFile_ = new TFile(TString(WENU_VBTFselectionFileName_),
00992 "RECREATE");
00993
00994 vbtfSele_tree = new TTree("vbtfSele_tree",
00995 "Tree to store the W Candidates that pass the VBTF selection");
00996 vbtfSele_tree->Branch("runNumber", &runNumber, "runNumber/I");
00997 vbtfSele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L");
00998 vbtfSele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I");
00999
01000 vbtfSele_tree->Branch("ele_sc_gsf_et", &ele_sc_gsf_et,"ele_sc_gsf_et/F");
01001 vbtfSele_tree->Branch("ele_sc_energy", &ele_sc_energy,"ele_sc_energy/F");
01002 vbtfSele_tree->Branch("ele_sc_eta", &ele_sc_eta,"ele_sc_eta/F");
01003 vbtfSele_tree->Branch("ele_sc_phi", &ele_sc_phi,"ele_sc_phi/F");
01004 vbtfSele_tree->Branch("ele_sc_rho", &ele_sc_rho,"ele_sc_rho/F");
01005 vbtfSele_tree->Branch("ele_cand_et", &ele_cand_et, "ele_cand_et/F");
01006 vbtfSele_tree->Branch("ele_cand_eta", &ele_cand_eta,"ele_cand_eta/F");
01007 vbtfSele_tree->Branch("ele_cand_phi",&ele_cand_phi,"ele_cand_phi/F");
01008 vbtfSele_tree->Branch("ele_iso_track",&ele_iso_track,"ele_iso_track/F");
01009 vbtfSele_tree->Branch("ele_iso_ecal",&ele_iso_ecal,"ele_iso_ecal/F");
01010 vbtfSele_tree->Branch("ele_iso_hcal",&ele_iso_hcal,"ele_iso_hcal/F");
01011 vbtfSele_tree->Branch("ele_id_sihih",&ele_id_sihih,"ele_id_sihih/F");
01012 vbtfSele_tree->Branch("ele_id_deta",&ele_id_deta,"ele_id_deta/F");
01013 vbtfSele_tree->Branch("ele_id_dphi",&ele_id_dphi,"ele_id_dphi/F");
01014 vbtfSele_tree->Branch("ele_id_hoe",&ele_id_hoe,"ele_id_hoe/F");
01015 vbtfSele_tree->Branch("ele_cr_mhitsinner",&ele_cr_mhitsinner,"ele_cr_mhitsinner/I");
01016 vbtfSele_tree->Branch("ele_cr_dcot",&ele_cr_dcot,"ele_cr_dcot/F");
01017 vbtfSele_tree->Branch("ele_cr_dist",&ele_cr_dist,"ele_cr_dist/F");
01018 vbtfSele_tree->Branch("ele_vx",&ele_vx,"ele_vx/F");
01019 vbtfSele_tree->Branch("ele_vy",&ele_vy,"ele_vy/F");
01020 vbtfSele_tree->Branch("ele_vz",&ele_vz,"ele_vz/F");
01021 vbtfSele_tree->Branch("pv_x",&pv_x,"pv_x/F");
01022 vbtfSele_tree->Branch("pv_y",&pv_y,"pv_y/F");
01023 vbtfSele_tree->Branch("pv_z",&pv_z,"pv_z/F");
01024 vbtfSele_tree->Branch("ele_gsfCharge",&ele_gsfCharge,"ele_gsfCharge/I");
01025 vbtfSele_tree->Branch("ele_ctfCharge",&ele_ctfCharge,"ele_ctfCharge/I");
01026 vbtfSele_tree->Branch("ele_scPixCharge",&ele_scPixCharge,"ele_scPixCharge/I");
01027 vbtfSele_tree->Branch("ele_eop",&ele_eop,"ele_eop/F");
01028 vbtfSele_tree->Branch("ele_tip_bs",&ele_tip_bs,"ele_tip_bs/F");
01029 vbtfSele_tree->Branch("ele_tip_pv",&ele_tip_pv,"ele_tip_pv/F");
01030 vbtfSele_tree->Branch("ele_pin",&ele_pin,"ele_pin/F");
01031 vbtfSele_tree->Branch("ele_pout",&ele_pout,"ele_pout/F");
01032 vbtfSele_tree->Branch("event_caloMET",&event_caloMET,"event_caloMET/F");
01033 vbtfSele_tree->Branch("event_pfMET",&event_pfMET,"event_pfMET/F");
01034 vbtfSele_tree->Branch("event_tcMET",&event_tcMET,"event_tcMET/F");
01035 vbtfSele_tree->Branch("event_caloMT",&event_caloMT,"event_caloMT/F");
01036 vbtfSele_tree->Branch("event_pfMT",&event_pfMT,"event_pfMT/F");
01037 vbtfSele_tree->Branch("event_tcMT",&event_tcMT,"event_tcMT/F");
01038 vbtfSele_tree->Branch("event_caloMET_phi",&event_caloMET_phi,"event_caloMET_phi/F");
01039 vbtfSele_tree->Branch("event_pfMET_phi",&event_pfMET_phi,"event_pfMET_phi/F");
01040 vbtfSele_tree->Branch("event_tcMET_phi",&event_tcMET_phi,"event_tcMET_phi/F");
01041
01042
01043 if (includeJetInformationInNtuples_) {
01044 vbtfSele_tree->Branch("calojet_et",calojet_et,"calojet_et[5]/F");
01045 vbtfSele_tree->Branch("calojet_eta",calojet_eta,"calojet_eta[5]/F");
01046 vbtfSele_tree->Branch("calojet_phi",calojet_phi,"calojet_phi[5]/F");
01047 vbtfSele_tree->Branch("pfjet_et",pfjet_et,"pfjet_et[5]/F");
01048 vbtfSele_tree->Branch("pfjet_eta",pfjet_eta,"pfjet_eta[5]/F");
01049 vbtfSele_tree->Branch("pfjet_phi",pfjet_phi,"pfjet_phi[5]/F");
01050 }
01051 if (storeExtraInformation_) {
01052 vbtfSele_tree->Branch("ele2nd_sc_gsf_et", &ele2nd_sc_gsf_et,"ele2nd_sc_gsf_et/F");
01053 vbtfSele_tree->Branch("ele2nd_passes_selection", &ele2nd_passes_selection,"ele2nd_passes_selection/I");
01054 vbtfSele_tree->Branch("ele2nd_ecalDriven",&ele2nd_ecalDriven,"ele2nd_ecalDriven/I");
01055 vbtfSele_tree->Branch("event_caloSumEt",&event_caloSumEt,"event_caloSumEt/F");
01056 vbtfSele_tree->Branch("event_pfSumEt",&event_pfSumEt,"event_pfSumEt/F");
01057 vbtfSele_tree->Branch("event_tcSumEt",&event_tcSumEt,"event_tcSumEt/F");
01058 }
01059 vbtfSele_tree->Branch("event_datasetTag",&event_datasetTag,"event_dataSetTag/I");
01060
01061
01062
01063
01064 WENU_VBTFpreseleFile_ = new TFile(TString(WENU_VBTFpreseleFileName_),
01065 "RECREATE");
01066
01067 vbtfPresele_tree = new TTree("vbtfPresele_tree",
01068 "Tree to store the W Candidates that pass the VBTF preselection");
01069 vbtfPresele_tree->Branch("runNumber", &runNumber, "runNumber/I");
01070 vbtfPresele_tree->Branch("eventNumber", &eventNumber, "eventNumber/L");
01071 vbtfPresele_tree->Branch("lumiSection", &lumiSection, "lumiSection/I");
01072
01073 vbtfPresele_tree->Branch("ele_sc_gsf_et", &ele_sc_gsf_et,"ele_sc_gsf_et/F");
01074 vbtfPresele_tree->Branch("ele_sc_energy", &ele_sc_energy,"ele_sc_energy/F");
01075 vbtfPresele_tree->Branch("ele_sc_eta", &ele_sc_eta,"ele_sc_eta/F");
01076 vbtfPresele_tree->Branch("ele_sc_phi", &ele_sc_phi,"ele_sc_phi/F");
01077 vbtfPresele_tree->Branch("ele_sc_rho", &ele_sc_rho,"ele_sc_rho/F");
01078 vbtfPresele_tree->Branch("ele_cand_et", &ele_cand_et, "ele_cand_et/F");
01079 vbtfPresele_tree->Branch("ele_cand_eta", &ele_cand_eta,"ele_cand_eta/F");
01080 vbtfPresele_tree->Branch("ele_cand_phi",&ele_cand_phi,"ele_cand_phi/F");
01081 vbtfPresele_tree->Branch("ele_iso_track",&ele_iso_track,"ele_iso_track/F");
01082 vbtfPresele_tree->Branch("ele_iso_ecal",&ele_iso_ecal,"ele_iso_ecal/F");
01083 vbtfPresele_tree->Branch("ele_iso_hcal",&ele_iso_hcal,"ele_iso_hcal/F");
01084 vbtfPresele_tree->Branch("ele_id_sihih",&ele_id_sihih,"ele_id_sihih/F");
01085 vbtfPresele_tree->Branch("ele_id_deta",&ele_id_deta,"ele_id_deta/F");
01086 vbtfPresele_tree->Branch("ele_id_dphi",&ele_id_dphi,"ele_id_dphi/F");
01087 vbtfPresele_tree->Branch("ele_id_hoe",&ele_id_hoe,"ele_id_hoe/F");
01088 vbtfPresele_tree->Branch("ele_cr_mhitsinner",&ele_cr_mhitsinner,"ele_cr_mhitsinner/I");
01089 vbtfPresele_tree->Branch("ele_cr_dcot",&ele_cr_dcot,"ele_cr_dcot/F");
01090 vbtfPresele_tree->Branch("ele_cr_dist",&ele_cr_dist,"ele_cr_dist/F");
01091 vbtfPresele_tree->Branch("ele_vx",&ele_vx,"ele_vx/F");
01092 vbtfPresele_tree->Branch("ele_vy",&ele_vy,"ele_vy/F");
01093 vbtfPresele_tree->Branch("ele_vz",&ele_vz,"ele_vz/F");
01094 vbtfPresele_tree->Branch("pv_x",&pv_x,"pv_x/F");
01095 vbtfPresele_tree->Branch("pv_y",&pv_y,"pv_y/F");
01096 vbtfPresele_tree->Branch("pv_z",&pv_z,"pv_z/F");
01097 vbtfPresele_tree->Branch("ele_gsfCharge",&ele_gsfCharge,"ele_gsfCharge/I");
01098 vbtfPresele_tree->Branch("ele_ctfCharge",&ele_ctfCharge,"ele_ctfCharge/I");
01099 vbtfPresele_tree->Branch("ele_scPixCharge",&ele_scPixCharge,"ele_scPixCharge/I");
01100 vbtfPresele_tree->Branch("ele_eop",&ele_eop,"ele_eop/F");
01101 vbtfPresele_tree->Branch("ele_tip_bs",&ele_tip_bs,"ele_tip_bs/F");
01102 vbtfPresele_tree->Branch("ele_tip_pv",&ele_tip_pv,"ele_tip_pv/F");
01103 vbtfPresele_tree->Branch("ele_pin",&ele_pin,"ele_pin/F");
01104 vbtfPresele_tree->Branch("ele_pout",&ele_pout,"ele_pout/F");
01105 vbtfPresele_tree->Branch("event_caloMET",&event_caloMET,"event_caloMET/F");
01106 vbtfPresele_tree->Branch("event_pfMET",&event_pfMET,"event_pfMET/F");
01107 vbtfPresele_tree->Branch("event_tcMET",&event_tcMET,"event_tcMET/F");
01108 vbtfPresele_tree->Branch("event_caloMT",&event_caloMT,"event_caloMT/F");
01109 vbtfPresele_tree->Branch("event_pfMT",&event_pfMT,"event_pfMT/F");
01110 vbtfPresele_tree->Branch("event_tcMT",&event_tcMT,"event_tcMT/F");
01111 vbtfPresele_tree->Branch("event_caloMET_phi",&event_caloMET_phi,"event_caloMET_phi/F");
01112 vbtfPresele_tree->Branch("event_pfMET_phi",&event_pfMET_phi,"event_pfMET_phi/F");
01113 vbtfPresele_tree->Branch("event_tcMET_phi",&event_tcMET_phi,"event_tcMET_phi/F");
01114 vbtfPresele_tree->Branch("event_caloSumEt",&event_caloSumEt,"event_caloSumEt/F");
01115 vbtfPresele_tree->Branch("event_pfSumEt",&event_pfSumEt,"event_pfSumEt/F");
01116 vbtfPresele_tree->Branch("event_tcSumEt",&event_tcSumEt,"event_tcSumEt/F");
01117
01118 if (includeJetInformationInNtuples_) {
01119 vbtfPresele_tree->Branch("calojet_et",calojet_et,"calojet_et[5]/F");
01120 vbtfPresele_tree->Branch("calojet_eta",calojet_eta,"calojet_eta[5]/F");
01121 vbtfPresele_tree->Branch("calojet_phi",calojet_phi,"calojet_phi[5]/F");
01122 vbtfPresele_tree->Branch("pfjet_et",pfjet_et,"pfjet_et[5]/F");
01123 vbtfPresele_tree->Branch("pfjet_eta",pfjet_eta,"pfjet_eta[5]/F");
01124 vbtfPresele_tree->Branch("pfjet_phi",pfjet_phi,"pfjet_phi[5]/F");
01125 }
01126 if (storeExtraInformation_) {
01127 vbtfPresele_tree->Branch("ele2nd_sc_gsf_et",&ele2nd_sc_gsf_et,"ele2nd_sc_gsf_et/F");
01128 vbtfPresele_tree->Branch("ele2nd_sc_eta",&ele2nd_sc_eta,"ele2nd_sc_eta/F");
01129 vbtfPresele_tree->Branch("ele2nd_sc_phi",&ele2nd_sc_phi,"ele2nd_sc_phi/F");
01130 vbtfPresele_tree->Branch("ele2nd_sc_rho",&ele2nd_sc_rho,"ele2nd_sc_rho/F");
01131 vbtfPresele_tree->Branch("ele2nd_cand_eta",&ele2nd_cand_eta,"ele2nd_cand_eta/F");
01132 vbtfPresele_tree->Branch("ele2nd_cand_phi",&ele2nd_cand_phi,"ele2nd_cand_phi/F");
01133 vbtfPresele_tree->Branch("ele2nd_pin",&ele2nd_pin,"ele2nd_pin/F");
01134 vbtfPresele_tree->Branch("ele2nd_pout",&ele2nd_pout,"ele2nd_pout/F");
01135 vbtfPresele_tree->Branch("ele2nd_ecalDriven",&ele2nd_ecalDriven,"ele2nd_ecalDriven/I");
01136 vbtfPresele_tree->Branch("ele2nd_passes_selection",&ele2nd_passes_selection,"ele2nd_passes_selection/I");
01137 vbtfPresele_tree->Branch("ele_hltmatched_dr",&ele_hltmatched_dr,"ele_hltmatched_dr/F");
01138 vbtfPresele_tree->Branch("event_triggerDecision",&event_triggerDecision,"event_triggerDecision/I");
01139 vbtfPresele_tree->Branch("VtxTracksSize",&VtxTracksSize);
01140 vbtfPresele_tree->Branch("VtxNormalizedChi2",&VtxNormalizedChi2);
01141 vbtfPresele_tree->Branch("VtxTracksSizeBS",&VtxTracksSizeBS);
01142 vbtfPresele_tree->Branch("VtxNormalizedChi2BS",&VtxNormalizedChi2BS);
01143 }
01144 if (storeAllSecondElectronVariables_) {
01145 vbtfPresele_tree->Branch("ele2nd_cand_et",&ele2nd_cand_et,"ele2nd_cand_et/F");
01146 vbtfPresele_tree->Branch("ele2nd_iso_track",&ele2nd_iso_track ,"ele2nd_iso_track /F");
01147 vbtfPresele_tree->Branch("ele2nd_iso_ecal",&ele2nd_iso_ecal,"ele2nd_iso_ecal/F");
01148 vbtfPresele_tree->Branch("ele2nd_iso_hcal",&ele2nd_iso_hcal,"ele2nd_iso_hcal/F");
01149 vbtfPresele_tree->Branch("ele2nd_id_sihih",&ele2nd_id_sihih,"ele2nd_id_sihih/F");
01150 vbtfPresele_tree->Branch("ele2nd_id_deta",&ele2nd_id_deta,"ele2nd_id_deta/F");
01151 vbtfPresele_tree->Branch("ele2nd_id_dphi",&ele2nd_id_dphi,"ele2nd_id_dphi/F");
01152 vbtfPresele_tree->Branch("ele2nd_id_hoe",&ele2nd_id_hoe,"ele2nd_id_hoe/F");
01153 vbtfPresele_tree->Branch("ele2nd_cr_mhitsinner",&ele2nd_cr_mhitsinner,"ele2nd_cr_mhitsinner/I");
01154 vbtfPresele_tree->Branch("ele2nd_cr_dcot",&ele2nd_cr_dcot,"ele2nd_cr_dcot/F");
01155 vbtfPresele_tree->Branch("ele2nd_cr_dist",&ele2nd_cr_dist ,"ele2nd_cr_dist/F");
01156 vbtfPresele_tree->Branch("ele2nd_vx",&ele2nd_vx,"ele2nd_vx/F");
01157 vbtfPresele_tree->Branch("ele2nd_vy",&ele2nd_vy,"ele2nd_vy/F");
01158 vbtfPresele_tree->Branch("ele2nd_vz",&ele2nd_vz,"ele2nd_vz/F");
01159
01160 vbtfPresele_tree->Branch("ele2nd_gsfCharge",&ele2nd_gsfCharge,"ele2nd_gsfCharge/I");
01161 vbtfPresele_tree->Branch("ele2nd_ctfCharge",&ele2nd_ctfCharge,"ele2nd_ctfCharge/I");
01162 vbtfPresele_tree->Branch("ele2nd_scPixCharge",&ele2nd_scPixCharge,"ele2nd_scPixCharge/I");
01163 vbtfPresele_tree->Branch("ele2nd_eop",&ele2nd_eop,"ele2nd_eop/F");
01164 vbtfPresele_tree->Branch("ele2nd_tip_bs",&ele2nd_tip_bs,"ele2nd_tip_bs/F");
01165 vbtfPresele_tree->Branch("ele2nd_tip_pv",&ele2nd_tip_pv,"ele2nd_tip_pv/F");
01166 vbtfPresele_tree->Branch("ele2nd_hltmatched_dr",&ele2nd_hltmatched_dr,"ele2nd_hltmatched_dr/F");
01167 }
01168 vbtfPresele_tree->Branch("event_datasetTag",&event_datasetTag,"event_dataSetTag/I");
01169
01170
01171
01172
01173
01174
01175
01176
01177 }
01178
01179
01180 void
01181 WenuPlots::endJob() {
01182 TFile * newfile = new TFile(TString(outputFile_),"RECREATE");
01183
01184
01185
01186
01187 h_met->Write();
01188 h_met_inverse->Write();
01189 h_mt->Write();
01190 h_mt_inverse->Write();
01191
01192 h_met_EB->Write();
01193 h_met_inverse_EB->Write();
01194 h_mt_EB->Write();
01195 h_mt_inverse_EB->Write();
01196
01197 h_met_EE->Write();
01198 h_met_inverse_EE->Write();
01199 h_mt_EE->Write();
01200 h_mt_inverse_EE->Write();
01201
01202 h_scEt->Write();
01203 h_scEta->Write();
01204 h_scPhi->Write();
01205
01206 h_EB_trkiso->Write();
01207 h_EB_ecaliso->Write();
01208 h_EB_hcaliso->Write();
01209 h_EB_sIetaIeta->Write();
01210 h_EB_dphi->Write();
01211 h_EB_deta->Write();
01212 h_EB_HoE->Write();
01213
01214 h_EE_trkiso->Write();
01215 h_EE_ecaliso->Write();
01216 h_EE_hcaliso->Write();
01217 h_EE_sIetaIeta->Write();
01218 h_EE_dphi->Write();
01219 h_EE_deta->Write();
01220 h_EE_HoE->Write();
01221
01222
01223 h_trackIso_eb_NmOne->Write();
01224 h_trackIso_ee_NmOne->Write();
01225
01226 newfile->Close();
01227
01228
01229
01230 WENU_VBTFpreseleFile_->Write();
01231 WENU_VBTFpreseleFile_->Close();
01232 WENU_VBTFselectionFile_->Write();
01233 WENU_VBTFselectionFile_->Close();
01234
01235 }
01236
01237
01238
01239 DEFINE_FWK_MODULE(WenuPlots);