00001 #include "DQMOffline/Trigger/interface/EgHLTEleHLTFilterMon.h"
00002 #include "DQMOffline/Trigger/interface/EgHLTEgCutCodes.h"
00003 #include "DQMOffline/Trigger/interface/EgHLTDQMCut.h"
00004 #include "DQMOffline/Trigger/interface/EgHLTMonElemFuncs.h"
00005 #include "DQMOffline/Trigger/interface/EgHLTBinData.h"
00006 #include "DQMOffline/Trigger/interface/EgHLTCutMasks.h"
00007
00008 #include "DataFormats/HLTReco/interface/TriggerObject.h"
00009
00010 #include "DataFormats/Math/interface/deltaR.h"
00011
00012 using namespace egHLT;
00013
00014 EleHLTFilterMon::EleHLTFilterMon(const std::string& filterName,TrigCodes::TrigBitSet filterBit,const BinData& bins,const CutMasks& masks):
00015 filterName_(filterName),
00016 filterBit_(filterBit)
00017 {
00018 bool doChargeSep = false;
00019 bool monHLTFailedEle = false;
00020 bool doFakeRate=false;
00021 bool doTagAndProbe=false;
00022
00023 eleMonElems_.push_back(new MonElemContainer<OffEle>());
00024
00025
00026
00027 if(doChargeSep){
00028 eleMonElems_.push_back(new MonElemContainer<OffEle>("_posCharge"," q=+1 ",new ChargeCut<OffEle>(1)));
00029 eleMonElems_.push_back(new MonElemContainer<OffEle>("_negCharge"," q=-1 ",new ChargeCut<OffEle>(-1)));
00030 }
00031 for(size_t i=0;i<eleMonElems_.size();i++){
00032 MonElemFuncs::initStdEleHists(eleMonElems_[i]->monElems(),filterName_+"_gsfEle_passFilter"+eleMonElems_[i]->name(),bins);
00033 }
00034
00035 if(monHLTFailedEle){
00036 eleFailMonElems_.push_back(new MonElemContainer<OffEle>());
00037 if(doChargeSep) {
00038 eleFailMonElems_.push_back(new MonElemContainer<OffEle>("_posCharge"," q=+1 ",new ChargeCut<OffEle>(1)));
00039 eleFailMonElems_.push_back(new MonElemContainer<OffEle>("_negCharge"," q=-1 ",new ChargeCut<OffEle>(-1)));
00040 }
00041 }
00042 for(size_t i=0;i<eleFailMonElems_.size();i++){
00043 MonElemFuncs::initStdEleHists(eleFailMonElems_[i]->monElems(),filterName_+"_gsfEle_failFilter"+eleMonElems_[i]->name(),bins);
00044 }
00045
00046
00047 int effProbeCutCode = masks.probeEle;
00048 int effTagCutCode = masks.stdEle;
00049 int fakeRateProbeCut = masks.fakeEle;
00050 eleEffHists_.push_back(new MonElemContainer<OffEle>());
00051 if(doTagAndProbe) eleEffHists_.push_back(new MonElemContainer<OffEle>("_tagProbe"," Tag and Probe ",new EgTagProbeCut<OffEle>(effProbeCutCode,&OffEle::cutCode,effTagCutCode,&OffEle::cutCode)));
00052 if(doFakeRate) eleEffHists_.push_back(new MonElemContainer<OffEle>("_fakeRate"," Fake Rate ",new EgJetTagProbeCut<OffEle>(fakeRateProbeCut,&OffEle::looseCutCode)));
00053 for(size_t i=0;i<eleEffHists_.size();i++){
00054 MonElemFuncs::initStdEffHists(eleEffHists_[i]->cutMonElems(),
00055 filterName_+"_gsfEle_effVsEt"+eleEffHists_[i]->name(),bins.et,&OffEle::et,masks);
00056 MonElemFuncs::initStdEffHists(eleEffHists_[i]->cutMonElems(),
00057 filterName_+"_gsfEle_effVsEta"+eleEffHists_[i]->name(),bins.eta,&OffEle::eta,masks);
00058
00059
00060
00061
00062 }
00063
00064 typedef MonElemManager<ParticlePair<OffEle>,float > DiEleMon;
00065 diEleMassBothME_ = new DiEleMon(filterName_+"_diEle_bothPassFilter_mass",
00066 filterName_+"_diEle_bothPassFilter Mass;M_{ee} (GeV/c^{2})",
00067 bins.mass.nr,bins.mass.min,bins.mass.max,&ParticlePair<OffEle>::mass);
00068 diEleMassOnlyOneME_ = new DiEleMon(filterName_+"_diEle_onlyOnePass Filter_mass",
00069 filterName_+"_diEle_onlyOnePassFilter Mass;M_{ee} (GeV/c^{2})",
00070 bins.mass.nr,bins.mass.min,bins.mass.max,&ParticlePair<OffEle>::mass);
00071
00072 diEleMassBothHighME_ = new DiEleMon(filterName_+"_diEle_bothPassFilter_massHigh",
00073 filterName_+"_diEle_bothPassFilter Mass;M_{ee} (GeV/c^{2})",
00074 bins.massHigh.nr,bins.massHigh.min,bins.massHigh.max,&ParticlePair<OffEle>::mass);
00075 diEleMassOnlyOneHighME_ = new DiEleMon(filterName_+"_diEle_onlyOnePassFilter_massHigh",
00076 filterName_+"_diEle_onlyOnePassFilter Mass;M_{ee} (GeV/c^{2})",
00077 bins.massHigh.nr,bins.massHigh.min,bins.massHigh.max,&ParticlePair<OffEle>::mass);
00078
00079 }
00080
00081 EleHLTFilterMon::~EleHLTFilterMon()
00082 {
00083 for(size_t i=0;i<eleMonElems_.size();i++) delete eleMonElems_[i];
00084 for(size_t i=0;i<eleFailMonElems_.size();i++) delete eleFailMonElems_[i];
00085 for(size_t i=0;i<eleEffHists_.size();i++) delete eleEffHists_[i];
00086 delete diEleMassBothME_;
00087 delete diEleMassOnlyOneME_;
00088 delete diEleMassBothHighME_;
00089 delete diEleMassOnlyOneHighME_;
00090 }
00091
00092
00093 void EleHLTFilterMon::fill(const OffEvt& evt,float weight)
00094 {
00095 for(size_t eleNr=0;eleNr<evt.eles().size();eleNr++){
00096 const OffEle& ele = evt.eles()[eleNr];
00097 if((ele.trigBits()&filterBit_)!=0){
00098 for(size_t monElemNr=0;monElemNr<eleMonElems_.size();monElemNr++) eleMonElems_[monElemNr]->fill(ele,evt,weight);
00099 for(size_t monElemNr=0;monElemNr<eleEffHists_.size();monElemNr++) eleEffHists_[monElemNr]->fill(ele,evt,weight);
00100 }else {
00101 for(size_t monElemNr=0;monElemNr<eleFailMonElems_.size();monElemNr++) eleFailMonElems_[monElemNr]->fill(ele,evt,weight);
00102 }
00103 }
00104
00105 if((evt.evtTrigBits()&filterBit_)!=0){
00106 for(size_t ele1Nr=0;ele1Nr<evt.eles().size();ele1Nr++){
00107 for(size_t ele2Nr=ele1Nr+1;ele2Nr<evt.eles().size();ele2Nr++){
00108 const OffEle& ele1 = evt.eles()[ele1Nr];
00109 const OffEle& ele2 = evt.eles()[ele2Nr];
00110
00111 if((ele1.trigBits()&ele2.trigBits()&filterBit_)==filterBit_) {
00112 diEleMassBothME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
00113 diEleMassBothHighME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
00114 }else if((ele1.trigBits()&filterBit_)==filterBit_ ||
00115 (ele2.trigBits()&filterBit_)==filterBit_){
00116 diEleMassOnlyOneME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
00117 diEleMassOnlyOneHighME_->fill(ParticlePair<OffEle>(ele1,ele2),weight);
00118 }
00119
00120
00121 }
00122 }
00123 }
00124 }
00125
00126
00127
00128