ATLAS Offline Software
Loading...
Searching...
No Matches
LArShapeBlob.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include "CoralBase/Blob.h"
8
13
15
16
17void LArShapeBlob::readBlob(const CondAttrListCollection* attrList, MsgStream& msg) {
19 m_nSamples=0;
20 m_pShape.clear();
21 m_pShapeDer.clear();
22 m_pTimeOffset.clear();
23
24 if (!attrList) return;
25
28
29 m_pShape.resize(attrList->size());
30 m_pShapeDer.resize(attrList->size());
31 m_pTimeOffset.resize(attrList->size());
32 msg << MSG::DEBUG << "Found data for " << attrList->size() << " gains." << endmsg;
33
34 int blobSize=0; //FIXME Force size to hash-max??? m_onlineHelper->channelHashMax()
35
36
37 for(;gainIt!=gainIt_e;++gainIt) {
38 const unsigned gain=gainIt->first;
39 if (gain>=attrList->size() || gain>2) {
40 msg << MSG::ERROR << "Found unexpected COOL-channel (=gain) number:" << gain << endmsg;
41 return; //ERROR
42 }
43 const coral::AttributeList& attr=gainIt->second;
44 const coral::Blob& shapeaBlob = attr["Shape"].data<coral::Blob>();
45 const coral::Blob& shapebBlob = attr["ShapeDer"].data<coral::Blob>();
46 const coral::Blob& toBlob = attr["TimeOffset"].data<coral::Blob>();
47 if (blobSize==0) blobSize=shapeaBlob.size();
48 if (m_nSamples==0) m_nSamples=attr["nSamples"].data<unsigned>();
49
50 //Sanity checks:
51 if (blobSize!=shapeaBlob.size() || blobSize!=shapebBlob.size()) {
52 msg << MSG::ERROR << "Unequal blob size (" << blobSize << "/"
53 << shapeaBlob.size() << "/" << shapebBlob.size() << ")" <<endmsg;
54 return;
55 }
56 if (m_nSamples!=attr["nSamples"].data<unsigned>()) {
57 msg << MSG::ERROR << "Unequal number of samples (" << m_nSamples << "/"
58 << attr["nSamples"].data<unsigned>() << ")" << endmsg;
59 return;
60 }
61
62
63 m_pShape[gain]=static_cast<const float*>(shapeaBlob.startingAddress());
64 m_pShapeDer[gain]=static_cast<const float*>(shapebBlob.startingAddress());
65 m_pTimeOffset[gain]=static_cast<const float*>(toBlob.startingAddress());
66 }// end loop over COOL channels
67
68 if (m_nSamples==0) {
69 msg << MSG::ERROR << "Number of samples is zero!" << endmsg;
70 return;
71 }
72 m_nChannels=blobSize/(sizeof(float)*m_nSamples);
73 msg << MSG::DEBUG << "Found data for " << m_nChannels << endmsg;
74}
#define endmsg
This file defines the class for a collection of AttributeLists where each one is associated with a ch...
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
This class is a collection of AttributeLists where each one is associated with a channel number.
const_iterator end() const
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
size_type size() const
number of Chan/AttributeList pairs
ChanAttrListMap::const_iterator const_iterator
std::vector< const float * > m_pTimeOffset
std::vector< const float * > m_pShape
void readBlob(const CondAttrListCollection *attrList, MsgStream &msg)
std::vector< const float * > m_pShapeDer
unsigned m_nSamples
unsigned m_nChannels
MsgStream & msg
Definition testRead.cxx:32