Belle II Software  release-06-02-00
SVDEventInfoSetterModule.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <svd/modules/svdSimulation/SVDEventInfoSetterModule.h>
10 #include <root/TRandom.h>
11 #include <mdst/dataobjects/TRGSummary.h>
12 
13 using namespace std;
14 using namespace Belle2;
15 
16 //-----------------------------------------------------------------
17 // Register the Module
18 //-----------------------------------------------------------------
19 REG_MODULE(SVDEventInfoSetter)
20 
21 //-----------------------------------------------------------------
22 // Implementation
23 //-----------------------------------------------------------------
24 
26 {
27  //Set module properties
28  setDescription(
29  "Sets the SVD event information. Use this "
30  "module to fill SVDEventInfo object which tells the digitizer "
31  "the conditions for creating ShaperDigits."
32  );
33 
34  setPropertyFlags(c_ParallelProcessingCertified);
35 
36  //Parameter definition for SVDModeByte, TriggerType and cross-talk
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);
49 
50  // default ModeByte settings: 10 0 10 000 (144)
51 }
52 
53 SVDEventInfoSetterModule::~SVDEventInfoSetterModule() = default;
54 
55 void SVDEventInfoSetterModule::beginRun()
56 {
57  if (m_useDB) {
58  if (!m_svdGlobalConfig.isValid()) {
59  B2WARNING("No valid SVDGlobalConfigParameters for the requested IoV, simulating a 6-sample event");
60  m_daqMode = 2; //6-sample event
61  m_relativeShift = 0; // not needed later in reconstruction
62  } else {
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;
68  else
69  B2ERROR("Invalid number of frames (" << nFrames << ") in SVDGlobalConfigParamters");
70  }
71  }
72 }
73 
74 void SVDEventInfoSetterModule::initialize()
75 {
76  //Register the EventInfo in the data store
77  m_svdEventInfoPtr.registerInDataStore(m_svdEventInfoName, DataStore::c_ErrorIfAlreadyRegistered);
78 
79  m_simClockState.isOptional();
80 
81 // TO BE ADDED(?): some functions than can check the validity of the given parameters
82 }
83 
84 void SVDEventInfoSetterModule::event()
85 {
86  if (m_fixedTriggerBin >= 0 && m_fixedTriggerBin <= 3) {
87  B2DEBUG(25, "using fixed triggerBin");
88  m_triggerBin = m_fixedTriggerBin;
89  } else {
90  if (m_simClockState.isValid())
91  m_triggerBin = m_simClockState->getSVDTriggerBin();
92  else {
93  const int triggerBinsInAPVclock = 4;
94  m_triggerBin = gRandom->Integer(triggerBinsInAPVclock);
95  B2DEBUG(25, "no SimClockState -> random generation of trigger bin");
96  }
97  }
98 
99 
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);
105 
106  B2DEBUG(25, " triggerBin = " << m_triggerBin);
107 
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);
115 
116  int nAPVsamples = 6;
117 
118  if (m_daqMode == 1) nAPVsamples = 3;
119  else if (m_daqMode == 3) {
120 
121  StoreObjPtr<TRGSummary> storeTRGSummary(m_objTrgSummaryName);
122 
123  if (storeTRGSummary.isValid()) {
124  int trgQuality = storeTRGSummary->getTimQuality();
125 
126  if (trgQuality == TRGSummary::ETimingQuality::TTYQ_FINE or trgQuality == TRGSummary::ETimingQuality::TTYQ_SFIN)
127  nAPVsamples = 3;
128  } else B2DEBUG(25, "DAQMode = 3, but no valid TRGSummary! We simulate a 6-sample event");
129  }
130 
131  m_svdEventInfoPtr->setNSamples(nAPVsamples);
132 
133  if (nAPVsamples == 3)
134  B2DEBUG(25, " relativeShift = " << m_relativeShift);
135 
136 }
137 
Base class for Modules.
Definition: Module.h:72
Module to set the SVDEventInfo in the simulation.
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:95
bool isValid() const
Check whether the object was created.
Definition: StoreObjPtr.h:110
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.