|
ATLAS Offline Software
|
Tool to perform ROB fragments to jet elements, jet hits and energy sums, and JEP container to raw data conversions.
More...
#include <JepByteStreamV1Tool.h>
|
| JepByteStreamV1Tool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~JepByteStreamV1Tool () |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | finalize () override |
|
StatusCode | convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::JetElement > *jeCollection) const |
| Convert ROB fragments to jet elements. More...
|
|
StatusCode | convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::JEMHits > *hitCollection) const |
| Convert ROB fragments to jet hits. More...
|
|
StatusCode | convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::JEMEtSums > *etCollection) const |
| Convert ROB fragments to energy sums. More...
|
|
StatusCode | convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CMMJetHits > *hitCollection) const |
| Convert ROB fragments to CMM jet hits. More...
|
|
StatusCode | convert (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, DataVector< LVL1::CMMEtSums > *etCollection) const |
| Convert ROB fragments to CMM energy sums. More...
|
|
StatusCode | convert (const LVL1::JEPBSCollectionV1 *jep) const |
| Convert JEP Container to bytestream. More...
|
|
const std::vector< uint32_t > & | sourceIDs () const |
| Return reference to vector with all possible Source Identifiers. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
enum | CollectionType {
JET_ELEMENTS,
JET_HITS,
ENERGY_SUMS,
CMM_HITS,
CMM_SUMS
} |
|
typedef DataVector< LVL1::JetElement > | JetElementCollection |
|
typedef DataVector< LVL1::JEMHits > | JetHitsCollection |
|
typedef DataVector< LVL1::JEMEtSums > | EnergySumsCollection |
|
typedef DataVector< LVL1::CMMJetHits > | CmmHitsCollection |
|
typedef DataVector< LVL1::CMMEtSums > | CmmSumsCollection |
|
typedef std::map< unsigned int, LVL1::JetElement * > | JetElementMap |
|
typedef std::map< unsigned int, const LVL1::JetElement * > | ConstJetElementMap |
|
typedef std::map< int, LVL1::JEMHits * > | JetHitsMap |
|
typedef std::map< int, const LVL1::JEMHits * > | ConstJetHitsMap |
|
typedef std::map< int, LVL1::JEMEtSums * > | EnergySumsMap |
|
typedef std::map< int, const LVL1::JEMEtSums * > | ConstEnergySumsMap |
|
typedef std::map< int, LVL1::CMMJetHits * > | CmmHitsMap |
|
typedef std::map< int, const LVL1::CMMJetHits * > | ConstCmmHitsMap |
|
typedef std::map< int, LVL1::CMMEtSums * > | CmmSumsMap |
|
typedef std::map< int, const LVL1::CMMEtSums * > | ConstCmmSumsMap |
|
typedef IROBDataProviderSvc::VROBFRAG::const_iterator | ROBIterator |
|
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType | ROBPointer |
|
typedef OFFLINE_FRAGMENTS_NAMESPACE::PointerType | RODPointer |
|
typedef ServiceHandle< StoreGateSvc > | StoreGateSvc_t |
|
|
StatusCode | convertBs (const std::string &sgKey, const IROBDataProviderSvc::VROBFRAG &robFrags, JepByteStreamToolData &data) const |
| Convert bytestream to given container type. More...
|
|
void | decodeCmmEnergy (CmmEnergySubBlock *subBlock, int trigCmm, CmmSumsData &data, LocalData &ld) const |
| Unpack CMM-Energy sub-block. More...
|
|
void | decodeCmmJet (CmmJetSubBlock *subBlock, int trigCmm, CmmHitsData &data, LocalData &ld) const |
| Unpack CMM-Jet sub-block. More...
|
|
void | decodeJem (JemSubBlockV1 *subBlock, int trigJem, JepByteStreamToolData &data, LocalData &ld) const |
| Unpack JEM sub-block. More...
|
|
const LVL1::JetElement * | findJetElement (double eta, double phi, const ConstJetElementMap &jeMap, LVL1::JetElementKey &elementKey) const |
| Find a jet element given eta, phi. More...
|
|
LVL1::JetElement * | findJetElement (const JetElementData &data, double eta, double phi, LVL1::JetElementKey &elementKey) const |
|
const LVL1::JEMHits * | findJetHits (int crate, int module, const ConstJetHitsMap &hitsMap) const |
| Find jet hits for given crate, module. More...
|
|
LVL1::JEMHits * | findJetHits (const JetHitsData &data, int crate, int module) const |
|
const LVL1::JEMEtSums * | findEnergySums (int crate, int module, const ConstEnergySumsMap &etMap) const |
| Find energy sums for given crate, module. More...
|
|
LVL1::JEMEtSums * | findEnergySums (const EnergySumsData &data, int crate, int module) const |
|
const LVL1::CMMJetHits * | findCmmHits (int crate, int dataID, const ConstCmmHitsMap &cmmHitsMap) const |
| Find CMM hits for given crate, data ID. More...
|
|
LVL1::CMMJetHits * | findCmmHits (const CmmHitsData &data, int crate, int dataID) const |
|
const LVL1::CMMEtSums * | findCmmSums (int crate, int dataID, const ConstCmmSumsMap &cmmEtMap) const |
| Find CMM energy sums for given crate, data ID. More...
|
|
LVL1::CMMEtSums * | findCmmSums (const CmmSumsData &data, int crate, int dataID) const |
|
std::vector< uint32_t > | makeSourceIDs () const |
|
void | setupJeMap (const JetElementCollection *jeCollection, ConstJetElementMap &jeMap, LVL1::JetElementKey &elementKey) const |
| Set up jet element map. More...
|
|
void | setupHitsMap (const JetHitsCollection *hitCollection, ConstJetHitsMap &hitsMap) const |
| Set up jet hits map. More...
|
|
void | setupEtMap (const EnergySumsCollection *enCollection, ConstEnergySumsMap &etMap) const |
| Set up energy sums map. More...
|
|
void | setupCmmHitsMap (const CmmHitsCollection *hitCollection, ConstCmmHitsMap &cmmHitsMap) const |
| Set up CMM hits map. More...
|
|
void | setupCmmEtMap (const CmmSumsCollection *enCollection, ConstCmmSumsMap &cmmEtMap) const |
| Set up CMM energy sums map. More...
|
|
bool | slinkSlices (int crate, int module, int modulesPerSlink, int ×lices, int &trigJem, const ConstJetElementMap &jeMap, const ConstJetHitsMap &hitsMap, const ConstEnergySumsMap &etMap, const ConstCmmHitsMap &cmmHitsMap, const ConstCmmSumsMap &cmmEtMap, LVL1::JetElementKey &elementKey) const |
| Get number of slices and triggered slice offset for next slink. More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
Tool to perform ROB fragments to jet elements, jet hits and energy sums, and JEP container to raw data conversions.
Based on ROD document version 1_09h.
- Author
- Peter Faulkner
Definition at line 57 of file JepByteStreamV1Tool.h.
◆ CmmHitsCollection
◆ CmmHitsMap
◆ CmmSumsCollection
◆ CmmSumsMap
◆ ConstCmmHitsMap
◆ ConstCmmSumsMap
◆ ConstEnergySumsMap
◆ ConstJetElementMap
◆ ConstJetHitsMap
◆ EnergySumsCollection
◆ EnergySumsMap
◆ JetElementCollection
◆ JetElementMap
◆ JetHitsCollection
◆ JetHitsMap
◆ ROBIterator
◆ ROBPointer
◆ RODPointer
◆ StoreGateSvc_t
◆ CollectionType
◆ JepByteStreamV1Tool()
LVL1BS::JepByteStreamV1Tool::JepByteStreamV1Tool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
Definition at line 52 of file JepByteStreamV1Tool.cxx.
56 m_jemMaps(
"LVL1::JemMappingTool/JemMappingTool"),
57 m_errorTool(
"LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
61 declareInterface<JepByteStreamV1Tool>(
this);
64 "Crate/Module/Channel to Eta/Phi/Layer mapping tool");
66 "Tool to collect errors for monitoring");
69 "Offset of JEP crate numbers in bytestream");
71 "Offset of JEP crate numbers in RDOs");
73 "The number of S-Links per crate");
77 "ROB fragment source identifiers");
81 "Format version number in sub-block header");
83 "Format identifier (0-1) in sub-block header");
85 "The number of slices in the simulation");
87 "If >0, the number of slices in bytestream");
89 "Minimum crate number, allows partial output");
91 "Maximum crate number, allows partial output");
◆ ~JepByteStreamV1Tool()
LVL1BS::JepByteStreamV1Tool::~JepByteStreamV1Tool |
( |
| ) |
|
|
virtual |
◆ convert() [1/6]
Convert JEP Container to bytestream.
Definition at line 179 of file JepByteStreamV1Tool.cxx.
187 "JepByteStreamV1") );
226 int timeslicesNew = 1;
235 if (
module % modulesPerSlink == 0) {
236 const int daqOrRoi = 0;
237 const int slink =
module / modulesPerSlink;
239 msg() <<
"Treating crate " << hwCrate
240 <<
" slink " << slink <<
endmsg;
253 msg(MSG::ERROR) <<
"Inconsistent number of slices or "
254 <<
"triggered slice offsets in data for crate "
255 << hwCrate <<
" slink " << slink <<
endmsg;
256 return StatusCode::FAILURE;
263 <<
"Slices/offset: " << timeslices <<
" " << trigJem;
264 if (timeslices != timeslicesNew) {
265 msg() <<
" modified to " << timeslicesNew <<
" " << trigJemNew;
269 L1CaloUserHeader userHeader;
270 userHeader.setJem(trigJemNew);
274 theROD->push_back(userHeader.header());
284 JemSubBlockV1*
const subBlock =
new JemSubBlockV1();
286 hwCrate,
module, timeslicesNew);
288 if (neutralFormat)
break;
301 std::vector<int> emData;
302 std::vector<int> hadData;
303 std::vector<int> emErrors;
304 std::vector<int> hadErrors;
312 const int index = ( neutralFormat ) ? 0 :
slice;
313 JemSubBlockV1*
const subBlock = jemBlocks[
index];
319 subBlock->fillJetElement(
slice, jetEle);
329 std::vector<unsigned int>
vec;
332 const int index = ( neutralFormat ) ? 0 :
slice;
333 JemSubBlockV1*
const subBlock = jemBlocks[
index];
339 std::vector<unsigned int> exVec;
340 std::vector<unsigned int> eyVec;
341 std::vector<unsigned int> etVec;
346 const int index = ( neutralFormat ) ? 0 :
slice;
347 JemSubBlockV1*
const subBlock = jemBlocks[
index];
357 JemSubBlockV1*
const subBlock = *
pos;
358 if ( !subBlock->pack()) {
359 msg(MSG::ERROR) <<
"JEM sub-block packing failed" <<
endmsg;
360 return StatusCode::FAILURE;
363 msg() <<
"JEM sub-block data words: "
364 << subBlock->dataWords() <<
endmsg;
366 subBlock->write(theROD);
382 CmmEnergySubBlock*
const enBlock =
new CmmEnergySubBlock();
383 const int cmmEnergyVersion = 2;
388 CmmJetSubBlock*
const jetBlock =
new CmmJetSubBlock();
393 if (neutralFormat)
break;
399 for (
int dataID = 0; dataID < maxDataID; ++dataID) {
427 std::vector<unsigned int> ex;
428 std::vector<unsigned int> ey;
429 std::vector<unsigned int>
et;
430 std::vector<int> exErr;
431 std::vector<int> eyErr;
432 std::vector<int> etErr;
453 const int index = ( neutralFormat ) ? 0 :
slice;
454 CmmEnergySubBlock*
const subBlock = cmmEnergyBlocks[
index];
464 exError, eyError, etError);
471 for (;
pos != cmmEnergyBlocks.
end(); ++
pos) {
472 CmmEnergySubBlock*
const subBlock = *
pos;
473 if ( !subBlock->pack()) {
474 msg(MSG::ERROR) <<
"CMM-Energy sub-block packing failed" <<
endmsg;
475 return StatusCode::FAILURE;
478 msg() <<
"CMM-Energy sub-block data words: "
479 << subBlock->dataWords() <<
endmsg;
481 subBlock->write(theROD);
487 for (
int dataID = 0; dataID < maxDataID; ++dataID) {
523 std::vector<unsigned int>
hits;
524 std::vector<int> errs;
529 const int index = ( neutralFormat ) ? 0 :
slice;
530 CmmJetSubBlock*
const subBlock = cmmJetBlocks[
index];
541 jos = cmmJetBlocks.
begin();
542 for (; jos != cmmJetBlocks.
end(); ++jos) {
543 CmmJetSubBlock*
const subBlock = *jos;
544 if ( !subBlock->pack()) {
545 msg(MSG::ERROR) <<
"CMM-Jet sub-block packing failed" <<
endmsg;
546 return StatusCode::FAILURE;
549 msg() <<
"CMM-Jet sub-block data words: "
550 << subBlock->dataWords() <<
endmsg;
552 subBlock->write(theROD);
556 return StatusCode::SUCCESS;
◆ convert() [2/6]
◆ convert() [3/6]
◆ convert() [4/6]
◆ convert() [5/6]
◆ convert() [6/6]
◆ convertBs()
Convert bytestream to given container type.
Definition at line 594 of file JepByteStreamV1Tool.cxx.
602 const std::string
flag(
"Overlap");
603 const std::string::size_type
pos = sgKey.find(
flag);
605 (
pos == std::string::npos ||
pos != sgKey.length() -
flag.length()) ? 0 : 1;
611 JemSubBlockV1 jemSubBlock;
613 CmmEnergySubBlock cmmEnergySubBlock;
615 CmmJetSubBlock cmmJetSubBlock;
620 std::set<uint32_t> dupCheck;
623 for (; rob != robEnd; ++rob) {
627 msg() <<
"Treating ROB fragment " << robCount <<
endmsg;
632 uint32_t robid = (*rob)->source_id();
633 if ((*rob)->nstatus() > 0) {
635 (*rob)->status(robData);
638 if (
debug)
msg() <<
"ROB status error - skipping fragment" <<
endmsg;
645 if (!dupCheck.insert(robid).second) {
656 (*rob)->rod_data(payloadBeg);
657 payloadEnd = payloadBeg + (*rob)->rod_ndata();
665 const uint32_t sourceID = (*rob)->rod_source_id();
674 msg() <<
"Wrong source identifier in data: ROD "
675 << MSG::hex << sourceID <<
" ROB " << robid
682 const int minorVersion = (*rob)->rod_version() & 0xffff;
689 msg() <<
"Treating crate " << rodCrate
699 L1CaloUserHeader userHeader(*
payload);
700 userHeader.setVersion(minorVersion);
701 const int headerWords = userHeader.words();
702 if (headerWords != 1) {
704 if (
debug)
msg() <<
"Unexpected number of user header words: "
708 for (
int i = 0;
i < headerWords; ++
i) ++
payload;
710 int trigJem = userHeader.jem();
711 int trigCmm = userHeader.jepCmm();
713 msg() <<
"Minor format version number: " << MSG::hex
714 << minorVersion << MSG::dec <<
endmsg
715 <<
"JEM triggered slice offset: " << trigJem <<
endmsg
716 <<
"CMM triggered slice offset: " << trigCmm <<
endmsg;
718 if (trigJem != trigCmm) {
719 const int newTrig = (trigJem > trigCmm) ? trigJem : trigCmm;
722 if (
debug)
msg() <<
"Changed both offsets to " << newTrig <<
endmsg;
728 while (
payload != payloadEnd) {
738 cmmJetSubBlock.clear();
740 if (cmmJetSubBlock.crate() != rodCrate) {
741 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
754 cmmEnergySubBlock.clear();
756 if (cmmEnergySubBlock.crate() != rodCrate) {
757 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
778 if (jemSubBlock.crate() != rodCrate) {
779 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
798 return StatusCode::SUCCESS;
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ decodeCmmEnergy()
Unpack CMM-Energy sub-block.
Definition at line 803 of file JepByteStreamV1Tool.cxx.
811 const int hwCrate = subBlock->crate();
812 const int module = subBlock->cmmPosition();
813 const int firmware = subBlock->cmmFirmware();
814 const int summing = subBlock->cmmSumming();
815 const int timeslices = subBlock->timeslices();
816 const int sliceNum = subBlock->slice();
818 msg() <<
"CMM-Energy: Crate " << hwCrate
820 <<
" Firmware " << firmware
821 <<
" Summing " << summing
822 <<
" Total slices " << timeslices
823 <<
" Slice " << sliceNum <<
endmsg;
825 if (timeslices <= trigCmm) {
826 if (
debug)
msg() <<
"Triggered CMM slice from header "
827 <<
"inconsistent with number of slices: "
828 << trigCmm <<
", " << timeslices <<
endmsg;
832 if (timeslices <= sliceNum) {
833 if (
debug)
msg() <<
"Total slices inconsistent with slice number: "
834 << timeslices <<
", " << sliceNum <<
endmsg;
839 if (subBlock->dataWords() && !subBlock->unpack()) {
841 std::string errMsg(subBlock->unpackErrorMsg());
842 msg() <<
"CMM-Energy sub-block unpacking failed: " << errMsg <<
endmsg;
844 ld.rodErr = subBlock->unpackErrorCode();
856 const int ssError = derr.
error();
857 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
858 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
882 const unsigned int ex = subBlock->ex(
slice,
source);
883 const unsigned int ey = subBlock->ey(
slice,
source);
905 exErr = exErrBits.error();
906 eyErr = eyErrBits.error();
907 etErr = etErrBits.error();
908 if (ex || ey ||
et || exErr || eyErr || etErr) {
911 ld.exVec.assign(timeslices, 0);
912 ld.eyVec.assign(timeslices, 0);
913 ld.etVec.assign(timeslices, 0);
914 ld.exErrVec.assign(timeslices, 0);
915 ld.eyErrVec.assign(timeslices, 0);
916 ld.etErrVec.assign(timeslices, 0);
924 std::make_unique<LVL1::CMMEtSums>(swCrate, dataID,
ld.etVec,
ld.exVec,
ld.eyVec,
925 ld.etErrVec,
ld.exErrVec,
ld.eyErrVec, trigCmm);
926 const int key = crate * 100 + dataID;
927 data.m_cmmEtMap.insert(std::make_pair(
key, sumsp.get()));
928 data.m_cmmEtCollection->push_back(std::move(sumsp));
936 const int nsl =
ld.exVec.size();
937 if (timeslices != nsl) {
938 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
966 const unsigned int missEt = subBlock->missingEtHits(
slice);
967 if ( missEt || ssError ) {
971 ld.etVec.assign(timeslices, 0);
972 ld.etErrVec.assign(timeslices, 0);
976 std::make_unique<LVL1::CMMEtSums>(swCrate, dataID,
977 ld.etVec,
ld.etVec,
ld.etVec,
978 ld.etErrVec,
ld.etErrVec,
ld.etErrVec, trigCmm);
979 const int key = crate * 100 + dataID;
980 data.m_cmmEtMap.insert(std::make_pair(
key, mapp.get()));
981 data.m_cmmEtCollection->push_back(std::move(mapp));
985 const int nsl =
ld.etVec.size();
986 if (timeslices != nsl) {
987 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
1004 const unsigned int sumEt = subBlock->sumEtHits(
slice);
1005 if ( sumEt || ssError ) {
1009 ld.etVec.assign(timeslices, 0);
1010 ld.etErrVec.assign(timeslices, 0);
1014 std::make_unique<LVL1::CMMEtSums>(swCrate, dataID,
1015 ld.etVec,
ld.etVec,
ld.etVec,
1016 ld.etErrVec,
ld.etErrVec,
ld.etErrVec, trigCmm);
1017 const int key = crate * 100 + dataID;
1018 data.m_cmmEtMap.insert(std::make_pair(
key, mapp.get()));
1019 data.m_cmmEtCollection->push_back(std::move(mapp));
1023 const int nsl =
ld.etVec.size();
1024 if (timeslices != nsl) {
1025 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
1042 if (subBlock->version() > 1) {
1043 const unsigned int missEtSig = subBlock->missingEtSigHits(
slice);
1044 if ( missEtSig || ssError ) {
1048 ld.etVec.assign(timeslices, 0);
1049 ld.etErrVec.assign(timeslices, 0);
1053 std::make_unique<LVL1::CMMEtSums>(swCrate, dataID,
1054 ld.etVec,
ld.etVec,
ld.etVec,
1055 ld.etErrVec,
ld.etErrVec,
ld.etErrVec, trigCmm);
1056 const int key = crate * 100 + dataID;
1057 data.m_cmmEtMap.insert(std::make_pair(
key, mapp.get()));
1058 data.m_cmmEtCollection->push_back(std::move(mapp));
1062 const int nsl =
ld.etVec.size();
1063 if (timeslices != nsl) {
1064 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
1070 if (
debug)
msg() <<
"Duplicate data for slice "
◆ decodeCmmJet()
Unpack CMM-Jet sub-block.
Definition at line 1091 of file JepByteStreamV1Tool.cxx.
1098 const int hwCrate = subBlock->crate();
1099 const int module = subBlock->cmmPosition();
1100 const int firmware = subBlock->cmmFirmware();
1101 const int summing = subBlock->cmmSumming();
1102 const int timeslices = subBlock->timeslices();
1103 const int sliceNum = subBlock->slice();
1105 msg() <<
"CMM-Jet: Crate " << hwCrate
1107 <<
" Firmware " << firmware
1108 <<
" Summing " << summing
1109 <<
" Total slices " << timeslices
1110 <<
" Slice " << sliceNum <<
endmsg;
1112 if (timeslices <= trigCmm) {
1113 if (
debug)
msg() <<
"Triggered CMM slice from header "
1114 <<
"inconsistent with number of slices: "
1115 << trigCmm <<
", " << timeslices <<
endmsg;
1119 if (timeslices <= sliceNum) {
1120 if (
debug)
msg() <<
"Total slices inconsistent with slice number: "
1121 << timeslices <<
", " << sliceNum <<
endmsg;
1126 if (subBlock->dataWords() && !subBlock->unpack()) {
1128 std::string errMsg(subBlock->unpackErrorMsg());
1129 msg() <<
"CMM-Jet sub-block unpacking failed: " << errMsg <<
endmsg;
1131 ld.rodErr = subBlock->unpackErrorCode();
1143 const int ssError = derr.
error();
1144 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
1145 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
1186 const int err = errBits.error();
1190 ld.hitsVec.assign(timeslices, 0);
1191 ld.errVec.assign(timeslices, 0);
1195 std::make_unique<LVL1::CMMJetHits>(swCrate, dataID,
ld.hitsVec,
ld.errVec, trigCmm);
1196 const int key = crate * 100 + dataID;
1197 data.m_cmmHitsMap.insert(std::make_pair(
key, jhp.get()));
1198 data.m_cmmHitCollection->push_back(std::move(jhp));
1202 const int nsl =
ld.hitsVec.size();
1203 if (timeslices != nsl) {
1204 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
1224 const unsigned int etMap = subBlock->jetEtMap(
slice);
1225 if ( etMap || ssError ) {
1229 ld.hitsVec.assign(timeslices, 0);
1230 ld.errVec.assign(timeslices, 0);
1234 std::make_unique<LVL1::CMMJetHits>(swCrate, dataID,
ld.hitsVec,
ld.errVec, trigCmm);
1235 const int key = crate * 100 + dataID;
1236 data.m_cmmHitsMap.insert(std::make_pair(
key, mapp.get()));
1237 data.m_cmmHitCollection->push_back(std::move(mapp));
1241 const int nsl =
ld.hitsVec.size();
1242 if (timeslices != nsl) {
1243 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
◆ decodeJem()
Unpack JEM sub-block.
Definition at line 1266 of file JepByteStreamV1Tool.cxx.
1274 const int hwCrate = subBlock->crate();
1275 const int module = subBlock->module();
1276 const int timeslices = subBlock->timeslices();
1277 const int sliceNum = subBlock->slice();
1279 msg() <<
"JEM: Crate " << hwCrate
1281 <<
" Total slices " << timeslices
1282 <<
" Slice " << sliceNum <<
endmsg;
1284 if (timeslices <= trigJem) {
1285 if (
debug)
msg() <<
"Triggered JEM slice from header "
1286 <<
"inconsistent with number of slices: "
1287 << trigJem <<
", " << timeslices <<
endmsg;
1291 if (timeslices <= sliceNum) {
1292 if (
debug)
msg() <<
"Total slices inconsistent with slice number: "
1293 << timeslices <<
", " << sliceNum <<
endmsg;
1298 if (subBlock->dataWords() && !subBlock->unpack()) {
1300 std::string errMsg(subBlock->unpackErrorMsg());
1301 msg() <<
"JEM sub-block unpacking failed: " << errMsg <<
endmsg;
1303 ld.rodErr = subBlock->unpackErrorCode();
1314 const int ssError = derr.
error();
1315 std::vector<int>
dummy(timeslices);
1316 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
1317 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
1321 JetElementData& jedata =
static_cast<JetElementData&
>(
data);
1326 const JemJetElement jetEle(subBlock->jetElement(
slice,
chan));
1327 if (jetEle.data() || ssError) {
1332 if (
layer ==
ld.coreOverlap) {
1335 const unsigned int key =
ld.elementKey.jeKey(phi, eta);
1337 std::make_unique<LVL1::JetElement>(phi, eta,
dummy,
dummy,
key,
1340 jedata.m_jeMap.insert(std::make_pair(
key, jep.get()));
1341 jedata.m_jeCollection->push_back(std::move(jep));
1343 const std::vector<int>& emEnergy(je->
emEnergyVec());
1345 const std::vector<int>& emError(je->
emErrorVec());
1346 const std::vector<int>& hadError(je->
hadErrorVec());
1347 const int nsl = emEnergy.size();
1348 if (timeslices != nsl) {
1350 msg() <<
"Inconsistent number of slices in sub-blocks"
1356 if (emEnergy[
slice] != 0 || hadEnergy[
slice] != 0 ||
1357 emError[
slice] != 0 || hadError[
slice] != 0) {
1358 if (
debug)
msg() <<
"Duplicate data for slice "
1366 const int linkError = jetEle.linkError();
1372 emErrBits.error(), hadErrBits.error(),
1375 }
else if (
verbose && jetEle.data()) {
1376 msg(
MSG::VERBOSE) <<
"Non-zero data but no channel mapping for channel "
1387 JetHitsData& jhdata =
static_cast<JetHitsData&
>(
data);
1391 const unsigned int hits = subBlock->jetHits(
slice);
1395 ld.hitsVec.assign(timeslices, 0);
1398 std::make_unique<LVL1::JEMHits>(swCrate,
module,
ld.hitsVec, trigJem);
1399 jhdata.m_hitsMap.insert(std::make_pair(crate *
m_modules +
module, jhp.get()));
1400 jhdata.m_hitCollection->push_back(std::move(jhp));
1403 const int nsl =
ld.hitsVec.size();
1404 if (timeslices != nsl) {
1406 msg() <<
"Inconsistent number of slices in sub-blocks"
1413 if (
debug)
msg() <<
"Duplicate data for slice "
1428 EnergySumsData& sumdata =
static_cast<EnergySumsData&
>(
data);
1432 const unsigned int ex = subBlock->ex(
slice);
1433 const unsigned int ey = subBlock->ey(
slice);
1434 const unsigned int et = subBlock->et(
slice);
1438 ld.exVec.assign(timeslices, 0);
1439 ld.eyVec.assign(timeslices, 0);
1440 ld.etVec.assign(timeslices, 0);
1445 std::make_unique<LVL1::JEMEtSums>(swCrate,
module,
ld.etVec,
ld.exVec,
ld.eyVec,
1447 sumdata.m_etMap.insert(std::make_pair(crate *
m_modules +
module, sumsp.get()));
1448 sumdata.m_etCollection->push_back(std::move(sumsp));
1453 const int nsl =
ld.exVec.size();
1454 if (timeslices != nsl) {
1456 msg() <<
"Inconsistent number of slices in sub-blocks"
1463 if (
debug)
msg() <<
"Duplicate data for slice "
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ finalize()
StatusCode LVL1BS::JepByteStreamV1Tool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ findCmmHits() [1/2]
Definition at line 1565 of file JepByteStreamV1Tool.cxx.
1569 CmmHitsMap::const_iterator mapIter =
data.m_cmmHitsMap.find(crate * 100 + dataID);
1570 if (mapIter !=
data.m_cmmHitsMap.end())
return mapIter->second;
◆ findCmmHits() [2/2]
Find CMM hits for given crate, data ID.
Definition at line 1556 of file JepByteStreamV1Tool.cxx.
1560 ConstCmmHitsMap::const_iterator mapIter = cmmHitsMap.find(crate * 100 + dataID);
1561 if (mapIter != cmmHitsMap.end())
return mapIter->second;
◆ findCmmSums() [1/2]
Definition at line 1586 of file JepByteStreamV1Tool.cxx.
1590 CmmSumsMap::const_iterator mapIter =
data.m_cmmEtMap.find(crate * 100 + dataID);
1591 if (mapIter !=
data.m_cmmEtMap.end())
return mapIter->second;
◆ findCmmSums() [2/2]
Find CMM energy sums for given crate, data ID.
Definition at line 1577 of file JepByteStreamV1Tool.cxx.
1581 ConstCmmSumsMap::const_iterator mapIter = cmmEtMap.find(crate * 100 + dataID);
1582 if (mapIter != cmmEtMap.end())
return mapIter->second;
◆ findEnergySums() [1/2]
◆ findEnergySums() [2/2]
Find energy sums for given crate, module.
Definition at line 1535 of file JepByteStreamV1Tool.cxx.
1539 ConstEnergySumsMap::const_iterator mapIter = etMap.find(crate *
m_modules +
module);
1540 if (mapIter != etMap.end())
return mapIter->second;
◆ findJetElement() [1/2]
Definition at line 1500 of file JepByteStreamV1Tool.cxx.
1505 const unsigned int key = elementKey.
jeKey(phi, eta);
1506 JetElementMap::const_iterator mapIter =
data.m_jeMap.find(
key);
1507 if (mapIter !=
data.m_jeMap.end())
return mapIter->second;
◆ findJetElement() [2/2]
Find a jet element given eta, phi.
Definition at line 1489 of file JepByteStreamV1Tool.cxx.
1494 const unsigned int key = elementKey.
jeKey(phi, eta);
1495 ConstJetElementMap::const_iterator mapIter = jeMap.find(
key);
1496 if (mapIter != jeMap.end())
return mapIter->second;
◆ findJetHits() [1/2]
◆ findJetHits() [2/2]
Find jet hits for given crate, module.
Definition at line 1514 of file JepByteStreamV1Tool.cxx.
1518 ConstJetHitsMap::const_iterator mapIter = hitsMap.find(crate *
m_modules +
module);
1519 if (mapIter != hitsMap.end())
return mapIter->second;
◆ initialize()
StatusCode LVL1BS::JepByteStreamV1Tool::initialize |
( |
| ) |
|
|
overridevirtual |
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ interfaceID()
const InterfaceID & LVL1BS::JepByteStreamV1Tool::interfaceID |
( |
| ) |
|
|
static |
◆ makeSourceIDs()
std::vector< uint32_t > LVL1BS::JepByteStreamV1Tool::makeSourceIDs |
( |
| ) |
const |
|
private |
Definition at line 561 of file JepByteStreamV1Tool.cxx.
573 for (
int slink = 0; slink < maxSlinks; ++slink)
575 const int daqOrRoi = 0;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ renounce()
◆ renounceArray()
◆ setupCmmEtMap()
◆ setupCmmHitsMap()
Set up CMM hits map.
Definition at line 1655 of file JepByteStreamV1Tool.cxx.
1660 if (hitCollection) {
1663 for (;
pos != pose; ++
pos) {
1666 const int key = crate * 100 +
hits->dataID();
1667 cmmHitsMap.insert(std::make_pair(
key,
hits));
◆ setupEtMap()
◆ setupHitsMap()
◆ setupJeMap()
◆ slinkSlices()
bool LVL1BS::JepByteStreamV1Tool::slinkSlices |
( |
int |
crate, |
|
|
int |
module, |
|
|
int |
modulesPerSlink, |
|
|
int & |
timeslices, |
|
|
int & |
trigJem, |
|
|
const ConstJetElementMap & |
jeMap, |
|
|
const ConstJetHitsMap & |
hitsMap, |
|
|
const ConstEnergySumsMap & |
etMap, |
|
|
const ConstCmmHitsMap & |
cmmHitsMap, |
|
|
const ConstCmmSumsMap & |
cmmEtMap, |
|
|
LVL1::JetElementKey & |
elementKey |
|
) |
| const |
|
private |
Get number of slices and triggered slice offset for next slink.
Definition at line 1693 of file JepByteStreamV1Tool.cxx.
1713 if ( !je )
continue;
1714 const int numdat = 5;
1715 std::vector<int> sums(numdat);
1716 std::vector<int> sizes(numdat);
1732 const int peak = je->
peak();
1733 for (
int i = 0;
i < numdat; ++
i) {
1734 if (sums[
i] == 0)
continue;
1738 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1744 (
hits->JetHitsVec()).end(), 0);
1747 const int peak =
hits->peak();
1751 }
else if (
slices !=
size || trigJ != peak)
return false;
1756 const int numdat = 3;
1757 std::vector<unsigned int> sums(numdat);
1758 std::vector<int> sizes(numdat);
1760 (
et->ExVec()).end(), 0);
1762 (
et->EyVec()).end(), 0);
1764 (
et->EtVec()).end(), 0);
1765 sizes[0] = (
et->ExVec()).
size();
1766 sizes[1] = (
et->EyVec()).
size();
1767 sizes[2] = (
et->EtVec()).
size();
1768 const int peak =
et->peak();
1769 for (
int i = 0;
i < numdat; ++
i) {
1770 if (sums[
i] == 0)
continue;
1774 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1782 const int maxDataID = (maxDataID1 > maxDataID2) ? maxDataID1 : maxDataID2;
1783 for (
int dataID = 0; dataID < maxDataID; ++dataID) {
1784 const int numdat = 6;
1785 std::vector<unsigned int> sums(numdat);
1786 std::vector<int> sizes(numdat);
1788 if (dataID < maxDataID1)
hits =
findCmmHits(crate, dataID, cmmHitsMap);
1791 (
hits->HitsVec()).end(), 0);
1793 (
hits->ErrorVec()).end(), 0);
1794 sizes[0] = (
hits->HitsVec()).
size();
1795 sizes[1] = (
hits->ErrorVec()).
size();
1796 const int peak =
hits->peak();
1797 for (
int i = 0;
i < 2; ++
i) {
1798 if (sums[
i] == 0)
continue;
1802 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1806 if (dataID < maxDataID2)
et =
findCmmSums(crate, dataID, cmmEtMap);
1809 (
et->ExVec()).end(), 0);
1811 (
et->EyVec()).end(), 0);
1813 (
et->EtVec()).end(), 0);
1815 (
et->ExErrorVec()).end(), 0);
1817 (
et->EyErrorVec()).end(), 0);
1819 (
et->EtErrorVec()).end(), 0);
1820 sizes[0] = (
et->ExVec()).
size();
1821 sizes[1] = (
et->EyVec()).
size();
1822 sizes[2] = (
et->EtVec()).
size();
1823 sizes[3] = (
et->ExErrorVec()).
size();
1824 sizes[4] = (
et->EyErrorVec()).
size();
1825 sizes[5] = (
et->EtErrorVec()).
size();
1826 const int peak =
et->peak();
1827 for (
int i = 0;
i < numdat; ++
i) {
1828 if (sums[
i] == 0)
continue;
1832 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
◆ sourceIDs()
const std::vector< uint32_t > & LVL1BS::JepByteStreamV1Tool::sourceIDs |
( |
| ) |
const |
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ m_byteStreamCnvSvc
◆ m_channels
const int LVL1BS::JepByteStreamV1Tool::m_channels |
|
private |
◆ m_crateMax
int LVL1BS::JepByteStreamV1Tool::m_crateMax |
|
private |
◆ m_crateMin
int LVL1BS::JepByteStreamV1Tool::m_crateMin |
|
private |
◆ m_crateOffsetHw
int LVL1BS::JepByteStreamV1Tool::m_crateOffsetHw |
|
private |
◆ m_crateOffsetSw
int LVL1BS::JepByteStreamV1Tool::m_crateOffsetSw |
|
private |
◆ m_crates
const int LVL1BS::JepByteStreamV1Tool::m_crates |
|
private |
◆ m_dataFormat
int LVL1BS::JepByteStreamV1Tool::m_dataFormat |
|
private |
◆ m_detStore
◆ m_dfltSlices
int LVL1BS::JepByteStreamV1Tool::m_dfltSlices |
|
private |
◆ m_errorTool
◆ m_evtStore
◆ m_forceSlices
int LVL1BS::JepByteStreamV1Tool::m_forceSlices |
|
private |
◆ m_jemMaps
◆ m_modules
const int LVL1BS::JepByteStreamV1Tool::m_modules |
|
private |
◆ m_slinks
int LVL1BS::JepByteStreamV1Tool::m_slinks |
|
private |
◆ m_sourceIDsProp
std::vector<uint32_t> LVL1BS::JepByteStreamV1Tool::m_sourceIDsProp |
|
private |
◆ m_srcIdMap
◆ m_subDetector
const eformat::SubDetector LVL1BS::JepByteStreamV1Tool::m_subDetector |
|
private |
◆ m_varHandleArraysDeclared
◆ m_version
int LVL1BS::JepByteStreamV1Tool::m_version |
|
private |
◆ m_vhka
The documentation for this class was generated from the following files:
const DataVector< CMMEtSums > * CmmSums() const
Return pointer to CMM energy sums collection.
static CmmFirmwareCode cmmType(uint32_t word)
CMM differentiation (CMM_CP, CMM_JET, or CMM_ENERGY)
uint16_t minorVersionPreLS1() const
Return last ROD header minor version for pre-LS1 data.
char data[hepevt_bytes_allocation_ATLAS]
int slink(uint32_t code) const
Return slink from unpacked moduleID.
Extra patterns decribing particle interation process.
Const iterator class for DataVector/DataList.
const DataVector< JEMHits > * JetHits() const
Return pointer to hit sums collection.
const std::vector< int > & emEnergyVec() const
Return data for all slices.
void addSlice(int slice, int emEnergy, int hadEnergy, int emError, int hadError, int linkError)
add data for one timeslice.
Template class for assembling a full atlas raw event from subfragments.
virtual unsigned int jeKey(const xAOD::TriggerTower &tower)
returns key of passed tower
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
static int peak(int oldPeak, int oldSlices, int newSlices)
Return new triggered slice offset.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
CMMEtSums object stores Et sums from the Energy CMMs.
int peak() const
return triggered slice offset
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
static bool cmmBlock(uint32_t word)
Determine if header word corresponds to CMM.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
const std::vector< int > & ExErrorVec() const
returns module Ex errors
bool msgLvl(const MSG::Level lvl) const
uint32_t getRobID(uint32_t rod_id) const
Make a ROB Source ID from a ROD source ID.
const std::vector< unsigned int > & EyVec() const
returns module Ey sum
std::vector< size_t > vec
int module() const
returns module number
const std::vector< int > & EyErrorVec() const
returns module Ey errors
void addEy(const std::vector< unsigned int > &Ey)
Update Ey sum.
virtual void setOwner(IDataHandleHolder *o)=0
int dataID() const
returns data ID
const std::vector< int > & hadEnergyVec() const
return Had energy vector reference (all timeslices)
const DataVector< CMMJetHits > * CmmHits() const
Return pointer to CMM hit sums collection.
typename vecDetail::vec_typedef< T, N >::type vec
Define a nice alias for the vectorized type.
Jet elements are the inputs to the Jet, ETmiss and ETsum triggers.
static void data(const std::vector< int > &oldVec, std::vector< int > &newVec, int newSlices)
Return modified data vector<int>
int crate() const
returns crate number
void addEt(const std::vector< unsigned int > &Et, const std::vector< int > &EtError)
Add data to existing objects.
(Non-const) Iterator class for DataVector/DataList.
const std::vector< unsigned int > & JetHitsVec() const
returns jet hits
const std::vector< unsigned int > & EyVec() const
returns module Ey sum
void set(ErrorBit bit, int value=1)
Set an error bit or data.
int crate(uint32_t code) const
Return crate from unpacked moduleID.
void addJetHits(const std::vector< unsigned int > &hits)
Set Jet hits.
const DataVector< JEMEtSums > * EnergySums() const
Return pointer to energy sums collection.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
const std::vector< unsigned int > & EtVec() const
Access multi-slice data.
void addEy(const std::vector< unsigned int > &Ey, const std::vector< int > &EyError)
Update Ey sum.
double eta() const
Eta of centre of JetElement.
static SubBlockWordType wordType(uint32_t word)
Word identification.
const DataVector< JetElement > * JetElements() const
Return pointer to jet element collection.
int error() const
Return the full error word.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
The JetElementKey object provides the key for each JetElement depending on its eta,...
void addHits(const std::vector< unsigned int > &hits, const std::vector< int > &errors)
Add hits to existing object.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const std::vector< unsigned int > & ExVec() const
returns module Ex sum
int crate() const
Data accessors.
const std::vector< int > & hadErrorVec() const
return Had error vector reference (all timeslices)
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
eformat::SubDetector subDet(uint32_t code) const
Return sub-detector for given ID.
void addEt(const std::vector< unsigned int > &Et)
Update ET sum.
void addEx(const std::vector< unsigned int > &Ex, const std::vector< int > &ExError)
Update Ex sum.
void setRodMinorVersion(uint16_t m)
change the ROD minor version
double phi() const
Phi of centre of JetElement.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
CMMJetHits class stores Jet hit multiplicities received by and read out from the Jet CMMs.
uint32_t getRodID(int crate, int slink, int daqOrRoi, eformat::SubDetector subdet) const
Make a ROD Source ID.
const std::vector< unsigned int > & EtVec() const
returns module ET sum
void addEx(const std::vector< unsigned int > &Ex)
Update Ex sum.
std::vector< uint32_t > RODDATA
ROD data as a vector of unsigned int.
const std::vector< int > & emErrorVec() const
return Em error vector reference (all timeslices)
const std::vector< int > & EtErrorVec() const
returns module ET errors
const std::vector< int > & linkErrorVec() const
return link error vector reference (all timeslices)
int maxSlinks() const
Return the maximum possible number of slinks.
int daqOrRoi(uint32_t code) const
Return daqOrRoi from unpacked moduleID.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
RODDATA * getRodData(uint32_t id)
get a block of ROD data
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
const std::vector< unsigned int > & ExVec() const
returns module Ex sum
const std::vector< unsigned int > & HitsVec() const
Multi-slice accessors.
const std::vector< int > & ErrorVec() const
returns errors