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