![]() |
![]() |
00001 /* class CaloRecoTauTagInfoProducer 00002 * returns a CaloTauTagInfo collection starting from a JetTrackAssociations <a CaloJet,a list of Track's> collection, 00003 * created: Aug 28 2007, 00004 * revised: , 00005 * authors: Ludovic Houchu 00006 */ 00007 00008 #include "DataFormats/JetReco/interface/JetTracksAssociation.h" 00009 #include "DataFormats/TauReco/interface/CaloTauTagInfo.h" 00010 #include "DataFormats/VertexReco/interface/Vertex.h" 00011 #include "DataFormats/VertexReco/interface/VertexFwd.h" 00012 00013 #include "RecoTauTag/RecoTau/interface/CaloRecoTauTagInfoAlgorithm.h" 00014 00015 #include "FWCore/Framework/interface/EventSetup.h" 00016 #include "FWCore/Framework/interface/ESHandle.h" 00017 #include "FWCore/Framework/interface/Event.h" 00018 #include "FWCore/Framework/interface/MakerMacros.h" 00019 #include "FWCore/Framework/interface/Frameworkfwd.h" 00020 #include "FWCore/Framework/interface/EDProducer.h" 00021 00022 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00023 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00024 00025 #include "DataFormats/DetId/interface/DetIdCollection.h" 00026 00027 #include "CLHEP/Random/RandGauss.h" 00028 00029 #include "Math/GenVector/VectorUtil.h" 00030 00031 #include <memory> 00032 00033 using namespace reco; 00034 using namespace edm; 00035 using namespace std; 00036 00037 class CaloRecoTauTagInfoProducer : public EDProducer { 00038 public: 00039 explicit CaloRecoTauTagInfoProducer(const edm::ParameterSet&); 00040 ~CaloRecoTauTagInfoProducer(); 00041 virtual void produce(edm::Event&,const edm::EventSetup&); 00042 private: 00043 CaloRecoTauTagInfoAlgorithm* CaloRecoTauTagInfoAlgo_; 00044 edm::InputTag CaloJetTracksAssociatorProducer_; 00045 edm::InputTag PVProducer_; 00046 double smearedPVsigmaX_; 00047 double smearedPVsigmaY_; 00048 double smearedPVsigmaZ_; 00049 }; 00050 00051 00052 CaloRecoTauTagInfoProducer::CaloRecoTauTagInfoProducer(const edm::ParameterSet& iConfig){ 00053 CaloJetTracksAssociatorProducer_ = iConfig.getParameter<edm::InputTag>("CaloJetTracksAssociatorProducer"); 00054 PVProducer_ = iConfig.getParameter<edm::InputTag>("PVProducer"); 00055 smearedPVsigmaX_ = iConfig.getParameter<double>("smearedPVsigmaX"); 00056 smearedPVsigmaY_ = iConfig.getParameter<double>("smearedPVsigmaY"); 00057 smearedPVsigmaZ_ = iConfig.getParameter<double>("smearedPVsigmaZ"); 00058 CaloRecoTauTagInfoAlgo_=new CaloRecoTauTagInfoAlgorithm(iConfig); 00059 00060 produces<CaloTauTagInfoCollection>(); 00061 //produces<DetIdCollection>(); 00062 } 00063 CaloRecoTauTagInfoProducer::~CaloRecoTauTagInfoProducer(){ 00064 delete CaloRecoTauTagInfoAlgo_; 00065 } 00066 00067 void CaloRecoTauTagInfoProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetup){ 00068 edm::Handle<JetTracksAssociationCollection> theCaloJetTracksAssociatorCollection; 00069 iEvent.getByLabel(CaloJetTracksAssociatorProducer_,theCaloJetTracksAssociatorCollection); 00070 00071 // query a rec/sim PV 00072 edm::Handle<VertexCollection> thePVs; 00073 iEvent.getByLabel(PVProducer_,thePVs); 00074 const VertexCollection vertCollection=*(thePVs.product()); 00075 Vertex thePV; 00076 thePV=*(vertCollection.begin()); 00077 00078 // auto_ptr<DetIdCollection> selectedDetIds(new DetIdCollection); 00079 CaloTauTagInfoCollection* extCollection=new CaloTauTagInfoCollection(); 00080 00081 for(JetTracksAssociationCollection::const_iterator iAssoc=theCaloJetTracksAssociatorCollection->begin();iAssoc!=theCaloJetTracksAssociatorCollection->end();iAssoc++){ 00082 // CaloTauTagInfo myCaloTauTagInfo=CaloRecoTauTagInfoAlgo_->buildCaloTauTagInfo(iEvent,iSetup,(*iAssoc).first.castTo<CaloJetRef>(),(*iAssoc).second,thePV); 00083 CaloTauTagInfo myCaloTauTagInfo=CaloRecoTauTagInfoAlgo_->buildCaloTauTagInfo(iEvent,iSetup,(*iAssoc).first,(*iAssoc).second,thePV); 00084 extCollection->push_back(myCaloTauTagInfo); 00085 // std::vector<DetId> myDets = CaloRecoTauTagInfoAlgo_->getVectorDetId((*iAssoc).first.castTo<CaloJetRef>()); 00086 00087 //Saving the selectedDetIds 00088 // for(unsigned int i=0; i<myDets.size();i++) 00089 // selectedDetIds->push_back(myDets[i]); 00090 } 00091 00092 auto_ptr<CaloTauTagInfoCollection> resultExt(extCollection); 00093 iEvent.put(resultExt); 00094 // iEvent.put(selectedDetIds); 00095 } 00096 DEFINE_FWK_MODULE(CaloRecoTauTagInfoProducer );