Skip to content
Snippets Groups Projects
Commit 90cfdd61 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Merge branch 'LArFebHeaderReader' into 'master'

move code for LArFebHeader reading into separate function to avoid code-duplication

See merge request !39474
parents f2a2ffed 370b9729
No related branches found
No related tags found
6 merge requests!58791DataQualityConfigurations: Modify L1Calo config for web display,!46784MuonCondInterface: Enable thread-safety checking.,!46776Updated LArMonitoring config file for WD to match new files produced using MT,!45405updated ART test cron job,!42417Draft: DIRE and VINCIA Base Fragments for Pythia 8.3,!39474move code for LArFebHeader reading into separate function to avoid code-duplication
/*
Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
*/
#include "LArRawEvent/LArFebHeader.h"
#include "LArByteStream/LArRodBlockStructure.h"
#include "LArFebHeaderReader.h"
void LArFebHeaderReader::fillFebHeader(LArFebHeader* larFebHeader, //output
const LArRodBlockStructure* rodBlock, //input
const ROBFragment& rob) { //input
larFebHeader->SetFormatVersion(rob.rod_version());
larFebHeader->SetSourceId(rob.rod_source_id());
larFebHeader->SetRunNumber(rob.rod_run_no());
larFebHeader->SetELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetBCId(rob.rod_bc_id());
larFebHeader->SetLVL1TigType(rob.rod_lvl1_trigger_type());
larFebHeader->SetDetEventType(rob.rod_detev_type());
//set DSP data
const unsigned nsample=rodBlock->getNumberOfSamples();
larFebHeader->SetRodStatus(rodBlock->getStatus());
larFebHeader->SetDspCodeVersion(rodBlock->getDspCodeVersion());
larFebHeader->SetDspEventCounter(rodBlock->getDspEventCounter());
larFebHeader->SetRodResults1Size(rodBlock->getResults1Size());
larFebHeader->SetRodResults2Size(rodBlock->getResults2Size());
larFebHeader->SetRodRawDataSize(rodBlock->getRawDataSize());
larFebHeader->SetNbSweetCells1(rodBlock->getNbSweetCells1());
larFebHeader->SetNbSweetCells2(rodBlock->getNbSweetCells2());
larFebHeader->SetNbSamples(nsample);
larFebHeader->SetOnlineChecksum(rodBlock->onlineCheckSum());
larFebHeader->SetOfflineChecksum(rodBlock->offlineCheckSum());
if(!rodBlock->hasControlWords()) {
larFebHeader->SetFebELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetFebBCId(rob.rod_bc_id());
} else {
const uint16_t evtid = rodBlock->getCtrl1(0) & 0x1f;
const uint16_t bcid = rodBlock->getCtrl2(0) & 0x1fff;
larFebHeader->SetFebELVL1Id(evtid);
larFebHeader->SetFebBCId(bcid);
for(int iadc=0;iadc<16;iadc++) {
larFebHeader->SetFebCtrl1(rodBlock->getCtrl1(iadc));
larFebHeader->SetFebCtrl2(rodBlock->getCtrl2(iadc));
larFebHeader->SetFebCtrl3(rodBlock->getCtrl3(iadc));
}
for(unsigned int i = 0; i<nsample; i++ ) {
larFebHeader->SetFebSCA(rodBlock->getRadd(0,i) & 0xff);
}
}//end else no control words
return;
}
/*
Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
*/
#include "ByteStreamData/RawEvent.h"
class LArFebHeader;
class LArRodBlockStructure;
namespace LArFebHeaderReader{
using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment;
/**
* @brief Fill info for one FEB Header
* @param lfh Pointer ot the FEB header obj to fill
* @param bl Pointer to the input RodBlockStructure
* @param robFrag Pointer to the input ROB Fragment
*
* Extracts a bunch of control words, etc from the
* byte stream objects LArRodBlockStructure and
* ROBFragment and stores them in a FebHeader object
*
*/
void fillFebHeader(LArFebHeader* lfh, const LArRodBlockStructure* bl, const ROBFragment& robFrag);
} //namespace
......@@ -17,6 +17,8 @@
#include "LArByteStream/LArRodBlockCalibrationV3.h"
#include "LArByteStream/LArRodBlockTransparentV0.h"
#include "LArFebHeaderReader.h"
LArRawCalibDataReadingAlg::LArRawCalibDataReadingAlg(const std::string& name, ISvcLocator* pSvcLocator) :
AthReentrantAlgorithm(name, pSvcLocator) {}
......@@ -265,45 +267,7 @@ StatusCode LArRawCalibDataReadingAlg::execute(const EventContext& ctx) const {
//Decode FebHeaders (if requested)
if (m_doFebHeaders) {
std::unique_ptr<LArFebHeader> larFebHeader(new LArFebHeader(fId));
larFebHeader->SetFormatVersion(rob.rod_version());
larFebHeader->SetSourceId(rob.rod_source_id());
larFebHeader->SetRunNumber(rob.rod_run_no());
larFebHeader->SetELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetBCId(rob.rod_bc_id());
larFebHeader->SetLVL1TigType(rob.rod_lvl1_trigger_type());
larFebHeader->SetDetEventType(rob.rod_detev_type());
//set DSP data
const unsigned nsample=rodBlock->getNumberOfSamples();
larFebHeader->SetRodStatus(rodBlock->getStatus());
larFebHeader->SetDspCodeVersion(rodBlock->getDspCodeVersion());
larFebHeader->SetDspEventCounter(rodBlock->getDspEventCounter());
larFebHeader->SetRodResults1Size(rodBlock->getResults1Size());
larFebHeader->SetRodResults2Size(rodBlock->getResults2Size());
larFebHeader->SetRodRawDataSize(rodBlock->getRawDataSize());
larFebHeader->SetNbSweetCells1(rodBlock->getNbSweetCells1());
larFebHeader->SetNbSweetCells2(rodBlock->getNbSweetCells2());
larFebHeader->SetNbSamples(nsample);
larFebHeader->SetOnlineChecksum(rodBlock->onlineCheckSum());
larFebHeader->SetOfflineChecksum(rodBlock->offlineCheckSum());
if(!rodBlock->hasControlWords()) {
larFebHeader->SetFebELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetFebBCId(rob.rod_bc_id());
} else {
const uint16_t evtid = rodBlock->getCtrl1(0) & 0x1f;
const uint16_t bcid = rodBlock->getCtrl2(0) & 0x1fff;
larFebHeader->SetFebELVL1Id(evtid);
larFebHeader->SetFebBCId(bcid);
for(int iadc=0;iadc<16;iadc++) {
larFebHeader->SetFebCtrl1(rodBlock->getCtrl1(iadc));
larFebHeader->SetFebCtrl2(rodBlock->getCtrl2(iadc));
larFebHeader->SetFebCtrl3(rodBlock->getCtrl3(iadc));
}
for(unsigned int i = 0; i<nsample; i++ ) {
larFebHeader->SetFebSCA(rodBlock->getRadd(0,i) & 0xff);
}
}//end else no control words
LArFebHeaderReader::fillFebHeader(larFebHeader.get(),rodBlock.get(),rob);
febHeaders->push_back(std::move(larFebHeader));
}//end if m_doFebHeaders
......
......@@ -15,6 +15,9 @@
#include "LArByteStream/LArRodBlockPhysicsV5.h"
#include "LArByteStream/LArRodBlockPhysicsV6.h"
#include "LArFebHeaderReader.h"
LArRawDataReadingAlg::LArRawDataReadingAlg(const std::string& name, ISvcLocator* pSvcLocator) :
AthReentrantAlgorithm(name, pSvcLocator) {}
......@@ -212,45 +215,7 @@ StatusCode LArRawDataReadingAlg::execute(const EventContext& ctx) const {
//Decode FebHeaders (if requested)
if (m_doFebHeaders) {
std::unique_ptr<LArFebHeader> larFebHeader(new LArFebHeader(fId));
larFebHeader->SetFormatVersion(rob.rod_version());
larFebHeader->SetSourceId(rob.rod_source_id());
larFebHeader->SetRunNumber(rob.rod_run_no());
larFebHeader->SetELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetBCId(rob.rod_bc_id());
larFebHeader->SetLVL1TigType(rob.rod_lvl1_trigger_type());
larFebHeader->SetDetEventType(rob.rod_detev_type());
//set DSP data
const unsigned nsample=rodBlock->getNumberOfSamples();
larFebHeader->SetRodStatus(rodBlock->getStatus());
larFebHeader->SetDspCodeVersion(rodBlock->getDspCodeVersion());
larFebHeader->SetDspEventCounter(rodBlock->getDspEventCounter());
larFebHeader->SetRodResults1Size(rodBlock->getResults1Size());
larFebHeader->SetRodResults2Size(rodBlock->getResults2Size());
larFebHeader->SetRodRawDataSize(rodBlock->getRawDataSize());
larFebHeader->SetNbSweetCells1(rodBlock->getNbSweetCells1());
larFebHeader->SetNbSweetCells2(rodBlock->getNbSweetCells2());
larFebHeader->SetNbSamples(nsample);
larFebHeader->SetOnlineChecksum(rodBlock->onlineCheckSum());
larFebHeader->SetOfflineChecksum(rodBlock->offlineCheckSum());
if(!rodBlock->hasControlWords()) {
larFebHeader->SetFebELVL1Id(rob.rod_lvl1_id());
larFebHeader->SetFebBCId(rob.rod_bc_id());
} else {
const uint16_t evtid = rodBlock->getCtrl1(0) & 0x1f;
const uint16_t bcid = rodBlock->getCtrl2(0) & 0x1fff;
larFebHeader->SetFebELVL1Id(evtid);
larFebHeader->SetFebBCId(bcid);
for(int iadc=0;iadc<16;iadc++) {
larFebHeader->SetFebCtrl1(rodBlock->getCtrl1(iadc));
larFebHeader->SetFebCtrl2(rodBlock->getCtrl2(iadc));
larFebHeader->SetFebCtrl3(rodBlock->getCtrl3(iadc));
}
for(unsigned int i = 0; i<nsample; i++ ) {
larFebHeader->SetFebSCA(rodBlock->getRadd(0,i) & 0xff);
}
}//end else no control words
LArFebHeaderReader::fillFebHeader(larFebHeader.get(),rodBlock.get(),rob);
febHeaders->push_back(std::move(larFebHeader));
}//end if m_doFebHeaders
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment