File indexing completed on 2025-03-05 03:16:47
0001
0002
0003
0004
0005
0006
0007
0008 #include <memory>
0009
0010 #include <CLHEP/Random/RandGauss.h>
0011 #include <Math/GenVector/VectorUtil.h>
0012
0013 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
0014 #include "DataFormats/TauReco/interface/PFTauTagInfo.h"
0015 #include "DataFormats/VertexReco/interface/Vertex.h"
0016 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/Frameworkfwd.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021 #include "FWCore/Framework/interface/global/EDProducer.h"
0022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0023 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0026 #include "RecoTauTag/RecoTau/interface/PFRecoTauTagInfoAlgorithm.h"
0027
0028 using namespace reco;
0029 using namespace edm;
0030 using namespace std;
0031
0032 class PFRecoTauTagInfoProducer : public edm::global::EDProducer<> {
0033 public:
0034 explicit PFRecoTauTagInfoProducer(const edm::ParameterSet& iConfig);
0035 ~PFRecoTauTagInfoProducer() override;
0036 void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0037 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038
0039 private:
0040 std::unique_ptr<const PFRecoTauTagInfoAlgorithm> PFRecoTauTagInfoAlgo_;
0041 edm::InputTag PFCandidateProducer_;
0042 edm::InputTag PFJetTracksAssociatorProducer_;
0043 edm::InputTag PVProducer_;
0044 double smearedPVsigmaX_;
0045 double smearedPVsigmaY_;
0046 double smearedPVsigmaZ_;
0047
0048 edm::EDGetTokenT<PFCandidateCollection> PFCandidate_token;
0049 edm::EDGetTokenT<JetTracksAssociationCollection> PFJetTracksAssociator_token;
0050 edm::EDGetTokenT<VertexCollection> PV_token;
0051 };
0052
0053 PFRecoTauTagInfoProducer::PFRecoTauTagInfoProducer(const edm::ParameterSet& iConfig) {
0054 PFCandidateProducer_ = iConfig.getParameter<edm::InputTag>("PFCandidateProducer");
0055 PFJetTracksAssociatorProducer_ = iConfig.getParameter<edm::InputTag>("PFJetTracksAssociatorProducer");
0056 PVProducer_ = iConfig.getParameter<edm::InputTag>("PVProducer");
0057 smearedPVsigmaX_ = iConfig.getParameter<double>("smearedPVsigmaX");
0058 smearedPVsigmaY_ = iConfig.getParameter<double>("smearedPVsigmaY");
0059 smearedPVsigmaZ_ = iConfig.getParameter<double>("smearedPVsigmaZ");
0060 PFRecoTauTagInfoAlgo_ = std::make_unique<PFRecoTauTagInfoAlgorithm>(iConfig);
0061 PFCandidate_token = consumes<PFCandidateCollection>(PFCandidateProducer_);
0062 PFJetTracksAssociator_token = consumes<JetTracksAssociationCollection>(PFJetTracksAssociatorProducer_);
0063 PV_token = consumes<VertexCollection>(PVProducer_);
0064 produces<PFTauTagInfoCollection>();
0065 }
0066 PFRecoTauTagInfoProducer::~PFRecoTauTagInfoProducer() {}
0067
0068 void PFRecoTauTagInfoProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0069 edm::Handle<JetTracksAssociationCollection> thePFJetTracksAssociatorCollection;
0070 iEvent.getByToken(PFJetTracksAssociator_token, thePFJetTracksAssociatorCollection);
0071
0072 edm::Handle<PFCandidateCollection> thePFCandidateCollection;
0073 iEvent.getByToken(PFCandidate_token, thePFCandidateCollection);
0074 vector<CandidatePtr> thePFCandsInTheEvent;
0075 for (unsigned int i_PFCand = 0; i_PFCand != thePFCandidateCollection->size(); i_PFCand++) {
0076 thePFCandsInTheEvent.push_back(CandidatePtr(thePFCandidateCollection, i_PFCand));
0077 }
0078
0079
0080 edm::Handle<VertexCollection> thePVs;
0081 iEvent.getByToken(PV_token, thePVs);
0082 const VertexCollection vertCollection = *(thePVs.product());
0083 math::XYZPoint V(0, 0, -1000.);
0084
0085 Vertex thePV;
0086 if (!vertCollection.empty())
0087 thePV = *(vertCollection.begin());
0088 else {
0089 Vertex::Error SimPVError;
0090 SimPVError(0, 0) = 15. * 15.;
0091 SimPVError(1, 1) = 15. * 15.;
0092 SimPVError(2, 2) = 15. * 15.;
0093 Vertex::Point SimPVPoint(0., 0., -1000.);
0094 thePV = Vertex(SimPVPoint, SimPVError, 1, 1, 1);
0095 }
0096
0097 auto resultExt = std::make_unique<PFTauTagInfoCollection>();
0098 for (JetTracksAssociationCollection::const_iterator iAssoc = thePFJetTracksAssociatorCollection->begin();
0099 iAssoc != thePFJetTracksAssociatorCollection->end();
0100 iAssoc++) {
0101 PFTauTagInfo myPFTauTagInfo = PFRecoTauTagInfoAlgo_->buildPFTauTagInfo(
0102 JetBaseRef((*iAssoc).first), thePFCandsInTheEvent, (*iAssoc).second, thePV);
0103 resultExt->push_back(myPFTauTagInfo);
0104 }
0105
0106 iEvent.put(std::move(resultExt));
0107 }
0108
0109 void PFRecoTauTagInfoProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0110 {
0111
0112 edm::ParameterSetDescription desc;
0113 desc.add<int>("tkminTrackerHitsn", 3);
0114 desc.add<double>("tkminPt", 0.5);
0115 desc.add<double>("tkmaxChi2", 100.0);
0116 desc.add<double>("ChargedHadrCand_AssociationCone", 1.0);
0117 desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
0118 desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
0119 desc.add<double>("tkPVmaxDZ", 0.2);
0120 desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
0121 desc.add<int>("tkminPixelHitsn", 0);
0122 desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
0123 desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
0124 desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
0125 desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
0126 desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
0127 desc.add<bool>("UsePVconstraint", true);
0128 desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
0129 desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("insideOutJetTracksAssociatorAtVertex"));
0130 desc.add<double>("smearedPVsigmaY", 0.0015);
0131 desc.add<double>("smearedPVsigmaX", 0.0015);
0132 desc.add<double>("smearedPVsigmaZ", 0.005);
0133 desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
0134 desc.add<double>("tkmaxipt", 0.03);
0135 descriptions.add("pfRecoTauTagInfoProducerInsideOut", desc);
0136 }
0137 {
0138
0139 edm::ParameterSetDescription desc;
0140 desc.add<int>("tkminTrackerHitsn", 3);
0141 desc.add<double>("tkminPt", 0.5);
0142 desc.add<double>("tkmaxChi2", 100.0);
0143 desc.add<double>("ChargedHadrCand_AssociationCone", 0.8);
0144 desc.add<int>("ChargedHadrCand_tkminTrackerHitsn", 3);
0145 desc.add<double>("ChargedHadrCand_tkmaxChi2", 100.0);
0146 desc.add<double>("tkPVmaxDZ", 0.2);
0147 desc.add<double>("GammaCand_EcalclusMinEt", 1.0);
0148 desc.add<int>("tkminPixelHitsn", 0);
0149 desc.add<edm::InputTag>("PVProducer", edm::InputTag("offlinePrimaryVertices"));
0150 desc.add<edm::InputTag>("PFCandidateProducer", edm::InputTag("particleFlow"));
0151 desc.add<double>("ChargedHadrCand_tkminPt", 0.5);
0152 desc.add<double>("ChargedHadrCand_tkmaxipt", 0.03);
0153 desc.add<int>("ChargedHadrCand_tkminPixelHitsn", 0);
0154 desc.add<bool>("UsePVconstraint", true);
0155 desc.add<double>("NeutrHadrCand_HcalclusMinEt", 1.0);
0156 desc.add<edm::InputTag>("PFJetTracksAssociatorProducer", edm::InputTag("ak4PFJetTracksAssociatorAtVertex"));
0157 desc.add<double>("smearedPVsigmaY", 0.0015);
0158 desc.add<double>("smearedPVsigmaX", 0.0015);
0159 desc.add<double>("smearedPVsigmaZ", 0.005);
0160 desc.add<double>("ChargedHadrCand_tkPVmaxDZ", 0.2);
0161 desc.add<double>("tkmaxipt", 0.03);
0162 descriptions.add("pfRecoTauTagInfoProducer", desc);
0163 }
0164 }
0165
0166 DEFINE_FWK_MODULE(PFRecoTauTagInfoProducer);