28 #include "CoralBase/Blob.h"
42 ISvcLocator* pSvcLocator ) :
80 return StatusCode::SUCCESS;
86 const std::string&
outputName,
const unsigned nGain,
const bool withFCAL) {
89 unsigned nCopiedEMPS=0;
92 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
93 spec->extend(blobName,
"blob");
94 spec->extend<
unsigned>(
"version");
98 (*attrList)[
"version"].setValue(0U);
101 float* pblob=
static_cast<float*
>(
blob.startingAddress());
124 unsigned coolChan=
gain;
127 if (nGain==1) coolChan=1;
129 coll->add(coolChan,*attrList);
133 ATH_MSG_INFO(
"Converted " << blobName <<
" to inline storage. Total number of channels=" <<
nChannels );
134 ATH_MSG_INFO(
"Number of channels filled with default value (1.0) " << nDefault <<
" (including disconnected)" );
136 ATH_MSG_INFO(
"\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
138 if (
sc.isFailure()) {
148 ATH_MSG_INFO(
"LArCompleteToFlat::pedestalFlat, starting");
151 unsigned nCopiedEMPS=0;
153 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
154 spec->extend(
"Pedestal",
"blob");
155 spec->extend(
"PedestalRMS",
"blob");
156 spec->extend<
unsigned>(
"version");
160 const unsigned nGain =
m_isSC ? 1 : 3;
163 (*attrList)[
"version"].setValue(0U);
168 float* pblobPed=
static_cast<float*
>(blobPed.startingAddress());
169 float* pblobRMS=
static_cast<float*
>(blobRMS.startingAddress());
174 float pedRMS=
input->pedestalRMS(chid,
gain);
186 pedRMS=
input->pedestalRMS(chid,1);
194 collPed->add(
gain,*attrList);
195 ATH_MSG_INFO(
"Number of channels filled with default Pedestal (1000) and PedestalRMS (1) "<< nDefault <<
" (including disconnected)" );
199 if (
sc.isFailure()) {
205 ATH_MSG_INFO(
"\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
215 unsigned nCopiedEMPS=0;
218 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
219 spec->extend(
"OFCa",
"blob");
220 spec->extend(
"OFCb",
"blob");
221 spec->extend(
"TimeOffset",
"blob");
222 spec->extend<
unsigned>(
"nSamples");
223 spec->extend<
unsigned>(
"version");
226 const unsigned nGain =
m_isSC ? 1 : 3;
249 (*attrList)[
"version"].setValue(0U);
254 (*attrList)[
"nSamples"].setValue(
nSamples);
259 float* pOfca=
static_cast<float*
>(ofcaBlob.startingAddress());
260 float* pOfcb=
static_cast<float*
>(ofcbBlob.startingAddress());
261 float* pTimeOffset=
static_cast<float*
>(toBlob.startingAddress());
266 float timeOffset=
input->timeOffset(chid,
gain);
270 timeOffset=
input->timeOffset(chid,1);
276 if(std::isnan(ofca[
i]) || std::isinf(ofca[
i]) || (
m_isSC && fabs(ofca[
i])> 10.)) {
285 message <<
"Number of samples don't match. Expect " <<
nSamples <<
", got " << ofca.size() <<
".";
295 if(std::isnan(ofcb[
i]) || std::isinf(ofcb[
i]) || (
m_isSC && fabs(ofcb[
i])> 100.)) {
313 message <<
"Number of samples don't match. Expect " <<
nSamples <<
", got " << ofcb.size() <<
".";
319 pTimeOffset[
hs]=timeOffset;
323 collOFC->add(
gain,*attrList);
327 if (
sc.isFailure()) {
333 ATH_MSG_INFO(
"Number of channels filled with default OFCs {1,1,1,1} " << nDefault <<
" (including disconnected)" );
335 ATH_MSG_INFO(
"\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
345 unsigned nCopiedEMPS=0;
348 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
349 spec->extend(
"Shape",
"blob");
350 spec->extend(
"ShapeDer",
"blob");
351 spec->extend(
"TimeOffset",
"blob");
352 spec->extend<
unsigned>(
"nSamples");
353 spec->extend<
unsigned>(
"version");
356 const unsigned nGain =
m_isSC ? 1 : 3;
373 (*attrList)[
"version"].setValue(0U);
378 (*attrList)[
"nSamples"].setValue(
nSamples);
383 float* pShape=
static_cast<float*
>(shapeBlob.startingAddress());
384 float* pShapeDer=
static_cast<float*
>(shapeDerBlob.startingAddress());
385 float* pTimeOffset=
static_cast<float*
>(toBlob.startingAddress());
391 float timeOffset=
input->timeOffset(chid,
gain);
393 shape=
input->Shape(chid,1);
394 shapeDer=
input->ShapeDer(chid,1);
395 timeOffset=
input->timeOffset(chid,1);
401 if(std::isnan(shape[
i]) || std::isinf(shape[
i])) {
410 message <<
"Number of samples don't match. Expect " <<
nSamples <<
", got " << shape.size() <<
".";
421 if(std::isnan(shapeDer[
i]) || std::isinf(shapeDer[
i])) {
430 message <<
"Number of samples don't match. Expect " <<
nSamples <<
", got " << shapeDer.size() <<
".";
436 pTimeOffset[
hs]=timeOffset;
440 coll->add(
gain,*attrList);
444 if (
sc.isFailure()) {
450 ATH_MSG_INFO(
"Number of channels filled with default shape {0,0,0,0} " << nDefault <<
" (including disconnected)" );
452 ATH_MSG_INFO(
"\t Number of low gain EMBPS channels copied from medium gain" << nCopiedEMPS );
464 unsigned nCopiedEMPS=0;
467 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
468 spec->extend(
"RampVec",
"blob");
469 spec->extend<
unsigned>(
"nPoints");
470 spec->extend<
unsigned>(
"version");
473 std::vector<float> defaultRamp={0.0,1.0};
488 const unsigned nGain =
m_isSC ? 1 : 3;
502 defaultRamp.resize(nPoints,0.0);
503 ATH_MSG_INFO(
"Gain " <<
gain <<
": Found a ramp polynom of degree " << nPoints <<
" in input data" );
505 (*attrList)[
"version"].setValue(0U);
507 (*attrList)[
"nPoints"].setValue(nPoints);
508 blobRamp.resize(
m_hashMax*
sizeof(
float)*nPoints);
509 float* pblobRamp=
static_cast<float*
>(blobRamp.startingAddress());
513 std::vector<float> rampVec(
input->ADC2DAC(chid,
gain).asVector());
514 if(rampVec.size()>=2 && rampVec[1]>500) {
519 rampVec=
input->ADC2DAC(chid,1).asVector();
520 if(rampVec.empty()) {
535 if (rampVec.size()>=nPoints) {
536 for (
size_t i=0;
i<nPoints;++
i) {
537 pblobRamp[nPoints*
hs+
i]=rampVec[
i];
542 message <<
"Polynom degree doesn't match. Expect " << nPoints <<
", got " << rampVec.size() <<
".";
544 for (
size_t i=0;
i<nPoints;++
i) {
545 pblobRamp[nPoints*
hs+
i]=defaultRamp[
i];
551 coll->add(
gain,*attrList);
555 if (
sc.isFailure()) {
561 ATH_MSG_INFO(
"Number of channels filled with default ramp {0,1} " << nDefault <<
" (including disconnected)" );
563 ATH_MSG_INFO(
"\t Number of low gain EMBPS channels copied from medium gain (applied factor 10)" << nCopiedEMPS );
571 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
572 spec->extend(
"DAC2uA",
"blob");
573 spec->extend<
unsigned>(
"version");
576 (*attrList)[
"version"].setValue(0U);
579 float* pblob=
static_cast<float*
>(
blob.startingAddress());
584 coll->add(1,*attrList);
587 if (
sc.isFailure()) {
596 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
597 spec->extend(
"uA2MeV",
"blob");
598 spec->extend<
unsigned>(
"version");
601 (*attrList)[
"version"].setValue(0U);
604 float* pblob=
static_cast<float*
>(
blob.startingAddress());
609 coll->add(1,*attrList);
612 if (
sc.isFailure()) {
621 coral::AttributeListSpecification*
spec =
new coral::AttributeListSpecification();
622 spec->extend(
"tQThr",
"blob");
623 spec->extend(
"samplesThr",
"blob");
624 spec->extend(
"trigSumThr",
"blob");
626 spec->extend(
"Name",
"string");
636 SamplesBlob.resize(
m_hashMax*
sizeof(
float));
637 TrigBlob.resize(
m_hashMax*
sizeof(
float));
638 float* ptQThr=
static_cast<float*
>(QBlob.startingAddress());
639 float* pSamplesThr=
static_cast<float*
>(SamplesBlob.startingAddress());
640 float* pTrigThr=
static_cast<float*
>(TrigBlob.startingAddress());
645 ptQThr[
hs] =
input->tQThr(chid);
646 pSamplesThr[
hs] =
input->samplesThr(chid);
647 pTrigThr[
hs] =
input->trigSumThr(chid);
655 if (
sc.isFailure()) {
666 std::string flatName =
"/LAR/ElecCalibFlat";
672 if (
sc.isFailure()) {
674 return StatusCode::FAILURE;
683 if (
sc.isFailure()) {
685 return StatusCode::FAILURE;
699 if (
sc.isFailure()) {
707 uA2MeVFlat(uA2MeVComplete, flatName+
"/uA2MeV");
715 if (
sc.isFailure()) {
723 DAC2uAFlat(DAC2uAComplete, flatName+
"/DAC2uA");
730 if (
sc.isFailure()) {
738 const int nGain =
m_isSC ? 1 : 3;
748 if (
sc.isFailure()) {
756 singleFloatFlat(
"HVScaleCorr", HVScaleCorrComplete, flatName+
"/HVScaleCorr",1);
763 if (
sc.isFailure()) {
796 if (
sc.isFailure()) {
807 weightsComplete=*wHdl;
808 if(!weightsComplete) {
812 ofcFlat(ofcComplete,flatName+
"/OFC",weightsComplete);
818 if (
sc.isFailure()) {
820 ATH_MSG_ERROR(
"Failed to get LArOFCComplete object (cali)" );
826 ofcFlat(ofcComplete,flatName+
"/OFCCali");
834 if (
sc.isFailure()) {
842 shapeFlat(shapeComplete,flatName+
"/Shape");
866 if (
sc.isFailure()) {
874 rampFlat(rampComplete,flatName+
"/Ramp");
882 if (
sc.isFailure()) {
884 ATH_MSG_ERROR(
"Failed to get LArDSPThresholdsComplete object" );
907 return StatusCode::SUCCESS;
929 if (
cabling->isOnlineConnected(chid)) {