CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
OOTPileupCorrData.cc
Go to the documentation of this file.
1 #include <climits>
2 
3 #include "boost/serialization/export.hpp"
4 
6 
8  const std::vector<OOTPileupCorrDataFcn>& corrs,
9  const std::vector<uint32_t>& iEtaLimits,
10  const double chargeLimit,
11  const int requireFirstTS,
12  const int requireNTS,
13  const bool readjustTiming)
14  : corrs_(corrs),
15  iEtaLimits_(iEtaLimits),
16  chargeLimit_(chargeLimit),
17  requireFirstTS_(requireFirstTS),
18  requireNTS_(requireNTS),
19  readjustTiming_(readjustTiming)
20 {
21  if (!validate()) throw cms::Exception(
22  "Invalid OOTPileupCorrData constructor arguments");
23 }
24 
26 {
27  const std::size_t nLimits(iEtaLimits_.size());
28  if (!nLimits)
29  return false;
30  if (nLimits >= static_cast<std::size_t>(UINT_MAX))
31  return false;
32  for (std::size_t i=0; i<nLimits-1; ++i)
33  if (!(iEtaLimits_[i] < iEtaLimits_[i+1]))
34  return false;
35  if (corrs_.size() != nLimits + 1)
36  return false;
37  return true;
38 }
39 
41  const double* inputCharge, const unsigned lenInputCharge,
42  const BunchXParameter* /* bcParams */, const unsigned /* lenBcParams */,
43  const unsigned firstTimeSlice, const unsigned nTimeSlices,
44  double* correctedCharge, const unsigned lenCorrectedCharge,
45  bool* pulseShapeCorrApplied, bool* leakCorrApplied,
46  bool* readjustTiming) const
47 {
48  // Check the arguments
49  if (inputCharge == 0 || correctedCharge == 0 ||
50  lenCorrectedCharge < lenInputCharge ||
51  pulseShapeCorrApplied == 0 || leakCorrApplied == 0 ||
52  readjustTiming == 0)
53  throw cms::Exception(
54  "Invalid arguments in OOTPileupCorrData::apply");
55 
56  for (unsigned i=0; i<lenInputCharge; ++i)
57  correctedCharge[i] = inputCharge[i];
58 
59  // Check whether the charge corrections should actually be applied
60  const bool fixCharge = (requireFirstTS_ < 0 ||
61  requireFirstTS_ == static_cast<int32_t>(firstTimeSlice)) &&
62  (requireNTS_ < 0 ||
63  requireNTS_ == static_cast<int32_t>(nTimeSlices));
64  if (fixCharge)
65  apply(id, correctedCharge, firstTimeSlice);
66 
67  *pulseShapeCorrApplied = false;
68  *leakCorrApplied = fixCharge;
69  *readjustTiming = readjustTiming_;
70 }
71 
72 BOOST_CLASS_EXPORT_IMPLEMENT(OOTPileupCorrData)
int i
Definition: DBlmapReader.cc:9
std::vector< uint32_t > iEtaLimits_
bool validate() const
std::vector< OOTPileupCorrDataFcn > corrs_
void apply(const HcalDetId &id, const double *inputCharge, unsigned lenInputCharge, const BunchXParameter *bcParams, unsigned lenBcParams, unsigned firstTimeSlice, unsigned nTimeSlices, double *correctedCharge, unsigned lenCorrectedCharge, bool *pulseShapeCorrApplied, bool *leakCorrApplied, bool *readjustTiming) const