17 |
|
// |
18 |
|
// |
19 |
|
|
20 |
< |
#include "UHHAnalysis//NtupleWriter/interface/NtupleWriter.h" |
21 |
< |
|
22 |
< |
|
20 |
> |
#include "UHHAnalysis/NtupleWriter/interface/NtupleWriter.h" |
21 |
> |
#include "RecoBTau/JetTagComputer/interface/GenericMVAJetTagComputer.h" |
22 |
> |
#include "RecoBTau/JetTagComputer/interface/GenericMVAJetTagComputerWrapper.h" |
23 |
> |
#include "RecoBTau/JetTagComputer/interface/JetTagComputer.h" |
24 |
> |
#include "RecoBTau/JetTagComputer/interface/JetTagComputerRecord.h" |
25 |
> |
#include "RecoBTag/SecondaryVertex/interface/CombinedSVComputer.h" |
26 |
|
|
27 |
|
// |
28 |
|
// constants, enums and typedefs |
63 |
|
doPV = iConfig.getParameter<bool>("doPV"); |
64 |
|
doTopJets = iConfig.getParameter<bool>("doTopJets"); |
65 |
|
doTrigger = iConfig.getParameter<bool>("doTrigger"); |
66 |
< |
|
66 |
> |
SVComputer_ = iConfig.getUntrackedParameter<edm::InputTag>("svComputer",edm::InputTag("combinedSecondaryVertex")); |
67 |
> |
doTagInfos = iConfig.getUntrackedParameter<bool>("doTagInfos",false); |
68 |
|
// initialization of tree variables |
69 |
|
|
70 |
|
tr->Branch("run",&run); |
147 |
|
} |
148 |
|
} |
149 |
|
if(doGenInfo){ |
150 |
+ |
genparticle_source= iConfig.getParameter<edm::InputTag>("genparticle_source"); |
151 |
|
tr->Branch("genInfo","GenInfo",&genInfo); |
152 |
|
tr->Branch("GenParticles","std::vector<GenParticle>", &genps); |
153 |
|
} |
297 |
|
} |
298 |
|
|
299 |
|
edm::Handle<reco::GenParticleCollection> genPartColl; |
300 |
< |
iEvent.getByLabel(edm::InputTag("genParticles"), genPartColl); |
300 |
> |
iEvent.getByLabel(genparticle_source, genPartColl); |
301 |
|
int index=-1; |
302 |
|
for(reco::GenParticleCollection::const_iterator iter = genPartColl->begin(); iter != genPartColl->end(); ++ iter){ |
303 |
|
index++; |
388 |
|
ele.set_EcalEnergy(pat_ele.ecalEnergy()); |
389 |
|
ele.set_mvaTrigV0(pat_ele.electronID("mvaTrigV0")); |
390 |
|
ele.set_mvaNonTrigV0(pat_ele.electronID("mvaNonTrigV0")); |
391 |
+ |
float AEff03 = 0.00; |
392 |
+ |
if(isRealData){ |
393 |
+ |
AEff03 = ElectronEffectiveArea::GetElectronEffectiveArea(ElectronEffectiveArea::kEleGammaAndNeutralHadronIso03, pat_ele.superCluster()->eta(), ElectronEffectiveArea::kEleEAData2011); |
394 |
+ |
}else{ |
395 |
+ |
AEff03 = ElectronEffectiveArea::GetElectronEffectiveArea(ElectronEffectiveArea::kEleGammaAndNeutralHadronIso03, pat_ele.superCluster()->eta(), ElectronEffectiveArea::kEleEAFall11MC); |
396 |
+ |
} |
397 |
+ |
ele.set_AEff(AEff03); |
398 |
|
|
399 |
|
eles[j].push_back(ele); |
400 |
|
} |
604 |
|
jet.set_btag_jetBProbability(pat_jet.bDiscriminator("jetBProbabilityBJetTags")); |
605 |
|
jet.set_btag_jetProbability(pat_jet.bDiscriminator("jetProbabilityBJetTags")); |
606 |
|
|
607 |
+ |
|
608 |
|
const reco::GenJet *genj = pat_jet.genJet(); |
609 |
|
if(genj){ |
610 |
|
jet.set_genjet_pt(genj->pt()); |
624 |
|
if(jet.genparticles_indices().size()!= jetgenps.size()) |
625 |
|
std::cout << "WARNING: Found only " << jet.genparticles_indices().size() << " from " << jetgenps.size() << " gen particles of this jet"<<std::endl; |
626 |
|
} |
627 |
+ |
|
628 |
|
} |
629 |
+ |
|
630 |
|
jets[j].push_back(jet); |
631 |
|
} |
632 |
|
} |
709 |
|
|
710 |
|
for (unsigned int k = 0; k < pat_topjet.numberOfDaughters(); k++) { |
711 |
|
Particle subjet_v4; |
712 |
< |
subjet_v4.set_pt(pat_topjet.daughter(k)->p4().pt()); |
713 |
< |
subjet_v4.set_eta(pat_topjet.daughter(k)->p4().eta()); |
714 |
< |
subjet_v4.set_phi(pat_topjet.daughter(k)->p4().phi()); |
715 |
< |
subjet_v4.set_energy(pat_topjet.daughter(k)->p4().E()); |
716 |
< |
topjet.add_subjet(subjet_v4); |
712 |
> |
|
713 |
> |
reco::Candidate const * subjetd = pat_topjet.daughter(k); |
714 |
> |
pat::Jet const * patsubjetd = dynamic_cast<pat::Jet const *>(subjetd); |
715 |
> |
if(patsubjetd) |
716 |
> |
{ |
717 |
> |
subjet_v4.set_pt(patsubjetd->correctedP4(0).pt()); |
718 |
> |
subjet_v4.set_eta(patsubjetd->correctedP4(0).eta()); |
719 |
> |
subjet_v4.set_phi(patsubjetd->correctedP4(0).phi()); |
720 |
> |
subjet_v4.set_energy(patsubjetd->correctedP4(0).E()); |
721 |
> |
topjet.add_subjet(subjet_v4); |
722 |
> |
//btag info |
723 |
> |
topjet.add_subFlavour(patsubjetd->partonFlavour()); |
724 |
> |
topjet.add_subCSV(patsubjetd->bDiscriminator("combinedSecondaryVertexBJetTags")); |
725 |
> |
if (doTagInfos) |
726 |
> |
{ |
727 |
> |
//ip tag info |
728 |
> |
reco::TaggingVariableList tvlIP=patsubjetd->tagInfoTrackIP("impactParameter")->taggingVariables(); |
729 |
> |
topjet.add_subTrackMomentum(tvlIP.getList(reco::btau::trackMomentum,false)); |
730 |
> |
topjet.add_subTrackEta(tvlIP.getList(reco::btau::trackEta,false)); |
731 |
> |
topjet.add_subTrackEtaRel(tvlIP.getList(reco::btau::trackEtaRel,false)); |
732 |
> |
topjet.add_subTrackDeltaR(tvlIP.getList(reco::btau::trackDeltaR,false)); |
733 |
> |
topjet.add_subTrackSip3dVal(tvlIP.getList(reco::btau::trackSip3dVal,false)); |
734 |
> |
topjet.add_subTrackSip3dSig(tvlIP.getList(reco::btau::trackSip3dSig,false)); |
735 |
> |
topjet.add_subTrackSip2dVal(tvlIP.getList(reco::btau::trackSip2dVal,false)); |
736 |
> |
topjet.add_subTrackSip2dSig(tvlIP.getList(reco::btau::trackSip2dSig,false)); |
737 |
> |
topjet.add_subTrackDecayLenVal(tvlIP.getList(reco::btau::trackDecayLenVal,false)); |
738 |
> |
topjet.add_subTrackChi2(tvlIP.getList(reco::btau::trackChi2,false)); |
739 |
> |
topjet.add_subTrackNTotalHits(tvlIP.getList(reco::btau::trackNTotalHits,false)); |
740 |
> |
topjet.add_subTrackNPixelHits(tvlIP.getList(reco::btau::trackNPixelHits,false)); |
741 |
> |
topjet.add_subTrackPtRel(tvlIP.getList(reco::btau::trackPtRel,false)); |
742 |
> |
topjet.add_subTrackPPar(tvlIP.getList(reco::btau::trackPPar,false)); |
743 |
> |
topjet.add_subTrackPtRatio(tvlIP.getList(reco::btau::trackPtRatio,false)); |
744 |
> |
topjet.add_subTrackPParRatio(tvlIP.getList(reco::btau::trackPParRatio,false)); |
745 |
> |
topjet.add_subTrackJetDistVal(tvlIP.getList(reco::btau::trackJetDistVal,false)); |
746 |
> |
topjet.add_subTrackJetDistSig(tvlIP.getList(reco::btau::trackJetDistSig,false)); |
747 |
> |
topjet.add_subTrackGhostTrackDistVal(tvlIP.getList(reco::btau::trackGhostTrackDistVal,false)); |
748 |
> |
topjet.add_subTrackGhostTrackDistSig(tvlIP.getList(reco::btau::trackGhostTrackDistSig,false)); |
749 |
> |
topjet.add_subTrackGhostTrackWeight(tvlIP.getList(reco::btau::trackGhostTrackWeight,false)); |
750 |
> |
//sv tag info |
751 |
> |
reco::TaggingVariableList tvlSV=patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->taggingVariables(); |
752 |
> |
topjet.add_subFlightDistance2dVal(tvlSV.getList(reco::btau::flightDistance2dVal,false)); |
753 |
> |
topjet.add_subFlightDistance2dSig(tvlSV.getList(reco::btau::flightDistance2dSig,false)); |
754 |
> |
topjet.add_subFlightDistance3dVal(tvlSV.getList(reco::btau::flightDistance3dVal,false)); |
755 |
> |
topjet.add_subFlightDistance3dSig(tvlSV.getList(reco::btau::flightDistance3dSig,false)); |
756 |
> |
topjet.add_subVertexJetDeltaR(tvlSV.getList(reco::btau::vertexJetDeltaR,false)); |
757 |
> |
topjet.add_subJetNSecondaryVertices(tvlSV.get(reco::btau::jetNSecondaryVertices,-9999)); |
758 |
> |
topjet.add_subVertexNTracks(tvlSV.get(reco::btau::vertexNTracks,-9999)); |
759 |
> |
std::vector<TLorentzVector> vp4; vp4.clear(); |
760 |
> |
std::vector<float> vchi2; vchi2.clear(); |
761 |
> |
std::vector<float> vndof; vndof.clear(); |
762 |
> |
std::vector<float> vchi2ndof; vchi2ndof.clear(); |
763 |
> |
std::vector<float> vtrsize; vtrsize.clear(); |
764 |
> |
for(unsigned int i=0; i<patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->nVertices(); i++) |
765 |
> |
{ |
766 |
> |
ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > p4 = patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->secondaryVertex(i).p4(); |
767 |
> |
vp4.push_back(TLorentzVector(p4.px(),p4.py(),p4.pz(),p4.e())); |
768 |
> |
vchi2.push_back(patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->secondaryVertex(i).chi2()); |
769 |
> |
vndof.push_back(patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->secondaryVertex(i).ndof()); |
770 |
> |
vchi2ndof.push_back(patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->secondaryVertex(i).normalizedChi2()); |
771 |
> |
vtrsize.push_back(patsubjetd->tagInfoSecondaryVertex("secondaryVertex")->secondaryVertex(i).tracksSize()); |
772 |
> |
} |
773 |
> |
topjet.add_subSecondaryVertex(vp4); |
774 |
> |
topjet.add_subVertexChi2(vchi2); |
775 |
> |
topjet.add_subVertexNdof(vndof); |
776 |
> |
topjet.add_subVertexNormalizedChi2(vchi2ndof); |
777 |
> |
topjet.add_subVertexTracksSize(vtrsize); |
778 |
> |
//try computer |
779 |
> |
edm::ESHandle<JetTagComputer> computerHandle; |
780 |
> |
iSetup.get<JetTagComputerRecord>().get( SVComputer_.label(), computerHandle ); |
781 |
> |
const GenericMVAJetTagComputer *computer = dynamic_cast<const GenericMVAJetTagComputer*>( computerHandle.product() ); |
782 |
> |
if(computer) |
783 |
> |
{ |
784 |
> |
computer->passEventSetup(iSetup); |
785 |
> |
std::vector<const reco::BaseTagInfo*> baseTagInfos; |
786 |
> |
baseTagInfos.push_back(patsubjetd->tagInfoTrackIP("impactParameter") ); |
787 |
> |
baseTagInfos.push_back(patsubjetd->tagInfoSecondaryVertex("secondaryVertex") ); |
788 |
> |
JetTagComputer::TagInfoHelper helper(baseTagInfos); |
789 |
> |
reco::TaggingVariableList vars = computer->taggingVariables(helper); |
790 |
> |
topjet.add_subVertexMassJTC(vars.get(reco::btau::vertexMass,-9999)); |
791 |
> |
topjet.add_subVertexCategoryJTC(vars.get(reco::btau::vertexCategory,-9999)); |
792 |
> |
topjet.add_subVertexEnergyRatioJTC(vars.get(reco::btau::vertexEnergyRatio,-9999)); |
793 |
> |
topjet.add_subTrackSip3dSigAboveCharmJTC(vars.get(reco::btau::trackSip3dSigAboveCharm,-9999)); |
794 |
> |
} |
795 |
> |
} |
796 |
> |
} |
797 |
> |
else |
798 |
> |
{ |
799 |
> |
//filling only standard information in case the subjet has not been pat-tified during the pattuples production |
800 |
> |
subjet_v4.set_pt(pat_topjet.daughter(k)->p4().pt()); |
801 |
> |
subjet_v4.set_eta(pat_topjet.daughter(k)->p4().eta()); |
802 |
> |
subjet_v4.set_phi(pat_topjet.daughter(k)->p4().phi()); |
803 |
> |
subjet_v4.set_energy(pat_topjet.daughter(k)->p4().E()); |
804 |
> |
topjet.add_subjet(subjet_v4); |
805 |
> |
} |
806 |
> |
|
807 |
> |
|
808 |
|
} |
809 |
|
topjets[j].push_back(topjet); |
810 |
|
} |
811 |
|
} |
812 |
|
} |
813 |
< |
|
814 |
< |
|
813 |
> |
|
814 |
> |
|
815 |
|
// ------------- generator top jets ------------- |
816 |
|
if(doGenTopJets){ |
817 |
|
for(size_t j=0; j< gentopjet_sources.size(); ++j){ |
818 |
|
|
819 |
|
gentopjets[j].clear(); |
820 |
< |
|
820 |
> |
|
821 |
|
edm::Handle<reco::BasicJetCollection> reco_gentopjets; |
822 |
|
//edm::Handle<std::vector<reco::Jet> > reco_gentopjets; |
823 |
|
iEvent.getByLabel(gentopjet_sources[j], reco_gentopjets); |