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

#include <PndMQFileSinkBursts.h>

Inheritance diagram for PndMQFileSinkBursts:

Public Member Functions

 PndMQFileSinkBursts (std::string outputFileName="FilesSinkBursts.root")
 
virtual ~PndMQFileSinkBursts ()
 
virtual void SetFileName (std::string fileName)
 
virtual void InitOutputFile (TString defaultId="100")
 
void UpdateParameters ()
 
FairParGenericSet * UpdateParameter (FairParGenericSet *thisPar)
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Static Public Member Functions

static void CustomCleanup (void *data, void *hint)
 

Protected Member Functions

virtual void Run ()
 

Private Attributes

TFile * fOutFile
 
TTree * fTree
 
TClonesArray * fOutput
 
TList * fBranchNameList
 
std::string fOutputFileName
 
BurstData fBurstData
 
int fCurrentRunId
 
int fNewRunId
 
TList * fParCList
 
FairGeoParSet * fGeoPar
 
PndSdsPixelDigiParfDigiPar
 
PndSdsTotDigiParfTotPar
 
PndSensorNameParfSensorPar
 
vector< FairTimeStamp * > fHitVector
 
bool fHasBoostSerialization
 

Friends

class boost::serialization::access
 

Detailed Description

Definition at line 63 of file PndMQFileSinkBursts.h.

Constructor & Destructor Documentation

PndMQFileSinkBursts::PndMQFileSinkBursts ( std::string  outputFileName = "FilesSinkBursts.root")
inline

Definition at line 66 of file PndMQFileSinkBursts.h.

67  : fOutFile(NULL)
68  , fTree(NULL)
69  , fOutput(NULL)
70  , fHitVector()
71  , fHasBoostSerialization(false)
72  , fOutputFileName(outputFileName)
73  , fBranchNameList(0)
74  , fCurrentRunId(0)
75  {
76  gSystem->ResetSignal(kSigInterrupt);
77  gSystem->ResetSignal(kSigTermination);
78 
79  // Check if boost serialization is available if it is chosen
80  using namespace baseMQ::tools::resolve;
81  // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
82  if (is_same<boost::archive::binary_iarchive, boost::archive::binary_iarchive>::value || is_same<boost::archive::binary_iarchive, boost::archive::text_iarchive>::value)
83  {
84  if (has_BoostSerialization<FairTimeStamp, void(boost::archive::binary_iarchive&, const unsigned int)>::value == 1)
85  {
87  }
88  }
89 
90  fGeoPar = new FairGeoParSet("FairGeoParSet");
91  fParCList = new TList();
92  fParCList->Add(fGeoPar);
93 
94  fDigiPar = new PndSdsPixelDigiPar("MVDPixelDigiPar");
95  fParCList->Add(fDigiPar);
96 
97  fTotPar = new PndSdsTotDigiPar("MVDPixelTotDigiPar");
98  fParCList->Add(fTotPar);
99 
100  fSensorPar = new PndSensorNamePar("PndSensorNamePar");
101  fParCList->Add(fSensorPar);
102  }
PndSdsTotDigiPar * fTotPar
Charge Digitization Parameter Class for SDS.
PndSensorNamePar * fSensorPar
PndSdsPixelDigiPar * fDigiPar
vector< FairTimeStamp * > fHitVector
Unique match between SensorID and path in TGeoManager.
Digitization Parameter Class for SDS-Pixel part.
virtual PndMQFileSinkBursts::~PndMQFileSinkBursts ( )
inlinevirtual

Definition at line 104 of file PndMQFileSinkBursts.h.

105  {
106  //fBranchNameList->Write("BranchList", TObject::kSingleKey);
107  //fTree->Write();
108  //fOutFile->Close();
109  if (fHitVector.size() > 0)
110  {
111  fHitVector.clear();
112  }
113 
114  }
vector< FairTimeStamp * > fHitVector

Member Function Documentation

void PndMQFileSinkBursts::CustomCleanup ( void *  data,
void *  hint 
)
static

Definition at line 26 of file PndMQFileSinkBursts.cxx.

Referenced by UpdateParameter().

27 {
28  delete (std::string*)hint;
29 }
virtual void PndMQFileSinkBursts::InitOutputFile ( TString  defaultId = "100")
inlinevirtual

Definition at line 120 of file PndMQFileSinkBursts.h.

121  {
122 // fOutput = new TClonesArray("PndSdsHit");
123 //
124 // std::stringstream ss;
125 // // ss << "/Volumes/RAMDisk/";
126 // ss << fOutputFileName.c_str();
127 //
128 //
129 // fOutFile = new TFile(ss.str().c_str(), "recreate");
130 // fTree = new TTree("pndsim", "Test output");
131 // fTree->Branch("Output", "TClonesArray", &fOutput, 64000, 99);
132 // fBranchNameList = new TList();
133 // fBranchNameList->AddLast(new TObjString("Output"));
134  }
void PndMQFileSinkBursts::Run ( )
protectedvirtual

Definition at line 31 of file PndMQFileSinkBursts.cxx.

References PndMapSorter::AddElements(), fBurstData, fCurrentRunId, fDigiPar, fGeoPar, fHasBoostSerialization, PndMQGapEventBuilder::FillData(), PndSensorNamePar::FillMap(), fNewRunId, fParCList, fSensorPar, fTotPar, PndMQSdsChargeWeightedPixelMapping::GetCluster(), PndMvdPixelClusterFinder::GetClusters(), PndMapSorter::GetOutputData(), PndMQGapEventBuilder::GetSeparatedData(), hit, move, pos, UpdateParameters(), and PndMapSorter::WriteOutAll().

32 {
33  PndMQGapEventBuilder eventBuilder;
34  PndMapSorter mapSorter;
35  PndMvdPixelClusterFinder clusterFinder;
36  PndMQMvdChargeWeightedPixelMapping* pixelMapping = 0;
37  PndGeoHandling* geoHandler = 0;
39  {
40  while (CheckCurrentState(RUNNING))
41  {
42  FairMQParts parts;
43  std::unique_ptr<FairMQMessage> msg(fTransportFactory->CreateMessage());
44  if (Receive(msg, "data-in") >= 0)
45  {
46  // LOG(INFO) << "Received data!" << std::endl;
47  string msgStr(static_cast<char*>(msg->GetData()), msg->GetSize());
48  istringstream ibuffer(msgStr);
49  if(!ibuffer.good())
50  LOG(INFO) << "IBUFFER IS BAD!";
51  boost::archive::text_iarchive InputArchive(ibuffer);
52 
53  InputArchive >> fBurstData;
54 
55  fNewRunId = fBurstData.fHeader.fRunID;
56  if (fNewRunId != fCurrentRunId) {
59  fGeoPar->GetGeometry();
60  fDigiPar = (PndSdsPixelDigiPar*)fParCList->FindObject("MVDPixelDigiPar");
61  fTotPar = (PndSdsTotDigiPar*)fParCList->FindObject("MVDPixelTotDigiPar");
62  fSensorPar = (PndSensorNamePar*)fParCList->FindObject("PndSensorNamePar");
64  if (geoHandler == 0){
65  geoHandler = new PndGeoHandling(fSensorPar);
66  }
67  LOG(INFO) << "Conversion Method: " << *fDigiPar;
68  LOG(INFO) << "Tot Info: " << *fTotPar;
69  if (pixelMapping == 0){
70  pixelMapping = new PndMQMvdChargeWeightedPixelMapping(geoHandler, fDigiPar, fTotPar);
71  }
72  }
73 
74 
75  if (fBurstData.fData.size() < 1) continue;
76  LOG(INFO) << "BurstData size: " << fBurstData.fData[0].size();
77  for (auto dataItr : fBurstData.fData[0])
78  LOG(INFO) << dataItr->GetTimeStamp();
79  mapSorter.AddElements(fBurstData.fData[0]);
80  mapSorter.WriteOutAll();
81  std::vector<FairTimeStamp*> sortedData = mapSorter.GetOutputData();
82 // for (auto i : sortedData){
83 // LOG(INFO) << "sorted: " << i->GetTimeStamp();
84 // }
85  eventBuilder.FillData(std::move(sortedData));
86  std::vector<std::vector<FairTimeStamp*> > gapData = eventBuilder.GetSeparatedData();
87  if (fBurstData.fHeader.fBranchName == "MVDPixelDigis"){
88  for (auto gapIter : gapData){
89  std::vector<PndSdsDigiPixel*> digiPixel;
90  if (gapIter.size() > 1){
91  LOG(INFO) << "GapSize > 1 " << gapIter.size();
92  for (auto dataIter : gapIter){
93  digiPixel.push_back((PndSdsDigiPixel*) dataIter);
94 // LOG(INFO) << "DataInGap: " << *(PndSdsDigiPixel*) dataIter;
95  }
96  std::vector<std::vector< Int_t> > clusterInts = clusterFinder.GetClusters(digiPixel);
97  for (auto clusterIter : clusterInts)
98  {
99  LOG(INFO) << "ClusterSize: " << clusterIter.size();
100  std::vector<PndSdsDigiPixel*> digiInCluster;
101  for (auto digiInClusterItr : clusterIter){
102  int pos = digiInClusterItr;
103  digiInCluster.push_back(digiPixel[pos]);
104  }
105  if (digiInCluster.size() > 0){
106  PndSdsHit hit = pixelMapping->GetCluster(digiInCluster);
107  digiInCluster.clear();
108  LOG(INFO) << "Hit: " << hit;
109  }
110  }
111  }
112  }
113  }
114 // for (auto sdItr : sortedData)
115 // delete(sdItr);
116 // sortedData.clear();
117 // mapSorter.DeleteOutputData();
118  }
119  }
120  if (pixelMapping != 0)
121  delete pixelMapping;
122  if (geoHandler != 0)
123  delete geoHandler;
124 
125  }
126  else
127  {
128  LOG(ERROR) << " Boost Serialization not ok";
129  }
130 }
TVector3 pos
PndSdsTotDigiPar * fTotPar
Charge Digitization Parameter Class for SDS.
std::string move
PndSdsHit GetCluster(std::vector< PndSdsDigiPixel * > &pixelArray)
Main function of class to calculate the PndSdsHit out of the given PndSdsDigis.
PndSensorNamePar * fSensorPar
Class to access the naming information of the MVD.
PndSdsPixelDigiPar * fDigiPar
std::vector< std::vector< Int_t > > GetClusters(std::vector< PndSdsDigiPixel * > &hits)
PndSdsChargedWeightedPixelMapping: Gets a vector of DigiHits and calculates the cluster center weight...
std::vector< std::vector< PndSdsDigiTopix4 > > GetSeparatedData()
virtual void AddElements(std::vector< FairTimeStamp * > dataArray)
virtual std::vector< FairTimeStamp * > GetOutputData()
Data class to store the digi output of a pixel module.
PndSdsMCPoint * hit
Definition: anasim.C:70
Unique match between SensorID and path in TGeoManager.
Digitization Parameter Class for SDS-Pixel part.
template<class Archive >
void PndMQFileSinkBursts::serialize ( Archive &  ar,
const unsigned int  version 
)
inline

Definition at line 141 of file PndMQFileSinkBursts.h.

142  {
143  ar& fHitVector;
144  ar& fBurstData;
145  }
vector< FairTimeStamp * > fHitVector
virtual void PndMQFileSinkBursts::SetFileName ( std::string  fileName)
inlinevirtual

Definition at line 116 of file PndMQFileSinkBursts.h.

116  {
117  fOutputFileName = fileName;
118  }
FairParGenericSet * PndMQFileSinkBursts::UpdateParameter ( FairParGenericSet *  thisPar)

Definition at line 140 of file PndMQFileSinkBursts.cxx.

References CustomCleanup(), and fCurrentRunId.

Referenced by UpdateParameters().

140  {
141  std::string paramName = thisPar->GetName();
142  // boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
143  std::string* reqStr = new std::string(paramName + "," + std::to_string(fCurrentRunId));
144  LOG(WARN) << "Requesting parameter \"" << paramName << "\" for Run ID " << fCurrentRunId << " (" << thisPar << ")";
145  std::unique_ptr<FairMQMessage> req(NewMessage(const_cast<char*>(reqStr->c_str()), reqStr->length(), CustomCleanup, reqStr));
146  std::unique_ptr<FairMQMessage> rep(NewMessage());
147 
148  if (Send(req,"param") > 0)
149  {
150  if (Receive(rep,"param") > 0)
151  {
152  TMessage2 tm(rep->GetData(), rep->GetSize());
153  thisPar = (FairParGenericSet*)tm.ReadObject(tm.GetClass());
154  LOG(WARN) << "Received parameter"<< paramName <<" from the server (" << thisPar << ")" << tm.GetClass()->GetName() << " DataSize: " << rep->GetSize();
155  thisPar->print();
156  return thisPar;
157  }
158  }
159  return NULL;
160 }
static void CustomCleanup(void *data, void *hint)
void PndMQFileSinkBursts::UpdateParameters ( )

Definition at line 132 of file PndMQFileSinkBursts.cxx.

References fParCList, and UpdateParameter().

Referenced by Run().

132  {
133  for ( int iparC = 0 ; iparC < fParCList->GetEntries() ; iparC++ ) {
134  FairParGenericSet* tempObj = (FairParGenericSet*)(fParCList->At(iparC));
135  fParCList->Remove(tempObj);
136  fParCList->AddAt(UpdateParameter(tempObj),iparC);
137  }
138 }
FairParGenericSet * UpdateParameter(FairParGenericSet *thisPar)

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Definition at line 166 of file PndMQFileSinkBursts.h.

Member Data Documentation

TList* PndMQFileSinkBursts::fBranchNameList
private

Definition at line 154 of file PndMQFileSinkBursts.h.

BurstData PndMQFileSinkBursts::fBurstData
private

Definition at line 156 of file PndMQFileSinkBursts.h.

Referenced by Run().

int PndMQFileSinkBursts::fCurrentRunId
private

Definition at line 157 of file PndMQFileSinkBursts.h.

Referenced by Run(), and UpdateParameter().

PndSdsPixelDigiPar* PndMQFileSinkBursts::fDigiPar
private

Definition at line 161 of file PndMQFileSinkBursts.h.

Referenced by Run().

FairGeoParSet* PndMQFileSinkBursts::fGeoPar
private

Definition at line 160 of file PndMQFileSinkBursts.h.

Referenced by Run().

bool PndMQFileSinkBursts::fHasBoostSerialization
private

Definition at line 168 of file PndMQFileSinkBursts.h.

Referenced by Run().

vector<FairTimeStamp*> PndMQFileSinkBursts::fHitVector
private

Definition at line 167 of file PndMQFileSinkBursts.h.

int PndMQFileSinkBursts::fNewRunId
private

Definition at line 158 of file PndMQFileSinkBursts.h.

Referenced by Run().

TFile* PndMQFileSinkBursts::fOutFile
private

Definition at line 151 of file PndMQFileSinkBursts.h.

TClonesArray* PndMQFileSinkBursts::fOutput
private

Definition at line 153 of file PndMQFileSinkBursts.h.

std::string PndMQFileSinkBursts::fOutputFileName
private

Definition at line 155 of file PndMQFileSinkBursts.h.

TList* PndMQFileSinkBursts::fParCList
private

Definition at line 159 of file PndMQFileSinkBursts.h.

Referenced by Run(), and UpdateParameters().

PndSensorNamePar* PndMQFileSinkBursts::fSensorPar
private

Definition at line 163 of file PndMQFileSinkBursts.h.

Referenced by Run().

PndSdsTotDigiPar* PndMQFileSinkBursts::fTotPar
private

Definition at line 162 of file PndMQFileSinkBursts.h.

Referenced by Run().

TTree* PndMQFileSinkBursts::fTree
private

Definition at line 152 of file PndMQFileSinkBursts.h.


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