FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PndDiscWriteoutBuffer Class Reference

#include <PndDiscWriteoutBuffer.h>

Inheritance diagram for PndDiscWriteoutBuffer:

Public Member Functions

 PndDiscWriteoutBuffer ()
 
 PndDiscWriteoutBuffer (TString branchName, TString folderName, Bool_t persistance)
 
virtual ~PndDiscWriteoutBuffer ()
 
virtual std::vector< std::pair
< double, FairTimeStamp * > > 
Modify (std::pair< double, FairTimeStamp * > oldData, std::pair< double, FairTimeStamp * > newData)
 
virtual void AddNewDataToTClonesArray (FairTimeStamp *)
 
virtual double FindTimeForData (FairTimeStamp *data)
 
virtual void FillDataMap (FairTimeStamp *data, double activeTime)
 
virtual void EraseDataFromDataMap (FairTimeStamp *data)
 

Protected Member Functions

 ClassDef (PndDiscWriteoutBuffer, 1)
 

Protected Attributes

std::map< PndDiscDigitizedHit,
double > 
fData_map
 

Detailed Description

Definition at line 25 of file PndDiscWriteoutBuffer.h.

Constructor & Destructor Documentation

PndDiscWriteoutBuffer::PndDiscWriteoutBuffer ( )

Definition at line 20 of file PndDiscWriteoutBuffer.cxx.

21  : FairWriteoutBuffer()
22 {
23 #ifdef RRTTI
24  buffer = (TBuffer*)gROOT->ProcessLine("new TBufferFile(TBuffer::kWrite,10000);");
25  if(!buffer) throw std::runtime_error(std::string("WriteoutBuffer::AddNewDataToTClonesArray: cannot allocate buffer."));
26 #endif
27 }
PndDiscWriteoutBuffer::PndDiscWriteoutBuffer ( TString  branchName,
TString  folderName,
Bool_t  persistance 
)

Definition at line 30 of file PndDiscWriteoutBuffer.cxx.

31  : FairWriteoutBuffer(branchName, "PndDiscDigitizedHit", folderName, persistance)
32 {
33 #ifdef RRTTI
34  buffer = (TBuffer*)gROOT->ProcessLine("new TBufferFile(TBuffer::kWrite,10000);");
35  if(!buffer) throw std::runtime_error(std::string("WriteoutBuffer::AddNewDataToTClonesArray: cannot allocate buffer."));
36 #endif
37 }
PndDiscWriteoutBuffer::~PndDiscWriteoutBuffer ( )
virtual

Definition at line 40 of file PndDiscWriteoutBuffer.cxx.

40  {
41 #ifdef RRTTI
42  delete buffer;
43 #endif
44 }

Member Function Documentation

void PndDiscWriteoutBuffer::AddNewDataToTClonesArray ( FairTimeStamp *  data)
virtual

Definition at line 66 of file PndDiscWriteoutBuffer.cxx.

References fVerbose.

67 {
68  FairRootManager* ioman = FairRootManager::Instance();
69  TClonesArray* myArray = ioman->GetTClonesArray(fBranchName);
70 
71 #ifndef RRTTI
72  if (fVerbose > 1) std::cout << "Data Inserted: " << *(PndDiscDigitizedHit*)(data) << std::endl;
73  new ((*myArray)[myArray->GetEntries()]) PndDiscDigitizedHit(*(PndDiscDigitizedHit*)(data));
74  //data->Delete();
75 #else
76  // Get metadata, check types
77  TClass * class_meta = myArray->GetClass();
78  if( data->IsA() != class_meta ) { // Check that types are compatible:
79  data->IsA()->Dump();
80  class_meta->Dump();
81  throw std::runtime_error(std::string("WriteoutBuffer::AddNewDataToTClonesArray: wrong object type."));
82  }
83 
84  // create a new object in TClonesArray via default ctor:
85  TObject* new_instance = myArray->New(myArray->GetEntries());
86 
87  // and copy object contents to new one using the streamer:
88 
89  // store object in created buffer
90  buffer->SetWriteMode();
91  buffer->ResetMap();
92  buffer->SetBufferOffset(0);
93  buffer->MapObject(data);
94  ((TObject*)data)->Streamer(*buffer);
95 
96  // read back content to new object
97  buffer->SetReadMode();
98  buffer->ResetMap();
99  buffer->SetBufferOffset(0);
100  buffer->MapObject(new_instance);
101  new_instance->Streamer(*buffer);
102 
103  // Reset some bits
104  new_instance->ResetBit(kIsReferenced);
105  new_instance->ResetBit(kCanDelete);
106 
107  // data is serialized and not needed anymore (buffer specific, could be moved):
108  data->Delete();
109 #endif
110 }
int fVerbose
Definition: poormantracks.C:24
PndDiscWriteoutBuffer::ClassDef ( PndDiscWriteoutBuffer  ,
 
)
protected
void PndDiscWriteoutBuffer::EraseDataFromDataMap ( FairTimeStamp *  data)
virtual

Definition at line 144 of file PndDiscWriteoutBuffer.cxx.

References fData_map.

145 {
146 #ifndef RRTTI
147  PndDiscDigitizedHit myData = *(PndDiscDigitizedHit*)data;
148  if (fData_map.find(myData) != fData_map.end())
149  fData_map.erase(fData_map.find(myData));
150 #else
151  DataMap_t::iterator it = fData_map.find(data);
152  if(it != fData_map.end()) fData_map.erase(it);
153 #endif
154 }
std::map< PndDiscDigitizedHit, double > fData_map
void PndDiscWriteoutBuffer::FillDataMap ( FairTimeStamp *  data,
double  activeTime 
)
virtual

Definition at line 133 of file PndDiscWriteoutBuffer.cxx.

References fData_map.

134 {
135 #ifndef RRTTI
136  PndDiscDigitizedHit myData = *(PndDiscDigitizedHit*)data;
137  fData_map[myData] = activeTime;
138 #else
139  fData_map[data] = activeTime;
140 #endif
141 }
std::map< PndDiscDigitizedHit, double > fData_map
double PndDiscWriteoutBuffer::FindTimeForData ( FairTimeStamp *  data)
virtual

Definition at line 113 of file PndDiscWriteoutBuffer.cxx.

References fData_map.

114 {
115 #ifndef RRTTI
116  std::map<PndDiscDigitizedHit, double>::iterator it;
117  PndDiscDigitizedHit myData = *(PndDiscDigitizedHit*)data;
118  it = fData_map.find(myData);
119  if (it == fData_map.end())
120  return -1.;
121  else
122  return it->second;
123 #else
124  DataMap_t::iterator it = fData_map.find(data);
125  if(it == fData_map.end())
126  return -1.;
127  else
128  return it->second;
129 #endif
130 }
std::map< PndDiscDigitizedHit, double > fData_map
std::vector< std::pair< double, FairTimeStamp * > > PndDiscWriteoutBuffer::Modify ( std::pair< double, FairTimeStamp * >  oldData,
std::pair< double, FairTimeStamp * >  newData 
)
virtual

Definition at line 48 of file PndDiscWriteoutBuffer.cxx.

49 {
50  std::vector<std::pair<double, FairTimeStamp*> > result;
51  if( oldData.first >= newData.second->GetTimeStamp() ) {
52  result.push_back(oldData);
53  }
54  else {
55  oldData.first = -1;
56  result.push_back(oldData);
57  result.push_back(newData);
58  }
59  return result;
60 }

Member Data Documentation

std::map<PndDiscDigitizedHit, double> PndDiscWriteoutBuffer::fData_map
protected

Definition at line 57 of file PndDiscWriteoutBuffer.h.

Referenced by EraseDataFromDataMap(), FillDataMap(), and FindTimeForData().


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