init_guid

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#include <climits>

#include "boost/serialization/export.hpp"

#include "CondFormats/HcalObjects/interface/OOTPileupCorrData.h"

OOTPileupCorrData::OOTPileupCorrData(const std::vector<OOTPileupCorrDataFcn>& corrs,
                                     const std::vector<uint32_t>& iEtaLimits,
                                     const double chargeLimit,
                                     const int requireFirstTS,
                                     const int requireNTS,
                                     const bool readjustTiming)
    : corrs_(corrs),
      iEtaLimits_(iEtaLimits),
      chargeLimit_(chargeLimit),
      requireFirstTS_(requireFirstTS),
      requireNTS_(requireNTS),
      readjustTiming_(readjustTiming) {
  if (!validate())
    throw cms::Exception("Invalid OOTPileupCorrData constructor arguments");
}

bool OOTPileupCorrData::validate() const {
  const std::size_t nLimits(iEtaLimits_.size());
  if (!nLimits)
    return false;
  if (nLimits >= static_cast<std::size_t>(UINT_MAX))
    return false;
  for (std::size_t i = 0; i < nLimits - 1; ++i)
    if (!(iEtaLimits_[i] < iEtaLimits_[i + 1]))
      return false;
  if (corrs_.size() != nLimits + 1)
    return false;
  return true;
}

void OOTPileupCorrData::apply(const HcalDetId& id,
                              const double* inputCharge,
                              const unsigned lenInputCharge,
                              const BunchXParameter* /* bcParams */,
                              const unsigned /* lenBcParams */,
                              const unsigned firstTimeSlice,
                              const unsigned nTimeSlices,
                              double* correctedCharge,
                              const unsigned lenCorrectedCharge,
                              bool* pulseShapeCorrApplied,
                              bool* leakCorrApplied,
                              bool* readjustTiming) const {
  // Check the arguments
  if (inputCharge == nullptr || correctedCharge == nullptr || lenCorrectedCharge < lenInputCharge ||
      pulseShapeCorrApplied == nullptr || leakCorrApplied == nullptr || readjustTiming == nullptr)
    throw cms::Exception("Invalid arguments in OOTPileupCorrData::apply");

  for (unsigned i = 0; i < lenInputCharge; ++i)
    correctedCharge[i] = inputCharge[i];

  // Check whether the charge corrections should actually be applied
  const bool fixCharge = (requireFirstTS_ < 0 || requireFirstTS_ == static_cast<int32_t>(firstTimeSlice)) &&
                         (requireNTS_ < 0 || requireNTS_ == static_cast<int32_t>(nTimeSlices));
  if (fixCharge)
    apply(id, correctedCharge, firstTimeSlice);

  *pulseShapeCorrApplied = false;
  *leakCorrApplied = fixCharge;
  *readjustTiming = readjustTiming_;
}

BOOST_CLASS_EXPORT_IMPLEMENT(OOTPileupCorrData)