CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQMOffline/Trigger/src/EgHLTEleHLTFilterMon.cc

Go to the documentation of this file.
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   //---Morse-------
00025   //eleMonElems_.push_back(new MonElemContainer<OffEle>("_cut"," cut, debug hists ",new EgHLTDQMVarCut<OffEle>(~0x0,&OffEle::cutCode)));
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     /*  MonElemFuncs::initStdEffHists(eleEffHists_[i]->cutMonElems(),
00059         filterName_+"_gsfEle_effVsPhi"+eleEffHists_[i]->name(),bins.phi,&OffEle::phi,masks); */
00060     // MonElemFuncs::initStdEffHists(eleEffHists_[i]->cutMonElems(),
00061     //                    filterName_+"_gsfEle_effVsCharge"+eleEffHists_[i]->name(),bins.charge,&OffEle::chargeF);
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){ //ele passes
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 { //ele didnt pass trigger
00101       for(size_t monElemNr=0;monElemNr<eleFailMonElems_.size();monElemNr++) eleFailMonElems_[monElemNr]->fill(ele,evt,weight);
00102     }
00103   }//end loop over electrons
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       }//end inner ele loop
00122     }//end outer ele loop
00123   }//end check if filter is present
00124 }
00125 
00126 
00127 
00128