Go to the documentation of this file.00001 #include "HLTrigger/JetMET/interface/HLTJetCollectionsForElePlusJets.h"
00002
00003 #include "FWCore/Framework/interface/MakerMacros.h"
00004
00005 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h"
00006 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00007 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00008
00009 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h"
00010
00011 #include "DataFormats/Common/interface/Handle.h"
00012
00013 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00014
00015 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00016 #include "TVector3.h"
00017
00018 typedef std::vector<edm::RefVector<std::vector<reco::CaloJet>,reco::CaloJet,edm::refhelper::FindUsingAdvance<std::vector<reco::CaloJet>,reco::CaloJet> > > JetCollectionVector;
00019
00020 HLTJetCollectionsForElePlusJets::HLTJetCollectionsForElePlusJets(const edm::ParameterSet& iConfig):
00021 hltElectronTag(iConfig.getParameter< edm::InputTag > ("HltElectronTag")),
00022 sourceJetTag(iConfig.getParameter< edm::InputTag > ("SourceJetTag")),
00023
00024
00025
00026 minDeltaR_(iConfig.getParameter< double > ("minDeltaR"))
00027
00028
00029
00030 {
00031 produces<JetCollectionVector> ();
00032 }
00033
00034
00035 HLTJetCollectionsForElePlusJets::~HLTJetCollectionsForElePlusJets()
00036 {
00037
00038
00039
00040 }
00041
00042 void HLTJetCollectionsForElePlusJets::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00043 edm::ParameterSetDescription desc;
00044 desc.add<edm::InputTag> ("HltElectronTag", edm::InputTag("triggerFilterObjectWithRefs"));
00045 desc.add<edm::InputTag> ("SourceJetTag", edm::InputTag("caloJetCollection"));
00046
00047
00048
00049 desc.add<double> ("minDeltaR", 0.5);
00050
00051
00052
00053 descriptions.add("hltJetCollectionsForElePlusJets", desc);
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063 void
00064 HLTJetCollectionsForElePlusJets::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
00065 {
00066 using namespace edm;
00067
00068 edm::Handle<trigger::TriggerFilterObjectWithRefs> PrevFilterOutput;
00069 iEvent.getByLabel(hltElectronTag,PrevFilterOutput);
00070
00071
00072 std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > clusCands;
00073 PrevFilterOutput->getObjects(trigger::TriggerCluster,clusCands);
00074
00075 std::vector<edm::Ref<reco::ElectronCollection> > eleCands;
00076 PrevFilterOutput->getObjects(trigger::TriggerElectron,eleCands);
00077
00078
00079 std::vector<TVector3> ElePs;
00080
00081 if(!clusCands.empty()){
00082 for(size_t candNr=0;candNr<clusCands.size();candNr++){
00083 TVector3 positionVector(
00084 clusCands[candNr]->superCluster()->position().x(),
00085 clusCands[candNr]->superCluster()->position().y(),
00086 clusCands[candNr]->superCluster()->position().z());
00087 ElePs.push_back(positionVector);
00088 }
00089 }else if(!eleCands.empty()){
00090 for(size_t candNr=0;candNr<eleCands.size();candNr++){
00091 TVector3 positionVector(
00092 eleCands[candNr]->superCluster()->position().x(),
00093 eleCands[candNr]->superCluster()->position().y(),
00094 eleCands[candNr]->superCluster()->position().z());
00095 ElePs.push_back(positionVector);
00096 }
00097 }
00098
00099 edm::Handle<reco::CaloJetCollection> theCaloJetCollectionHandle;
00100 iEvent.getByLabel(sourceJetTag, theCaloJetCollectionHandle);
00101
00102
00103 const reco::CaloJetCollection & theCaloJetCollection = *theCaloJetCollectionHandle;
00104
00105
00106
00107 std::auto_ptr < JetCollectionVector > allSelections(new JetCollectionVector());
00108
00109
00110
00111 for (unsigned int i = 0; i < ElePs.size(); i++) {
00112
00113
00114
00115 reco::CaloJetRefVector refVector;
00116
00117 for (unsigned int j = 0; j < theCaloJetCollection.size(); j++) {
00118 TVector3 JetP(theCaloJetCollection[j].px(), theCaloJetCollection[j].py(), theCaloJetCollection[j].pz());
00119 double DR = ElePs[i].DeltaR(JetP);
00120
00121 if (DR > minDeltaR_)
00122 refVector.push_back(reco::CaloJetRef(theCaloJetCollectionHandle, j));
00123 }
00124 allSelections->push_back(refVector);
00125 }
00126
00127
00128 iEvent.put(allSelections);
00129
00130 return;
00131
00132 }
00133
00134
00135 void HLTJetCollectionsForElePlusJets::beginJob() {
00136 }
00137
00138
00139 void HLTJetCollectionsForElePlusJets::endJob() {
00140 }
00141
00142
00143 DEFINE_FWK_MODULE(HLTJetCollectionsForElePlusJets);