CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/EventFilter/CastorRawToDigi/src/CastorDataFrameFilter.cc

Go to the documentation of this file.
00001 #include "EventFilter/CastorRawToDigi/interface/CastorDataFrameFilter.h"
00002 
00003 namespace CastorDataFrameFilter_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 CastorDataFrameFilter::CastorDataFrameFilter(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 CastorDigiCollection CastorDataFrameFilter::filter(const CastorDigiCollection& incol, HcalUnpackerReport& r) {
00038   CastorDigiCollection output;
00039   for (CastorDigiCollection::const_iterator i=incol.begin(); i!=incol.end(); i++) {
00040     if (!CastorDataFrameFilter_impl::check(*i,requireCapid_,requireDVER_)) 
00041       r.countBadQualityDigi();
00042     else if (!energyFilter_ || minimumAmplitude_<CastorDataFrameFilter_impl::energySum(*i,firstSample_,lastSample_))
00043       output.push_back(*i);
00044   }
00045   return output;
00046 }
00047 
00048 bool CastorDataFrameFilter::active() const {
00049   return requireCapid_|requireDVER_|energyFilter_;
00050 }
00051