PandaRoot
PndMQBurstProcessor.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 /********************************************************************************
14  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
15  * *
16  * This software is distributed under the terms of the *
17  * GNU Lesser General Public Licence version 3 (LGPL) version 3, *
18  * copied verbatim in the file "LICENSE" *
19  ********************************************************************************/
27 #ifndef PndMQBurstProcessor_H_
28 #define PndMQBurstProcessor_H_
29 
30 #include <iostream>
31 
32 #include "TList.h"
33 #include "TObjString.h"
34 
35 #include "FairMQDevice.h"
36 #include "FairMQLogger.h"
37 #include "FairParGenericSet.h"
38 #include "FairGeoParSet.h"
39 
41 
42 #include "baseMQtools.h"
43 
44 #include "TMessage.h"
45 
46 #ifndef __CINT__
47 #include <boost/thread.hpp>
48 #include <boost/bind.hpp>
49 #include <boost/serialization/access.hpp>
50 #include <boost/archive/text_iarchive.hpp>
51 #include <boost/archive/binary_iarchive.hpp>
52 #include <boost/archive/text_oarchive.hpp>
53 #include <boost/archive/binary_oarchive.hpp>
54 #include <boost/serialization/vector.hpp>
55 #include <boost/serialization/unique_ptr.hpp>
56 #endif //__CINT__
57 
58 using namespace std;
59 
60 class PndMQBurstProcessor : public FairMQDevice {
61  public:
62  PndMQBurstProcessor() : fHasBoostSerialization(false), fCurrentRunId(0), fNewRunId(0)
63  {
64  gSystem->ResetSignal(kSigInterrupt);
65  gSystem->ResetSignal(kSigTermination);
66 
67  // Check if boost serialization is available if it is chosen
68  using namespace baseMQ::tools::resolve;
69  // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
70  if (is_same<boost::archive::binary_iarchive, boost::archive::binary_iarchive>::value || is_same<boost::archive::binary_iarchive, boost::archive::text_iarchive>::value) {
71  if (has_BoostSerialization<FairTimeStamp, void(boost::archive::binary_iarchive &, const unsigned int)>::value == 1) {
72  fHasBoostSerialization = true;
73  }
74  }
75  }
76 
77  virtual ~PndMQBurstProcessor() { fParCList->Clear(); }
78 
79  virtual void UpdateParameters();
80  virtual FairParGenericSet *UpdateParameter(FairParGenericSet *thisPar);
81  virtual void SetParameters(){};
82  static void CustomCleanupParameters(void *data, void *hint);
83  static void free_string(void *data, void *hint);
84 
85  virtual void ProcessData() = 0;
86 
87  template <class Archive>
88  void serialize(Archive &ar, const unsigned int version)
89  {
90  ar &fBurstDataIn;
91  ar &fBurstDataOut;
92  }
93 
94  protected:
95  virtual void Run();
99  int fNewRunId;
100  TList *fParCList;
101 
102  private:
103 #ifndef __CINT__ // for BOOST serialization
104  friend class boost::serialization::access;
105  bool fHasBoostSerialization;
106 #endif // for BOOST serialization
107 
109  // PndMQBurstProcessor(const PndMQBurstProcessor&);
110  // PndMQBurstProcessor operator=(const PndMQBurstProcessor&);
111 };
112 
113 #endif /* PndMQBurstProcessor_H_ */
virtual void SetParameters()
STL namespace.
void serialize(Archive &ar, const unsigned int version)