CbmRoot
CbmMcbm2018TofFeeThr.cxx
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------
2 // ----- -----
3 // ----- CbmMcbm2018TofFeeThr -----
4 // ----- Created 10.07.2018 by P.-A. Loizeau -----
5 // ----- -----
6 // -----------------------------------------------------------------------------
7 
8 #include "CbmMcbm2018TofFeeThr.h"
9 #include "CbmMcbm2018TofPar.h"
10 
12 
13 #include "CbmHistManager.h"
14 
15 #include "FairLogger.h"
16 #include "FairRootManager.h"
17 #include "FairRun.h"
18 #include "FairRunOnline.h"
19 #include "FairRuntimeDb.h"
20 
21 #include "Rtypes.h"
22 #include "TCanvas.h"
23 #include "TClonesArray.h"
24 #include "TF1.h"
25 #include "TH1.h"
26 #include "TH2.h"
27 #include "THStack.h"
28 #include "THttpServer.h"
29 #include "TMath.h"
30 #include "TPaveStats.h"
31 #include "TProfile.h"
32 #include "TProfile2D.h"
33 #include "TROOT.h"
34 #include "TString.h"
35 #include "TStyle.h"
36 #include <TFile.h>
37 
38 #include <algorithm>
39 #include <ctime>
40 #include <iomanip>
41 #include <iostream>
42 #include <stdint.h>
43 
46 
48  : CbmMcbmUnpack()
49  , fvMsComponentsList()
50  , fuNbCoreMsPerTs(0)
51  , fuNbOverMsPerTs(0)
52  , fbIgnoreOverlapMs(kFALSE)
53  , fsHistoFileFullname("data/TofPulserHistos.root")
54  , fuMsAcceptsPercent(100)
55  , fuTotalMsNb(0)
56  , fuOverlapMsNb(0)
57  , fuCoreMs(0)
58  , fdMsSizeInNs(0.0)
59  , fdTsCoreSizeInNs(0.0)
60  , fuMinNbGdpb(0)
61  , fuCurrNbGdpb(0)
62  , fUnpackPar()
63  , fuNrOfGdpbs(0)
64  , fuNrOfFeePerGdpb(0)
65  , fuNrOfGet4PerFee(0)
66  , fuNrOfChannelsPerGet4(0)
67  , fuNrOfChannelsPerFee(0)
68  , fuNrOfGet4(0)
69  , fuNrOfGet4PerGdpb(0)
70  , fuNrOfChannelsPerGdpb(0)
71  , fulCurrentTsIndex(0)
72  , fuCurrentMs(0)
73  , fuCurrentMsSysId(0)
74  , fdMsIndex(0)
75  , fuGdpbId(0)
76  , fuGdpbNr(0)
77  , fuGet4Id(0)
78  , fuGet4Nr(0)
79  , fiEquipmentId(0)
80  , fviMsgCounter(11, 0)
81  , // length of enum MessageTypes initialized with 0
82  fvuPadiToGet4()
83  , fvuGet4ToPadi()
84  , fvuElinkToGet4()
85  , fvuGet4ToElink()
86  , fvdPadiThrCodeToValue() {}
87 
89 
91  LOG(info) << "Initializing Get4 monitor";
92 
93  FairRootManager* ioman = FairRootManager::Instance();
94  if (ioman == NULL) {
95  LOG(fatal) << "No FairRootManager instance";
96  } // if( ioman == NULL )
97 
98  return kTRUE;
99 }
100 
102  LOG(info) << "Setting parameter containers for " << GetName();
103  fUnpackPar =
104  (CbmMcbm2018TofPar*) (FairRun::Instance()->GetRuntimeDb()->getContainer(
105  "CbmMcbm2018TofPar"));
106 }
107 
109  LOG(info) << "Init parameter containers for " << GetName();
110  Bool_t initOK = ReInitContainers();
111 
113 
114  return initOK;
115 }
116 
118  LOG(info) << "ReInit parameter containers for " << GetName();
119 
121  LOG(info) << "Nr. of Tof GDPBs: " << fuNrOfGdpbs;
123 
125  LOG(info) << "Nr. of FEEs per Tof GDPB: " << fuNrOfFeePerGdpb;
126 
128  LOG(info) << "Nr. of GET4 per Tof FEE: " << fuNrOfGet4PerFee;
129 
131  LOG(info) << "Nr. of channels per GET4: " << fuNrOfChannelsPerGet4;
132 
134  LOG(info) << "Nr. of channels per FEE: " << fuNrOfChannelsPerFee;
135 
137  LOG(info) << "Nr. of GET4s: " << fuNrOfGet4;
138 
140  LOG(info) << "Nr. of GET4s per GDPB: " << fuNrOfGet4PerGdpb;
141 
143  LOG(info) << "Nr. of channels per GDPB: " << fuNrOfChannelsPerGdpb;
144 
145  fGdpbIdIndexMap.clear();
146  for (UInt_t i = 0; i < fuNrOfGdpbs; ++i) {
148  LOG(info) << "GDPB Id of TOF " << i << " : " << std::hex
149  << fUnpackPar->GetGdpbId(i) << std::dec;
150  } // for( UInt_t i = 0; i < fuNrOfGdpbs; ++i )
151 
153  LOG(info) << "Nr. of GBTx: " << fuNrOfGbtx;
154 
160  LOG(info) << "Timeslice parameters: " << fuTotalMsNb
161  << " MS per link, of which " << fuOverlapMsNb
162  << " overlap MS, each MS is " << fdMsSizeInNs << " ns";
163 
167  /*
168  UInt_t uGet4topadi[32] = {
169  4, 3, 2, 1, // provided by Jochen
170  24, 23, 22, 21,
171  8, 7, 6, 5,
172  28, 27, 26, 25,
173  12, 11, 10, 9,
174  32, 31, 30, 29,
175  16, 15, 14, 13,
176  20, 19, 18, 17 };
177 */
179  UInt_t uGet4topadi[32] = {4, 3, 2, 1, // provided by Jochen
180  8, 7, 6, 5, 12, 11, 10, 9, 16, 15,
181  14, 13, 20, 19, 18, 17, 24, 23, 22, 21,
182  28, 27, 26, 25, 32, 31, 30, 29};
183 
184  UInt_t uPaditoget4[32] = {4, 3, 2, 1, // provided by Jochen
185  12, 11, 10, 9, 20, 19, 18, 17, 28, 27,
186  26, 25, 32, 31, 30, 29, 8, 7, 6, 5,
187  16, 15, 14, 13, 24, 23, 22, 21};
188 
189  for (UInt_t uChan = 0; uChan < fuNrOfChannelsPerFee; ++uChan) {
190  fvuPadiToGet4[uChan] = uPaditoget4[uChan] - 1;
191  fvuGet4ToPadi[uChan] = uGet4topadi[uChan] - 1;
192  } // for( UInt_t uChan = 0; uChan < fuNrOfChannelsPerFee; ++uChan )
193 
194 
198  UInt_t kuElinkToGet4[kuNbGet4PerGbtx] = {
199  27, 2, 7, 3, 31, 26, 30, 1, 33, 37, 32, 13, 9, 14,
200  10, 15, 17, 21, 16, 35, 34, 38, 25, 24, 0, 6, 20, 23,
201  18, 22, 28, 4, 29, 5, 19, 36, 39, 8, 12, 11};
202  UInt_t kuGet4ToElink[kuNbGet4PerGbtx] = {
203  24, 7, 1, 3, 31, 33, 25, 2, 37, 12, 14, 39, 38, 11,
204  13, 15, 18, 16, 28, 34, 26, 17, 29, 27, 23, 22, 5, 0,
205  30, 32, 6, 4, 10, 8, 20, 19, 35, 9, 21, 36};
206 
207  for (UInt_t uLinkAsic = 0; uLinkAsic < kuNbGet4PerGbtx; ++uLinkAsic) {
208  fvuElinkToGet4[uLinkAsic] = kuElinkToGet4[uLinkAsic];
209  fvuGet4ToElink[uLinkAsic] = kuGet4ToElink[uLinkAsic];
210  } // for( UInt_t uChan = 0; uChan < fuNrOfChannelsPerFee; ++uChan )
211 
213  const UInt_t kuNbThrMeasPoints = 65;
214  UInt_t kuThrMeasCode[kuNbThrMeasPoints] = {
215  0x000, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080, 0x090, 0x0A0,
216  0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120, 0x130, 0x140, 0x150,
217  0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0, 0x1D0, 0x1E0, 0x1F0, 0x200,
218  0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270, 0x280, 0x290, 0x2A0, 0x2B0,
219  0x2C0, 0x2D0, 0x2E0, 0x2F0, 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360,
220  0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0, 0x3FF};
221  Double_t kdThrMeasVal[kuNbThrMeasPoints] = {
222  -652.6, -631.2, -611.4, -590.6, -570.9, -550.0, -529.9, -509.4, -490.6,
223  -469.5, -449.3, -428.5, -408.5, -388.2, -367.8, -347.2, -329.2, -308.2,
224  -287.5, -266.8, -246.9, -226.0, -205.6, -185.0, -165.7, -144.9, -124.4,
225  -103.8, -83.4, -62.9, -42.4, -21.2, -5.3, 15.5, 36.2, 56.8,
226  77.3, 97.8, 118.4, 139.1, 158.7, 179.2, 199.7, 220.2, 240.8,
227  261.1, 281.7, 302.2, 321.3, 341.4, 362.0, 382.2, 402.9, 422.8,
228  443.4, 463.7, 483.7, 503.7, 524.1, 544.3, 565.0, 585.0, 605.5,
229  626.0, 646.1};
230 
231  fvdPadiThrCodeToValue.resize(0x3FF + 1, 0.0);
232  for (UInt_t uPadiPoint = 0; uPadiPoint < kuNbThrMeasPoints; ++uPadiPoint) {
233  fvdPadiThrCodeToValue[kuThrMeasCode[uPadiPoint]] = kdThrMeasVal[uPadiPoint];
234 
236  if (uPadiPoint + 1 < kuNbThrMeasPoints) {
237  UInt_t uNbSteps =
238  kuThrMeasCode[uPadiPoint + 1] - kuThrMeasCode[uPadiPoint];
239  Double_t dValStep =
240  (kdThrMeasVal[uPadiPoint + 1] - kdThrMeasVal[uPadiPoint]) / uNbSteps;
241  UInt_t uCode = kuThrMeasCode[uPadiPoint];
242  for (UInt_t uStep = 1; uStep < uNbSteps; ++uStep) {
243  uCode++;
244  fvdPadiThrCodeToValue[uCode] =
245  kdThrMeasVal[uPadiPoint] + dValStep * uStep;
246  } // for( UInt_t uStep = 1; uStep < uNbSteps; ++uStep)
247  } // if( uPadiPoint + 1 < kuNbThrMeasPoints )
248  } // for( UInt_t uPadiPoint = 0; uPadiPoint < kuNbThrMeasPoints; ++uPadiPoint )
249 
250 
251  return kTRUE;
252 }
253 
254 
256  UShort_t /*usDetectorId*/) {
258  for (UInt_t uCompIdx = 0; uCompIdx < fvMsComponentsList.size(); ++uCompIdx)
259  if (component == fvMsComponentsList[uCompIdx]) return;
260 
262  fvMsComponentsList.push_back(component);
263 }
264 void CbmMcbm2018TofFeeThr::SetNbMsInTs(size_t uCoreMsNb, size_t uOverlapMsNb) {
265  fuNbCoreMsPerTs = uCoreMsNb;
266  fuNbOverMsPerTs = uOverlapMsNb;
267 
268  // UInt_t uNbMsTotal = fuNbCoreMsPerTs + fuNbOverMsPerTs;
269 }
270 
272  LOG(info) << "create Histos for " << fuNrOfGdpbs << " gDPBs ";
273 
274  THttpServer* server = FairRunOnline::Instance()->GetHttpServer();
275 
276  fhGdpbAsicSpiCounts = new TH2I(
277  "hGdpbAsicSpiCounts",
278  "SPI messages count per GDPB and ASIC; ASIC Idx []; GDPB []; SPI msg[]",
280  -0.5,
281  fuNrOfGet4PerGdpb - 0.5,
282  fuNrOfGdpbs,
283  -0.5,
284  fuNrOfGdpbs - 0.5);
285 
286  if (server) {
287  server->Register("/", fhGdpbAsicSpiCounts);
288  server->RegisterCommand("/Reset_All_eTOF",
289  "bMcbm2018TofFeeThrResetHistos=kTRUE");
290  server->RegisterCommand("/Save_All_eTof",
291  "bMcbm2018TofFeeThrSaveHistos=kTRUE");
292 
293  server->Restrict("/Reset_All_eTof", "allow=admin");
294  server->Restrict("/Save_All_eTof", "allow=admin");
295  } // if( server )
296 
297  LOG(info) << "Leaving CreateHistograms";
298 }
299 
300 Bool_t CbmMcbm2018TofFeeThr::DoUnpack(const fles::Timeslice& ts,
301  size_t component) {
303  LOG(info) << "Reset eTOF STAR histos ";
304  ResetAllHistos();
306  } // if( bMcbm2018TofFeeThrResetHistos )
308  LOG(info) << "Start saving eTOF STAR histos ";
309  SaveAllHistos("data/histos_Shift_StarTof.root");
311  } // if( bSaveStsHistos )
312 
313 
314  LOG(debug1) << "Timeslice contains " << ts.num_microslices(component)
315  << "microslices.";
316 
318  UInt_t uNbMsLoop = fuNbCoreMsPerTs;
319  if (kFALSE == fbIgnoreOverlapMs) uNbMsLoop += fuNbOverMsPerTs;
320 
321  Int_t messageType = -111;
322  // Double_t dTsStartTime = -1;
323 
325  for (UInt_t uMsIdx = 0; uMsIdx < uNbMsLoop; uMsIdx++) {
326  if (fuMsAcceptsPercent < uMsIdx) continue;
327 
328  fuCurrentMs = uMsIdx;
329 
330  if (0 == fulCurrentTsIndex && 0 == uMsIdx) {
331  for (UInt_t uMsCompIdx = 0; uMsCompIdx < fvMsComponentsList.size();
332  ++uMsCompIdx) {
333  UInt_t uMsComp = fvMsComponentsList[uMsCompIdx];
334  auto msDescriptor = ts.descriptor(uMsComp, uMsIdx);
335  /*
336  LOG(info) << "hi hv eqid flag si sv idx/start crc size offset";
337  LOG(info) << Form( "%02x %02x %04x %04x %02x %02x %016llx %08x %08x %016llx",
338  static_cast<unsigned int>(msDescriptor.hdr_id),
339  static_cast<unsigned int>(msDescriptor.hdr_ver), msDescriptor.eq_id, msDescriptor.flags,
340  static_cast<unsigned int>(msDescriptor.sys_id),
341  static_cast<unsigned int>(msDescriptor.sys_ver), msDescriptor.idx, msDescriptor.crc,
342  msDescriptor.size, msDescriptor.offset );
343 */
344  LOG(info) << FormatMsHeaderPrintout(msDescriptor);
345  } // for( UInt_t uMsCompIdx = 0; uMsCompIdx < fvMsComponentsList.size(); ++uMsCompIdx )
346  } // if( 0 == fulCurrentTsIndex && 0 == uMsIdx )
347 
349  for (UInt_t uMsCompIdx = 0; uMsCompIdx < fvMsComponentsList.size();
350  ++uMsCompIdx) {
351  constexpr uint32_t kuBytesPerMessage = 8;
352 
353  UInt_t uMsComp = fvMsComponentsList[uMsCompIdx];
354  auto msDescriptor = ts.descriptor(uMsComp, uMsIdx);
355  fiEquipmentId = msDescriptor.eq_id;
356  fdMsIndex = static_cast<double>(msDescriptor.idx);
357  fuCurrentMsSysId = static_cast<unsigned int>(msDescriptor.sys_id);
358  const uint8_t* msContent =
359  reinterpret_cast<const uint8_t*>(ts.content(uMsComp, uMsIdx));
360 
361  uint32_t size = msDescriptor.size;
362  // fulLastMsIdx = msDescriptor.idx;
363  if (size > 0)
364  LOG(debug) << "Microslice: " << msDescriptor.idx
365  << " has size: " << size;
366 
367  // If not integer number of message in input buffer, print warning/error
368  if (0 != (size % kuBytesPerMessage))
369  LOG(error) << "The input microslice buffer does NOT "
370  << "contain only complete nDPB messages!";
371 
372  // Compute the number of complete messages in the input microslice buffer
373  uint32_t uNbMessages =
374  (size - (size % kuBytesPerMessage)) / kuBytesPerMessage;
375 
376  // Get the gDPB ID from the MS header
378 
380  auto it = fGdpbIdIndexMap.find(fuGdpbId);
381  if (it == fGdpbIdIndexMap.end()) {
382  LOG(info)
383  << "---------------------------------------------------------------";
384  /*
385  LOG(info) << "hi hv eqid flag si sv idx/start crc size offset";
386  LOG(info) << Form( "%02x %02x %04x %04x %02x %02x %016llx %08x %08x %016llx",
387  static_cast<unsigned int>(msDescriptor.hdr_id),
388  static_cast<unsigned int>(msDescriptor.hdr_ver), msDescriptor.eq_id, msDescriptor.flags,
389  static_cast<unsigned int>(msDescriptor.sys_id),
390  static_cast<unsigned int>(msDescriptor.sys_ver), msDescriptor.idx, msDescriptor.crc,
391  msDescriptor.size, msDescriptor.offset );
392 */
393  LOG(info) << FormatMsHeaderPrintout(msDescriptor);
394  LOG(warning) << "Could not find the gDPB index for AFCK id 0x"
395  << std::hex << fuGdpbId << std::dec << " in timeslice "
396  << fulCurrentTsIndex << " in microslice " << fdMsIndex
397  << " component " << uMsCompIdx << "\n"
398  << "If valid this index has to be added in the TOF "
399  "parameter file in the RocIdArray field";
400  continue;
401  } // if( it == fGdpbIdIndexMap.end() )
402  else
404 
405  // Prepare variables for the loop on contents
406  const uint64_t* pInBuff = reinterpret_cast<const uint64_t*>(msContent);
407  for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx++) {
408  // Fill message
409  uint64_t ulData = static_cast<uint64_t>(pInBuff[uIdx]);
410 
412  if (0 == uIdx) { continue; } // if( 0 == uIdx )
413 
414  gdpbv100::Message mess(ulData);
415 
416  // Increment counter for different message types
417  // and fill the corresponding histogram
418  messageType = mess.getMessageType();
419  fviMsgCounter[messageType]++;
420 
424  if (0x90 == fuCurrentMsSysId) fuGet4Id = mess.getGdpbGenChipId();
426 
427  if (fuNrOfGet4PerGdpb <= fuGet4Id && !mess.isStarTrigger()
429  LOG(warning) << "Message with Get4 ID too high: " << fuGet4Id
430  << " VS " << fuNrOfGet4PerGdpb << " set in parameters.";
431 
432  switch (messageType) {
433  case gdpbv100::MSG_HIT:
434  case gdpbv100::MSG_EPOCH: break;
435  case gdpbv100::MSG_SLOWC: {
436  PrintSlcInfo(mess);
437  break;
438  } // case gdpbv100::MSG_SLOWC:
439  case gdpbv100::MSG_SYST:
443  case gdpbv100::MSG_STAR_TRI_D: break;
444  default:
445  LOG(error) << "Message type " << std::hex << std::setw(2)
446  << static_cast<uint16_t>(messageType)
447  << " not included in Get4 unpacker.";
448  } // switch( mess.getMessageType() )
449  } // for (uint32_t uIdx = 0; uIdx < uNbMessages; uIdx ++)
450  } // for( UInt_t uMsCompIdx = 0; uMsCompIdx < fvMsComponentsList.size(); ++uMsCompIdx )
451  } // for( UInt_t uMsIdx = 0; uMsIdx < uNbMsLoop; uMsIdx ++ )
452 
453 
455 
456  return kTRUE;
457 }
458 
460  if (fGdpbIdIndexMap.end() != fGdpbIdIndexMap.find(fuGdpbId)) {
461  UInt_t uChan = mess.getGdpbSlcChan();
462  UInt_t uEdge = mess.getGdpbSlcEdge();
463  UInt_t uData = mess.getGdpbSlcData();
464  UInt_t uType = mess.getGdpbSlcType();
465 
466  // Double_t dGdpbChId = fuGet4Id * fuNrOfChannelsPerGet4 + mess.getGdpbSlcChan() + 0.5 * mess.getGdpbSlcEdge();
467  // Double_t dFullChId = fuGet4Nr * fuNrOfChannelsPerGet4 + mess.getGdpbSlcChan() + 0.5 * mess.getGdpbSlcEdge();
468  Double_t dMessTime = fdMsIndex * 1e-9;
469 
471  if (gdpbv100::GET4_32B_SLC_SPIREAD == uType) {
473  LOG(info) << "GET4 Slow Control message, time "
474  << Form("%3.3f", dMessTime) << " s "
475  << " for board ID " << std::hex << std::setw(4) << fuGdpbId
476  << std::dec << "\n"
477  << " +++++++ > Chip = " << std::setw(3) << fuGet4Id
478  << ", Chan = " << std::setw(1) << uChan
479  << ", Edge = " << std::setw(1) << uEdge
480  << ", Type = " << std::setw(1) << mess.getGdpbSlcType() << ", "
481  << Form("channel %1u,", (uData >> 10) & 0xF)
482  << Form("value 0x%03x ", uData & 0x3FF)
483  << Form("level %4.1f ", fvdPadiThrCodeToValue[uData & 0x3FF])
484  << Form("(Data = 0x%06x) ", uData);
485  } // if( gdpbv100::GET4_32B_SLC_SPIREAD == uType )
486  }
487 }
488 
490 
492  // Printout some stats on what was unpacked
493  TString message_type;
494  for (unsigned int i = 0; i < fviMsgCounter.size(); ++i) {
495  switch (i) {
496  case 0: message_type = "NOP"; break;
497  case 1: message_type = "HIT"; break;
498  case 2: message_type = "EPOCH"; break;
499  case 3: message_type = "SYNC"; break;
500  case 4: message_type = "AUX"; break;
501  case 5: message_type = "EPOCH2"; break;
502  case 6: message_type = "GET4"; break;
503  case 7: message_type = "SYS"; break;
504  case 8: message_type = "GET4_SLC"; break;
505  case 9: message_type = "GET4_32B"; break;
506  case 10: message_type = "GET4_SYS"; break;
507  default: message_type = "UNKNOWN"; break;
508  } // switch(i)
509  LOG(info) << message_type << " messages: " << fviMsgCounter[i];
510  } // for (unsigned int i=0; i< fviMsgCounter.size(); ++i)
511 
513  // SaveAllHistos();
514 }
515 
516 void CbmMcbm2018TofFeeThr::SaveAllHistos(TString sFileName) {
517  TDirectory* oldDir = NULL;
518  TFile* histoFile = NULL;
519  if ("" != sFileName) {
520  // Store current directory position to allow restore later
521  oldDir = gDirectory;
522  // open separate histo file in recreate mode
523  histoFile = new TFile(sFileName, "RECREATE");
524  histoFile->cd();
525  } // if( "" != sFileName )
526 
527  if ("" != sFileName) {
528  // Restore original directory position
529  histoFile->Close();
530  oldDir->cd();
531  } // if( "" != sFileName )
532 }
533 
535  LOG(info) << "Reseting all TOF histograms.";
536  fhGdpbAsicSpiCounts->Reset();
537 }
gdpbv100::MSG_STAR_TRI_A
@ MSG_STAR_TRI_A
Definition: gDpbMessv100.h:63
gdpbv100::Message
Definition: gDpbMessv100.h:133
CbmMcbm2018TofFeeThr::fuCurrentMs
size_t fuCurrentMs
Definition: CbmMcbm2018TofFeeThr.h:119
CbmMcbm2018TofFeeThr::ReInitContainers
Bool_t ReInitContainers()
Definition: CbmMcbm2018TofFeeThr.cxx:117
bMcbm2018TofFeeThrResetHistos
Bool_t bMcbm2018TofFeeThrResetHistos
Definition: CbmMcbm2018TofFeeThr.cxx:44
gdpbv100::Message::getGdpbSlcType
uint32_t getGdpbSlcType() const
Definition: gDpbMessv100.h:241
CbmMcbm2018TofFeeThr::fvdPadiThrCodeToValue
std::vector< Double_t > fvdPadiThrCodeToValue
PADI threshold measures and extrapolated code to value map.
Definition: CbmMcbm2018TofFeeThr.h:161
CbmMcbm2018TofFeeThr::fuGet4Nr
UInt_t fuGet4Nr
Definition: CbmMcbm2018TofFeeThr.h:128
CbmMcbm2018TofFeeThr::fvuPadiToGet4
std::vector< UInt_t > fvuPadiToGet4
Definition: CbmMcbm2018TofFeeThr.h:144
CbmMcbm2018TofFeeThr::fsHistoFileFullname
TString fsHistoFileFullname
/‍** Ignore Overlap Ms: all fuOverlapMsNb MS at the end of timeslice **‍/
Definition: CbmMcbm2018TofFeeThr.h:83
CbmMcbm2018TofFeeThr::SetParContainers
void SetParContainers()
Definition: CbmMcbm2018TofFeeThr.cxx:101
CbmMcbm2018TofFeeThr::fuNrOfChannelsPerGdpb
UInt_t fuNrOfChannelsPerGdpb
Definition: CbmMcbm2018TofFeeThr.h:107
CbmMcbm2018TofFeeThr::fviMsgCounter
std::vector< int > fviMsgCounter
Definition: CbmMcbm2018TofFeeThr.h:130
CbmMcbm2018TofFeeThr::kuNbGet4PerGbtx
static const UInt_t kuNbGet4PerGbtx
Definition: CbmMcbm2018TofFeeThr.h:148
CbmMcbm2018TofPar::GetNbMsTot
Int_t GetNbMsTot()
Definition: CbmMcbm2018TofPar.h:79
CbmMcbm2018TofFeeThr::fuNbOverMsPerTs
size_t fuNbOverMsPerTs
Definition: CbmMcbm2018TofFeeThr.h:78
CbmMcbm2018TofPar::GetGdpbId
Int_t GetGdpbId(Int_t i)
Definition: CbmMcbm2018TofPar.h:67
CbmMcbm2018TofFeeThr::fuNrOfGet4
UInt_t fuNrOfGet4
Definition: CbmMcbm2018TofFeeThr.h:105
CbmMcbm2018TofFeeThr::fuGet4Id
UInt_t fuGet4Id
Definition: CbmMcbm2018TofFeeThr.h:126
CbmMcbm2018TofFeeThr::fdTsCoreSizeInNs
Double_t fdTsCoreSizeInNs
Definition: CbmMcbm2018TofFeeThr.h:93
gdpbv100::Message::getGdpbSlcChan
uint32_t getGdpbSlcChan() const
Definition: gDpbMessv100.h:239
CbmMcbm2018TofPar.h
CbmMcbm2018TofFeeThr::fdMsSizeInNs
Double_t fdMsSizeInNs
Definition: CbmMcbm2018TofFeeThr.h:92
gdpbv100::MSG_HIT
@ MSG_HIT
Definition: gDpbMessv100.h:59
CbmMcbm2018TofFeeThr::fuNrOfFeePerGdpb
UInt_t fuNrOfFeePerGdpb
Definition: CbmMcbm2018TofFeeThr.h:100
CbmMcbm2018TofFeeThr
Definition: CbmMcbm2018TofFeeThr.h:33
i
int i
Definition: L1/vectors/P4_F32vec4.h:25
gdpbv100::MSG_SLOWC
@ MSG_SLOWC
Definition: gDpbMessv100.h:61
CbmMcbm2018TofFeeThr::fuNrOfChannelsPerGet4
UInt_t fuNrOfChannelsPerGet4
Definition: CbmMcbm2018TofFeeThr.h:102
CbmMcbm2018TofFeeThr::fuNbCoreMsPerTs
size_t fuNbCoreMsPerTs
Definition: CbmMcbm2018TofFeeThr.h:77
gdpbv100::MSG_STAR_TRI_D
@ MSG_STAR_TRI_D
Definition: gDpbMessv100.h:66
gdpbv100::Message::getMessageType
uint8_t getMessageType() const
Returns the message type. Valid for all message types. 4 bit.
Definition: gDpbMessv100.h:206
CbmMcbm2018TofFeeThr::Reset
virtual void Reset()
Definition: CbmMcbm2018TofFeeThr.cxx:489
CbmMcbm2018TofFeeThr::Finish
virtual void Finish()
Definition: CbmMcbm2018TofFeeThr.cxx:491
CbmMcbm2018TofPar::GetNrOfGbtx
Int_t GetNrOfGbtx()
Definition: CbmMcbm2018TofPar.h:72
gdpbv100::Message::isStarTrigger
bool isStarTrigger() const
Returns true is message type is MSG_STAR_TRI_A, _B, _C, _D (STAR Trigger message)
Definition: gDpbMessv100.h:329
CbmMcbm2018TofFeeThr::fuNrOfGet4PerFee
UInt_t fuNrOfGet4PerFee
Definition: CbmMcbm2018TofFeeThr.h:101
CbmMcbm2018TofPar::GetNbMsOverlap
Int_t GetNbMsOverlap()
Definition: CbmMcbm2018TofPar.h:80
CbmHistManager.h
Histogram manager.
CbmMcbm2018TofFeeThr::DoUnpack
virtual Bool_t DoUnpack(const fles::Timeslice &ts, size_t component)
Definition: CbmMcbm2018TofFeeThr.cxx:300
CbmMcbm2018TofFeeThr::InitContainers
Bool_t InitContainers()
Definition: CbmMcbm2018TofFeeThr.cxx:108
CbmMcbm2018TofFeeThr::ConvertElinkToGet4
UInt_t ConvertElinkToGet4(UInt_t uElinkIdx)
Definition: CbmMcbm2018TofFeeThr.h:151
CbmMcbm2018TofFeeThr::fuOverlapMsNb
size_t fuOverlapMsNb
Definition: CbmMcbm2018TofFeeThr.h:90
CbmMcbm2018TofFeeThr::fuTotalMsNb
size_t fuTotalMsNb
Definition: CbmMcbm2018TofFeeThr.h:88
CbmMcbm2018TofFeeThr::fuGdpbId
UInt_t fuGdpbId
Definition: CbmMcbm2018TofFeeThr.h:122
CbmMcbm2018TofPar::GetNrOfGdpbs
Int_t GetNrOfGdpbs()
FIXME: replace with method returning the correspondign constants! see Star2019 parameter.
Definition: CbmMcbm2018TofPar.h:66
CbmMcbm2018TofFeeThr::ResetAllHistos
void ResetAllHistos()
Definition: CbmMcbm2018TofFeeThr.cxx:534
gdpbv100::MSG_STAR_TRI_C
@ MSG_STAR_TRI_C
Definition: gDpbMessv100.h:65
CbmMcbm2018TofFeeThr.h
CbmMcbm2018TofFeeThr::fiEquipmentId
Int_t fiEquipmentId
Definition: CbmMcbm2018TofFeeThr.h:129
bMcbm2018TofFeeThrSaveHistos
Bool_t bMcbm2018TofFeeThrSaveHistos
Definition: CbmMcbm2018TofFeeThr.cxx:45
gdpbv100::Message::getGdpbSlcEdge
uint32_t getGdpbSlcEdge() const
Definition: gDpbMessv100.h:240
CbmMcbm2018TofFeeThr::SetNbMsInTs
virtual void SetNbMsInTs(size_t uCoreMsNb, size_t uOverlapMsNb)
Definition: CbmMcbm2018TofFeeThr.cxx:264
CbmMcbm2018TofFeeThr::fuNrOfGbtx
UInt_t fuNrOfGbtx
Definition: CbmMcbm2018TofFeeThr.h:109
gdpbv100::kuChipIdMergedEpoch
const uint32_t kuChipIdMergedEpoch
Definition: gDpbMessv100.h:51
CbmMcbm2018TofFeeThr::fuMinNbGdpb
UInt_t fuMinNbGdpb
Definition: CbmMcbm2018TofFeeThr.h:94
ClassImp
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
Definition: CbmConverterManager.cxx:12
CbmMcbm2018TofFeeThr::fdMsIndex
Double_t fdMsIndex
Definition: CbmMcbm2018TofFeeThr.h:121
CbmMcbm2018TofFeeThr::fvMsComponentsList
std::vector< size_t > fvMsComponentsList
FLES containers.
Definition: CbmMcbm2018TofFeeThr.h:72
CbmMcbm2018TofFeeThr::fuNrOfChannelsPerFee
UInt_t fuNrOfChannelsPerFee
Definition: CbmMcbm2018TofFeeThr.h:104
CbmMcbm2018TofFeeThr::fhGdpbAsicSpiCounts
TH2 * fhGdpbAsicSpiCounts
Histograms.
Definition: CbmMcbm2018TofFeeThr.h:133
CbmMcbm2018TofFeeThr::fbIgnoreOverlapMs
Bool_t fbIgnoreOverlapMs
Definition: CbmMcbm2018TofFeeThr.h:80
gdpbv100::MSG_SYST
@ MSG_SYST
Definition: gDpbMessv100.h:62
CbmMcbm2018TofFeeThr::fvuGet4ToPadi
std::vector< UInt_t > fvuGet4ToPadi
Definition: CbmMcbm2018TofFeeThr.h:145
CbmMcbm2018TofFeeThr::fuCurrentMsSysId
size_t fuCurrentMsSysId
Definition: CbmMcbm2018TofFeeThr.h:120
CbmMcbm2018TofFeeThr::PrintSlcInfo
void PrintSlcInfo(gdpbv100::Message)
Definition: CbmMcbm2018TofFeeThr.cxx:459
FormatMsHeaderPrintout
std::string FormatMsHeaderPrintout(const fles::MicrosliceDescriptor &msDescriptor)
Definition: CbmFormatMsHeaderPrintout.cxx:5
CbmMcbm2018TofFeeThr::CreateHistograms
void CreateHistograms()
Definition: CbmMcbm2018TofFeeThr.cxx:271
CbmMcbm2018TofPar
Definition: CbmMcbm2018TofPar.h:18
CbmMcbm2018TofFeeThr::fUnpackPar
CbmMcbm2018TofPar * fUnpackPar
Definition: CbmMcbm2018TofFeeThr.h:98
CbmMcbm2018TofPar::GetNrOfChannelsPerGet4
Int_t GetNrOfChannelsPerGet4()
Definition: CbmMcbm2018TofPar.h:70
CbmMcbm2018TofPar::GetSizeMsInNs
Double_t GetSizeMsInNs()
Definition: CbmMcbm2018TofPar.h:81
CbmMcbm2018TofFeeThr::~CbmMcbm2018TofFeeThr
virtual ~CbmMcbm2018TofFeeThr()
Definition: CbmMcbm2018TofFeeThr.cxx:88
gdpbv100::MSG_EPOCH
@ MSG_EPOCH
Definition: gDpbMessv100.h:60
CbmMcbm2018TofFeeThr::fuCoreMs
size_t fuCoreMs
Definition: CbmMcbm2018TofFeeThr.h:91
CbmMcbm2018TofFeeThr::AddMsComponentToList
virtual void AddMsComponentToList(size_t component, UShort_t usDetectorId)
Definition: CbmMcbm2018TofFeeThr.cxx:255
gdpbv100::Message::getGdpbGenChipId
uint16_t getGdpbGenChipId() const
Definition: gDpbMessv100.h:214
CbmMcbm2018TofFeeThr::Init
virtual Bool_t Init()
Definition: CbmMcbm2018TofFeeThr.cxx:90
CbmMcbm2018TofFeeThr::fGdpbIdIndexMap
std::map< UInt_t, UInt_t > fGdpbIdIndexMap
Map of ID to index for the gDPBs.
Definition: CbmMcbm2018TofFeeThr.h:115
gdpbv100::MSG_STAR_TRI_B
@ MSG_STAR_TRI_B
Definition: gDpbMessv100.h:64
CbmMcbm2018TofFeeThr::fuMsAcceptsPercent
size_t fuMsAcceptsPercent
OLD, to be cleaned out !!!!!
Definition: CbmMcbm2018TofFeeThr.h:87
CbmMcbm2018TofFeeThr::SaveAllHistos
void SaveAllHistos(TString sFileName="")
Definition: CbmMcbm2018TofFeeThr.cxx:516
CbmMcbm2018TofFeeThr::fulCurrentTsIndex
uint64_t fulCurrentTsIndex
Definition: CbmMcbm2018TofFeeThr.h:118
gdpbv100::Message::getGdpbSlcData
uint32_t getGdpbSlcData() const
Definition: gDpbMessv100.h:242
gdpbv100::GET4_32B_SLC_SPIREAD
@ GET4_32B_SLC_SPIREAD
Definition: gDpbMessv100.h:103
CbmMcbm2018TofFeeThr::fuGdpbNr
UInt_t fuGdpbNr
Definition: CbmMcbm2018TofFeeThr.h:124
CbmMcbm2018TofFeeThr::fuNrOfGet4PerGdpb
UInt_t fuNrOfGet4PerGdpb
Definition: CbmMcbm2018TofFeeThr.h:106
CbmMcbm2018TofFeeThr::fuNrOfGdpbs
UInt_t fuNrOfGdpbs
Definition: CbmMcbm2018TofFeeThr.h:99
CbmMcbm2018TofFeeThr::fvuElinkToGet4
std::vector< UInt_t > fvuElinkToGet4
5 FEE with 8 GET4 each
Definition: CbmMcbm2018TofFeeThr.h:149
CbmMcbmUnpack
Definition: CbmMcbmUnpack.h:15
CbmMcbm2018TofPar::GetNrOfGet4PerFee
Int_t GetNrOfGet4PerFee()
Definition: CbmMcbm2018TofPar.h:69
CbmMcbm2018TofFeeThr::CbmMcbm2018TofFeeThr
CbmMcbm2018TofFeeThr()
Definition: CbmMcbm2018TofFeeThr.cxx:47
CbmFormatMsHeaderPrintout.h
CbmMcbm2018TofPar::GetNrOfFeesPerGdpb
Int_t GetNrOfFeesPerGdpb()
Definition: CbmMcbm2018TofPar.h:68
CbmMcbm2018TofFeeThr::fvuGet4ToElink
std::vector< UInt_t > fvuGet4ToElink
Definition: CbmMcbm2018TofFeeThr.h:150