203 {
204 return *(
static_cast<const uint32_t*
>(getAddress(0)));
205}
206
207
208
211 return *(
static_cast<const int32_t*
>(
getAddress(1)));
212}
213
214
215
218
219 if (std::abs(phase) > 1e6F) {
220
222 }
226 const int32_t*
pos = std::lower_bound(beg, end, db_phase);
227
228 if (pos == end || (*pos != db_phase && pos != beg && (*pos - db_phase) > (db_phase - *(pos - 1)))) {
230 }
231
233 return (pos - beg);
234}
235
236
237
241}
242
243
244
247
249
250 if( objVersion == 3){ return 5; }
251 else if(objVersion == 2){ return 4; }
252 else if(objVersion == 1){ return 3; }
253 else{
254 throw TileCalib::VersionConflict("TileCalibDrawerOfc::getNFields", objVersion);
255 }
256}
257
258
259
261 , float phase, unsigned int sample) const {
263 throw TileCalib::IndexOutOfRange(
"TileCalibDrawerOfc::getA", sample,
getNSamples());
265}
266
268 , float* w_a, float* w_b, float* w_c, float* g, float* dg) const {
269
270
274
275 std::memcpy(w_a, startAddress, allSamplesSize);
276 startAddress += fieldSize;
277 std::memcpy(w_b, startAddress, allSamplesSize);
278 startAddress += fieldSize;
279 std::memcpy(g, startAddress, allSamplesSize);
280 startAddress += fieldSize;
281 std::memcpy(w_c, startAddress, allSamplesSize);
283 startAddress += fieldSize;
284 std::memcpy(dg, startAddress, allSamplesSize);
285 } else {
286 std::memset(dg, 0, allSamplesSize);
287 }
288}
289
290
291
292
294 , float phase, unsigned int sample, float value) {
296 throw TileCalib::IndexOutOfRange(
"TileCalibDrawerOfc::setOfc", sample,
getNSamples());
298}
__attribute__((always_inline)) inline uint32_t TileCalibDrawerOfc
#define PHASE_PRECISION
Class for storing Optimal Filtering Coefficients (OFCs) in a coral::Blob.
uint16_t getObjVersion() const
Returns the BLOB object version.
uint32_t getObjSizeUint32() const
Returns the size of a data object in units of uint32_t.
const void * getAddress(unsigned int iEle) const
Returns start address of iEle-th basic unit.
unsigned int getPhaseNumber(unsigned int channel, unsigned int adc, float &phase) const
Returns the index for a given phase.
int32_t getNPhases() const
Returns the number of phases (WARNING: Can be negative!).
void setOfc(unsigned int field, unsigned int channel, unsigned int adc, float phase, unsigned int sample, float value)
Sets OFC data.
float getPhase(unsigned int channel, unsigned int adc, unsigned int phaseIdx) const
Returns the stored phase.
void fillOfc(unsigned int channel, unsigned int adc, float &phase, float *w_a, float *w_b, float *w_c, float *g, float *dg) const
Fill all OFC for optimazation.
uint32_t getNSamples() const
Returns the number of sample stored.
const float * getOfcStartAddress(unsigned int field, unsigned int channel, unsigned int adc, float &phase) const
Returns pointer to first data OFC for a given field, ADC & phase.
float getOfc(unsigned int field, unsigned int channel, unsigned int adc, float phase, unsigned int sample) const
Returns OFC data.
const int32_t * getPhaseStartAddress(unsigned int channel, unsigned int adc, unsigned int phaseIdx) const
Returns pointer to the requested phase value.
uint32_t getNFields(uint16_t objVersion=0) const
Returns the number of fields.