00001 #include "RecoTauTag/RecoTau/interface/PFRecoTauProducer.h"
00002
00003 PFRecoTauProducer::PFRecoTauProducer(const ParameterSet& iConfig){
00004 PFTauTagInfoProducer_ = iConfig.getParameter<InputTag>("PFTauTagInfoProducer");
00005 ElectronPreIDProducer_ = iConfig.getParameter<InputTag>("ElectronPreIDProducer");
00006 PVProducer_ = iConfig.getParameter<string>("PVProducer");
00007 smearedPVsigmaX_ = iConfig.getParameter<double>("smearedPVsigmaX");
00008 smearedPVsigmaY_ = iConfig.getParameter<double>("smearedPVsigmaY");
00009 smearedPVsigmaZ_ = iConfig.getParameter<double>("smearedPVsigmaZ");
00010 JetMinPt_ = iConfig.getParameter<double>("JetPtMin");
00011 PFRecoTauAlgo_=new PFRecoTauAlgorithm(iConfig);
00012 produces<PFTauCollection>();
00013 }
00014 PFRecoTauProducer::~PFRecoTauProducer(){
00015 delete PFRecoTauAlgo_;
00016 }
00017
00018 void PFRecoTauProducer::produce(Event& iEvent,const EventSetup& iSetup){
00019 auto_ptr<PFTauCollection> resultPFTau(new PFTauCollection);
00020
00021 ESHandle<TransientTrackBuilder> myTransientTrackBuilder;
00022 iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder",myTransientTrackBuilder);
00023 PFRecoTauAlgo_->setTransientTrackBuilder(myTransientTrackBuilder.product());
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 Handle<VertexCollection> thePVs;
00037 iEvent.getByLabel(PVProducer_,thePVs);
00038 const VertexCollection vertCollection=*(thePVs.product());
00039 Vertex thePV;
00040 if(vertCollection.size()) thePV=*(vertCollection.begin());
00041 else{
00042 Vertex::Error SimPVError;
00043 SimPVError(0,0)=smearedPVsigmaX_*smearedPVsigmaX_;
00044 SimPVError(1,1)=smearedPVsigmaY_*smearedPVsigmaY_;
00045 SimPVError(2,2)=smearedPVsigmaZ_*smearedPVsigmaZ_;
00046 Vertex::Point SimPVPoint(RandGauss::shoot(0.,smearedPVsigmaX_),
00047 RandGauss::shoot(0.,smearedPVsigmaY_),
00048 RandGauss::shoot(0.,smearedPVsigmaZ_));
00049 thePV=Vertex(SimPVPoint,SimPVError,1,1,1);
00050 }
00051
00052 Handle<PFTauTagInfoCollection> thePFTauTagInfoCollection;
00053 iEvent.getByLabel(PFTauTagInfoProducer_,thePFTauTagInfoCollection);
00054 int iinfo=0;
00055 for(PFTauTagInfoCollection::const_iterator i_info=thePFTauTagInfoCollection->begin();i_info!=thePFTauTagInfoCollection->end();i_info++) {
00056 if((*i_info).pfjetRef()->pt()>JetMinPt_){
00057
00058 PFTau myPFTau=PFRecoTauAlgo_->buildPFTau(Ref<PFTauTagInfoCollection>(thePFTauTagInfoCollection,iinfo),thePV);
00059 resultPFTau->push_back(myPFTau);
00060 }
00061 ++iinfo;
00062 }
00063 iEvent.put(resultPFTau);
00064 }