Go to the documentation of this file.00001
00009 #include "HLTrigger/Egamma/interface/HLTEgammaCaloIsolFilterPairs.h"
00010
00011 #include "DataFormats/Common/interface/Handle.h"
00012
00013 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00014
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016
00017
00018
00019
00020 HLTEgammaCaloIsolFilterPairs::HLTEgammaCaloIsolFilterPairs(const edm::ParameterSet& iConfig)
00021 {
00022 candTag_ = iConfig.getParameter< edm::InputTag > ("candTag");
00023 isoTag_ = iConfig.getParameter< edm::InputTag > ("isoTag");
00024 nonIsoTag_ = iConfig.getParameter< edm::InputTag > ("nonIsoTag");
00025
00026 isolcut_EB1 = iConfig.getParameter<double> ("isolcutEB1");
00027 FracCut_EB1 = iConfig.getParameter<double> ("IsoOverEtCutEB1");
00028 IsoloEt2_EB1 = iConfig.getParameter<double> ("IsoOverEt2CutEB1");
00029 isolcut_EE1 = iConfig.getParameter<double> ("isolcutEE1");
00030 FracCut_EE1 = iConfig.getParameter<double> ("IsoOverEtCutEE1");
00031 IsoloEt2_EE1 = iConfig.getParameter<double> ("IsoOverEt2CutEE1");
00032
00033 isolcut_EB2 = iConfig.getParameter<double> ("isolcutEB2");
00034 FracCut_EB2 = iConfig.getParameter<double> ("IsoOverEtCutEB2");
00035 IsoloEt2_EB2 = iConfig.getParameter<double> ("IsoOverEt2CutEB2");
00036 isolcut_EE2 = iConfig.getParameter<double> ("isolcutEE2");
00037 FracCut_EE2 = iConfig.getParameter<double> ("IsoOverEtCutEE2");
00038 IsoloEt2_EE2 = iConfig.getParameter<double> ("IsoOverEt2CutEE2");
00039
00040
00041 AlsoNonIso_1 = iConfig.getParameter<bool> ("AlsoNonIso1");
00042 AlsoNonIso_2 = iConfig.getParameter<bool> ("AlsoNonIso2");
00043
00044
00045 produces<trigger::TriggerFilterObjectWithRefs>();
00046
00047 }
00048
00049 HLTEgammaCaloIsolFilterPairs::~HLTEgammaCaloIsolFilterPairs(){}
00050
00051
00052
00053 bool
00054 HLTEgammaCaloIsolFilterPairs::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00055 {
00056
00057
00058 using namespace trigger;
00059 std::auto_ptr<trigger::TriggerFilterObjectWithRefs> filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00060
00061 edm::Handle<trigger::TriggerFilterObjectWithRefs> PrevFilterOutput;
00062
00063 iEvent.getByLabel (candTag_,PrevFilterOutput);
00064
00065 std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands;
00066 PrevFilterOutput->getObjects(TriggerCluster, recoecalcands);
00067
00068
00069 edm::Handle<reco::RecoEcalCandidateIsolationMap> depMap;
00070 iEvent.getByLabel (isoTag_,depMap);
00071
00072
00073 edm::Handle<reco::RecoEcalCandidateIsolationMap> depNonIsoMap;
00074 if(AlsoNonIso_1 || AlsoNonIso_2) iEvent.getByLabel (nonIsoTag_,depNonIsoMap);
00075
00076
00077 int n = 0;
00078
00079
00080
00081
00082
00083
00084
00085 for (unsigned int i=0; i<recoecalcands.size(); i=i+2) {
00086
00087 edm::Ref<reco::RecoEcalCandidateCollection> r1 = recoecalcands[i];
00088 edm::Ref<reco::RecoEcalCandidateCollection> r2 = recoecalcands[i+1];
00089
00090
00091 if( PassCaloIsolation(r1,*depMap,*depNonIsoMap,1,AlsoNonIso_1) && PassCaloIsolation(r2,*depMap,*depNonIsoMap,2,AlsoNonIso_2) )
00092 {
00093 n++;
00094 filterproduct->addObject(TriggerCluster, r1);
00095 filterproduct->addObject(TriggerCluster, r2);
00096 }
00097 }
00098
00099
00100 bool accept(n>=1);
00101
00102
00103 iEvent.put(filterproduct);
00104
00105 return accept;
00106 }
00107
00108 bool HLTEgammaCaloIsolFilterPairs::PassCaloIsolation(edm::Ref<reco::RecoEcalCandidateCollection> ref,reco::RecoEcalCandidateIsolationMap IsoMap,reco::RecoEcalCandidateIsolationMap NonIsoMap, int which, bool ChekAlsoNonIso){
00109
00110
00111 reco::RecoEcalCandidateIsolationMap::const_iterator mapi = IsoMap.find( ref );
00112
00113 if(mapi==IsoMap.end()) {
00114 if(ChekAlsoNonIso) mapi = NonIsoMap.find( ref );
00115 }
00116
00117 float vali = mapi->val;
00118 float IsoOE= vali/ref->et();
00119 float IsoOE2= IsoOE/ref->et();
00120 double isolcut=0,FracCut=0,IsoloEt2=0;
00121 if( fabs(ref->eta()) < 1.479){
00122 if(which==1){
00123 isolcut = isolcut_EB1;
00124 FracCut = FracCut_EB1;
00125 IsoloEt2 = IsoloEt2_EB1;
00126 }
00127 else if(which==2){
00128 isolcut = isolcut_EB2;
00129 FracCut = FracCut_EB2;
00130 IsoloEt2 = IsoloEt2_EB2;
00131 }
00132 else {return false;}
00133 }
00134 else {
00135 if(which==1){
00136 isolcut = isolcut_EE1;
00137 FracCut = FracCut_EE1;
00138 IsoloEt2 = IsoloEt2_EE1;
00139 }
00140 else if(which==2){
00141 isolcut = isolcut_EE2;
00142 FracCut = FracCut_EE2;
00143 IsoloEt2 = IsoloEt2_EE2;
00144 }
00145 else {return false;}
00146 }
00147
00148 if ( vali < isolcut || IsoOE < FracCut || IsoOE2 < IsoloEt2 ) { return true;}
00149 return false;
00150 }