Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#include "CalibFormats/CastorObjects/interface/CastorNominalCoder.h"

void CastorNominalCoder::adc2fC(const CastorDataFrame& df, CaloSamples& lf) const {
  lf = CaloSamples(df.id(), df.size());
  for (int i = 0; i < df.size(); i++)
    lf[i] = df[i].nominal_fC();
  lf.setPresamples(df.presamples());
}

namespace CastorNominalCoderTemplate {
  template <class Digi>
  void process(const CaloSamples& clf, Digi& df, int fCapIdOffset) {
    df = Digi(clf.id());
    df.setSize(clf.size());
    df.setPresamples(clf.presamples());
    for (int i = 0; i < clf.size(); i++) {
      int capId = (fCapIdOffset + i) % 4;
      for (int q = 1; q < 128; q++) {
        df.setSample(i, HcalQIESample(q, capId, 0, 0));
        if (df[i].nominal_fC() > clf[i]) {
          df.setSample(i, HcalQIESample(q - 1, capId, 0, 0));
          break;
        }
      }
    }
  }
}  // namespace CastorNominalCoderTemplate

void CastorNominalCoder::fC2adc(const CaloSamples& clf, CastorDataFrame& df, int fCapIdOffset) const {
  CastorNominalCoderTemplate::process(clf, df, fCapIdOffset);
}