11 #include <svd/modules/svdSimulation/SVDEventInfoSetterModule.h>
12 #include <root/TRandom.h>
13 #include <mdst/dataobjects/TRGSummary.h>
31 "Sets the SVD event information. You must use this "
32 "module to fill SVDEventInfo object which tells the digitizer "
33 "the conditions for creating ShaperDigits."
36 setPropertyFlags(c_ParallelProcessingCertified);
39 addParam(
"SVDEventInfo", m_svdEventInfoName,
"Defines the name of the EventInfo",
string(
"SVDEventInfoSim"));
40 addParam(
"runType", m_runType,
"Defines the run type: raw/transparent/zero-suppressed/z-s+hit time finding",
int(2));
41 addParam(
"eventType", m_eventType,
"Defines the event type: TTD event (global run)/standalone event (local run)",
int(0));
42 addParam(
"daqMode", m_daqMode,
"Defines the DAQ mode: 1/3/6 samples or 3-mixed-6 samples",
int(2));
43 addParam(
"randomTriggerBin", m_randomTriggerBin,
"Trigger bin is randomly chosen between 0/1/2/3.",
bool(
true));
44 addParam(
"triggerBin", m_triggerBin,
"Trigger bin 0/1/2/3 - useful for timing studies. The default is random.",
int(999));
45 addParam(
"triggerType", m_triggerType,
"Defines the trigger type, default: CDC trigger", uint8_t(3));
46 addParam(
"crossTalk", m_xTalk,
"Defines the cross-talk flag for the event",
bool(
false));
47 addParam(
"relativeShift", m_relativeShift,
"Relative shift between 3- and 6-sample events, in units of APV clock / 4",
int(0));
52 SVDEventInfoSetterModule::~SVDEventInfoSetterModule() =
default;
54 void SVDEventInfoSetterModule::initialize()
57 m_svdEventInfoPtr.registerInDataStore(m_svdEventInfoName, DataStore::c_ErrorIfAlreadyRegistered);
62 void SVDEventInfoSetterModule::event()
64 if (m_randomTriggerBin) {
65 const int triggerBinsInAPVclock = 4;
66 m_triggerBin = gRandom->Integer(triggerBinsInAPVclock);
67 }
else if (m_triggerBin < 0 || m_triggerBin > 3)
68 B2ERROR(
"the triggerBin value is wrong, it must be an integer between 0 and 3, check and fix");
70 m_SVDModeByte.setRunType(m_runType);
71 m_SVDModeByte.setEventType(m_eventType);
72 m_SVDModeByte.setDAQMode(m_daqMode);
73 m_SVDModeByte.setTriggerBin(m_triggerBin);
74 m_SVDTriggerType.setType(m_triggerType);
76 m_svdEventInfoPtr.create();
77 m_svdEventInfoPtr->setModeByte(m_SVDModeByte);
78 m_svdEventInfoPtr->setMatchModeByte(m_ModeByteMatch);
79 m_svdEventInfoPtr->setTriggerType(m_SVDTriggerType);
80 m_svdEventInfoPtr->setMatchTriggerType(m_TriggerTypeMatch);
81 m_svdEventInfoPtr->setCrossTalk(m_xTalk);
82 m_svdEventInfoPtr->setRelativeShift(m_relativeShift);
86 if (m_daqMode == 1) nAPVsamples = 3;
87 else if (m_daqMode == 3) {
88 if (m_triggerType == TRGSummary::ETimingType::TTYP_TOP or m_triggerType == TRGSummary::ETimingType::TTYP_ECL
89 or m_triggerType == TRGSummary::ETimingType::TTYP_PID1 or m_triggerType == TRGSummary::ETimingType::TTYP_PID2
90 or m_triggerType == TRGSummary::ETimingType::TTYP_PID3) nAPVsamples = 3;
93 m_svdEventInfoPtr->setNSamples(nAPVsamples);