FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Private Attributes | Friends | List of all members
PndMQFileSinkHits Class Reference

#include <PndMQFileSinkHits.h>

Inheritance diagram for PndMQFileSinkHits:

Public Member Functions

 PndMQFileSinkHits (std::string outputFileName="FilesSinkHits.root")
 
virtual ~PndMQFileSinkHits ()
 
virtual void SetFileName (std::string fileName)
 
virtual void InitOutputFile (TString defaultId="100")
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Protected Member Functions

virtual void Run ()
 

Private Attributes

TFile * fOutFile
 
TTree * fTree
 
TClonesArray * fOutput
 
TList * fBranchNameList
 
std::string fOutputFileName
 
vector< vector< PndSdsHit > > fHitVector
 
bool fHasBoostSerialization
 

Friends

class boost::serialization::access
 

Detailed Description

Definition at line 55 of file PndMQFileSinkHits.h.

Constructor & Destructor Documentation

PndMQFileSinkHits::PndMQFileSinkHits ( std::string  outputFileName = "FilesSinkHits.root")
inline

Definition at line 58 of file PndMQFileSinkHits.h.

59  : fOutFile(NULL)
60  , fTree(NULL)
61  , fOutput(NULL)
62  , fHitVector()
63  , fHasBoostSerialization(false)
64  , fOutputFileName(outputFileName)
65  , fBranchNameList(0)
66  {
67  gSystem->ResetSignal(kSigInterrupt);
68  gSystem->ResetSignal(kSigTermination);
69 
70  // Check if boost serialization is available if it is chosen
71  using namespace baseMQ::tools::resolve;
72  // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
73  if (is_same<boost::archive::binary_iarchive, boost::archive::binary_iarchive>::value || is_same<boost::archive::binary_iarchive, boost::archive::text_iarchive>::value)
74  {
75  if (has_BoostSerialization<PndSdsHit, void(boost::archive::binary_iarchive&, const unsigned int)>::value == 1)
76  {
78  }
79  }
80  }
std::string fOutputFileName
vector< vector< PndSdsHit > > fHitVector
TClonesArray * fOutput
virtual PndMQFileSinkHits::~PndMQFileSinkHits ( )
inlinevirtual

Definition at line 82 of file PndMQFileSinkHits.h.

83  {
84  fBranchNameList->Write("BranchList", TObject::kSingleKey);
85  //fTree->Write();
86  //fOutFile->Close();
87  if (fHitVector.size() > 0)
88  {
89  fHitVector.clear();
90  }
91 
92  }
vector< vector< PndSdsHit > > fHitVector

Member Function Documentation

virtual void PndMQFileSinkHits::InitOutputFile ( TString  defaultId = "100")
inlinevirtual

Definition at line 98 of file PndMQFileSinkHits.h.

References fOutFile.

Referenced by main().

99  {
100  fOutput = new TClonesArray("PndSdsHit");
101 
102  std::stringstream ss;
103  // ss << "/Volumes/RAMDisk/";
104  ss << fOutputFileName.c_str();
105 
106 
107  fOutFile = new TFile(ss.str().c_str(), "recreate");
108  fTree = new TTree("pndsim", "Test output");
109  fTree->Branch("Output", "TClonesArray", &fOutput, 64000, 99);
110  fBranchNameList = new TList();
111  fBranchNameList->AddLast(new TObjString("Output"));
112  }
std::string fOutputFileName
TClonesArray * fOutput
void PndMQFileSinkHits::Run ( )
protectedvirtual

Definition at line 12 of file PndMQFileSinkHits.cxx.

References fHasBoostSerialization, fHitVector, fOutFile, fOutput, fTree, i, status, and PndMQStatus::STOP.

13 {
15  {
16  int receivedMsgs = 0;
17 
18  // store the channel references to avoid traversing the map on every loop iteration
19  FairMQChannel& dataInChannel = fChannels.at("data-in").at(0);
20 
21  while (CheckCurrentState(RUNNING))
22  {
23  std::unique_ptr<FairMQMessage> header(fTransportFactory->CreateMessage());
24  std::unique_ptr<FairMQMessage> msg(fTransportFactory->CreateMessage());
25  if (dataInChannel.Receive(header) > 0)
26  {
27  int status = *(static_cast<int*>(header->GetData()));
28 
29  if (dataInChannel.ExpectsAnotherPart())
30  {
31  receivedMsgs++;
32  if (dataInChannel.Receive(msg)) {
33  string msgStr(static_cast<char*>(msg->GetData()), msg->GetSize());
34  istringstream ibuffer(msgStr);
35  boost::archive::binary_iarchive InputArchive(ibuffer);
36  //LOG(INFO) << "Received Message: " << receivedMsgs;
37  try
38  {
39  InputArchive >> fHitVector;
40  }
41  catch (boost::archive::archive_exception& e)
42  {
43  LOG(ERROR) << e.what();
44  }
45 
46 
47  PndSdsHit* myHit = 0;
48  bool dataAboveTimeThreshold = false;
49  double timeStampThreshold = 0;
50  for (auto& eventIter : fHitVector){
51  fOutput->Delete();
52  int numData = eventIter.size();
53  for (Int_t i = 0; i < numData; ++i)
54  {
55  if (eventIter[i].GetTimeStamp() > timeStampThreshold){
56  myHit = new ((*fOutput)[fOutput->GetEntriesFast()]) PndSdsHit(eventIter[i]);
57  dataAboveTimeThreshold = true;
58  }
59  // LOG(INFO) << "Data: " << i << " " << fHitVector.at(i).GetTimeStamp();
60  }
61  if (dataAboveTimeThreshold){
62  if (fOutput->IsEmpty())
63  {
64  LOG(ERROR) << "PndMQFileSinkHits::Run(): No Output array!";
65  } else {
66 
67  fTree->Fill();
68  }
69  }
70  }
71  if (receivedMsgs % 1000 == 0 && myHit != 0){
72  LOG(INFO) << receivedMsgs << " : " << myHit->GetTimeStamp();
73  }
74  }
75  }
76  if (status == PndMQStatus::STOP){
77  LOG(INFO) << "STOP-Signal Received!";
78  fTree->AutoSave();
79  LOG(INFO) << "AutoSave called!";
80  fTree->Write();
81  fOutFile->Close();
82  }
83 
84  }
85 
86  if (fHitVector.size() > 0)
87  {
88  fHitVector.clear();
89  }
90  }
91 
92  LOG(INFO) << "I've received " << receivedMsgs << " messages!";
93  }
94  else
95  {
96  LOG(ERROR) << " Boost Serialization not ok";
97  }
98 }
Int_t i
Definition: run_full.C:25
vector< vector< PndSdsHit > > fHitVector
TClonesArray * fOutput
int status[10]
Definition: f_Init.h:28
template<class Archive >
void PndMQFileSinkHits::serialize ( Archive &  ar,
const unsigned int  version 
)
inline

Definition at line 115 of file PndMQFileSinkHits.h.

116  {
117  ar& fHitVector;
118  }
vector< vector< PndSdsHit > > fHitVector
virtual void PndMQFileSinkHits::SetFileName ( std::string  fileName)
inlinevirtual

Definition at line 94 of file PndMQFileSinkHits.h.

Referenced by main().

94  {
95  fOutputFileName = fileName;
96  }
std::string fOutputFileName

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Definition at line 131 of file PndMQFileSinkHits.h.

Member Data Documentation

TList* PndMQFileSinkHits::fBranchNameList
private

Definition at line 127 of file PndMQFileSinkHits.h.

bool PndMQFileSinkHits::fHasBoostSerialization
private

Definition at line 133 of file PndMQFileSinkHits.h.

Referenced by Run().

vector<vector<PndSdsHit> > PndMQFileSinkHits::fHitVector
private

Definition at line 132 of file PndMQFileSinkHits.h.

Referenced by Run().

TFile* PndMQFileSinkHits::fOutFile
private

Definition at line 124 of file PndMQFileSinkHits.h.

Referenced by Run().

TClonesArray* PndMQFileSinkHits::fOutput
private

Definition at line 126 of file PndMQFileSinkHits.h.

Referenced by Run().

std::string PndMQFileSinkHits::fOutputFileName
private

Definition at line 128 of file PndMQFileSinkHits.h.

TTree* PndMQFileSinkHits::fTree
private

Definition at line 125 of file PndMQFileSinkHits.h.

Referenced by Run().


The documentation for this class was generated from the following files: