|
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 <JepByteStreamTool.h>
|
| JepByteStreamTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~JepByteStreamTool () |
|
virtual StatusCode | initialize () |
|
virtual StatusCode | finalize () |
|
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::JEPBSCollection *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 (JemSubBlock *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 JepByteStreamTool.h.
◆ CmmHitsCollection
◆ CmmHitsMap
◆ CmmSumsCollection
◆ CmmSumsMap
◆ ConstCmmHitsMap
◆ ConstCmmSumsMap
◆ ConstEnergySumsMap
◆ ConstJetElementMap
◆ ConstJetHitsMap
◆ EnergySumsCollection
◆ EnergySumsMap
◆ JetElementCollection
◆ JetElementMap
◆ JetHitsCollection
◆ JetHitsMap
◆ ROBIterator
◆ ROBPointer
◆ RODPointer
◆ StoreGateSvc_t
◆ CollectionType
Enumerator |
---|
JET_ELEMENTS | |
JET_HITS | |
ENERGY_SUMS | |
CMM_HITS | |
CMM_SUMS | |
Definition at line 127 of file JepByteStreamTool.h.
◆ JepByteStreamTool()
LVL1BS::JepByteStreamTool::JepByteStreamTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
Definition at line 50 of file JepByteStreamTool.cxx.
54 m_jemMaps(
"LVL1::JemMappingTool/JemMappingTool"),
55 m_errorTool(
"LVL1BS::L1CaloErrorByteStreamTool/L1CaloErrorByteStreamTool"),
59 declareInterface<JepByteStreamTool>(
this);
62 "Crate/Module/Channel to Eta/Phi/Layer mapping tool");
65 "Offset of JEP crate numbers in bytestream");
67 "Offset of JEP crate numbers in RDOs");
69 "The number of S-Links per crate");
73 "ROB fragment source identifiers");
77 "Format version number in sub-block header");
79 "Format identifier (0-1) in sub-block header");
81 "The number of slices in the simulation");
83 "If >0, the number of slices in bytestream");
◆ ~JepByteStreamTool()
LVL1BS::JepByteStreamTool::~JepByteStreamTool |
( |
| ) |
|
|
virtual |
◆ convert() [1/6]
Convert JEP Container to bytestream.
Definition at line 182 of file JepByteStreamTool.cxx.
229 int timeslicesNew = 1;
231 for (
int crate = 0; crate <
m_crates; ++crate) {
238 if (
module % modulesPerSlink == 0) {
239 const int daqOrRoi = 0;
240 const int slink =
module / modulesPerSlink;
242 msg() <<
"Treating crate " << hwCrate
243 <<
" slink " << slink <<
endmsg;
256 msg(MSG::ERROR) <<
"Inconsistent number of slices or "
257 <<
"triggered slice offsets in data for crate "
258 << hwCrate <<
" slink " << slink <<
endmsg;
259 return StatusCode::FAILURE;
266 <<
"Slices/offset: " << timeslices <<
" " << trigJem;
267 if (timeslices != timeslicesNew) {
268 msg() <<
" modified to " << timeslicesNew <<
" " << trigJemNew;
272 L1CaloUserHeader userHeader;
273 userHeader.setJem(trigJemNew);
277 theROD->push_back(userHeader.header());
287 JemSubBlock*
const subBlock =
new JemSubBlock();
289 hwCrate,
module, timeslicesNew);
291 if (neutralFormat)
break;
304 std::vector<int> emData;
305 std::vector<int> hadData;
306 std::vector<int> emErrors;
307 std::vector<int> hadErrors;
315 const int index = ( neutralFormat ) ? 0 :
slice;
316 JemSubBlock*
const subBlock = jemBlocks[
index];
322 subBlock->fillJetElement(
slice, jetEle);
332 std::vector<unsigned int>
vec;
335 const int index = ( neutralFormat ) ? 0 :
slice;
336 JemSubBlock*
const subBlock = jemBlocks[
index];
342 std::vector<unsigned int> exVec;
343 std::vector<unsigned int> eyVec;
344 std::vector<unsigned int> etVec;
349 const int index = ( neutralFormat ) ? 0 :
slice;
350 JemSubBlock*
const subBlock = jemBlocks[
index];
360 JemSubBlock*
const subBlock = *
pos;
361 if ( !subBlock->pack()) {
362 msg(MSG::ERROR) <<
"JEM sub-block packing failed" <<
endmsg;
363 return StatusCode::FAILURE;
366 msg() <<
"JEM sub-block data words: "
367 << subBlock->dataWords() <<
endmsg;
369 subBlock->write(theROD);
385 CmmEnergySubBlock*
const enBlock =
new CmmEnergySubBlock();
386 const int cmmEnergyVersion = 2;
391 CmmJetSubBlock*
const jetBlock =
new CmmJetSubBlock();
396 if (neutralFormat)
break;
402 for (
int dataID = 0; dataID < maxDataID; ++dataID) {
430 std::vector<unsigned int> ex;
431 std::vector<unsigned int> ey;
432 std::vector<unsigned int>
et;
433 std::vector<int> exErr;
434 std::vector<int> eyErr;
435 std::vector<int> etErr;
456 const int index = ( neutralFormat ) ? 0 :
slice;
457 CmmEnergySubBlock*
const subBlock = cmmEnergyBlocks[
index];
467 exError, eyError, etError);
474 for (;
pos != cmmEnergyBlocks.
end(); ++
pos) {
475 CmmEnergySubBlock*
const subBlock = *
pos;
476 if ( !subBlock->pack()) {
477 msg(MSG::ERROR) <<
"CMM-Energy sub-block packing failed" <<
endmsg;
478 return StatusCode::FAILURE;
481 msg() <<
"CMM-Energy sub-block data words: "
482 << subBlock->dataWords() <<
endmsg;
484 subBlock->write(theROD);
490 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 JepByteStreamTool.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 JemSubBlock 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 msg() <<
"Treating crate " << rodCrate
692 L1CaloUserHeader userHeader(*
payload);
693 const int minorVersion = (*rob)->rod_version() & 0xffff;
694 userHeader.setVersion(minorVersion);
695 const int headerWords = userHeader.words();
696 if (headerWords != 1) {
698 if (
debug)
msg() <<
"Unexpected number of user header words: "
702 for (
int i = 0;
i < headerWords; ++
i) ++
payload;
704 int trigJem = userHeader.jem();
705 int trigCmm = userHeader.jepCmm();
707 msg() <<
"Minor format version number: " << MSG::hex
708 << minorVersion << MSG::dec <<
endmsg
709 <<
"JEM triggered slice offset: " << trigJem <<
endmsg
710 <<
"CMM triggered slice offset: " << trigCmm <<
endmsg;
712 if (trigJem != trigCmm) {
713 const int newTrig = (trigJem > trigCmm) ? trigJem : trigCmm;
716 if (
debug)
msg() <<
"Changed both offsets to " << newTrig <<
endmsg;
722 while (
payload != payloadEnd) {
732 cmmJetSubBlock.clear();
734 if (cmmJetSubBlock.crate() != rodCrate) {
735 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
748 cmmEnergySubBlock.clear();
750 if (cmmEnergySubBlock.crate() != rodCrate) {
751 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
772 if (jemSubBlock.crate() != rodCrate) {
773 if (
debug)
msg() <<
"Inconsistent crate number in ROD source ID"
792 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 797 of file JepByteStreamTool.cxx.
805 const int hwCrate = subBlock->crate();
806 const int module = subBlock->cmmPosition();
807 const int firmware = subBlock->cmmFirmware();
808 const int summing = subBlock->cmmSumming();
809 const int timeslices = subBlock->timeslices();
810 const int sliceNum = subBlock->slice();
812 msg() <<
"CMM-Energy: Crate " << hwCrate
814 <<
" Firmware " << firmware
815 <<
" Summing " << summing
816 <<
" Total slices " << timeslices
817 <<
" Slice " << sliceNum <<
endmsg;
819 if (timeslices <= trigCmm) {
820 if (
debug)
msg() <<
"Triggered CMM slice from header "
821 <<
"inconsistent with number of slices: "
822 << trigCmm <<
", " << timeslices <<
endmsg;
826 if (timeslices <= sliceNum) {
827 if (
debug)
msg() <<
"Total slices inconsistent with slice number: "
828 << timeslices <<
", " << sliceNum <<
endmsg;
833 if (subBlock->dataWords() && !subBlock->unpack()) {
835 std::string errMsg(subBlock->unpackErrorMsg());
836 msg() <<
"CMM-Energy sub-block unpacking failed: " << errMsg <<
endmsg;
838 ld.rodErr = subBlock->unpackErrorCode();
850 const int ssError = derr.
error();
851 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
852 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
879 const unsigned int ex = subBlock->ex(
slice,
source);
880 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 JepByteStreamTool.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;
1183 const int err = errBits.error();
1187 ld.hitsVec.assign(timeslices, 0);
1188 ld.errVec.assign(timeslices, 0);
1192 std::make_unique<LVL1::CMMJetHits>(swCrate, dataID,
ld.hitsVec,
ld.errVec, trigCmm);
1193 const int key = crate * 100 + dataID;
1194 data.m_cmmHitsMap.insert(std::make_pair(
key, jhp.get()));
1195 data.m_cmmHitCollection->push_back(std::move(jhp));
1199 const int nsl =
ld.hitsVec.size();
1200 if (timeslices != nsl) {
1201 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
1221 const unsigned int etMap = subBlock->jetEtMap(
slice);
1222 if ( etMap || ssError ) {
1226 ld.hitsVec.assign(timeslices, 0);
1227 ld.errVec.assign(timeslices, 0);
1231 std::make_unique<LVL1::CMMJetHits>(swCrate, dataID,
ld.hitsVec,
ld.errVec, trigCmm);
1232 const int key = crate * 100 + dataID;
1233 data.m_cmmHitsMap.insert(std::make_pair(
key, mapp.get()));
1234 data.m_cmmHitCollection->push_back(std::move(mapp));
1238 const int nsl =
ld.hitsVec.size();
1239 if (timeslices != nsl) {
1240 if (
debug)
msg() <<
"Inconsistent number of slices in sub-blocks"
◆ decodeJem()
Unpack JEM sub-block.
Definition at line 1263 of file JepByteStreamTool.cxx.
1271 const int hwCrate = subBlock->crate();
1272 const int module = subBlock->module();
1273 const int timeslices = subBlock->timeslices();
1274 const int sliceNum = subBlock->slice();
1276 msg() <<
"JEM: Crate " << hwCrate
1278 <<
" Total slices " << timeslices
1279 <<
" Slice " << sliceNum <<
endmsg;
1281 if (timeslices <= trigJem) {
1282 if (
debug)
msg() <<
"Triggered JEM slice from header "
1283 <<
"inconsistent with number of slices: "
1284 << trigJem <<
", " << timeslices <<
endmsg;
1288 if (timeslices <= sliceNum) {
1289 if (
debug)
msg() <<
"Total slices inconsistent with slice number: "
1290 << timeslices <<
", " << sliceNum <<
endmsg;
1295 if (subBlock->dataWords() && !subBlock->unpack()) {
1297 std::string errMsg(subBlock->unpackErrorMsg());
1298 msg() <<
"JEM sub-block unpacking failed: " << errMsg <<
endmsg;
1300 ld.rodErr = subBlock->unpackErrorCode();
1311 const int ssError = derr.
error();
1312 std::vector<int>
dummy(timeslices);
1313 const int sliceBeg = ( neutralFormat ) ? 0 : sliceNum;
1314 const int sliceEnd = ( neutralFormat ) ? timeslices : sliceNum + 1;
1318 JetElementData& jedata =
static_cast<JetElementData&
>(
data);
1323 const JemJetElement jetEle(subBlock->jetElement(
slice,
chan));
1324 if (jetEle.data() || ssError) {
1329 if (
layer ==
ld.coreOverlap) {
1332 const unsigned int key =
ld.elementKey.jeKey(phi, eta);
1334 std::make_unique<LVL1::JetElement>(phi, eta,
dummy,
dummy,
key,
1337 jedata.m_jeMap.insert(std::make_pair(
key, jep.get()));
1338 jedata.m_jeCollection->push_back(std::move(jep));
1340 const std::vector<int>& emEnergy(je->
emEnergyVec());
1342 const std::vector<int>& emError(je->
emErrorVec());
1343 const std::vector<int>& hadError(je->
hadErrorVec());
1344 const int nsl = emEnergy.size();
1345 if (timeslices != nsl) {
1347 msg() <<
"Inconsistent number of slices in sub-blocks"
1353 if (emEnergy[
slice] != 0 || hadEnergy[
slice] != 0 ||
1354 emError[
slice] != 0 || hadError[
slice] != 0) {
1355 if (
debug)
msg() <<
"Duplicate data for slice "
1363 const int linkError = jetEle.linkError();
1369 emErrBits.error(), hadErrBits.error(),
1372 }
else if (
verbose && jetEle.data()) {
1373 msg(
MSG::VERBOSE) <<
"Non-zero data but no channel mapping for channel "
1384 JetHitsData& jhdata =
static_cast<JetHitsData&
>(
data);
1388 const unsigned int hits = subBlock->jetHits(
slice);
1392 ld.hitsVec.assign(timeslices, 0);
1395 std::make_unique<LVL1::JEMHits>(swCrate,
module,
ld.hitsVec, trigJem);
1396 jhdata.m_hitsMap.insert(std::make_pair(crate *
m_modules +
module, jhp.get()));
1397 jhdata.m_hitCollection->push_back(std::move(jhp));
1400 const int nsl =
ld.hitsVec.size();
1401 if (timeslices != nsl) {
1403 msg() <<
"Inconsistent number of slices in sub-blocks"
1410 if (
debug)
msg() <<
"Duplicate data for slice "
1425 EnergySumsData& sumdata =
static_cast<EnergySumsData&
>(
data);
1429 const unsigned int ex = subBlock->ex(
slice);
1430 const unsigned int ey = subBlock->ey(
slice);
1431 const unsigned int et = subBlock->et(
slice);
1435 ld.exVec.assign(timeslices, 0);
1436 ld.eyVec.assign(timeslices, 0);
1437 ld.etVec.assign(timeslices, 0);
1442 std::make_unique<LVL1::JEMEtSums>(swCrate,
module,
ld.etVec,
ld.exVec,
ld.eyVec,
1444 sumdata.m_etMap.insert(std::make_pair(crate *
m_modules +
module, sumsp.get()));
1445 sumdata.m_etCollection->push_back(std::move(sumsp));
1450 const int nsl =
ld.exVec.size();
1451 if (timeslices != nsl) {
1453 msg() <<
"Inconsistent number of slices in sub-blocks"
1460 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::JepByteStreamTool::finalize |
( |
| ) |
|
|
virtual |
◆ findCmmHits() [1/2]
Definition at line 1562 of file JepByteStreamTool.cxx.
1566 CmmHitsMap::const_iterator mapIter =
data.m_cmmHitsMap.find(crate * 100 + dataID);
1567 if (mapIter !=
data.m_cmmHitsMap.end())
return mapIter->second;
◆ findCmmHits() [2/2]
Find CMM hits for given crate, data ID.
Definition at line 1553 of file JepByteStreamTool.cxx.
1557 ConstCmmHitsMap::const_iterator mapIter = cmmHitsMap.find(crate * 100 + dataID);
1558 if (mapIter != cmmHitsMap.end())
return mapIter->second;
◆ findCmmSums() [1/2]
Definition at line 1583 of file JepByteStreamTool.cxx.
1587 CmmSumsMap::const_iterator mapIter =
data.m_cmmEtMap.find(crate * 100 + dataID);
1588 if (mapIter !=
data.m_cmmEtMap.end())
return mapIter->second;
◆ findCmmSums() [2/2]
Find CMM energy sums for given crate, data ID.
Definition at line 1574 of file JepByteStreamTool.cxx.
1578 ConstCmmSumsMap::const_iterator mapIter = cmmEtMap.find(crate * 100 + dataID);
1579 if (mapIter != cmmEtMap.end())
return mapIter->second;
◆ findEnergySums() [1/2]
◆ findEnergySums() [2/2]
Find energy sums for given crate, module.
Definition at line 1532 of file JepByteStreamTool.cxx.
1536 ConstEnergySumsMap::const_iterator mapIter = etMap.find(crate *
m_modules +
module);
1537 if (mapIter != etMap.end())
return mapIter->second;
◆ findJetElement() [1/2]
Definition at line 1497 of file JepByteStreamTool.cxx.
1502 const unsigned int key = elementKey.
jeKey(phi, eta);
1503 JetElementMap::const_iterator mapIter =
data.m_jeMap.find(
key);
1504 if (mapIter !=
data.m_jeMap.end())
return mapIter->second;
◆ findJetElement() [2/2]
Find a jet element given eta, phi.
Definition at line 1486 of file JepByteStreamTool.cxx.
1491 const unsigned int key = elementKey.
jeKey(phi, eta);
1492 ConstJetElementMap::const_iterator mapIter = jeMap.find(
key);
1493 if (mapIter != jeMap.end())
return mapIter->second;
◆ findJetHits() [1/2]
◆ findJetHits() [2/2]
Find jet hits for given crate, module.
Definition at line 1511 of file JepByteStreamTool.cxx.
1515 ConstJetHitsMap::const_iterator mapIter = hitsMap.find(crate *
m_modules +
module);
1516 if (mapIter != hitsMap.end())
return mapIter->second;
◆ initialize()
StatusCode LVL1BS::JepByteStreamTool::initialize |
( |
| ) |
|
|
virtual |
Definition at line 96 of file JepByteStreamTool.cxx.
101 if (
sc.isFailure()) {
107 if (
sc.isFailure()) {
114 return StatusCode::SUCCESS;
◆ 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::JepByteStreamTool::interfaceID |
( |
| ) |
|
|
static |
◆ makeSourceIDs()
std::vector< uint32_t > LVL1BS::JepByteStreamTool::makeSourceIDs |
( |
| ) |
const |
|
private |
Definition at line 561 of file JepByteStreamTool.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()
Set up CMM energy sums map.
Definition at line 1670 of file JepByteStreamTool.cxx.
1678 for (;
pos != pose; ++
pos) {
1681 const int key = crate * 100 + sums->
dataID();
1682 cmmEtMap.insert(std::make_pair(
key, sums));
◆ setupCmmHitsMap()
Set up CMM hits map.
Definition at line 1651 of file JepByteStreamTool.cxx.
1656 if (hitCollection) {
1659 for (;
pos != pose; ++
pos) {
1662 const int key = crate * 100 +
hits->dataID();
1663 cmmHitsMap.insert(std::make_pair(
key,
hits));
◆ setupEtMap()
◆ setupHitsMap()
◆ setupJeMap()
◆ slinkSlices()
bool LVL1BS::JepByteStreamTool::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 1689 of file JepByteStreamTool.cxx.
1709 if ( !je )
continue;
1710 const int numdat = 5;
1711 std::vector<int> sums(numdat);
1712 std::vector<int> sizes(numdat);
1728 const int peak = je->
peak();
1729 for (
int i = 0;
i < numdat; ++
i) {
1730 if (sums[
i] == 0)
continue;
1734 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1740 (
hits->JetHitsVec()).end(), 0);
1743 const int peak =
hits->peak();
1747 }
else if (
slices !=
size || trigJ != peak)
return false;
1752 const int numdat = 3;
1753 std::vector<unsigned int> sums(numdat);
1754 std::vector<int> sizes(numdat);
1756 (
et->ExVec()).end(), 0);
1758 (
et->EyVec()).end(), 0);
1760 (
et->EtVec()).end(), 0);
1761 sizes[0] = (
et->ExVec()).
size();
1762 sizes[1] = (
et->EyVec()).
size();
1763 sizes[2] = (
et->EtVec()).
size();
1764 const int peak =
et->peak();
1765 for (
int i = 0;
i < numdat; ++
i) {
1766 if (sums[
i] == 0)
continue;
1770 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1778 const int maxDataID = (maxDataID1 > maxDataID2) ? maxDataID1 : maxDataID2;
1779 for (
int dataID = 0; dataID < maxDataID; ++dataID) {
1780 const int numdat = 6;
1781 std::vector<unsigned int> sums(numdat);
1782 std::vector<int> sizes(numdat);
1784 if (dataID < maxDataID1)
hits =
findCmmHits(crate, dataID, cmmHitsMap);
1787 (
hits->HitsVec()).end(), 0);
1789 (
hits->ErrorVec()).end(), 0);
1790 sizes[0] = (
hits->HitsVec()).
size();
1791 sizes[1] = (
hits->ErrorVec()).
size();
1792 const int peak =
hits->peak();
1793 for (
int i = 0;
i < 2; ++
i) {
1794 if (sums[
i] == 0)
continue;
1798 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
1802 if (dataID < maxDataID2)
et =
findCmmSums(crate, dataID, cmmEtMap);
1805 (
et->ExVec()).end(), 0);
1807 (
et->EyVec()).end(), 0);
1809 (
et->EtVec()).end(), 0);
1811 (
et->ExErrorVec()).end(), 0);
1813 (
et->EyErrorVec()).end(), 0);
1815 (
et->EtErrorVec()).end(), 0);
1816 sizes[0] = (
et->ExVec()).
size();
1817 sizes[1] = (
et->EyVec()).
size();
1818 sizes[2] = (
et->EtVec()).
size();
1819 sizes[3] = (
et->ExErrorVec()).
size();
1820 sizes[4] = (
et->EyErrorVec()).
size();
1821 sizes[5] = (
et->EtErrorVec()).
size();
1822 const int peak =
et->peak();
1823 for (
int i = 0;
i < numdat; ++
i) {
1824 if (sums[
i] == 0)
continue;
1828 }
else if (
slices != sizes[
i] || trigJ != peak)
return false;
◆ sourceIDs()
const std::vector< uint32_t > & LVL1BS::JepByteStreamTool::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::JepByteStreamTool::m_channels |
|
private |
◆ m_crateOffsetHw
int LVL1BS::JepByteStreamTool::m_crateOffsetHw |
|
private |
◆ m_crateOffsetSw
int LVL1BS::JepByteStreamTool::m_crateOffsetSw |
|
private |
◆ m_crates
const int LVL1BS::JepByteStreamTool::m_crates |
|
private |
◆ m_dataFormat
int LVL1BS::JepByteStreamTool::m_dataFormat |
|
private |
◆ m_detStore
◆ m_dfltSlices
int LVL1BS::JepByteStreamTool::m_dfltSlices |
|
private |
◆ m_errorTool
◆ m_evtStore
◆ m_forceSlices
int LVL1BS::JepByteStreamTool::m_forceSlices |
|
private |
◆ m_jemMaps
◆ m_modules
const int LVL1BS::JepByteStreamTool::m_modules |
|
private |
◆ m_slinks
int LVL1BS::JepByteStreamTool::m_slinks |
|
private |
◆ m_sourceIDsProp
std::vector<uint32_t> LVL1BS::JepByteStreamTool::m_sourceIDsProp |
|
private |
◆ m_srcIdMap
◆ m_subDetector
const eformat::SubDetector LVL1BS::JepByteStreamTool::m_subDetector |
|
private |
◆ m_varHandleArraysDeclared
◆ m_version
int LVL1BS::JepByteStreamTool::m_version |
|
private |
◆ m_vhka
The documentation for this class was generated from the following files:
static CmmFirmwareCode cmmType(uint32_t word)
CMM differentiation (CMM_CP, CMM_JET, or CMM_ENERGY)
char data[hepevt_bytes_allocation_ATLAS]
int slink(uint32_t code) const
Return slink from unpacked moduleID.
const DataVector< JEMHits > * JetHits() const
Return pointer to hit sums collection.
Extra patterns decribing particle interation process.
Const iterator class for DataVector/DataList.
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)
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 DataVector< JetElement > * JetElements() const
Return pointer to jet element collection.
const std::vector< unsigned int > & JetHitsVec() const
returns jet hits
::StatusCode StatusCode
StatusCode definition for legacy code.
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.
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< CMMJetHits > * CmmHits() const
Return pointer to CMM hit sums collection.
int error() const
Return the full error word.
const DataVector< CMMEtSums > * CmmSums() const
Return pointer to CMM energy sums collection.
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,...
uint16_t minorVersion() const
Return ROD header minor version to use when writing BS.
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.
const DataVector< JEMEtSums > * EnergySums() const
Return pointer to energy sums collection.
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