10 #include <daq/rfarm/event/modules/rawinputModule.h>
12 #include <daq/dataobjects/SendHeader.h>
13 #include <daq/dataobjects/SendTrailer.h>
32 setDescription(
"Raw data file input module");
39 addParam(
"inputFileName" , m_inputFileName,
"Raw file name.",
string(
"RawInput.root"));
41 B2DEBUG(1,
"RawInput: Constructor done.");
45 RawInputModule::~RawInputModule()
49 void RawInputModule::initialize()
51 gSystem->Load(
"libdataobjects");
54 m_eventMetaData.registerInDataStore();
57 m_rawDataBlock.registerInDataStore();
58 m_rawCOPPER.registerInDataStore();
59 m_rawSVD.registerInDataStore();
60 m_rawCDC.registerInDataStore();
61 m_rawTOP.registerInDataStore();
62 m_rawARICH.registerInDataStore();
63 m_rawECL.registerInDataStore();
64 m_rawKLM.registerInDataStore();
65 m_rawTRG.registerInDataStore();
66 m_rawFTSW.registerInDataStore();
69 printf(
"RawInput : Opening file %s\n", m_inputFileName.c_str());
70 m_fd = open(m_inputFileName.c_str(), O_RDONLY);
75 printf(
"Done. m_fd = %d\n", m_fd);
83 B2INFO(
"RawInput: initialized.");
88 void RawInputModule::beginRun()
91 B2INFO(
"RawInput: beginRun called.");
95 void RawInputModule::event()
99 if (m_nevt == 0)
return;
101 registerRawCOPPERs();
104 void RawInputModule::registerRawCOPPERs()
109 char* evtbuf =
new char[MAXEVTSIZE];
111 int sstat = read(m_fd, evtbuf,
sizeof(
int));
116 int* recsize = (
int*)evtbuf;
117 int rstat = read(m_fd, evtbuf +
sizeof(
int), (*recsize - 1) * 4);
123 B2INFO(
"RawInput: got an event from a file, size=" << recsize <<
124 " (proc= " << (
int)getpid() <<
")");
132 if (npackedevts != 1) {
133 B2FATAL(
"Raw2DsModule::number of events in packet is not 1 " << npackedevts);
135 int ncprs = sndhdr.GetNumNodesinPacket();
136 int nwords = sndhdr.GetTotalNwords() - SendHeader::SENDHDR_NWORDS - SendTrailer::SENDTRL_NWORDS;
137 B2INFO(
"RawInput: Ncprs=" << ncprs <<
" Nwords=" << nwords);
140 int* bufbody = (
int*)evtbuf + SendHeader::SENDHDR_NWORDS;
148 tempdblk.
SetBuffer(bufbody, nwords,
false, npackedevts, ncprs);
151 for (
int cprid = 0; cprid < ncprs * npackedevts; cprid++) {
154 int* cprbuf =
new int[nwds_buf];
155 memcpy(cprbuf, tempdblk.
GetBuffer(cprid), nwds_buf * 4);
160 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
166 tempcpr.
SetBuffer(cprbuf, nwds_buf,
false, 1, 1);
174 if ((subsysid & DETECTOR_MASK) == CDC_ID) {
176 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
177 }
else if ((subsysid & DETECTOR_MASK) == SVD_ID) {
179 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
180 }
else if ((subsysid & DETECTOR_MASK) == BECL_ID) {
182 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
183 }
else if ((subsysid & DETECTOR_MASK) == EECL_ID) {
185 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
186 }
else if ((subsysid & DETECTOR_MASK) == TOP_ID) {
188 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
189 }
else if ((subsysid & DETECTOR_MASK) == ARICH_ID) {
191 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
192 }
else if ((subsysid & DETECTOR_MASK) == BKLM_ID) {
194 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
195 }
else if ((subsysid & DETECTOR_MASK) == EKLM_ID) {
197 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
198 }
else if (((subsysid & DETECTOR_MASK) & 0xF0000000) == TRGDATA_ID) {
200 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
203 (ary.
appendNew())->SetBuffer(cprbuf, nwds_buf, 1, 1, 1);
209 evtmetadata.create();
210 evtmetadata->setExperiment(sndhdr.GetExpNum());
211 evtmetadata->setRun(sndhdr.GetRunNum());
212 evtmetadata->setSubrun(sndhdr.GetSubRunNum());
213 evtmetadata->setEvent(sndhdr.GetEventNumber());
214 if (error_flag) evtmetadata->addErrorFlag(EventMetaData::c_B2LinkEventCRCError);
219 B2INFO(
"RawInput: DataStore Restored!!");
224 void RawInputModule::endRun()
226 B2INFO(
"RawInput: endRun done.");
230 void RawInputModule::terminate()
233 B2INFO(
"RawInput: terminate called");