9 #include <svd/modules/svdSimulation/SVDEventInfoSetterModule.h>
10 #include <root/TRandom.h>
11 #include <mdst/dataobjects/TRGSummary.h>
29 "Sets the SVD event information. Use this "
30 "module to fill SVDEventInfo object which tells the digitizer "
31 "the conditions for creating ShaperDigits."
34 setPropertyFlags(c_ParallelProcessingCertified);
37 addParam(
"SVDEventInfo", m_svdEventInfoName,
"SVDEventInfo name",
string(
"SVDEventInfoSim"));
38 addParam(
"runType", m_runType,
"Defines the run type: raw/transparent/zero-suppressed/z-s+hit time finding",
int(2));
39 addParam(
"eventType", m_eventType,
"Defines the event type: TTD event (global run)/standalone event (local run)",
int(0));
40 addParam(
"daqMode", m_daqMode,
41 "Defines the DAQ mode: = 2 for the default 6-sample mode, = 1 for the 3-sample mode, = 3 for the 3-mixed-6 sample mode. ",
int(2));
42 addParam(
"fixedTriggerBin", m_fixedTriggerBin,
43 "Trigger bin 0/1/2/3 - useful for timing studies. The default is random if SimClockState is not valid.",
int(999));
44 addParam(
"triggerType", m_triggerType,
"Defines the trigger type, default: CDC trigger", uint8_t(3));
45 addParam(
"crossTalk", m_xTalk,
"Defines the cross-talk flag for the event",
bool(
false));
46 addParam(
"relativeShift", m_relativeShift,
"Relative shift between 3- and 6-sample events, in units of APV clock / 4",
int(0));
47 addParam(
"useDB", m_useDB,
"default = False. If true reads the DAQMode from SVDGlobalConfigParameters",
bool(
false));
48 addParam(
"TRGSummaryName", m_objTrgSummaryName,
"TRGSummary name", m_objTrgSummaryName);
53 SVDEventInfoSetterModule::~SVDEventInfoSetterModule() =
default;
55 void SVDEventInfoSetterModule::beginRun()
58 if (!m_svdGlobalConfig.isValid()) {
59 B2WARNING(
"No valid SVDGlobalConfigParameters for the requested IoV, simulating a 6-sample event");
63 m_relativeShift = m_svdGlobalConfig->getRelativeTimeShift();
64 int nFrames = m_svdGlobalConfig->getNrFrames();
65 if (nFrames == 3) m_daqMode = 1;
66 else if (nFrames == 6) m_daqMode = 2;
67 else if (nFrames == 9) m_daqMode = 3;
69 B2ERROR(
"Invalid number of frames (" << nFrames <<
") in SVDGlobalConfigParamters");
74 void SVDEventInfoSetterModule::initialize()
77 m_svdEventInfoPtr.registerInDataStore(m_svdEventInfoName, DataStore::c_ErrorIfAlreadyRegistered);
79 m_simClockState.isOptional();
84 void SVDEventInfoSetterModule::event()
86 if (m_fixedTriggerBin >= 0 && m_fixedTriggerBin <= 3) {
87 B2DEBUG(25,
"using fixed triggerBin");
88 m_triggerBin = m_fixedTriggerBin;
90 if (m_simClockState.isValid())
91 m_triggerBin = m_simClockState->getSVDTriggerBin();
93 const int triggerBinsInAPVclock = 4;
94 m_triggerBin = gRandom->Integer(triggerBinsInAPVclock);
95 B2DEBUG(25,
"no SimClockState -> random generation of trigger bin");
100 m_SVDModeByte.setRunType(m_runType);
101 m_SVDModeByte.setEventType(m_eventType);
102 m_SVDModeByte.setDAQMode(m_daqMode);
103 m_SVDModeByte.setTriggerBin(m_triggerBin);
104 m_SVDTriggerType.setType(m_triggerType);
106 B2DEBUG(25,
" triggerBin = " << m_triggerBin);
108 m_svdEventInfoPtr.create();
109 m_svdEventInfoPtr->setModeByte(m_SVDModeByte);
110 m_svdEventInfoPtr->setMatchModeByte(m_ModeByteMatch);
111 m_svdEventInfoPtr->setTriggerType(m_SVDTriggerType);
112 m_svdEventInfoPtr->setMatchTriggerType(m_TriggerTypeMatch);
113 m_svdEventInfoPtr->setCrossTalk(m_xTalk);
114 m_svdEventInfoPtr->setRelativeShift(m_relativeShift);
118 if (m_daqMode == 1) nAPVsamples = 3;
119 else if (m_daqMode == 3) {
123 if (storeTRGSummary.
isValid()) {
124 int trgQuality = storeTRGSummary->getTimQuality();
126 if (trgQuality == TRGSummary::ETimingQuality::TTYQ_FINE or trgQuality == TRGSummary::ETimingQuality::TTYQ_SFIN)
128 }
else B2DEBUG(25,
"DAQMode = 3, but no valid TRGSummary! We simulate a 6-sample event");
131 m_svdEventInfoPtr->setNSamples(nAPVsamples);
133 if (nAPVsamples == 3)
134 B2DEBUG(25,
" relativeShift = " << m_relativeShift);
Module to set the SVDEventInfo in the simulation.
Type-safe access to single objects in the data store.
bool isValid() const
Check whether the object was created.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.