Belle II Software  release-05-01-25
HLTStreamHelper.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <daq/hbasf2/utils/HLTStreamHelper.h>
11 #include <framework/pcore/zmq/messages/ZMQMessageFactory.h>
12 #include <framework/pcore/MsgHandler.h>
13 #include <daq/dataobjects/SendHeader.h>
14 #include <daq/dataobjects/SendTrailer.h>
15 
16 #include <TH1F.h>
17 #include <TFile.h>
18 #include <TDirectory.h>
19 #include <TKey.h>
20 #include <TClass.h>
21 #include <TSystem.h>
22 #include <TROOT.h>
23 #include <TBufferJSON.h>
24 
25 #include <lz4.h>
26 #include <zmq.hpp>
27 
28 using namespace Belle2;
29 
30 namespace {
31  void streamHistogramImpl(TDirectory* curdir, Belle2::MsgHandler& msg, const std::string& dirName = "")
32  {
33  TList* keylist = curdir->GetList();
34 
35  TIter nextkey(keylist);
36  TKey* key = nullptr;
37 
38  while ((key = (TKey*)nextkey())) {
39  TObject* obj = curdir->Get(key->GetName());
40  TClass* objectClass = obj->IsA();
41  std::string objectName = dirName;
42  if (not objectName.empty()) {
43  objectName += "/";
44  }
45  objectName += obj->GetName();
46 
47  if (objectClass->InheritsFrom(TH1::Class())) {
48  auto* h1 = dynamic_cast<TH1*>(obj);
49  msg.add(h1, objectName);
50  } else if (objectClass->InheritsFrom(TDirectory::Class())) {
51  auto* tdir = dynamic_cast<TDirectory*>(obj);
52  // FIXME: Currently the dqm server does not understand multi-layer directory structures
53  // therefore I break this down to only show the last directory
54  streamHistogramImpl(tdir, msg, obj->GetName());
55  }
56  }
57  }
58 }
59 
61 {
62  m_streamHelper.initialize(0, true);
63 }
64 
65 void HLTStreamHelper::registerStoreObjects(bool addExpressRecoObjects)
66 {
67  m_eventMetaData.registerInDataStore();
68  m_rawSVDs.registerInDataStore();
69  m_rawCDCs.registerInDataStore();
70  m_rawTOPs.registerInDataStore();
71  m_rawARICHs.registerInDataStore();
72  m_rawECLs.registerInDataStore();
73  m_rawKLMs.registerInDataStore();
74  m_rawTRGs.registerInDataStore();
75  m_rawFTSWs.registerInDataStore();
76 
77  if (addExpressRecoObjects) {
78  m_randomGenerator.registerInDataStore(DataStore::c_DontWriteOut);
79  m_softwareTriggerResult.registerInDataStore();
80  m_softwareTriggerVariables.registerInDataStore();
81  m_triggerSummary.registerInDataStore();
82  m_rawPXDs.registerInDataStore();
83  m_roiPayload.registerInDataStore();
84  m_rois.registerInDataStore("ROIs");
85  }
86 }
87 
88 std::unique_ptr<ZMQNoIdMessage> HLTStreamHelper::streamRaw()
89 {
90  const auto eventMessage = m_streamHelper.stream(false, false);
91 
92  // Fill Header and Trailer
93  SendHeader hdr;
94  SendTrailer trl;
95 
96  // Number of total words
97  int msgsize = (eventMessage->size() - 1) / sizeof(int) + 1;
98  int total_nwrds = msgsize + hdr.GetHdrNwords() + trl.GetTrlNwords();
99 
100  // Fill header and trailer
101  hdr.SetNwords(total_nwrds);
102  hdr.SetNumEventsinPacket(1);
103  hdr.SetNumNodesinPacket(1);
104  hdr.SetEventNumber(m_eventMetaData->getEvent());
105  // hdr.SetExpRunWord(evtmeta->getRun());
106  hdr.SetSubRunNum(m_eventMetaData->getSubrun()); // modified on Apr. 20, 2016 by SY
107  hdr.SetRunNum(m_eventMetaData->getRun());
108  hdr.SetExpNum(m_eventMetaData->getExperiment());
109  hdr.SetNodeID(300);
110 
111  zmq::message_t rawMessage(total_nwrds * sizeof(int));
112  int* buffer = rawMessage.data<int>();
113 
114  // Fill header
115  memcpy(buffer, hdr.GetBuffer(), hdr.GetHdrNwords()*sizeof(int));
116 
117  // Fill EvtMessage
118  memcpy(buffer + hdr.GetHdrNwords(), eventMessage->buffer(), eventMessage->size());
119 
120  // Fill trailer
121  memcpy(buffer + hdr.GetHdrNwords() + msgsize, trl.GetBuffer(),
122  trl.GetTrlNwords()*sizeof(int));
123 
124  zmq::message_t roiMessage = getROIMessageIfViable();
125  auto zmqMessage = ZMQMessageFactory::createMessage(EMessageTypes::c_rawDataMessage, std::move(rawMessage), std::move(roiMessage));
126 
127  return zmqMessage;
128 }
129 
130 std::unique_ptr<ZMQNoIdMessage> HLTStreamHelper::stream(bool addPersistentDurability, bool streamTransientObjects)
131 {
132  const auto eventMessage = m_streamHelper.stream(addPersistentDurability, streamTransientObjects);
133 
134  zmq::message_t roiMessage = getROIMessageIfViable();
135  auto zmqMessage = ZMQMessageFactory::createMessage(EMessageTypes::c_eventMessage, eventMessage, std::move(roiMessage));
136  return zmqMessage;
137 }
138 
140 {
141  zmq::message_t roiMessage;
142 
143  if (m_roiPayload.isValid()) {
144  const size_t length = m_roiPayload->getPacketLengthByte();
145  const char* data = reinterpret_cast<const char*>(m_roiPayload->getRootdata());
146 
147  roiMessage = zmq::message_t(length);
148  char* tbuffer = roiMessage.data<char>();
149  memcpy(tbuffer, data, length);
150  }
151 
152  return roiMessage;
153 }
154 
155 std::unique_ptr<ZMQNoIdMessage> HLTStreamHelper::streamHistograms(bool compressed)
156 {
157  B2ASSERT("Event Meta Data not set!", m_eventMetaData.isValid());
158 
159  Belle2::MsgHandler msgHandler;
160  streamHistogramImpl(gDirectory, msgHandler);
161 
162  auto evtMessage = std::unique_ptr<EvtMessage>(msgHandler.encode_msg(Belle2::ERecordType::MSG_EVENT));
163 
164  EventMetaData& eventMetaData = *m_eventMetaData;
165  auto eventInformationString = TBufferJSON::ToJSON(&eventMetaData);
166  zmq::message_t additionalEventMessage(eventInformationString.Data(), eventInformationString.Length());
167 
168  if (not compressed) {
169  return Belle2::ZMQMessageFactory::createMessage(Belle2::EMessageTypes::c_rawDataMessage, evtMessage,
170  std::move(additionalEventMessage));
171  }
172 
173  // TODO: do I want to use compression everywhere? That is probably not worth it! -> test this!
174  if (m_outputBuffer.empty()) {
176  }
177 
178  B2DEBUG(10, "Size before compression " << evtMessage->size());
179  int size = m_maximalCompressedSize;
180  size = LZ4_compress_default(evtMessage->buffer(), &m_outputBuffer[0], evtMessage->size(), size);
181  B2ASSERT("Compression failed", size > 0);
182  B2DEBUG(10, "Size after compression " << size);
183 
184  zmq::message_t message(&m_outputBuffer[0], size);
185 
186  return Belle2::ZMQMessageFactory::createMessage(Belle2::EMessageTypes::c_compressedDataMessage,
187  std::move(message), std::move(additionalEventMessage));
188 }
189 
190 void HLTStreamHelper::read(std::unique_ptr<ZMQNoIdMessage> message)
191 {
192  if (message->isMessage(EMessageTypes::c_eventMessage)) {
193  m_streamHelper.read(std::move(message));
194  } else if (message->isMessage(EMessageTypes::c_rawDataMessage)) {
195  int* eventBuffer = message->getMessagePart<1>().data<int>();
196 
197  SendHeader sndhdr;
198  sndhdr.SetBuffer(eventBuffer);
199  int npackedevts = sndhdr.GetNumEventsinPacket();
200  if (npackedevts != 1) {
201  B2WARNING("Strange SendHeader : ");
202  // for (int i = 0; i < sndhdr.SENDHDR_NWORDS; i++) {
203  for (int i = 0; i < 10; i++) {
204  B2WARNING(std::hex << * (sndhdr.GetBuffer() + i));
205  }
206 
207  B2WARNING("Raw2DsModule::number of events in packet is not 1. This process gets stuck here. Please ABORT the system. (Please see discussion of daqcore channel in https://b2rc.kek.jp/ on 2017. Nov. 30. about why this is not FATAL message.");
208  sleep(86400);
209  }
210  int ncprs = sndhdr.GetNumNodesinPacket();
211  int nwords = sndhdr.GetTotalNwords() - SendHeader::SENDHDR_NWORDS - SendTrailer::SENDTRL_NWORDS;
212 
213  // Get buffer header
214  int* bufbody = eventBuffer + SendHeader::SENDHDR_NWORDS;
215 
216  // Unpack buffer
217  RawDataBlock tempdblk;
218  tempdblk.SetBuffer(bufbody, nwords, false, npackedevts, ncprs);
219 
220  unsigned int utime = 0;
221  unsigned int ctime = 0;
222  unsigned long long int mtime = 0;
223 
224  int store_time_flag = 0;
225  unsigned int error_flag = 0;
226 
227  // Store data contents in Corresponding RawXXXX
228  for (int cprid = 0; cprid < ncprs * npackedevts; cprid++) {
229  // Pick up one COPPER and copy data in a temporary buffer
230  int nwds_buf = tempdblk.GetBlockNwords(cprid);
231  int* cprbuf = new int[nwds_buf];
232  memcpy(cprbuf, tempdblk.GetBuffer(cprid), nwds_buf * 4);
233 
234  // Check FTSW
235  if (tempdblk.CheckFTSWID(cprid)) {
236  RawFTSW* ftsw = m_rawFTSWs.appendNew();
237  ftsw->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
238 
239  // Tentative for DESY TB 2017
240  utime = (unsigned int)(ftsw->GetTTUtime(0));
241  ctime = (unsigned int)(ftsw->GetTTCtime(0));
242  mtime = 1000000000 * (unsigned long long int)utime + (unsigned long long int)(std::round(ctime / 0.127216));
243  store_time_flag = 1;
244  continue;
245  } else if (store_time_flag == 0) {
246  // Tentative until RawFTSW data stream is established. 2018.5.28
247  // Not store RawCOPPER here. 2018.11.23
248  RawCOPPER tempcpr_time;
249  tempcpr_time.SetBuffer(cprbuf, nwds_buf, false, 1, 1);
250  utime = (unsigned int)(tempcpr_time.GetTTUtime(0));
251  ctime = (unsigned int)(tempcpr_time.GetTTCtime(0));
252  mtime = 1000000000 * (unsigned long long int)utime + (unsigned long long int)(std::round(ctime / 0.127216));
253  store_time_flag = 1;
254  }
255 
256  RawCOPPER tempcpr;
257  tempcpr.SetBuffer(cprbuf, nwds_buf, false, 1, 1);
258  int subsysid = tempcpr.GetNodeID(0);
259  error_flag |= (unsigned int)(tempcpr.GetDataType(0));
260 
261  // Switch to each detector and register RawXXX
262  if ((subsysid & DETECTOR_MASK) == CDC_ID) {
263  (m_rawCDCs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
264  } else if ((subsysid & DETECTOR_MASK) == SVD_ID) {
265  (m_rawSVDs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
266  } else if ((subsysid & DETECTOR_MASK) == BECL_ID) {
267  (m_rawECLs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
268  } else if ((subsysid & DETECTOR_MASK) == EECL_ID) {
269  (m_rawECLs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
270  } else if ((subsysid & DETECTOR_MASK) == TOP_ID) {
271  (m_rawTOPs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
272  } else if ((subsysid & DETECTOR_MASK) == ARICH_ID) {
273  (m_rawARICHs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
274  } else if ((subsysid & DETECTOR_MASK) == BKLM_ID) {
275  (m_rawKLMs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
276  } else if ((subsysid & DETECTOR_MASK) == EKLM_ID) {
277  (m_rawKLMs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
278  } else if (((subsysid & DETECTOR_MASK) & 0xF0000000) == TRGDATA_ID) {
279  (m_rawTRGs.appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
280  } else {
281  // Do not store Unknown RawCOPPER object. 2018.11.25
282  B2WARNING("Unknown COPPER ID : ");
283  for (int i = 0; i < 12; i++) {
284  B2WARNING(std::hex << cprbuf[i]);
285  }
286  B2FATAL("Unknown COPPER ID is found. CPRID = " << std::hex << subsysid << " Please check. Exiting...");
287  }
288  }
289 
290  if (store_time_flag != 1) {
291  B2FATAL("No time information could be extracted from Data. That should not happen. Exiting...");
292  }
293 
294  m_eventMetaData.create();
295  m_eventMetaData->setExperiment(sndhdr.GetExpNum());
296  m_eventMetaData->setRun(sndhdr.GetRunNum());
297  m_eventMetaData->setSubrun(sndhdr.GetSubRunNum());
298  m_eventMetaData->setEvent(sndhdr.GetEventNumber());
299  m_eventMetaData->setTime(mtime);
300 
301  if (error_flag) {
302  if (error_flag & RawHeader_latest::B2LINK_PACKET_CRC_ERROR) {
304  B2WARNING("Raw2Ds: c_B2LinkPacketCRCError flag was set in EventMetaData.");
305  }
306  if (error_flag & RawHeader_latest::B2LINK_EVENT_CRC_ERROR) {
308  B2WARNING("Raw2Ds: c_B2LinkEventCRCError flag was set in EventMetaData.");
309  }
310  }
311  }
312 }
Belle2::RawCOPPER
The Raw COPPER class This class stores data received by COPPER via belle2linkt Data from all detector...
Definition: RawCOPPER.h:50
Belle2::SendHeader::SetNumEventsinPacket
void SetNumEventsinPacket(int num_events)
set contents of Header
Definition: SendHeader.cc:61
Belle2::EventMetaData::c_B2LinkEventCRCError
@ c_B2LinkEventCRCError
HSLB_COPPER CRC error is detected in the event.
Definition: EventMetaData.h:55
Belle2::StreamHelper::stream
std::unique_ptr< EvtMessage > stream(bool addPersistentDurability=true, bool streamTransientObjects=true)
Stream the data store into an event message.
Definition: StreamHelper.cc:31
Belle2::RawDataBlock::SetBuffer
virtual void SetBuffer(int *bufin, int nwords, int delete_flag, int num_events, int num_nodes)
set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )
Definition: RawDataBlock.cc:35
Belle2::HLTStreamHelper::m_softwareTriggerResult
StoreObjPtr< SoftwareTriggerResult > m_softwareTriggerResult
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:100
Belle2::StreamHelper::initialize
void initialize(int compressionLevel, bool handleMergeable)
Initialize this class. Call this e.g. in the first event.
Definition: StreamHelper.cc:20
Belle2::HLTStreamHelper::m_rawSVDs
StoreArray< RawSVD > m_rawSVDs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:79
Belle2::SendHeader::SetBuffer
void SetBuffer(int *hdr)
set buffer
Definition: SendHeader.cc:37
Belle2::HLTStreamHelper::read
void read(std::unique_ptr< ZMQNoIdMessage > message)
Read in a ZMQ message and rebuilt the data store from it.
Definition: HLTStreamHelper.cc:190
Belle2::HLTStreamHelper::m_roiPayload
StoreObjPtr< ROIpayload > m_roiPayload
Store Objects for HLT use.
Definition: HLTStreamHelper.h:95
Belle2::SendHeader
Definition: SendHeader.h:21
Belle2::SendHeader::SetNwords
void SetNwords(int total_data_nwords)
initialize Header
Definition: SendHeader.cc:51
Belle2::HLTStreamHelper::m_maximalCompressedSize
unsigned int m_maximalCompressedSize
Maximal size of the compression buffer.
Definition: HLTStreamHelper.h:113
Belle2::RawDataBlock::CheckFTSWID
virtual int CheckFTSWID(int n)
get FTSW ID to check whether this data block is FTSW data or not
Definition: RawDataBlock.h:101
Belle2::SendHeader::GetNumEventsinPacket
int GetNumEventsinPacket()
get contents of Header
Definition: SendHeader.cc:125
Belle2::MsgHandler::encode_msg
virtual EvtMessage * encode_msg(ERecordType rectype)
Stream object list into an EvtMessage.
Definition: MsgHandler.cc:68
Belle2::DataStore::c_DontWriteOut
@ c_DontWriteOut
Object/array should be NOT saved by output modules.
Definition: DataStore.h:73
Belle2::RawCOPPER::GetTTUtime
unsigned int GetTTUtime(int n)
Check if COPPER Magic words are correct.
Definition: RawCOPPER.h:600
Belle2::RawCOPPER::GetTTCtime
int GetTTCtime(int n)
Get ctime.
Definition: RawCOPPER.h:606
Belle2::HLTStreamHelper::m_rois
StoreArray< ROIid > m_rois
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:108
Belle2::RawFTSW::GetTTCtime
int GetTTCtime(int n)
Get ctime of the trigger.
Definition: RawFTSW.h:85
Belle2::HLTStreamHelper::registerStoreObjects
void registerStoreObjects(bool addExpressRecoObjects)
Register all needed store objects, either only the raw data, ROIs and event meta data (for HLT) or ad...
Definition: HLTStreamHelper.cc:65
Belle2::HLTStreamHelper::m_outputBuffer
std::vector< char > m_outputBuffer
Temporary buffer for storing the compressed result.
Definition: HLTStreamHelper.h:111
Belle2::RawCOPPER::GetDataType
int GetDataType(int n)
get contents of header
Definition: RawCOPPER.h:390
Belle2::HLTStreamHelper::getROIMessageIfViable
zmq::message_t getROIMessageIfViable() const
If the ROI payload data storobject is filled, write out the roi message (otherwise an empty message)
Definition: HLTStreamHelper.cc:139
Belle2::HLTStreamHelper::m_rawPXDs
StoreArray< RawPXD > m_rawPXDs
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:106
Belle2::HLTStreamHelper::m_randomGenerator
StoreObjPtr< RandomGenerator > m_randomGenerator
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:98
Belle2::HLTStreamHelper::m_rawFTSWs
StoreArray< RawFTSW > m_rawFTSWs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:93
Belle2::RawDataBlock::GetBlockNwords
virtual int GetBlockNwords(int n)
get size of a data block
Definition: RawDataBlock.h:94
Belle2::HLTStreamHelper::m_rawCDCs
StoreArray< RawCDC > m_rawCDCs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:81
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::RawCOPPER::GetNodeID
unsigned int GetNodeID(int n)
get node-ID from data
Definition: RawCOPPER.h:383
Belle2::SendTrailer
Definition: SendTrailer.h:20
Belle2::HLTStreamHelper::m_streamHelper
StreamHelper m_streamHelper
We use the framework stream helper.
Definition: HLTStreamHelper.h:74
Belle2::ZMQMessageFactory::createMessage
static auto createMessage(const std::string &msgIdentity, const EMessageTypes msgType, const std::unique_ptr< EvtMessage > &eventMessage)
Create an ID Message out of an identity, the type and an event message.
Definition: ZMQMessageFactory.h:37
Belle2::RawCOPPER::SetBuffer
void SetBuffer(int *bufin, int nwords, int delete_flag, int num_events, int num_nodes) OVERRIDE_CPP17
set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )
Definition: RawCOPPER.cc:132
Belle2::HLTStreamHelper::streamRaw
std::unique_ptr< ZMQNoIdMessage > streamRaw()
Stream the data store into an event message and add SendHeader and SendTrailer around the message....
Definition: HLTStreamHelper.cc:88
Belle2::HLTStreamHelper::m_rawTOPs
StoreArray< RawTOP > m_rawTOPs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:83
Belle2::StreamHelper::read
void read(std::unique_ptr< ZMQNoIdMessage > message)
Read in a ZMQ message and rebuilt the data store from it.
Definition: StreamHelper.cc:43
Belle2::SendHeader::GetBuffer
int * GetBuffer(void)
Get Header contents.
Definition: SendHeader.cc:32
Belle2::RawFTSW::GetTTUtime
unsigned int GetTTUtime(int n)
get unixtime of the trigger
Definition: RawFTSW.h:78
Belle2::EventMetaData::c_B2LinkPacketCRCError
@ c_B2LinkPacketCRCError
Belle2link CRC error is detected in the event.
Definition: EventMetaData.h:54
Belle2::EventMetaData
Store event, run, and experiment numbers.
Definition: EventMetaData.h:43
Belle2::SendHeader::GetHdrNwords
int GetHdrNwords()
get contents of Header
Definition: SendHeader.cc:124
Belle2::HLTStreamHelper::m_softwareTriggerVariables
StoreObjPtr< SoftwareTrigger::SoftwareTriggerVariables > m_softwareTriggerVariables
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:102
Belle2::HLTStreamHelper::m_rawKLMs
StoreArray< RawKLM > m_rawKLMs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:89
Belle2::HLTStreamHelper::stream
std::unique_ptr< ZMQNoIdMessage > stream(bool addPersistentDurability, bool streamTransientObjects)
Stream the data store into an event message. Add ROI as additional message (if valid).
Definition: HLTStreamHelper.cc:130
Belle2::HLTStreamHelper::m_eventMetaData
StoreObjPtr< EventMetaData > m_eventMetaData
Store Objects for HLT use.
Definition: HLTStreamHelper.h:77
Belle2::HLTStreamHelper::m_rawECLs
StoreArray< RawECL > m_rawECLs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:87
Belle2::HLTStreamHelper::m_triggerSummary
StoreObjPtr< TRGSummary > m_triggerSummary
Additional Store Objects for ExpressReco use.
Definition: HLTStreamHelper.h:104
Belle2::HLTStreamHelper::initialize
void initialize()
Initialize this class. Call this e.g. in the first event.
Definition: HLTStreamHelper.cc:60
Belle2::HLTStreamHelper::streamHistograms
std::unique_ptr< ZMQNoIdMessage > streamHistograms(bool compressed=true)
Stream all objects derived from TH1 into a message. Only the last subfolder is streamed by prefixing ...
Definition: HLTStreamHelper.cc:155
Belle2::RawFTSW::SetBuffer
void SetBuffer(int *bufin, int nwords, int delete_flag, int num_events, int num_nodes) OVERRIDE_CPP17
set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )
Definition: RawFTSW.cc:107
Belle2::RawDataBlock
The RawDataBlock class Base class for rawdata handling.
Definition: RawDataBlock.h:27
Belle2::MsgHandler::add
virtual void add(const TObject *, const std::string &name)
Add an object to be streamed.
Definition: MsgHandler.cc:47
Belle2::HLTStreamHelper::m_rawARICHs
StoreArray< RawARICH > m_rawARICHs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:85
Belle2::HLTStreamHelper::m_rawTRGs
StoreArray< RawTRG > m_rawTRGs
Store Objects for HLT use.
Definition: HLTStreamHelper.h:91
Belle2::MsgHandler
A class to encode/decode an EvtMessage.
Definition: MsgHandler.h:104
Belle2::RawFTSW
The Raw FTSW class.
Definition: RawFTSW.h:30
Belle2::RawDataBlock::GetBuffer
virtual int * GetBuffer(int n)
get nth buffer pointer
Definition: RawDataBlock.h:53