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