Skip to content
Snippets Groups Projects
Commit d8f3a5a4 authored by Som's avatar Som
Browse files

skeleton for MBTS Upgrade

parent f3903b2b
No related branches found
No related tags found
7 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,!31525Mbts Current Event Time finding Fix,!30868MbtsFexAlgorithmMT
/*
Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
*/
#include "MbtsFexMT.h"
MbtsFexMT::MbtsFexMT(const std::string& name, ISvcLocator* pSvcLocator) :
......@@ -13,76 +12,8 @@ MbtsFexMT::~MbtsFexMT()
{
}
MbtsFexMT::MbtsFexMT(const std::string &name, ISvcLocator* pSvcLocator): HLT::AllTEAlgo(name, pSvcLocator),
T2MbtsUtils(),
m_timerLoadColl(0),
m_timerAlg(0),
m_timerSave(0),
m_data("TrigDataAccess/TrigDataAccess"),
m_tileTBID(0),
m_error(0),
m_triggerEnergies(xAOD::TrigT2MbtsBits::NUM_MBTS,0.),
m_triggerTimes(xAOD::TrigT2MbtsBits::NUM_MBTS,0.),
m_triggerID(xAOD::TrigT2MbtsBits::NUM_MBTS,0.),
m_useCachedResult(false),
m_t2MbtsBits(0),
m_cachedTE(0) {
declareProperty("TrigDataAccess",m_data,"Data Access for LVL2 Calo Algorithms");
// These properties are used for monitoring only.
declareProperty("Threshold", m_threshold = 40.0/222.0 ); // Value in pC
declareProperty("TimeCut", m_timeCut=-1.0);
declareProperty("GlobalTimeOffset", m_globalTimeOffset=0.0);
declareProperty("TimeOffsetA0", m_timeOffsets[0]=0.0);
declareProperty("TimeOffsetA1", m_timeOffsets[1]=0.0);
declareProperty("TimeOffsetA2", m_timeOffsets[2]=0.0);
declareProperty("TimeOffsetA3", m_timeOffsets[3]=0.0);
declareProperty("TimeOffsetA4", m_timeOffsets[4]=0.0);
declareProperty("TimeOffsetA5", m_timeOffsets[5]=0.0);
declareProperty("TimeOffsetA6", m_timeOffsets[6]=0.0);
declareProperty("TimeOffsetA7", m_timeOffsets[7]=0.0);
declareProperty("TimeOffsetA8", m_timeOffsets[8]=0.0);
declareProperty("TimeOffsetA9", m_timeOffsets[9]=0.0);
declareProperty("TimeOffsetA10", m_timeOffsets[10]=0.0);
declareProperty("TimeOffsetA11", m_timeOffsets[11]=0.0);
declareProperty("TimeOffsetA12", m_timeOffsets[12]=0.0);
declareProperty("TimeOffsetA13", m_timeOffsets[13]=0.0);
declareProperty("TimeOffsetA14", m_timeOffsets[14]=0.0);
declareProperty("TimeOffsetA15", m_timeOffsets[15]=0.0);
declareProperty("TimeOffsetC0", m_timeOffsets[16]=0.0);
declareProperty("TimeOffsetC1", m_timeOffsets[17]=0.0);
declareProperty("TimeOffsetC2", m_timeOffsets[18]=0.0);
declareProperty("TimeOffsetC3", m_timeOffsets[19]=0.0);
declareProperty("TimeOffsetC4", m_timeOffsets[20]=0.0);
declareProperty("TimeOffsetC5", m_timeOffsets[21]=0.0);
declareProperty("TimeOffsetC6", m_timeOffsets[22]=0.0);
declareProperty("TimeOffsetC7", m_timeOffsets[23]=0.0);
declareProperty("TimeOffsetC8", m_timeOffsets[24]=0.0);
declareProperty("TimeOffsetC9", m_timeOffsets[25]=0.0);
declareProperty("TimeOffsetC10", m_timeOffsets[26]=0.0);
declareProperty("TimeOffsetC11", m_timeOffsets[27]=0.0);
declareProperty("TimeOffsetC12", m_timeOffsets[28]=0.0);
declareProperty("TimeOffsetC13", m_timeOffsets[29]=0.0);
declareProperty("TimeOffsetC14", m_timeOffsets[30]=0.0);
declareProperty("TimeOffsetC15", m_timeOffsets[31]=0.0);
declareMonitoredVariable("MultiplicityEBA", m_mult.first); // Number of counters within cuts, side A
declareMonitoredVariable("MultiplicityEBC", m_mult.second); // Number of counters within cuts, side C
declareMonitoredVariable("TimeDiff_A_C", m_timeDiff_A_C); // Time difference A - C
declareMonitoredVariable("BCID", m_BCID);
declareMonitoredStdContainer("TriggerEnergies", m_triggerEnergies); // Energies deposited in each counter
declareMonitoredStdContainer("TriggerTimes", m_triggerTimes); // Relative times of each of the triggers.
declareMonitoredStdContainer("TriggerID", m_triggerID); // ID of MBTS detectors
}
//--------------------------------------------------------------------------------------
StatusCode MbtsFexMT::initialize()
{
ATH_CHECK(m_t2MbtsBits.initialize());
if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve());
return StatusCode::SUCCESS;
}
......@@ -93,82 +24,9 @@ StatusCode MbtsFexMT::finalize()
StatusCode MbtsFexMT::execute(const EventContext& context) const
{
// Caching.
// First check whether we executed this instance before:
if(m_useCachedResult) {
ATH_MSG_DEBUG("Executing " << name() << " in cached mode");
// Get all input TEs (for seeding relation of navigation structure)
HLT::TEVec allTEs;
std::vector<HLT::TEVec>::const_iterator itEnd = tes_in.end();
for( std::vector<HLT::TEVec>::const_iterator it = tes_in.begin(); it != itEnd; ++it) {
HLT::TEVec::const_iterator inner_itEnd = (*it).end();
for (HLT::TEVec::const_iterator inner_it = (*it).begin();
inner_it != inner_itEnd; ++inner_it) {
allTEs.push_back(*inner_it);
}
}
// Create an output TE seeded by the inputs
HLT::TriggerElement* outputTE = config()->getNavigation()->addNode(allTEs, type_out);
outputTE->setActiveState(true);
// Save (cached) feature to output TE:
m_config->getNavigation()->copyAllFeatures( m_cachedTE, outputTE );
return HLT::OK;
}
ATH_MSG_DEBUG("Executing this MbtsFexMT as " << name());
// start monitoring
beforeExecMonitors().ignore();
// monitor
const xAOD::EventInfo* evinfo(0);
StatusCode sc = store()->retrieve(evinfo);
if( sc.isFailure() ){
ATH_MSG_ERROR("Cannot retrieve xAOD::EventInfo from SG.");
return HLT::SG_ERROR;
}
else {
m_BCID = evinfo->bcid();
ATH_MSG_DEBUG("BCID is " << m_BCID);
}
// Reset errors
m_error=0x0;
if(timerSvc())
m_timerLoadColl->start();
// Reset Iterators
m_itBegin=m_itEnd;
if(m_data->LoadMBTS(m_itBegin,m_itEnd).isFailure()){
m_error|=m_data->report_error();
return HLT::ErrorCode(HLT::Action::ABORT_CHAIN, HLT::Reason::BAD_JOB_SETUP);
}
if(m_itBegin == m_itEnd) {
ATH_MSG_WARNING("The MBTS TileCellCollection has no elements!");
}
if(timerSvc()){
m_timerLoadColl->stop();
m_timerAlg->start();
}
SG::ReadHandle<TileTBID> MbtsHelper(m_tileTBID, context );
uint32_t bit_pos = 0;
// Clear the monitoring variables.
m_triggerID.clear();
m_triggerID.resize(xAOD::TrigT2MbtsBits::NUM_MBTS,0);
m_triggerEnergies.clear();
m_triggerEnergies.resize(xAOD::TrigT2MbtsBits::NUM_MBTS,0);
m_triggerTimes.clear();
m_triggerTimes.resize(xAOD::TrigT2MbtsBits::NUM_MBTS,0);
// Pack values into vectors.
for( m_itt=m_itBegin; m_itt != m_itEnd; ++m_itt ){
......@@ -230,100 +88,8 @@ StatusCode MbtsFexMT::execute(const EventContext& context) const
}
}
if( timerSvc() ){
m_timerAlg->stop();
m_timerSave->start();
}
m_t2MbtsBits = new xAOD::TrigT2MbtsBits();
m_t2MbtsBits->makePrivateStore();
m_t2MbtsBits->setTriggerEnergies(m_triggerEnergies);
m_t2MbtsBits->setTriggerTimes(m_triggerTimes);
// Calculate the multiplicities to fill the monitoring variables
if(!calculateMultiplicities(m_t2MbtsBits,0,msg(),msgLvl())) {
ATH_MSG_DEBUG("calculateMultiplicities failed");
return HLT::OK;
}
// A vector of trigger elements is passed into this function, where
// for each trigger element type provided there is a vector of
// trigger elements. For example, L1_MBTS_1 L2_MBTS_2 L3_MBTS_3 are
// each a vector of one element. Therefore start by concatenating
// the trigger elements.
HLT::TEVec allTEs;
std::vector<HLT::TEVec>::const_iterator itEnd = tes_in.end();
for(std::vector<HLT::TEVec>::const_iterator it = tes_in.begin(); it != itEnd; ++it) {
HLT::TEVec::const_iterator inner_itEnd = (*it).end();
for(HLT::TEVec::const_iterator inner_it = (*it).begin(); inner_it != inner_itEnd; ++inner_it ){
ATH_MSG_DEBUG("Creating TE seeded from input TE " << (*inner_it)->getId());
allTEs.push_back(*inner_it);
}
}
// Create an output TE seeded by the inputs
HLT::TriggerElement* outputTE = config()->getNavigation()->addNode(allTEs, type_out);
outputTE->setActiveState(true);
HLT::ErrorCode hltStatus = attachFeature(outputTE, m_t2MbtsBits, "T2Mbts");
if(hltStatus != HLT::OK) {
ATH_MSG_ERROR("Write of TrigEMCluster into outputTE failed");
return hltStatus;
}
if( timerSvc() )
m_timerSave->stop();
// Cache the TE in case this Fex is called again in this event.
m_useCachedResult = true;
m_cachedTE = outputTE;
// Stop monitoring
afterExecMonitors().ignore();
return HLT::OK;
}
//--------------------------------------------------------------------------------------
HLT::ErrorCode MbtsFexMT::hltInitialize() {
ATH_MSG_INFO("in MbtsFexMT::initialize()");
if(m_data.retrieve().isFailure()) {
ATH_MSG_ERROR("Could not get m_data");
return HLT::BAD_JOB_SETUP;
}
// Retrieve TileTBID helper from det store
// (The MBTS was added to the Test Beam (TB) list.)
if(detStore()->retrieve(m_tileTBID).isFailure()) {
ATH_MSG_ERROR("Unable to retrieve TileTBID helper from DetectorStore");
return HLT::BAD_JOB_SETUP;
}
// Create timers
if(timerSvc()) {
m_timerLoadColl = addTimer("LoadColl");
m_timerAlg = addTimer("Algorithm");
m_timerSave = addTimer("Saving");
}
return HLT::OK;
}
//--------------------------------------------------------------------------------------
HLT::ErrorCode MbtsFexMT::hltFinalize() {
return HLT::OK;
}
/** A pointer for access to the Tile Test Beam Identifier helper. */
//--------------------------------------------------------------------------------------
HLT::ErrorCode MbtsFexMT::hltEndEvent() {
m_useCachedResult = false;
m_t2MbtsBits = 0;
m_cachedTE=0;
return HLT::OK;
return StatusCode::SUCCESS;
}
......@@ -5,140 +5,86 @@
#ifndef TRIGT2MINBIAS_MBTS_FEX_MT_H
#define TRIGT2MINBIAS_T2_MBTS_FEX_MT_H
#include "TrigInterfaces/AllTEAlgo.h"
#include "TrigT2CaloCommon/ITrigDataAccess.h"
#include "TileEvent/TileCellCollection.h"
#include "T2MbtsUtils.h"
#include <vector>
#include "MbtsFexMT.h"
#include "AthenaBaseComps/AthReentrantAlgorithm.h"
#include "xAODTrigger/TrigCompositeContainer.h"
#include "xAODTrigger/TrigCompositeAuxContainer.h"
#include "AthenaMonitoringKernel/Monitored.h"
#include "TrigTimeAlgs/TrigTimerSvc.h"
#include "xAODTrigMinBias/TrigT2MbtsBits.h"
#include "xAODTrigMinBias/TrigT2MbtsBitsAuxContainer.h"
#include "TileIdentifier/TileTBID.h"
#include "TrigTimeAlgs/TrigTimerSvc.h"
#include "TrigT2CaloCommon/ITrigDataAccess.h"
#include "xAODEventInfo/EventInfo.h"
#include <cstdlib>
#include <bitset>
#include <string>
#include "GaudiKernel/ToolHandle.h"
class TileTBID;
// namespace xAOD{
// class TrigT2MbtsBits;
// }
class MbtsFexMT : public AthReentrantAlgorithm {
public:
MbtsFexMT(const std::string& name, ISvcLocator* pSvcLocator);
virtual ~MbtsFexMT() override;
/** @class MbtsFexMT
virtual StatusCode initialize() override;
virtual StatusCode execute(const EventContext& context) const override;
virtual StatusCode finalize() override;
@author W. H. Bell <W.Bell@cern.ch>
private:
A feature extraction algorithm to retrieve the MBTS TileCells from the DSP
*/
class MbtsFexMT: public AthReentrantAlgorithm {
public:
MbtsFexMT(const std::string& name, ISvcLocator* pSvcLocator);
virtual ~ MbtsFexMT() override;
virtual StatusCode initialize() override;
virtual StatusCode execute(const EventContext& context) const override;
virtual StatusCode finalize() override;
private:
/** iterators to TileCells. To be used when on/offline
TileCellCont/IDC (fast/slow ByteStream Decoder) are to be used.
Used as input for TrigDataAccess::LoadCollections */
// TileCellCollection::const_iterator m_itBegin;
// TileCellCollection::const_iterator m_itEnd;
// TileCellCollection::const_iterator m_itt;
// /** DataHandle to TrigTimerSvc */
// ServiceHandle<ITrigTimerSvc> m_timersvc;
// /** Timing measures.
// m_timer[0] is the complete exec timer. m_timer[1] is the
// LoadCollection timer (Data Preparation), m_timer[2] is the
// real algorithm timer and m_timer[3] is the saving data
// timer. */
// TrigTimer* m_timer[4];
TrigTimer *m_timerLoadColl;
TrigTimer *m_timerAlg;
TrigTimer *m_timerSave;
/** A pointer for access to the Tile Test Beam Identifier helper. */
const TileTBID* m_tileTBID;
/** Object that provides data access in a Region of
Interest. See TrigDataAccess for more details. */
// ToolHandle<ITrigDataAccess> m_data;
ToolHandleArray<MbtsFex> m_data{this, "data", {},"??"};
/** Energy deposited in each counter (pC) */
std::vector<float> m_triggerEnergies;
/** Relative trigger times with repect to collision timing */
std::vector<float> m_triggerTimes;
/** ID of MBTS ID */
//std::vector<int> m_triggerID;
// HLT::TriggerElement* m_cachedTE; //!< internal caching: output TE from the first exectution.
SG::WriteHandleKey<xAOD::TrigT2MbtsBits> m_t2MbtsBits{this,"t2MbtsBits","Undefined",""};//!< internal caching: MBTS feature from the first execution.
Gaudi::Property<bool> m_useCachedResult{this, "useCachedResult",true, "??"}; //!< internal caching: true when the hltExecute will run in cached mode.
Gaudi::Property<unsigned int> m_BCID{this, "BCID", 100, "????"};
Gaudi::Property<bool> m_useCachedResult{this, "useCachedResult",true, ""};
SG::WriteHandleKey<xAOD::TrigT2MbtsBits> m_t2MbtsBits{this,"t2MbtsBits","Undefined",""};
SG::WriteHandleKey<xAOD::TrigT2MbtsBitsAuxContainer> m_t2MbtsBitsAuxKey{this,"t2MbtsBitsAuxKey","Undefined",""};
SG::ReadHandleKey<TileTBID> m_tileTBID{this,"tileTBID", "DetectorStore+TileTBID"," "};
ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"};
declareProperty("TrigDataAccess",m_data,"Data Access for LVL2 Calo Algorithms");
// These properties are used for monitoring only.
Gaudi::Property<double> m_threshold{this, "threshold", 40.0/222.0, "????"};
Gaudi::Property<double> m_timeCut{this, "timeCut", 0.0, "????"};
Gaudi::Property<double> m_globalTimeOffset{this, " globalTimeOffset",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[0]{this, "TimeOffsetA0",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[1]{this, "TimeOffsetA1",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[2]{this, "TimeOffsetA2",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[3]{this, "TimeOffsetA3",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[4]{this, "TimeOffsetA4",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[5]{this, "TimeOffsetA5",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[6]{this, "TimeOffsetA6",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[7]{this, "TimeOffsetA7",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[8]{this, "TimeOffsetA8",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[9]{this, "TimeOffsetA9",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[10]{this, "TimeOffsetA10",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[11]{this, "TimeOffsetA11",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[12]{this, "TimeOffsetA12",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[13]{this, "TimeOffsetA13",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[14]{this, "TimeOffsetA14",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[15]{this, "TimeOffsetA15",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[16]{this, "TimeOffsetA16",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[17]{this, "TimeOffsetA17",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[18]{this, "TimeOffsetA18",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[19]{this, "TimeOffsetA19",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[20]{this, "TimeOffsetA20",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[21]{this, "TimeOffsetA21",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[22]{this, "TimeOffsetA22",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[23]{this, "TimeOffsetA23",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[24]{this, "TimeOffsetA24",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[25]{this, "TimeOffsetA25",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[26]{this, "TimeOffsetA26",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[27]{this, "TimeOffsetA27",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[28]{this, "TimeOffsetA28",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[29]{this, "TimeOffsetA29",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[30]{this, "TimeOffsetA30",0.0, "????"};
Gaudi::Property<double> m_timeOffsets[31]{this, "TimeOffsetA31",0.0, "????"};
// declareMonitoredVariable("MultiplicityEBA", m_mult.first); // Number of counters within cuts, side A
// declareMonitoredVariable("MultiplicityEBC", m_mult.second); // Number of counters within cuts, side C
// declareMonitoredVariable("TimeDiff_A_C", m_timeDiff_A_C); // Time difference A - C
// declareMonitoredVariable("BCID", m_BCID);
// declareMonitoredStdContainer("TriggerEnergies", m_triggerEnergies); // Energies deposited in each counter
// declareMonitoredStdContainer("TriggerTimes", m_triggerTimes); // Relative times of each of the triggers.
// declareMonitoredStdContainer("TriggerID", m_triggerID); // ID of MBTS detectors
auto mon_triggerEnergies = Monitored::Scalar<int>("TriggerEnergies",triggerEnergies);
auto mon_triggerTimes = Monitored::Scalar<int>("TriggerTimes",TriggerTimes);
auto mon_triggerID = Monitored::Scalar<int>("TriggerID",TriggerID);
auto mon_timeDiff_A_C = Monitored::Scalar<int>("TimeDiff_A_C",TimeDiff_A_C);
auto mon_multiplicityEBC = Monitored::Scalar<int>("MultiplicityEBC",MultiplicityEBC);
auto mon_multiplicityEBA = Monitored::Scalar<int>("MultiplicityEBA",MultiplicityEBA);
Monitored::Group(m_monTool,mon_triggerEnergies,mon_triggerTimes,mon_triggerID,mon_timeDiff_A_C,mon_multiplicityEBC,mon_multiplicityEBA);
ToolHandle<ITrigDataAccess> m_dataTool{this,"dataTool","","dataTool"};
// declareMonitoredVariable("MultiplicityEBA", m_mult.first); // Number of counters within cuts, side A
// declareMonitoredVariable("MultiplicityEBC", m_mult.second); // Number of counters within cuts, side C
// declareMonitoredVariable("TimeDiff_A_C", m_timeDiff_A_C); // Time difference A - C
// declareMonitoredVariable("BCID", m_BCID);
// declareMonitoredStdContainer("TriggerEnergies", m_triggerEnergies); // Energies deposited in each counter
// declareMonitoredStdContainer("TriggerTimes", m_triggerTimes); // Relative times of each of the triggers.
// declareMonitoredStdContainer("TriggerID", m_triggerID); // ID of MBTS detectors
Gaudi::Property<double>m_Threshold{this, "Threshold",40.0/222.0, " "};
Gaudi::Property<double>m_TimeCut{this, "TimeCut",-1.0, " "};
Gaudi::Property<double>m_TimeOffsetC{this, "TimeOffsetC",0.0, " "};
//WILL BE MINIMISED SOON..INEFFICIENT DEFINIITION METHOD
Gaudi::Property<double>m_TimeOffsetA0{this, "TimeOffsetA0",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA1{this, "TimeOffsetA1",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA2{this, "TimeOffsetA2",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA3{this, "TimeOffsetA3",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA4{this, "TimeOffsetA4",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA5{this, "TimeOffsetA5",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA6{this, "TimeOffsetA6",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA7{this, "TimeOffsetA7",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA8{this, "TimeOffsetA8",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA9{this, "TimeOffsetA9",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA10{this, "TimeOffsetA10",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA11{this, "TimeOffsetA11",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA12{this, "TimeOffsetA12",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA13{this, "TimeOffsetA13",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA14{this, "TimeOffsetA14",0.0, " "};
Gaudi::Property<double>m_TimeOffsetA15{this, "TimeOffsetA15",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC0{this, "TimeOffsetC0",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC1{this, "TimeOffsetC1",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC2{this, "TimeOffsetC2",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC3{this, "TimeOffsetC3",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC4{this, "TimeOffsetC4",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC5{this, "TimeOffsetC5",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC6{this, "TimeOffsetC6",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC7{this, "TimeOffsetC7",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC8{this, "TimeOffsetC8",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC9{this, "TimeOffsetC9",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC10{this, "TimeOffsetC10",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC11{this, "TimeOffsetC11",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC12{this, "TimeOffsetC12",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC13{this, "TimeOffsetC13",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC14{this, "TimeOffsetC14",0.0, " "};
Gaudi::Property<double>m_TimeOffsetC15{this, "TimeOffsetC15",0.0, " "};
};
#endif
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