46 std::string outputFile_D =
"histos.root";
58 if ( useSameSelectionOnBothElectrons_ ) {
71 std::cout <<
"ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #1 with name: >>> " <<
usePrecalcIDType1_<<
" <<< such that the value map " << usePrecalcIDSign1_ <<
" "<< usePrecalcIDValue1_ << std::endl;
83 std::cout <<
"ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #2 with name: >>> " <<
usePrecalcIDType2_<<
" <<< such that the value map " << usePrecalcIDSign2_ <<
" "<< usePrecalcIDValue2_ << std::endl;
188 std::cout <<
"ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #1 with name: >>> " <<
usePrecalcIDType1_<<
" <<< such that the value map " << usePrecalcIDSign1_ <<
" "<< usePrecalcIDValue1_ << std::endl;
200 std::cout <<
"ZeePlots: WARNING: you have chosen to use CMSSW precalculated ID for electron #2 with name: >>> " <<
usePrecalcIDType2_<<
" <<< such that the value map " << usePrecalcIDSign2_ <<
" "<< usePrecalcIDValue2_ << std::endl;
295 std::cout <<
"ZeePlots: Warning: you have demanded ValidFirstPXBHit on 1st electron" << std::endl;
298 std::cout <<
"ZeePlots: Warning: you have demanded ValidFirstPXBHit on 2nd electron" << std::endl;
301 std::cout <<
"ZeePlots: Warning: you have demanded Conversion Rejection on 1st electron" << std::endl;
304 std::cout <<
"ZeePlots: Warning: you have demanded Conversion Rejection on 2nd electron" << std::endl;
352 if ( ! ZeeCands.isValid() ) {
353 std::cout <<
"Warning: No valid Zee candidates in this event..." << std::endl;
358 const pat::CompositeCandidateCollection::const_iterator zeeIter = zcands->begin();
365 const pat::MET * myMet =
dynamic_cast<const pat::MET*
>( zee.daughter(
"met") );
366 const pat::MET * myPfMet =
dynamic_cast<const pat::MET*
>( zee.daughter(
"pfmet") );
367 const pat::MET * myTcMet =
dynamic_cast<const pat::MET*
>( zee.daughter(
"tcmet") );
386 ele1_sc_eta = (Float_t)( myElec1->superCluster()->eta() );
387 ele1_sc_phi = (Float_t)( myElec1->superCluster()->phi() );
389 ele1_sc_gsf_et = (Float_t)( myElec1->superCluster()->energy() / TMath::CosH(myElec1->gsfTrack()->eta()) );
396 ele1_iso_hcal = (Float_t)( ( myElec1->dr03IsolationVariables().hcalDepth1TowerSumEt + myElec1->dr03IsolationVariables().hcalDepth2TowerSumEt ) /
ele1_cand_et );
399 ele1_id_deta = (Float_t)( myElec1->deltaEtaSuperClusterTrackAtVtx() );
400 ele1_id_dphi = (Float_t)( myElec1->deltaPhiSuperClusterTrackAtVtx() );
401 ele1_id_hoe = (Float_t)( myElec1->hadronicOverEm() );
403 ele1_cr_mhitsinner = (Float_t)( myElec1->gsfTrack()->trackerExpectedHitsInner().numberOfHits() );
407 ele1_vx = (Float_t)( myElec1->vx() );
408 ele1_vy = (Float_t)( myElec1->vy() );
409 ele1_vz = (Float_t)( myElec1->vz() );
411 pv_x1 = (Float_t)( myElec1->userFloat(
"pv_x") );
412 pv_y1 = (Float_t)( myElec1->userFloat(
"pv_y") );
413 pv_z1 = (Float_t)( myElec1->userFloat(
"pv_z") );
416 ele1_ctfCharge = (Int_t) ( myElec1->closestCtfTrackRef().isNonnull() ? ( myElec1->closestCtfTrackRef()->charge() ) : -9999 ) ;
418 ele1_eop = (Float_t)( myElec1->eSuperClusterOverP() );
420 ele1_tip_pv = (Float_t)( myElec1->userFloat(
"ele_tip_pv") );
423 ele2_sc_eta = (Float_t)( myElec2->superCluster()->eta() );
424 ele2_sc_phi = (Float_t)( myElec2->superCluster()->phi() );
426 ele2_sc_gsf_et = (Float_t)( myElec2->superCluster()->energy() / TMath::CosH(myElec2->gsfTrack()->eta()) );
433 ele2_iso_hcal = (Float_t)( ( myElec2->dr03IsolationVariables().hcalDepth1TowerSumEt + myElec2->dr03IsolationVariables().hcalDepth2TowerSumEt ) /
ele2_cand_et );
436 ele2_id_deta = (Float_t)( myElec2->deltaEtaSuperClusterTrackAtVtx() );
437 ele2_id_dphi = (Float_t)( myElec2->deltaPhiSuperClusterTrackAtVtx() );
438 ele2_id_hoe = (Float_t)( myElec2->hadronicOverEm() );
440 ele2_cr_mhitsinner = (Float_t)( myElec2->gsfTrack()->trackerExpectedHitsInner().numberOfHits() );
444 ele2_vx = (Float_t)( myElec2->vx() );
445 ele2_vy = (Float_t)( myElec2->vy() );
446 ele2_vz = (Float_t)( myElec2->vz() );
448 pv_x2 = (Float_t)( myElec2->userFloat(
"pv_x") );
449 pv_y2 = (Float_t)( myElec2->userFloat(
"pv_y") );
450 pv_z2 = (Float_t)( myElec2->userFloat(
"pv_z") );
453 ele2_ctfCharge = (Int_t) ( myElec2->closestCtfTrackRef().isNonnull() ? ( myElec2->closestCtfTrackRef()->charge() ) : -9999 );
455 ele2_eop = (Float_t)( myElec2->eSuperClusterOverP() );
457 ele2_tip_pv = (Float_t)( myElec2->userFloat(
"ele_tip_pv") );
474 TLorentzVector Zp4 = p4e1 + p4e2 ;
487 for ( Int_t
i=0;
i < 5; ++
i ) {
510 Int_t nCaloJets = (Int_t)( caloJets->size() );
512 if ( nCaloJets > 0 ) {
514 Float_t *nCaloET =
new Float_t[nCaloJets];
515 Float_t *nCaloEta =
new Float_t[nCaloJets];
516 Float_t *nCaloPhi =
new Float_t[nCaloJets];
522 for (reco::CaloJetCollection::const_iterator cjet = caloJets->begin() ; cjet != caloJets->end(); ++cjet) {
530 nCaloET[counter] = cjet->et();
531 nCaloEta[counter] = cjet->eta();
532 nCaloPhi[counter] = cjet->phi();
537 Int_t *caloJetSorted =
new Int_t[nCaloJets];
539 TMath::Sort(nCaloJets, nCaloET, caloJetSorted,
true);
541 for ( Int_t
i = 0;
i < nCaloJets; ++
i ) {
552 delete [] caloJetSorted;
566 Int_t nPfJets = (Int_t) pfJets->size();
570 Float_t *nPfET =
new Float_t[nPfJets];
571 Float_t *nPfEta =
new Float_t[nPfJets];
572 Float_t *nPfPhi =
new Float_t[nPfJets];
578 for (reco::PFJetCollection::const_iterator pjet = pfJets->begin(); pjet != pfJets->end(); ++pjet) {
587 nPfET[counter] = pjet->et();
588 nPfEta[counter] = pjet->eta();
589 nPfPhi[counter] = pjet->phi();
594 Int_t *pfJetSorted =
new Int_t[nPfJets];
596 TMath::Sort(nPfJets, nPfET, pfJetSorted,
true);
598 for ( Int_t
i = 0;
i < nPfJets; ++
i ) {
610 delete [] pfJetSorted;
656 if ( ! ( passPre1 && passPre2 ) ) {
658 std::cout <<
"At least one electron fails preselection: Electron #1 = " << passPre1 <<
" - Electron #2 = " << passPre2 << std::endl;
673 e1.SetPtEtaPhiM(myElec1->et(),myElec1->eta(),myElec1->phi(),0.000511);
674 e2.SetPtEtaPhiM(myElec2->et(),myElec2->eta(),myElec2->phi(),0.000511);
677 TLorentzVector
Z = e1 + e2;
679 Double_t mee =
Z.M();
693 if ( TMath::Abs(e1.Eta())<1.479 && TMath::Abs(e2.Eta())<1.479 ) {
696 if ( TMath::Abs(e1.Eta())<1.479 && TMath::Abs(e2.Eta())>1.479 ) {
699 if ( TMath::Abs(e1.Eta())>1.479 && TMath::Abs(e2.Eta())<1.479 ) {
702 if ( TMath::Abs(e1.Eta())>1.479 && TMath::Abs(e2.Eta())>1.479 ) {
716 if ( TMath::Abs(myElec1->eta()) < 1.479 ) {
721 h_EB_dphi->Fill(myElec1->deltaPhiSuperClusterTrackAtVtx());
722 h_EB_deta->Fill(myElec1->deltaEtaSuperClusterTrackAtVtx());
723 h_EB_HoE->Fill(myElec1->hadronicOverEm());
730 h_EE_dphi->Fill(myElec1->deltaPhiSuperClusterTrackAtVtx());
731 h_EE_deta->Fill(myElec1->deltaEtaSuperClusterTrackAtVtx());
732 h_EE_HoE->Fill(myElec1->hadronicOverEm());
735 if ( TMath::Abs(myElec2->eta()) < 1.479 ) {
740 h_EB_dphi->Fill(myElec2->deltaPhiSuperClusterTrackAtVtx());
741 h_EB_deta->Fill(myElec2->deltaEtaSuperClusterTrackAtVtx());
742 h_EB_HoE->Fill(myElec2->hadronicOverEm());
749 h_EE_dphi->Fill(myElec2->deltaPhiSuperClusterTrackAtVtx());
750 h_EE_deta->Fill(myElec2->deltaEtaSuperClusterTrackAtVtx());
751 h_EE_HoE->Fill(myElec2->hadronicOverEm());
910 Double_t fabseta = TMath::Abs(ele->
superCluster()->eta());
912 if ( fabseta < 1.479 ) {
922 Double_t fabseta = TMath::Abs(ele->
superCluster()->eta());
924 if ( fabseta < 1.479 ) {
935 Double_t fabseta = TMath::Abs(ele->
superCluster()->eta());
937 if ( fabseta < 1.479 ) {
959 Double_t fabseta = TMath::Abs(ele->
superCluster()->eta());
961 if ( fabseta < 1.479 ) {
1001 else if ( i == 6 ) {
1004 else if ( i == 7 ) {
1006 if ( ele->
isEB() ) {
1014 else if ( i == 8 ) {
1015 return ( ele->
dB() ) ;
1017 else if ( i == 9 ) {
1020 else if ( i == 10 ) {
1023 else if ( i == 11 ) {
1026 else if ( i == 12 ) {
1030 std::cout <<
"Error in ZeePlots::ReturnCandVar" << std::endl;
1051 Bool_t passConvRej =
true;
1052 Bool_t passPXB =
true;
1053 Bool_t passEMH =
true;
1057 if ( ele->
hasUserInt(
"PassConversionRejection") ) {
1059 if ( ! (ele->
userInt(
"PassConversionRejection") == 1) ) {
1060 passConvRej =
false;
1064 std::cout <<
"ZeePlots: WARNING: Conversion Rejection Request for electron #1 Disregarded: " <<
"you must calculate it before " << std::endl;
1070 if ( ele->
hasUserInt(
"PassValidFirstPXBHit") ) {
1072 if ( ! (ele->
userInt(
"PassValidFirstPXBHit") == 1) ) {
1077 std::cout <<
"ZeePlots: WARNING: Valid First PXB Hit Request for electron #1 Disregarded: " <<
"you must calculate it before " << std::endl;
1083 if ( ele->
hasUserInt(
"NumberOfExpectedMissingHits") ) {
1090 std::cout <<
"ZeePlots: WARNING: Number of Expected Missing Hits Request for electron #1 Disregarded: " <<
"you must calculate it before " << std::endl;
1094 return ( passConvRej && passPXB && passEMH ) ;
1099 Bool_t passConvRej =
true;
1100 Bool_t passPXB =
true;
1101 Bool_t passEMH =
true;
1105 if ( ele->
hasUserInt(
"PassConversionRejection") ) {
1107 if ( ! (ele->
userInt(
"PassConversionRejection") == 1) ) {
1108 passConvRej =
false;
1112 std::cout <<
"ZeePlots: WARNING: Conversion Rejection Request for electron #2 Disregarded: " <<
"you must calculate it before " << std::endl;
1118 if ( ele->
hasUserInt(
"PassValidFirstPXBHit") ) {
1120 if ( ! (ele->
userInt(
"PassValidFirstPXBHit") == 1) ) {
1125 std::cout <<
"ZeePlots: WARNING: Valid First PXB Hit Request for electron #2 Disregarded: " <<
"you must calculate it before " << std::endl;
1131 if ( ele->
hasUserInt(
"NumberOfExpectedMissingHits") ) {
1138 std::cout <<
"ZeePlots: WARNING: Number of Expected Missing Hits Request for electron #2 Disregarded: " <<
"you must calculate it before " << std::endl;
1142 return ( passConvRej && passPXB && passEMH ) ;
1156 h_mee =
new TH1F(
"h_mee" ,
"h_mee" , 200 , 0.0 , 200.0) ;
1157 h_mee_EBEB =
new TH1F(
"h_mee_EBEB" ,
"h_mee_EBEB" , 200 , 0.0 , 200.0) ;
1158 h_mee_EBEE =
new TH1F(
"h_mee_EBEE" ,
"h_mee_EBEE" , 200 , 0.0 , 200.0) ;
1159 h_mee_EEEE =
new TH1F(
"h_mee_EEEE" ,
"h_mee_EEEE" , 200 , 0.0 , 200.0) ;
1160 h_Zcand_PT =
new TH1F(
"h_Zcand_PT" ,
"h_Zcand_PT" , 200 , 0.0 , 100.0) ;
1161 h_Zcand_Y =
new TH1F(
"h_Zcand_Y" ,
"h_Zcand_Y" , 200 , -5.0 , 5.0) ;
1162 h_e_PT =
new TH1F(
"h_e_PT" ,
"h_e_PT" , 200 , 0.0 , 100.0) ;
1163 h_e_ETA =
new TH1F(
"h_e_ETA" ,
"h_e_ETA" , 200 , -3.0 , 3.0) ;
1164 h_e_PHI =
new TH1F(
"h_e_PHI" ,
"h_e_PHI" , 200 , -4.0 , 4.0) ;
1169 h_EB_trkiso =
new TH1F(
"h_EB_trkiso" ,
"h_EB_trkiso" , 200 , 0.00 , 9.00) ;
1170 h_EB_ecaliso =
new TH1F(
"h_EB_ecaliso" ,
"h_EB_ecaliso" , 200 , 0.00 , 9.00) ;
1171 h_EB_hcaliso =
new TH1F(
"h_EB_hcaliso" ,
"h_EB_hcaliso" , 200 , 0.00 , 9.00) ;
1172 h_EB_sIetaIeta =
new TH1F(
"h_EB_sIetaIeta" ,
"h_EB_sIetaIeta" , 200 , 0.00 , 0.02) ;
1173 h_EB_dphi =
new TH1F(
"h_EB_dphi" ,
"h_EB_dphi" , 200 , -0.03 , 0.03) ;
1174 h_EB_deta =
new TH1F(
"h_EB_deta" ,
"h_EB_deta" , 200 , -0.01 , 0.01) ;
1175 h_EB_HoE =
new TH1F(
"h_EB_HoE" ,
"h_EB_HoE" , 200 , 0.00 , 0.20) ;
1177 h_EE_trkiso =
new TH1F(
"h_EE_trkiso" ,
"h_EE_trkiso" , 200 , 0.00 , 9.00) ;
1178 h_EE_ecaliso =
new TH1F(
"h_EE_ecaliso" ,
"h_EE_ecaliso" , 200 , 0.00 , 9.00) ;
1179 h_EE_hcaliso =
new TH1F(
"h_EE_hcaliso" ,
"h_EE_hcaliso" , 200 , 0.00 , 9.00) ;
1180 h_EE_sIetaIeta =
new TH1F(
"h_EE_sIetaIeta" ,
"h_EE_sIetaIeta" , 200 , 0.00 , 0.10) ;
1181 h_EE_dphi =
new TH1F(
"h_EE_dphi" ,
"h_EE_dphi" , 200 , -0.03 , 0.03) ;
1182 h_EE_deta =
new TH1F(
"h_EE_deta" ,
"h_EE_deta" , 200 , -0.01 , 0.01) ;
1183 h_EE_HoE =
new TH1F(
"h_EE_HoE" ,
"h_EE_HoE" , 200 , 0.00 , 0.20) ;
1319 vbtfSele_tree =
new TTree(
"vbtfSele_tree",
"Tree to store the Z Candidates that pass the VBTF selection");
1416 vbtfPresele_tree =
new TTree(
"vbtfPresele_tree",
"Tree to store the Z Candidates that pass the VBTF preselection");
Double_t trackIsoUser2_EB_
const double Z[kNumberCalorimeter]
Analysis-level particle class.
Double_t hcalIsoUser1_EB_
Analysis-level MET class.
Bool_t CheckCuts1NminusOne(const pat::Electron *, Int_t)
T getUntrackedParameter(std::string const &, T const &) const
std::string usePrecalcIDSign2_
Bool_t CheckCut2(const pat::Electron *, Int_t)
Bool_t useValidFirstPXBHit2_
const LorentzVector & p4(P4Kind kind) const
float eSuperClusterOverP() const
Double_t trackIsoUser1_EE_
Bool_t ecalIsoUser2_EB_inv
Bool_t trackIsoUser1_EE_inv
#define DEFINE_FWK_MODULE(type)
std::string usePrecalcIDSign1_
Double_t usePrecalcIDValue1_
Bool_t maxNumberOfExpectedMissingHits1_
reco::SuperClusterRef superCluster() const
override the reco::GsfElectron::superCluster method, to access the internal storage of the superclust...
Double_t hcalIsoUser2_EE_
Bool_t useSameSelectionOnBothElectrons_
edm::LuminosityBlockNumber_t luminosityBlock() const
edm::InputTag pfJetCollectionTag_
Bool_t CheckCuts2Inverse(const pat::Electron *)
Bool_t CheckCut1(const pat::Electron *, Int_t)
Bool_t ecalIsoUser1_EE_inv
Bool_t hcalIsoUser2_EE_inv
Double_t hcalIsoUser2_EB_
Double_t ecalIsoUser2_EE_
Double_t ecalIsoUser1_EE_
Double_t usePrecalcIDValue2_
Double_t hcalIsoUser1_EE_
Bool_t useExpectedMissingHits2_
double deltaR(double eta1, double phi1, double eta2, double phi2)
Double_t ecalIsoUser1_EB_
Bool_t CheckCuts1(const pat::Electron *)
Bool_t hcalIsoUser2_EB_inv
Bool_t CheckCuts2NminusOne(const pat::Electron *, Int_t)
bool hasUserInt(const std::string &key) const
Return true if there is a user-defined int with a given name.
TFile * ZEE_VBTFpreseleFile_
float deltaEtaSuperClusterTrackAtVtx() const
Bool_t ecalIsoUser2_EE_inv
Bool_t CheckCut1Inv(const pat::Electron *, Int_t)
Bool_t hcalIsoUser1_EE_inv
std::string ZEE_VBTFpreseleFileName_
float hadronicOverEm() const
Bool_t useConversionRejection1_
Double_t ecalIsoUser2_EB_
Float_t event_caloMET_phi
float deltaPhiSuperClusterTrackAtVtx() const
std::vector< Double_t > CutVars1_
float dr03TkSumPt() const
Bool_t CheckCuts1Inverse(const pat::Electron *)
Float_t ele1_cr_mhitsinner
Bool_t ecalIsoUser1_EB_inv
Bool_t maxNumberOfExpectedMissingHits2_
virtual void analyze(const edm::Event &, const edm::EventSetup &)
Bool_t trackIsoUser1_EB_inv
Bool_t PassPreselectionCriteria2(const pat::Electron *)
float scSigmaIEtaIEta() const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
TFile * ZEE_VBTFselectionFile_
std::string usePrecalcIDType1_
Bool_t hcalIsoUser1_EB_inv
EventAuxiliary const & eventAuxiliary() const
Double_t DRJetFromElectron_
Double_t trackIsoUser1_EB_
float electronID(const std::string &name) const
Returns a specific electron ID associated to the pat::Electron given its name.
float userIsolation(IsolationKeys key) const
std::vector< CompositeCandidate > CompositeCandidateCollection
Bool_t useValidFirstPXBHit1_
int32_t userInt(const std::string &key) const
edm::InputTag caloJetCollectionTag_
std::string ZEE_VBTFselectionFileName_
Bool_t PassPreselectionCriteria1(const pat::Electron *)
Analysis-level electron class.
T const * product() const
float dr03EcalRecHitSumEt() const
Bool_t trackIsoUser2_EE_inv
Double_t ReturnCandVar(const pat::Electron *, Int_t)
std::vector< PFJet > PFJetCollection
collection of PFJet objects
Bool_t useExpectedMissingHits1_
std::string usePrecalcIDType2_
edm::InputTag zeeCollectionTag_
Bool_t includeJetInformationInNtuples_
float dr03HcalTowerSumEt() const
std::vector< Bool_t > InvVars2_
Bool_t CheckCuts2(const pat::Electron *)
std::vector< Double_t > CutVars2_
Double_t trackIsoUser2_EE_
Bool_t CheckCut2Inv(const pat::Electron *, Int_t)
EventNumber_t event() const
double dB(IpType type=None) const
Impact parameter wrt primary vertex or beamspot.
std::vector< Bool_t > InvVars1_
Bool_t trackIsoUser2_EB_inv
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects
Bool_t useConversionRejection2_
Float_t ele2_cr_mhitsinner