CMS 3D CMS Logo

Namespaces | Classes | Typedefs | Functions | Variables
mtd_digitizer Namespace Reference

Namespaces

 MTDHelpers
 

Classes

struct  MTDCellId
 
struct  MTDCellInfo
 
class  MTDDigitizer
 

Typedefs

typedef float MTDSimData_t
 
typedef std::array< MTDSimData_t, nSamplesMTDSimHitData
 
typedef std::unordered_map< MTDCellId, MTDCellInfoMTDSimHitDataAccumulator
 

Functions

void loadSimHitAccumulator (MTDSimHitDataAccumulator &simData, const PMTDSimAccumulator &simAccumulator, const float minCharge, const float maxCharge)
 
void saveSimHitAccumulator (PMTDSimAccumulator &simResult, const MTDSimHitDataAccumulator &simData, const float minCharge, const float maxCharge)
 

Variables

constexpr size_t nSamples = 15
 
constexpr float PREMIX_MAX_TOF = 26.0f
 

Typedef Documentation

Definition at line 13 of file MTDDigitizerTypes.h.

Definition at line 15 of file MTDDigitizerTypes.h.

Definition at line 38 of file MTDDigitizerTypes.h.

Function Documentation

void mtd_digitizer::loadSimHitAccumulator ( MTDSimHitDataAccumulator simData,
const PMTDSimAccumulator simAccumulator,
const float  minCharge,
const float  maxCharge 
)
inline

Definition at line 93 of file MTDDigitizer.h.

References newFWLiteAna::base, constexpr, dqm-mbProfile::log, PREMIX_MAX_TOF, PMTDSimAccumulator::Data::sampleOffset, logintpack::unpack16log(), and relativeConstraints::value.

Referenced by HGCDigitizer::accumulate(), and mtd_digitizer::MTDDigitizer< Traits >::accumulate().

96  {
97  const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2;
98  const float maxPackChargeLog = std::log(maxCharge);
100 
101  for (const auto& detIdIndexHitInfo : simAccumulator) {
102  auto foo = simData.emplace(
103  MTDCellId(detIdIndexHitInfo.detId(), detIdIndexHitInfo.row(), detIdIndexHitInfo.column()), MTDCellInfo());
104  auto simIt = foo.first;
105  auto& hit_info = simIt->second.hit_info;
106 
107  size_t iEn = detIdIndexHitInfo.energyIndex();
108  size_t iSample = detIdIndexHitInfo.sampleIndex();
109 
110  float value;
111  if (iEn == 1) {
112  value = static_cast<float>(detIdIndexHitInfo.data()) / base * PREMIX_MAX_TOF;
113  } else {
114  value = logintpack::unpack16log(detIdIndexHitInfo.data(), minPackChargeLog, maxPackChargeLog, base);
115  }
116 
117  if (iEn == 0) {
118  hit_info[iEn][iSample] += value;
119  } else if (hit_info[iEn][iSample] == 0) {
120  // For iEn==1 the digitizers just set the TOF of the first SimHit
121  hit_info[iEn][iSample] = value;
122  }
123  }
124  }
base
Main Program
Definition: newFWLiteAna.py:92
double unpack16log(int16_t i, double lmin, double lmax, uint16_t base=32768)
Definition: liblogintpack.h:62
constexpr float PREMIX_MAX_TOF
static constexpr unsigned sampleOffset
#define constexpr
void mtd_digitizer::saveSimHitAccumulator ( PMTDSimAccumulator simResult,
const MTDSimHitDataAccumulator simData,
const float  minCharge,
const float  maxCharge 
)
inline

Definition at line 57 of file MTDDigitizer.h.

References newFWLiteAna::base, constexpr, HTMLExport::elem(), PMTDSimAccumulator::emplace_back(), PMTDSimAccumulator::Data::energyMask, dqm-mbProfile::log, nSamples, logintpack::pack16log(), PREMIX_MAX_TOF, PMTDSimAccumulator::reserve(), PMTDSimAccumulator::Data::sampleMask, PMTDSimAccumulator::Data::sampleOffset, EgammaValidation_cff::samples, and relativeConstraints::value.

Referenced by HGCDigitizer::finalizeEvent(), and mtd_digitizer::MTDDigitizer< Traits >::finalizeEvent().

60  {
61  constexpr auto nEnergies = std::tuple_size<decltype(MTDCellInfo().hit_info)>::value;
62  static_assert(nEnergies <= PMTDSimAccumulator::Data::energyMask + 1,
63  "PMTDSimAccumulator bit pattern needs to updated");
65  "PMTDSimAccumulator bit pattern needs to updated");
66 
67  const float minPackChargeLog = minCharge > 0.f ? std::log(minCharge) : -2;
68  const float maxPackChargeLog = std::log(maxCharge);
70 
71  simResult.reserve(simData.size());
72  // mimicing the digitization
73  for (const auto& elem : simData) {
74  // store only non-zero
75  for (size_t iEn = 0; iEn < nEnergies; ++iEn) {
76  const auto& samples = elem.second.hit_info[iEn];
77  for (size_t iSample = 0; iSample < nSamples; ++iSample) {
78  if (samples[iSample] > minCharge) {
79  unsigned short packed;
80  if (iEn == 1) {
81  // assuming linear range for tof of 0..26
82  packed = samples[iSample] / PREMIX_MAX_TOF * base;
83  } else {
84  packed = logintpack::pack16log(samples[iSample], minPackChargeLog, maxPackChargeLog, base);
85  }
86  simResult.emplace_back(elem.first.detid_, elem.first.row_, elem.first.column_, iEn, iSample, packed);
87  }
88  }
89  }
90  }
91  }
static constexpr unsigned energyMask
void emplace_back(unsigned int detId, unsigned char row, unsigned char column, unsigned short energyIndex, unsigned short sampleIndex, unsigned short data)
void reserve(size_t size)
base
Main Program
Definition: newFWLiteAna.py:92
constexpr float PREMIX_MAX_TOF
def elem(elemtype, innerHTML='', html_class='', kwargs)
Definition: HTMLExport.py:19
static constexpr unsigned sampleMask
static constexpr unsigned sampleOffset
int16_t pack16log(double x, double lmin, double lmax, uint16_t base=32768)
Definition: liblogintpack.h:27
#define constexpr

Variable Documentation

constexpr size_t mtd_digitizer::nSamples = 15

Definition at line 11 of file MTDDigitizerTypes.h.

Referenced by saveSimHitAccumulator().

constexpr float mtd_digitizer::PREMIX_MAX_TOF = 26.0f

Definition at line 23 of file MTDDigitizerTypes.h.

Referenced by loadSimHitAccumulator(), and saveSimHitAccumulator().