Go to the documentation of this file.00001 #include "HLTriggerOffline/Tau/interface/HLTTauRefCombiner.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003
00004
00005
00006 using namespace edm;
00007 using namespace std;
00008
00009 HLTTauRefCombiner::HLTTauRefCombiner(const edm::ParameterSet& iConfig)
00010 {
00011 inputColl_ = iConfig.getParameter< std::vector<InputTag> >("InputCollections");
00012 matchDeltaR_ = iConfig.getParameter<double>("MatchDeltaR");
00013 outName_ = iConfig.getParameter<string>("OutputCollection");
00014
00015 produces<LorentzVectorCollection> ( outName_);
00016 }
00017
00018 HLTTauRefCombiner::~HLTTauRefCombiner(){ }
00019
00020 void HLTTauRefCombiner::produce(edm::Event& iEvent, const edm::EventSetup& iES)
00021 {
00022 auto_ptr<LorentzVectorCollection> out_product(new LorentzVectorCollection);
00023
00024
00025 std::vector< Handle<LorentzVectorCollection> > handles;
00026
00027 bool allCollectionsExist = true;
00028
00029 for(size_t i = 0;i<inputColl_.size();++i)
00030 {
00031 edm::Handle<LorentzVectorCollection> tmp;
00032 if(iEvent.getByLabel(inputColl_[i],tmp))
00033 {
00034 handles.push_back(tmp);
00035 }
00036 else
00037 {
00038 allCollectionsExist = false;
00039 }
00040
00041 }
00042
00043
00044 if(allCollectionsExist)
00045 {
00046
00047 for(size_t i = 0; i < (handles[0])->size();++i)
00048 {
00049 bool MatchedObj = true;
00050
00051
00052 const LorentzVector lvRef = (*(handles[0]))[i];
00053
00054
00055 for(size_t j = 1; j < handles.size();++j)
00056 {
00057 if(!match(lvRef,*(handles[j])))
00058 MatchedObj = false;
00059
00060 }
00061
00062
00063 if(MatchedObj)
00064 {
00065 out_product->push_back(lvRef);
00066 }
00067
00068
00069 }
00070
00071
00072 iEvent.put(out_product,outName_);
00073
00074 }
00075
00076
00077
00078
00079 }
00080
00081
00082
00083 bool
00084 HLTTauRefCombiner::match(const LorentzVector& lv,const LorentzVectorCollection& lvcol)
00085 {
00086 bool matched=false;
00087
00088 if(lvcol.size()>0)
00089 for(LorentzVectorCollection::const_iterator it = lvcol.begin();it!=lvcol.end();++it)
00090 {
00091 double delta = ROOT::Math::VectorUtil::DeltaR(lv,*it);
00092 if(delta<matchDeltaR_)
00093 {
00094 matched=true;
00095
00096 }
00097 }
00098
00099
00100
00101 return matched;
00102 }