CbmRoot
CbmDeviceUnpackTofStar2018.cxx
Go to the documentation of this file.
1 
9 
10 #include "CbmTofUnpackPar.h"
11 //#include "CbmHistManager.h"
12 #include "CbmTbDaqBuffer.h"
13 #include "CbmTofDigiExp.h"
14 
15 #include "StorableTimeslice.hpp"
16 
17 #include "FairMQLogger.h"
18 #include "FairMQProgOptions.h" // device->fConfig
19 
20 #include "TH1.h"
21 #include "TH2.h"
22 
23 #include <boost/archive/binary_iarchive.hpp>
24 
25 #include <iomanip>
26 #include <string>
27 
28 #include <stdexcept>
29 struct InitTaskError : std::runtime_error {
30  using std::runtime_error::runtime_error;
31 };
32 
33 using namespace std;
34 
35 static Int_t iMess = 0;
36 const Int_t DetMask = 0x0001FFFF;
37 
39  : fNumMessages(0)
40  , fuMsAcceptsPercent(100)
41  , fuOverlapMsNb(0)
42  , fuMinNbGdpb(0)
43  , fuCurrNbGdpb(0)
44  , fuNrOfGdpbs(0)
45  , fuNrOfFebsPerGdpb(0)
46  , fuNrOfGet4PerFeb(0)
47  , fuNrOfChannelsPerGet4(0)
48  , fuNrOfChannelsPerFeet(0)
49  , fuNrOfGet4(0)
50  , fuNrOfGet4PerGdpb(0)
51  , fuNrOfChannelsPerGdpb(0)
52  , fMsgCounter(11, 0) // length of enum MessageTypes initialized with 0
53  , fGdpbIdIndexMap()
54  , fuGdpbId(0)
55  , fuGdpbNr(0)
56  , fuGet4Id(0)
57  , fuGet4Nr(0)
58  // , fHM(new CbmHistManager())
59  , fvulCurrentEpoch()
60  , fvbFirstEpochSeen()
61  , fNofEpochs(0)
62  , fulCurrentEpochTime(0.)
63  , fEquipmentId(0)
64  , fdMsIndex(0.)
65  , fdTShiftRef(0.)
66  , fbEpochSuppModeOn(kFALSE)
67  , fbGet4M24b(kFALSE)
68  , fbGet4v20(kFALSE)
69  , fbMergedEpochsOn(kFALSE)
70  , fDigi(nullptr)
71  , fUnpackPar(nullptr)
72  , fdRefTime(0.)
73  , fdLastDigiTime(0.)
74  , fdFirstDigiTimeDif(0.)
75  , fdEvTime0(0.)
76  , fhRawTDigEvT0(nullptr)
77  , fhRawTDigRef0(nullptr)
78  , fhRawTDigRef(nullptr)
79  , fhRawTRefDig0(nullptr)
80  , fhRawTRefDig1(nullptr)
81  , fhRawDigiLastDigi(nullptr)
82  , fhRawTotCh()
83  , fhChCount()
84  , fvbChanThere()
85  , fhChanCoinc()
86  , fhDetChanCoinc(nullptr)
87  , fvmEpSupprBuffer()
88  , fBuffer(CbmTbDaqBuffer::Instance())
89  , fulGdpbTsMsb(0.)
90  , fulGdpbTsLsb(0.)
91  , fulStarTsMsb(0.)
92  , fulStarTsMid(0.)
93  , fulGdpbTsFullLast(0.)
94  , fulStarTsFullLast(0.)
95  , fuStarTokenLast(0)
96  , fuStarDaqCmdLast(0)
97  , fuStarTrigCmdLast(0) {}
98 
100  // Get the information about created channels from the device
101  // Check if the defined channels from the topology (by name)
102  // are in the list of channels which are possible/allowed
103  // for the device
104  // The idea is to check at initilization if the devices are
105  // properly connected. For the time beeing this is done with a
106  // nameing convention. It is not avoided that someone sends other
107  // data on this channel.
108  int noChannel = fChannels.size();
109  LOG(info) << "Number of defined input channels: " << noChannel;
110  for (auto const& entry : fChannels) {
111  LOG(info) << "Channel name: " << entry.first;
112  if (!IsChannelNameAllowed(entry.first))
113  throw InitTaskError("Channel name does not match.");
114  OnData(entry.first, &CbmDeviceUnpackTofStar2018::HandleData);
115  }
116  InitContainers();
117 } catch (InitTaskError& e) {
118  LOG(error) << e.what();
119  ChangeState(ERROR_FOUND);
120 }
121 
123 
124  for (auto const& entry : fAllowedChannels) {
125  std::size_t pos1 = channelName.find(entry);
126  if (pos1 != std::string::npos) {
127  const vector<std::string>::const_iterator pos =
128  std::find(fAllowedChannels.begin(), fAllowedChannels.end(), entry);
129  const vector<std::string>::size_type idx = pos - fAllowedChannels.begin();
130  LOG(info) << "Found " << entry << " in " << channelName;
131  LOG(info) << "Channel name " << channelName
132  << " found in list of allowed channel names at position "
133  << idx;
134  return true;
135  }
136  }
137  LOG(info) << "Channel name " << channelName
138  << " not found in list of allowed channel names.";
139  LOG(error) << "Stop device.";
140  return false;
141 }
142 
144  LOG(info) << "Init parameter containers for CbmDeviceUnpackTofStar2018.";
145 
146  // NewSimpleMessage creates a copy of the data and takes care of its destruction (after the transfer takes place).
147  // Should only be used for small data because of the cost of an additional copy
148  std::string message {"CbmTofUnpackPar,111"};
149  LOG(info)
150  << "Requesting parameter container CbmTofUnpackPar, sending message: "
151  << message;
152 
153  FairMQMessagePtr req(NewSimpleMessage("CbmTofUnpackPar,111"));
154  FairMQMessagePtr rep(NewMessage());
155 
156  if (Send(req, "parameters") > 0) {
157  if (Receive(rep, "parameters") >= 0) {
158  if (rep->GetSize() != 0) {
159  CbmMQTMessage tmsg(rep->GetData(), rep->GetSize());
160  fUnpackPar =
161  static_cast<CbmTofUnpackPar*>(tmsg.ReadObject(tmsg.GetClass()));
162  LOG(info) << "Received parameter from the server:";
163  fUnpackPar->print();
164  } else {
165  LOG(error) << "Received empty reply. Parameter not available";
166  }
167  }
168  }
169 
170 
171  Bool_t initOK = ReInitContainers();
172 
174 
177  fvbChanThere.resize(fUnpackPar->GetNumberOfChannels(), kFALSE);
178  for (UInt_t i = 0; i < fuNrOfGdpbs; ++i) {
179  for (UInt_t j = 0; j < fuNrOfGet4PerGdpb; ++j) {
181  fvbFirstEpochSeen[GetArrayIndex(i, j)] = kFALSE;
182  } // for( UInt_t j = 0; j < fuNrOfGet4PerGdpb; ++j )
183  } // for( UInt_t i = 0; i < fuNrOfGdpbs; ++i )
184 
185  return initOK;
186 }
187 
189  LOG(info) << "ReInit parameter containers for CbmDeviceUnpackTofStar2018.";
190 
191  fuNrOfGdpbs = fUnpackPar->GetNrOfRocs();
192  LOG(info) << "Nr. of Tof GDPBs: " << fuNrOfGdpbs;
194 
195  fuNrOfFebsPerGdpb = fUnpackPar->GetNrOfFebsPerGdpb();
196  LOG(info) << "Nr. of FEBS per Tof GDPB: " << fuNrOfFebsPerGdpb;
197 
198  fuNrOfGet4PerFeb = fUnpackPar->GetNrOfGet4PerFeb();
199  LOG(info) << "Nr. of GET4 per Tof FEB: " << fuNrOfGet4PerFeb;
200 
201  fuNrOfChannelsPerGet4 = fUnpackPar->GetNrOfChannelsPerGet4();
202  LOG(info) << "Nr. of channels per GET4: " << fuNrOfChannelsPerGet4;
203 
205  LOG(info) << "Nr. of channels per FEET: " << fuNrOfChannelsPerFeet;
206 
208  LOG(info) << "Nr. of GET4s: " << fuNrOfGet4;
209 
211  LOG(info) << "Nr. of GET4s per GDPB: " << fuNrOfGet4PerGdpb;
212 
214  LOG(info) << "Nr. of channels per GDPB: " << fuNrOfChannelsPerGdpb;
215 
216  fGdpbIdIndexMap.clear();
217  for (UInt_t i = 0; i < fuNrOfGdpbs; ++i) {
218  fGdpbIdIndexMap[fUnpackPar->GetRocId(i)] = i;
219  LOG(info) << "GDPB Id of TOF " << i << " : " << std::hex
220  << fUnpackPar->GetRocId(i) << std::dec;
221  } // for( UInt_t i = 0; i < fuNrOfGdpbs; ++i )
222  UInt_t uNrOfChannels = fUnpackPar->GetNumberOfChannels();
223  LOG(info) << "Nr. of mapped Tof channels: " << uNrOfChannels;
224  for (UInt_t i = 0; i < uNrOfChannels; ++i) {
225  if (i % 8 == 0) LOG(info);
226  LOG(info) << Form(" 0x%08x", fUnpackPar->GetChannelToDetUIdMap(i));
227  } // for( UInt_t i = 0; i < uNrOfChannels; ++i)
228  LOG(info);
229 
230  LOG(info) << "Plot Channel Rate => "
231  << (fUnpackPar->IsChannelRateEnabled() ? "ON" : "OFF");
232 
234 
235  return kTRUE;
236 }
237 
239  LOG(info) << "create Histos for " << fuNrOfGdpbs << " gDPBs ";
240 
241  fhRawTDigEvT0 =
242  new TH1F(Form("Raw_TDig-EvT0"),
243  Form("Raw digi time difference to 1st digi ; time [ns]; cts"),
244  500,
245  0,
246  100.);
247  // fHM->Add( Form("Raw_TDig-EvT0"), fhRawTDigEvT0);
248 
249  fhRawTDigRef0 =
250  new TH1F(Form("Raw_TDig-Ref0"),
251  Form("Raw digi time difference to Ref ; time [ns]; cts"),
252  6000,
253  -10000,
254  50000);
255  // fHM->Add( Form("Raw_TDig-Ref0"), fhRawTDigRef0);
256 
257  fhRawTDigRef =
258  new TH1F(Form("Raw_TDig-Ref"),
259  Form("Raw digi time difference to Ref ; time [ns]; cts"),
260  6000,
261  -1000,
262  5000);
263  // fHM->Add( Form("Raw_TDig-Ref"), fhRawTDigRef);
264 
265  fhRawTRefDig0 =
266  new TH1F(Form("Raw_TRef-Dig0"),
267  Form("Raw Ref time difference to last digi ; time [ns]; cts"),
268  9999,
269  -50000,
270  50000);
271  // fHM->Add( Form("Raw_TRef-Dig0"), fhRawTRefDig0);
272 
273  fhRawTRefDig1 =
274  new TH1F(Form("Raw_TRef-Dig1"),
275  Form("Raw Ref time difference to last digi ; time [ns]; cts"),
276  9999,
277  -5000,
278  5000);
279  // fHM->Add( Form("Raw_TRef-Dig1"), fhRawTRefDig1);
280 
282  new TH1F(Form("Raw_Digi-LastDigi"),
283  Form("Raw Digi time difference to last digi ; time [ns]; cts"),
284  9999,
285  -5000,
286  5000);
287  // 9999, -5000000, 5000000);
288  // fHM->Add( Form("Raw_Digi-LastDigi"), fhRawDigiLastDigi);
289 
290  fhRawTotCh.resize(fuNrOfGdpbs);
291  fhChCount.resize(fuNrOfGdpbs);
293  for (UInt_t uGdpb = 0; uGdpb < fuNrOfGdpbs; uGdpb++) {
294  fhRawTotCh[uGdpb] =
295  new TH2F(Form("Raw_Tot_gDPB_%02u", uGdpb),
296  Form("Raw TOT gDPB %02u; channel; TOT [bin]", uGdpb),
298  0.,
300  256,
301  0.,
302  256.);
303  // fHM->Add( Form("Raw_Tot_gDPB_%02u", uGdpb), fhRawTotCh[ uGdpb ]);
304 
305  fhChCount[uGdpb] =
306  new TH1I(Form("ChCount_gDPB_%02u", uGdpb),
307  Form("Channel counts gDPB %02u; channel; Hits", uGdpb),
309  0.,
311  // fHM->Add( Form("ChCount_gDPB_%02u", uGdpb), fhChCount[ uGdpb ]);
312  /*
313  for( UInt_t uLeftFeb = uGdpb*fuNrOfFebsPerGdpb / 2;
314  uLeftFeb < (uGdpb + 1 )*fuNrOfFebsPerGdpb / 2;
315  ++uLeftFeb )
316  {
317  fhChanCoinc[ uLeftFeb ] = new TH2F( Form("fhChanCoinc_%02u", uLeftFeb),
318  Form("Channels Coincidence %02; Left; Right", uLeftFeb),
319  fuNrOfChannelsPerFeet, 0., fuNrOfChannelsPerFeet,
320  fuNrOfChannelsPerFeet, 0., fuNrOfChannelsPerFeet );
321  } // for( UInt_t uLeftFeb = 0; uLeftFeb < fuNrOfFebsPerGdpb / 2; uLeftFeb ++ )
322  */
323  fhChanCoinc[uGdpb] =
324  new TH2F(Form("fhChanCoinc_%02u", uGdpb),
325  Form("Channels Coincidence %02u; Left; Right", uGdpb),
327  0.,
330  0.,
332  } // for( UInt_t uGdpb = 0; uGdpb < fuMinNbGdpb; uGdpb ++)
333  fhDetChanCoinc = new TH2F("fhDetChanCoinc",
334  "Det Channels Coincidence; Left; Right",
335  32,
336  0.,
337  32,
338  32,
339  0.,
340  32);
341 }
342 
343 
344 // handler is called whenever a message arrives on "data", with a reference to the message and a sub-channel index (here 0)
345 bool CbmDeviceUnpackTofStar2018::HandleData(FairMQMessagePtr& msg,
346  int /*index*/) {
347  // Don't do anything with the data
348  // Maybe add an message counter which counts the incomming messages and add
349  // an output
350  fNumMessages++;
351  LOG(info) << "Received message number " << fNumMessages << " with size "
352  << msg->GetSize();
353 
354  std::string msgStr(static_cast<char*>(msg->GetData()), msg->GetSize());
355  std::istringstream iss(msgStr);
356  boost::archive::binary_iarchive inputArchive(iss);
357 
358  fles::StorableTimeslice component {0};
359  inputArchive >> component;
360 
361  CheckTimeslice(component);
362  DoUnpack(component, 0);
363 
364  return true;
365 }
366 
367 Bool_t CbmDeviceUnpackTofStar2018::DoUnpack(const fles::Timeslice& ts,
368  size_t component) {
369  LOG(debug) << "Timeslice contains " << ts.num_microslices(component)
370  << " microslices of component " << component;
371 
372  // Loop over microslices
373  Int_t iMessageType = -111;
374  size_t numCompMsInTs = ts.num_microslices(component);
375  for (size_t m = 0; m < numCompMsInTs; ++m) {
376  // Jump some microslices if needed
377  // if( fuMsAcceptsPercent < m)
378  // continue;
379 
380  // Ignore overlap ms if number defined by user
381  if (numCompMsInTs - fuOverlapMsNb <= m) continue;
382 
383  constexpr uint32_t kuBytesPerMessage = 8;
384 
385  auto msDescriptor = ts.descriptor(component, m);
386  fEquipmentId = msDescriptor.eq_id;
387  fdMsIndex = static_cast<double>(msDescriptor.idx);
388  const uint8_t* msContent =
389  reinterpret_cast<const uint8_t*>(ts.content(component, m));
390 
391  uint32_t size = msDescriptor.size;
392  if (0 < size)
393  LOG(debug) << "Microslice " << m << ": " << fdMsIndex
394  << " has size: " << size;
395 
396  // If not integer number of message in input buffer, print warning/error
397  if (0 != (size % kuBytesPerMessage))
398  LOG(error) << "The input microslice buffer does NOT "
399  << "contain only complete nDPB messages!";
400 
401  // If not integer number of message in input buffer, print warning/error
402  if (0 != (size % kuBytesPerMessage))
403  LOG(error) << "The input microslice buffer does NOT "
404  << "contain only complete nDPB messages!";
405 
406  // Compute the number of complete messages in the input microslice buffer
407  uint32_t uNbMessages =
408  (size - (size % kuBytesPerMessage)) / kuBytesPerMessage;
409 
410  // Prepare variables for the loop on contents
411  const uint64_t* pInBuff = reinterpret_cast<const uint64_t*>(msContent);
412  for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx++) {
413  // Fill message
414  uint64_t ulData = static_cast<uint64_t>(pInBuff[uIdx]);
415  ngdpb::Message mess(ulData);
416 
417  /*
418  if( gLogger->IsLogNeeded(fair::mq::logger::DEBUG) )
419  {
420  mess.printDataCout();
421  } // if( gLogger->IsLogNeeded(fair::mq::logger::DEBUG) )
422  */
423 
424  // Increment counter for different message types
425  iMessageType = mess.getMessageType();
426  fMsgCounter[iMessageType]++;
427 
428  fuGdpbId = mess.getRocNumber();
430 
431  fuGet4Id = mess.getGdpbGenChipId();
433 
434  if (fuNrOfGet4PerGdpb <= fuGet4Id && ngdpb::MSG_STAR_TRI != iMessageType
436  || kFALSE == fbMergedEpochsOn)) {
437  LOG(warn) << "Message with Get4 ID too high: " << fuGet4Id << " VS "
438  << fuNrOfGet4PerGdpb << " set in parameters, message ignored";
439  continue;
440  }
441 
442  switch (mess.getMessageType()) {
443  case ngdpb::MSG_HIT:
444  case ngdpb::MSG_EPOCH:
445  case ngdpb::MSG_GET4: {
446  if (fbGet4M24b)
447  FillHitInfo(mess);
448  else
449  PrintGenInfo(mess);
450  break;
451  } // case old non tof messages
452  case ngdpb::MSG_EPOCH2: {
454  && kTRUE == fbMergedEpochsOn) {
455  for (uint32_t uGet4Index = 0; uGet4Index < fuNrOfGet4PerGdpb;
456  uGet4Index++) {
457  fuGet4Id = uGet4Index;
459  ngdpb::Message tmpMess(mess);
460  tmpMess.setGdpbGenChipId(uGet4Index);
461  // fHistGet4MessType->Fill(uGet4Index, ngdpb::GET4_32B_EPOCH);
462  FillEpochInfo(tmpMess);
463  } // for( uint32_t uGet4Index = 0; uGet4Index < fuNrOfGet4PerGdpb; uGetIndex ++ )
464  } // if this epoch message is a merged one valiud for all chips
465  else {
466  // fHistGet4MessType->Fill( fuGet4Nr, ngdpb::GET4_32B_EPOCH );
467  FillEpochInfo(mess);
468  } // if single chip epoch message
469  break;
470  } // case ngdpb::MSG_EPOCH2:
471  case ngdpb::MSG_GET4_32B: {
472  if (fbEpochSuppModeOn) {
473  fvmEpSupprBuffer[fuGet4Nr].push_back(mess);
474  LOG(debug) << "Add 32B message from Gdpb " << fuGdpbNr
475  << " to EpSupprBuffer of Get4 " << fuGet4Nr << " size "
476  << fvmEpSupprBuffer[fuGet4Nr].size();
477  } else
478  FillHitInfo(mess);
479  break;
480 
481  } // case ngdpb::MSG_GET4_32B:
482  case ngdpb::MSG_GET4_SLC: {
483  PrintSlcInfo(mess);
484  break;
485  } // case ngdpb::MSG_GET4_SLC:
486  case ngdpb::MSG_GET4_SYS: {
487  if (100 > iMess++) PrintSysInfo(mess);
488  break;
489  } // case ngdpb::MSG_GET4_SYS:
490  case ngdpb::MSG_STAR_TRI: {
491  FillStarTrigInfo(mess);
492  break;
493  } // case ngdpb::MSG_STAR_TRI:
494  default: {
495  if (100 > iMess++)
496  LOG(error) << "Message (" << iMess << ") type " << std::hex
497  << std::setw(2)
498  << static_cast<uint16_t>(mess.getMessageType())
499  << " not included in Get4 unpacker.";
500  if (100 == iMess) LOG(error) << "Stop reporting MSG errors... ";
501  } // default:
502  } // switch( mess.getMessageType() )
503 
504  } // for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx ++)
505 
506  } // for (size_t m = 0; m < numCompMsInTs; ++m)
507 
508 
509  return kTRUE;
510 }
511 
512 void CbmDeviceUnpackTofStar2018::FillHitInfo(ngdpb::Message mess) {
513  // --- Get absolute time, GET4 ID and channel number
514  UInt_t uGet4Id = mess.getGdpbGenChipId();
515  UInt_t uChannel = mess.getGdpbHitChanId();
516  UInt_t uTot = mess.getGdpbHit32Tot();
517  // UInt_t uFts = mess.getGdpbHitFineTs();
518 
519  ULong_t ulCurEpochGdpbGet4 = fvulCurrentEpoch[fuGet4Nr];
520 
521  if (kTRUE == fvbFirstEpochSeen[fuGet4Nr]) {
522  // In Ep. Suppr. Mode, receive following epoch instead of previous
523  if (0 < ulCurEpochGdpbGet4)
524  ulCurEpochGdpbGet4--;
525  else
526  ulCurEpochGdpbGet4 = get4v1x::kuEpochCounterSz; // Catch epoch cycle!
527 
528  // ULong_t ulhitTime;
529  Double_t dHitTime;
530  if (fbGet4v20) {
531  // ulhitTime = mess.getMsgG4v2FullTime( ulCurEpochGdpbGet4 );
532  dHitTime = mess.getMsgG4v2FullTimeD(ulCurEpochGdpbGet4);
533 
534  // In 32b mode the coarse counter is already computed back to 112 FTS bins
535  // => need to hide its contribution from the Finetime
536  // => FTS = Fullt TS modulo 112
537  // if( !fbGet4M24b )
538  // uFts = mess.getGdpbHitFullTs() % 112;
539  } // if( fbGet4v20 )
540  else {
541  // ulhitTime = mess.getMsgFullTime(ulCurEpochGdpbGet4);
542  dHitTime = mess.getMsgFullTimeD(ulCurEpochGdpbGet4);
543  } // else of if( fbGet4v20 )
544 
545  Double_t dHitTot = uTot; // in bins
546 
547 
548  // UInt_t uFebIdx = (uGet4Id / fuNrOfGet4PerFeb);
549  // UInt_t uFullFebIdx = (fuGdpbNr * fuNrOfFebsPerGdpb) + uFebIdx;
550 
551  UInt_t uChanInGdpb = uGet4Id * fuNrOfChannelsPerGet4 + uChannel;
552  Int_t uChanInSyst = fuGdpbNr * fuNrOfChannelsPerGdpb + uChanInGdpb;
553  if (fUnpackPar->GetNumberOfChannels() < uChanInSyst) {
554  LOG(error) << "Invalid mapping index " << uChanInSyst << " VS "
555  << fUnpackPar->GetNumberOfChannels() << ", from " << fuGdpbNr
556  << ", " << uGet4Id << ", " << uChannel;
557  return;
558  } // if( fUnpackPar->GetNumberOfChannels() < uChanUId )
559 
560  fvbChanThere[uChanInSyst] = kTRUE;
561 
562  UInt_t uChanUId = fUnpackPar->GetChannelToDetUIdMap(uChanInSyst);
563  if (0 == uChanUId) return; // Hit not mapped to digi
564 
565  /*
566  if( (uChanUId & DetMask) == 0x00001006 )
567  {
568  UInt_t uDetChan = (uChanUId & 0xFF000000) >> 24;
569  if( (uChanUId & 0x00800000) == 0x00800000 )
570  uDetChan += 32;
571 
572  fbDetChanThere[ uDetChan ] = kTRUE;
573  } // if( (uChanUId & DetMask) == 0x00001006 )
574  */
575  // fhRawDigiLastDigi->Fill( dHitTime - fdLastDigiTime );
576 
577  if ((uChanUId & DetMask) != 0x00005006) dHitTime += fdTShiftRef;
578  fdLastDigiTime = dHitTime;
579 
580  LOG(debug) << Form("Insert 0x%08x digi with time ", uChanUId) << dHitTime
581  << Form(", Tot %4.0f", dHitTot) << " into buffer with "
582  << fBuffer->GetSize() << " data from "
583  << Form("%11.1f to %11.1f ",
584  fBuffer->GetTimeFirst(),
585  fBuffer->GetTimeLast())
586  << " at epoch " << ulCurEpochGdpbGet4;
587 
588  fDigi = new CbmTofDigiExp(uChanUId, dHitTime, dHitTot);
589 
590  fBuffer->InsertData<CbmTofDigiExp>(fDigi);
591 
592  // Histograms filling
593  fhRawTotCh[fuGdpbNr]->Fill(uChanInGdpb, dHitTot);
594  fhChCount[fuGdpbNr]->Fill(uChanInGdpb);
595 
596  } // if( kTRUE == fvbFirstEpochSeen[ fuGet4Nr ] )
597 }
598 
599 void CbmDeviceUnpackTofStar2018::FillEpochInfo(ngdpb::Message mess) {
600  ULong64_t ulEpochNr = mess.getGdpbEpEpochNb();
601 
602  // LOG(debug) << "Get4Nr "<<fuGet4Nr<< " in epoch "<<ulEpochNr;
603 
604  fvulCurrentEpoch[fuGet4Nr] = ulEpochNr;
605 
606  if (kFALSE == fvbFirstEpochSeen[fuGet4Nr])
607  fvbFirstEpochSeen[fuGet4Nr] = kTRUE;
608 
609  fulCurrentEpochTime = mess.getMsgFullTime(ulEpochNr);
610  fNofEpochs++;
611 
615  if (0 < ulEpochNr)
616  mess.setEpoch2Number(ulEpochNr - 1);
617  else
618  mess.setEpoch2Number(get4v1x::kuEpochCounterSz);
619 
620  Int_t iBufferSize = fvmEpSupprBuffer[fuGet4Nr].size();
621  if (0 < iBufferSize) {
622  LOG(debug) << "Now processing " << iBufferSize
623  << " stored messages for get4 " << fuGet4Nr
624  << " with epoch number " << (fvulCurrentEpoch[fuGet4Nr] - 1);
625 
626  for (Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++) {
628  } // for( Int_t iMsgIdx = 0; iMsgIdx < iBufferSize; iMsgIdx++ )
629  /*
630  for( UInt_t uLeftFeb = fuGdpbNr * fuNrOfFebsPerGdpb / 2;
631  uLeftFeb < (fuGdpbNr + 1) * fuNrOfFebsPerGdpb / 2;
632  ++uLeftFeb )
633  {
634  for( UInt_t uChanA = 2*uLeftFeb * fuNrOfChannelsPerFeet;
635  uChanA < (2*uLeftFeb + 1) * fuNrOfChannelsPerFeet;
636  ++uChanA )
637  {
638  if( kTRUE == fvbChanThere[ uChanA ] )
639  {
640  for( UInt_t uChanB = (2*uLeftFeb + 1) * fuNrOfChannelsPerFeet;
641  uChanB < (2*uLeftFeb + 2) * fuNrOfChannelsPerFeet;
642  ++uChanB )
643  {
644  if( kTRUE == fvbChanThere[ uChanB ] )
645  {
646  fhChanCoinc[ uLeftFeb ]->Fill( uChanA, uChanB );
647  }
648  }
649  }
650  }
651  } // for( UInt_t uLeftFeb = 0; uLeftFeb < fuNrOfFebsPerGdpb / 2; ++uLeftFeb )
652 */
653  fvmEpSupprBuffer[fuGet4Nr].clear();
654  } // if( 0 < fvmEpSupprBuffer[fGet4Nr] )
655 }
656 
657 void CbmDeviceUnpackTofStar2018::PrintSlcInfo(ngdpb::Message /*mess*/) {
659  /*
660  if( fGdpbIdIndexMap.end() != fGdpbIdIndexMap.find( rocId ) )
661  LOG(info) << "GET4 Slow Control message, epoch " << static_cast<Int_t>(fCurrentEpoch[rocId][get4Id])
662  << ", time " << std::setprecision(9) << std::fixed
663  << Double_t(fulCurrentEpochTime) * 1.e-9 << " s "
664  << " for board ID " << std::hex << std::setw(4) << rocId << std::dec
665  << " +++++++ > Chip = " << std::setw(2) << mess.getGdpbGenChipId()
666  << ", Chan = " << std::setw(1) << mess.getGdpbSlcChan()
667  << ", Edge = " << std::setw(1) << mess.getGdpbSlcEdge()
668  << ", Type = " << std::setw(1) << mess.getGdpbSlcType()
669  << ", Data = " << std::hex << std::setw(6) << mess.getGdpbSlcData() << std::dec
670  << ", Type = " << mess.getGdpbSlcCrc();
671 */
672 }
673 
674 void CbmDeviceUnpackTofStar2018::PrintGenInfo(ngdpb::Message mess) {
675  Int_t mType = mess.getMessageType();
676  Int_t rocId = mess.getRocNumber();
677  Int_t get4Id = mess.getGdpbGenChipId();
678  Int_t channel = mess.getGdpbHitChanId();
679  uint64_t uData = mess.getData();
680  if (100 > iMess++)
681  LOG(info) << "Get4 MSG type " << mType << " from rocId " << rocId
682  << ", getId " << get4Id << ", (hit channel) " << channel
683  << Form(" hex data %0lx ", uData);
684 }
685 
686 void CbmDeviceUnpackTofStar2018::PrintSysInfo(ngdpb::Message mess) {
687  LOG(info) << "GET4 System message, epoch "
688  << (fvulCurrentEpoch[fuGet4Nr]) << ", time " << std::setprecision(9)
689  << std::fixed << Double_t(fulCurrentEpochTime) * 1.e-9 << " s "
690  << " for board ID " << std::hex << std::setw(4) << fuGdpbId
691  << std::dec;
692 
693  switch (mess.getGdpbSysSubType()) {
694  case ngdpb::SYSMSG_GET4_EVENT: {
695  LOG(info) << " +++++++ > Chip = " << std::setw(2)
696  << mess.getGdpbGenChipId() << ", Chan = " << std::setw(1)
697  << mess.getGdpbSysErrChanId() << ", Edge = " << std::setw(1)
698  << mess.getGdpbSysErrEdge() << ", Empt = " << std::setw(1)
699  << mess.getGdpbSysErrUnused() << ", Data = " << std::hex
700  << std::setw(2) << mess.getGdpbSysErrData() << std::dec
701  << " -- GET4 V1 Error Event";
702  break;
703  } //
704  case ngdpb::SYSMSG_CLOSYSYNC_ERROR:
705  LOG(info) << "Closy synchronization error";
706  break;
707  case ngdpb::SYSMSG_TS156_SYNC:
708  LOG(info) << "156.25MHz timestamp reset";
709  break;
710  case ngdpb::SYSMSG_GDPB_UNKWN:
711  LOG(info) << "Unknown GET4 message, data: " << std::hex << std::setw(8)
712  << mess.getGdpbSysUnkwData() << std::dec;
713  break;
714  } // switch( getGdpbSysSubType() )
715 }
716 
718  Int_t iMsgIndex = mess.getStarTrigMsgIndex();
719 
720  //mess.printDataCout();
721 
722  switch (iMsgIndex) {
723  case 0: fulGdpbTsMsb = mess.getGdpbTsMsbStarA(); break;
724  case 1:
725  fulGdpbTsLsb = mess.getGdpbTsLsbStarB();
726  fulStarTsMsb = mess.getStarTsMsbStarB();
727  break;
728  case 2: fulStarTsMid = mess.getStarTsMidStarC(); break;
729  case 3: {
730  ULong64_t ulNewGdpbTsFull = (fulGdpbTsMsb << 24) + (fulGdpbTsLsb);
731  ULong64_t ulNewStarTsFull =
732  (fulStarTsMsb << 48) + (fulStarTsMid << 8) + mess.getStarTsLsbStarD();
733  UInt_t uNewToken = mess.getStarTokenStarD();
734  UInt_t uNewDaqCmd = mess.getStarDaqCmdStarD();
735  UInt_t uNewTrigCmd = mess.getStarTrigCmdStarD();
736  if ((uNewToken == fuStarTokenLast)
737  && (ulNewGdpbTsFull == fulGdpbTsFullLast)
738  && (ulNewStarTsFull == fulStarTsFullLast)
739  && (uNewDaqCmd == fuStarDaqCmdLast)
740  && (uNewTrigCmd == fuStarTrigCmdLast)) {
741  LOG(debug) << "Possible error: identical STAR tokens found twice in a "
742  "row => ignore 2nd! "
743  << Form("token = %5u ", fuStarTokenLast)
744  << Form("gDPB ts = %12llu ", fulGdpbTsFullLast)
745  << Form("STAR ts = %12llu ", fulStarTsFullLast)
746  << Form("DAQ cmd = %2u ", fuStarDaqCmdLast)
747  << Form("TRG cmd = %2u ", fuStarTrigCmdLast);
748  return;
749  } // if exactly same message repeated
750  /*
751  if( (uNewToken != fuStarTokenLast + 1) &&
752  0 < fulGdpbTsFullLast && 0 < fulStarTsFullLast &&
753  ( 4095 != fuStarTokenLast || 1 != uNewToken) )
754  LOG(warn) << "Possible error: STAR token did not increase by exactly 1! "
755  << Form("old = %5u vs new = %5u ", fuStarTokenLast, uNewToken)
756  << Form("old = %12llu vs new = %12llu ", fulGdpbTsFullLast, ulNewGdpbTsFull)
757  << Form("old = %12llu vs new = %12llu ", fulStarTsFullLast, ulNewStarTsFull)
758  << Form("old = %2u vs new = %2u ", fuStarDaqCmdLast, uNewDaqCmd)
759  << Form("old = %2u vs new = %2u ", fuStarTrigCmdLast, uNewTrigCmd);
760 */
761  fulGdpbTsFullLast = ulNewGdpbTsFull;
762  fulStarTsFullLast = ulNewStarTsFull;
763  fuStarTokenLast = uNewToken;
764  fuStarDaqCmdLast = uNewDaqCmd;
765  fuStarTrigCmdLast = uNewTrigCmd;
766 
767  Double_t dTot = 1.;
768  Double_t dTime = fulGdpbTsFullLast * 6.25;
769  if (0. == fdFirstDigiTimeDif && 0. != fdLastDigiTime) {
771  LOG(info) << "Reference fake digi time shift initialized to "
772  << fdFirstDigiTimeDif << ", default: " << fdTShiftRef;
773  } // if( 0. == fdFirstDigiTimeDif && 0. != fdLastDigiTime )
774 
775  // dTime -= fdFirstDigiTimeDif;
776  // dTime += fdTShiftRef;
777 
778  LOG(debug) << "Insert fake digi with time " << dTime << ", Tot " << dTot;
779  fhRawTRefDig0->Fill(dTime - fdLastDigiTime);
780  fhRawTRefDig1->Fill(dTime - fdLastDigiTime);
781 
782  fDigi = new CbmTofDigiExp(
783  0x00005006, dTime, dTot); // fake start counter signal
784  fBuffer->InsertData<CbmTofDigiExp>(fDigi);
785  break;
786  } // case 3
787  default: LOG(error) << "Unknown Star Trigger messageindex: " << iMsgIndex;
788  } // switch( iMsgIndex )
789 }
790 
792 
793 
795  const fles::MicrosliceDescriptor& mdsc) {
796  LOG(info) << "Header ID: Ox" << std::hex << static_cast<int>(mdsc.hdr_id)
797  << std::dec;
798  LOG(info) << "Header version: Ox" << std::hex
799  << static_cast<int>(mdsc.hdr_ver) << std::dec;
800  LOG(info) << "Equipement ID: " << mdsc.eq_id;
801  LOG(info) << "Flags: " << mdsc.flags;
802  LOG(info) << "Sys ID: Ox" << std::hex << static_cast<int>(mdsc.sys_id)
803  << std::dec;
804  LOG(info) << "Sys version: Ox" << std::hex << static_cast<int>(mdsc.sys_ver)
805  << std::dec;
806  LOG(info) << "Microslice Idx: " << mdsc.idx;
807  LOG(info) << "Checksum: " << mdsc.crc;
808  LOG(info) << "Size: " << mdsc.size;
809  LOG(info) << "Offset: " << mdsc.offset;
810 }
811 
812 bool CbmDeviceUnpackTofStar2018::CheckTimeslice(const fles::Timeslice& ts) {
813  if (0 == ts.num_components()) {
814  LOG(error) << "No Component in TS " << ts.index();
815  return 1;
816  }
817  LOG(info) << "Found " << ts.num_components()
818  << " different components in timeslice";
819 
820  for (size_t c = 0; c < ts.num_components(); ++c) {
821  LOG(info) << "Found " << ts.num_microslices(c)
822  << " microslices in component " << c;
823  LOG(info) << "Component " << c << " has a size of " << ts.size_component(c)
824  << " bytes";
825  LOG(info) << "Sys ID: Ox" << std::hex
826  << static_cast<int>(ts.descriptor(0, 0).sys_id) << std::dec;
827 
828  /*
829  for (size_t m = 0; m < ts.num_microslices(c); ++m) {
830  PrintMicroSliceDescriptor(ts.descriptor(c,m));
831  }
832 */
833  }
834 
835  return true;
836 }
CbmDeviceUnpackTofStar2018::fhRawTRefDig0
TH1 * fhRawTRefDig0
Definition: CbmDeviceUnpackTofStar2018.h:109
CbmDeviceUnpackTofStar2018::FillEpochInfo
void FillEpochInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:599
CbmDeviceUnpackTofStar2018::CbmDeviceUnpackTofStar2018
CbmDeviceUnpackTofStar2018()
Definition: CbmDeviceUnpackTofStar2018.cxx:38
CbmDeviceUnpackTofStar2018::InitTask
virtual void InitTask()
Definition: CbmDeviceUnpackTofStar2018.cxx:99
CbmDeviceUnpackTofStar2018::fuNrOfGet4
UInt_t fuNrOfGet4
Definition: CbmDeviceUnpackTofStar2018.h:59
CbmDeviceUnpackTofStar2018::fvulCurrentEpoch
std::vector< ULong64_t > fvulCurrentEpoch
Definition: CbmDeviceUnpackTofStar2018.h:82
CbmDeviceUnpackTofStar2018::PrintGenInfo
void PrintGenInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:674
CbmDeviceUnpackTofStar2018::fbGet4v20
Bool_t fbGet4v20
Definition: CbmDeviceUnpackTofStar2018.h:94
CbmDeviceUnpackTofStar2018::fuNrOfGet4PerGdpb
UInt_t fuNrOfGet4PerGdpb
Definition: CbmDeviceUnpackTofStar2018.h:60
InitTaskError
CBM headers.
Definition: CbmDeviceEventBuilderEtofStar2019.cxx:36
gdpbv100::MSG_HIT
@ MSG_HIT
Definition: gDpbMessv100.h:59
CbmDeviceUnpackTofStar2018::fNofEpochs
Int_t fNofEpochs
Definition: CbmDeviceUnpackTofStar2018.h:85
CbmDeviceUnpackTofStar2018::GetArrayIndex
Int_t GetArrayIndex(Int_t gdpbId, Int_t get4Id)
Definition: CbmDeviceUnpackTofStar2018.h:153
CbmDeviceUnpackTofStar2018::fuGet4Id
UInt_t fuGet4Id
Definition: CbmDeviceUnpackTofStar2018.h:70
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
CbmDeviceUnpackTofStar2018::fulStarTsMid
ULong64_t fulStarTsMid
Definition: CbmDeviceUnpackTofStar2018.h:127
CbmDeviceUnpackTofStar2018::fuNrOfGdpbs
UInt_t fuNrOfGdpbs
Definition: CbmDeviceUnpackTofStar2018.h:53
CbmDeviceUnpackTofStar2018::fhRawTRefDig1
TH1 * fhRawTRefDig1
Definition: CbmDeviceUnpackTofStar2018.h:110
CbmDeviceUnpackTofStar2018::fNumMessages
uint64_t fNumMessages
Definition: CbmDeviceUnpackTofStar2018.h:41
CbmDeviceUnpackTofStar2018::fuGdpbId
UInt_t fuGdpbId
Definition: CbmDeviceUnpackTofStar2018.h:66
CbmDeviceUnpackTofStar2018::fEquipmentId
Int_t fEquipmentId
Definition: CbmDeviceUnpackTofStar2018.h:88
CbmDeviceUnpackTofStar2018::fuNrOfFebsPerGdpb
UInt_t fuNrOfFebsPerGdpb
Definition: CbmDeviceUnpackTofStar2018.h:54
CbmMQTMessage
Definition: CbmDeviceEventBuilderEtofStar2019.h:96
CbmDeviceUnpackTofStar2018::fhChanCoinc
std::vector< TH2 * > fhChanCoinc
Definition: CbmDeviceUnpackTofStar2018.h:115
gdpbv100::kuEpochCounterSz
const uint32_t kuEpochCounterSz
Definition: gDpbMessv100.h:40
CbmDeviceUnpackTofStar2018::fuStarTokenLast
UInt_t fuStarTokenLast
Definition: CbmDeviceUnpackTofStar2018.h:130
CbmDeviceUnpackTofStar2018::PrintSysInfo
void PrintSysInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:686
CbmDeviceUnpackTofStar2018::fuOverlapMsNb
size_t fuOverlapMsNb
Definition: CbmDeviceUnpackTofStar2018.h:49
CbmDeviceUnpackTofStar2018::fulGdpbTsMsb
ULong64_t fulGdpbTsMsb
Definition: CbmDeviceUnpackTofStar2018.h:124
CbmDeviceUnpackTofStar2018::InitContainers
Bool_t InitContainers()
Definition: CbmDeviceUnpackTofStar2018.cxx:143
CbmDeviceUnpackTofStar2018::CheckTimeslice
bool CheckTimeslice(const fles::Timeslice &ts)
Definition: CbmDeviceUnpackTofStar2018.cxx:812
iMess
static Int_t iMess
Definition: CbmDeviceUnpackTofStar2018.cxx:35
CbmDeviceUnpackTofStar2018::fdLastDigiTime
Double_t fdLastDigiTime
Definition: CbmDeviceUnpackTofStar2018.h:103
CbmDeviceUnpackTofStar2018::fulStarTsFullLast
ULong64_t fulStarTsFullLast
Definition: CbmDeviceUnpackTofStar2018.h:129
CbmDeviceUnpackTofStar2018::fulCurrentEpochTime
ULong64_t fulCurrentEpochTime
Definition: CbmDeviceUnpackTofStar2018.h:86
CbmDeviceUnpackTofStar2018::FillHitInfo
void FillHitInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:512
CbmDeviceUnpackTofStar2018::fhChCount
std::vector< TH1 * > fhChCount
Definition: CbmDeviceUnpackTofStar2018.h:113
CbmDeviceUnpackTofStar2018::fhRawTDigEvT0
TH1 * fhRawTDigEvT0
Definition: CbmDeviceUnpackTofStar2018.h:106
DetMask
const Int_t DetMask
Definition: CbmDeviceUnpackTofStar2018.cxx:36
CbmDeviceUnpackTofStar2018::fulGdpbTsFullLast
ULong64_t fulGdpbTsFullLast
Definition: CbmDeviceUnpackTofStar2018.h:128
CbmDeviceUnpackTofStar2018::fuStarTrigCmdLast
UInt_t fuStarTrigCmdLast
Definition: CbmDeviceUnpackTofStar2018.h:132
CbmDeviceUnpackTofStar2018::PrintMicroSliceDescriptor
void PrintMicroSliceDescriptor(const fles::MicrosliceDescriptor &mdsc)
Definition: CbmDeviceUnpackTofStar2018.cxx:794
CbmDeviceUnpackTofStar2018::ReInitContainers
Bool_t ReInitContainers()
Definition: CbmDeviceUnpackTofStar2018.cxx:188
CbmDeviceUnpackTofStar2018::FillStarTrigInfo
void FillStarTrigInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:717
CbmDeviceUnpackTofStar2018::fbEpochSuppModeOn
Bool_t fbEpochSuppModeOn
Definition: CbmDeviceUnpackTofStar2018.h:92
CbmDeviceUnpackTofStar2018::fuStarDaqCmdLast
UInt_t fuStarDaqCmdLast
Definition: CbmDeviceUnpackTofStar2018.h:131
CbmDeviceUnpackTofStar2018::fdTShiftRef
Double_t fdTShiftRef
Definition: CbmDeviceUnpackTofStar2018.h:90
CbmDeviceUnpackTofStar2018::fulGdpbTsLsb
ULong64_t fulGdpbTsLsb
Definition: CbmDeviceUnpackTofStar2018.h:125
CbmDeviceUnpackTofStar2018::fbMergedEpochsOn
Bool_t fbMergedEpochsOn
Definition: CbmDeviceUnpackTofStar2018.h:95
gdpbv100::kuChipIdMergedEpoch
const uint32_t kuChipIdMergedEpoch
Definition: gDpbMessv100.h:51
CbmDeviceUnpackTofStar2018::fuNrOfGet4PerFeb
UInt_t fuNrOfGet4PerFeb
Definition: CbmDeviceUnpackTofStar2018.h:55
CbmDeviceUnpackTofStar2018::~CbmDeviceUnpackTofStar2018
virtual ~CbmDeviceUnpackTofStar2018()
Definition: CbmDeviceUnpackTofStar2018.cxx:791
CbmDeviceUnpackTofStar2018::fuMinNbGdpb
UInt_t fuMinNbGdpb
Definition: CbmDeviceUnpackTofStar2018.h:50
CbmDeviceUnpackTofStar2018::fGdpbIdIndexMap
std::map< UInt_t, UInt_t > fGdpbIdIndexMap
Definition: CbmDeviceUnpackTofStar2018.h:64
CbmDeviceUnpackTofStar2018::fdFirstDigiTimeDif
Double_t fdFirstDigiTimeDif
Definition: CbmDeviceUnpackTofStar2018.h:104
CbmDeviceUnpackTofStar2018::IsChannelNameAllowed
bool IsChannelNameAllowed(std::string channelName)
Definition: CbmDeviceUnpackTofStar2018.cxx:122
CbmDeviceUnpackTofStar2018::fhDetChanCoinc
TH2 * fhDetChanCoinc
Definition: CbmDeviceUnpackTofStar2018.h:117
CbmDeviceUnpackTofStar2018.h
CbmDeviceUnpackTofStar2018::fhRawTDigRef0
TH1 * fhRawTDigRef0
Definition: CbmDeviceUnpackTofStar2018.h:107
CbmDeviceUnpackTofStar2018::HandleData
bool HandleData(FairMQMessagePtr &, int)
Definition: CbmDeviceUnpackTofStar2018.cxx:345
CbmDeviceUnpackTofStar2018::fvmEpSupprBuffer
std::vector< std::vector< ngdpb::Message > > fvmEpSupprBuffer
Definition: CbmDeviceUnpackTofStar2018.h:119
CbmDeviceUnpackTofStar2018::fdMsIndex
Double_t fdMsIndex
Definition: CbmDeviceUnpackTofStar2018.h:89
CbmDeviceUnpackTofStar2018::fuNrOfChannelsPerGet4
UInt_t fuNrOfChannelsPerGet4
Definition: CbmDeviceUnpackTofStar2018.h:56
gdpbv100::MSG_EPOCH
@ MSG_EPOCH
Definition: gDpbMessv100.h:60
m
__m128 m
Definition: L1/vectors/P4_F32vec4.h:26
CbmDeviceUnpackTofStar2018::fhRawTDigRef
TH1 * fhRawTDigRef
Definition: CbmDeviceUnpackTofStar2018.h:108
CbmDeviceUnpackTofStar2018::fAllowedChannels
std::vector< std::string > fAllowedChannels
Definition: CbmDeviceUnpackTofStar2018.h:43
CbmDeviceUnpackTofStar2018::fBuffer
CbmTbDaqBuffer * fBuffer
Definition: CbmDeviceUnpackTofStar2018.h:121
CbmDeviceUnpackTofStar2018::fuGdpbNr
UInt_t fuGdpbNr
Definition: CbmDeviceUnpackTofStar2018.h:68
CbmDeviceUnpackTofStar2018::fvbFirstEpochSeen
std::vector< Bool_t > fvbFirstEpochSeen
Definition: CbmDeviceUnpackTofStar2018.h:83
pos
TVector3 pos
Definition: CbmMvdSensorDigiToHitTask.cxx:60
CbmDeviceUnpackTofStar2018::fhRawDigiLastDigi
TH1 * fhRawDigiLastDigi
Definition: CbmDeviceUnpackTofStar2018.h:111
CbmDeviceUnpackTofStar2018::CreateHistograms
void CreateHistograms()
Definition: CbmDeviceUnpackTofStar2018.cxx:238
CbmDeviceUnpackTofStar2018::fvbChanThere
std::vector< Bool_t > fvbChanThere
Definition: CbmDeviceUnpackTofStar2018.h:114
CbmDeviceUnpackTofStar2018::fuGet4Nr
UInt_t fuGet4Nr
Definition: CbmDeviceUnpackTofStar2018.h:72
CbmDeviceUnpackTofStar2018::fDigi
CbmTofDigiExp * fDigi
Definition: CbmDeviceUnpackTofStar2018.h:97
cbm::mq::ChangeState
void ChangeState(FairMQDevice *device, cbm::mq::Transition transition)
Definition: CbmMQDefs.h:19
CbmDeviceUnpackTofStar2018::fMsgCounter
std::vector< int > fMsgCounter
Definition: CbmDeviceUnpackTofStar2018.h:63
CbmDeviceUnpackTofStar2018::fUnpackPar
CbmTofUnpackPar * fUnpackPar
Definition: CbmDeviceUnpackTofStar2018.h:99
CbmDeviceUnpackTofStar2018::fulStarTsMsb
ULong64_t fulStarTsMsb
Definition: CbmDeviceUnpackTofStar2018.h:126
CbmDeviceUnpackTofStar2018::DoUnpack
Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
Definition: CbmDeviceUnpackTofStar2018.cxx:367
CbmDeviceUnpackTofStar2018::fuNrOfChannelsPerFeet
UInt_t fuNrOfChannelsPerFeet
Definition: CbmDeviceUnpackTofStar2018.h:58
CbmDeviceUnpackTofStar2018::fuNrOfChannelsPerGdpb
UInt_t fuNrOfChannelsPerGdpb
Definition: CbmDeviceUnpackTofStar2018.h:61
CbmDeviceUnpackTofStar2018::PrintSlcInfo
void PrintSlcInfo(ngdpb::Message)
Definition: CbmDeviceUnpackTofStar2018.cxx:657
CbmDeviceUnpackTofStar2018::fbGet4M24b
Bool_t fbGet4M24b
Definition: CbmDeviceUnpackTofStar2018.h:93
CbmDeviceUnpackTofStar2018::fhRawTotCh
std::vector< TH2 * > fhRawTotCh
Definition: CbmDeviceUnpackTofStar2018.h:112