CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/EventFilter/HcalRawToDigi/src/HcalDataFrameFilter.cc

Go to the documentation of this file.
00001 #include "EventFilter/HcalRawToDigi/interface/HcalDataFrameFilter.h"
00002 
00003 namespace HcalDataFrameFilter_impl {
00004 
00005   template <class DataFrame> 
00006   bool check(const DataFrame& df, bool capcheck, bool dvercheck) {
00007     if (capcheck || dvercheck) {
00008       int lastcapid=0, capid=0;
00009       for (int i=0; i<df.size(); i++) {
00010         capid=df[i].capid();
00011         if (capcheck && i!=0 && ((lastcapid+1)%4)!=capid) 
00012           return false;
00013         if (dvercheck && ( df[i].er() || !df[i].dv() ))
00014           return false;
00015         lastcapid=capid;      
00016       }
00017     }
00018     return true;
00019   }
00020 
00021   template <class DataFrame> 
00022   double energySum(const DataFrame& df, int fs, int ls) {
00023     double es=0;
00024     for (int i=fs; i<=ls && i<=df.size(); i++) 
00025       es+=df[i].nominal_fC();
00026     return es;
00027   }
00028 
00029 }
00030 
00031 
00032 HcalDataFrameFilter::HcalDataFrameFilter(bool requireCapid, bool requireDVER, bool energyFilter, int firstSample, int lastSample, double minAmpl) :
00033   requireCapid_(requireCapid), requireDVER_(requireDVER), energyFilter_(energyFilter),
00034   firstSample_(firstSample), lastSample_(lastSample), minimumAmplitude_(minAmpl) {
00035 }
00036 
00037 HBHEDigiCollection HcalDataFrameFilter::filter(const HBHEDigiCollection& incol, HcalUnpackerReport& r) {
00038   HBHEDigiCollection output;
00039   for (HBHEDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00040     if (!HcalDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_)) 
00041       r.countBadQualityDigi(i->id());
00042     else if (!energyFilter_ || minimumAmplitude_<HcalDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00043       output.push_back(*i);
00044   }
00045   return output;
00046 }
00047 
00048 
00049 HODigiCollection HcalDataFrameFilter::filter(const HODigiCollection& incol, HcalUnpackerReport& r) {
00050   HODigiCollection output;
00051   for (HODigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00052     if (!HcalDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_))
00053       r.countBadQualityDigi(i->id());
00054     else if (!energyFilter_ || minimumAmplitude_<HcalDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00055       output.push_back(*i);
00056     
00057   }
00058   return output;
00059 }
00060 
00061 HcalCalibDigiCollection HcalDataFrameFilter::filter(const HcalCalibDigiCollection& incol, HcalUnpackerReport& r) {
00062   HcalCalibDigiCollection output;
00063   for (HcalCalibDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00064     if (!HcalDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_))
00065       r.countBadQualityDigi(i->id());
00066     else if (!energyFilter_ || minimumAmplitude_<HcalDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00067       output.push_back(*i);
00068     
00069   }
00070   return output;
00071 }
00072 
00073 HFDigiCollection HcalDataFrameFilter::filter(const HFDigiCollection& incol, HcalUnpackerReport& r) {
00074   HFDigiCollection output;
00075   for (HFDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00076     if (!HcalDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_))
00077       r.countBadQualityDigi(i->id());
00078     else if (!energyFilter_ || minimumAmplitude_<HcalDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00079       output.push_back(*i);    
00080   }
00081   return output;
00082 }
00083 
00084 ZDCDigiCollection HcalDataFrameFilter::filter(const ZDCDigiCollection& incol, HcalUnpackerReport& r) {
00085   ZDCDigiCollection output;
00086   for (ZDCDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00087     if (!HcalDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_))
00088       r.countBadQualityDigi(i->id());
00089     else if (!energyFilter_ || minimumAmplitude_<HcalDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00090       output.push_back(*i);    
00091   }
00092   return output;
00093 }
00094 
00095 
00096 bool HcalDataFrameFilter::active() const {
00097   return requireCapid_|requireDVER_|energyFilter_;
00098 }
00099