Pandora
Pandora source code navigator
Loading...
Searching...
No Matches
BinaryFileWriter.h
Go to the documentation of this file.
1
8#ifndef PANDORA_BINARY_FILE_WRITER_H
9#define PANDORA_BINARY_FILE_WRITER_H 1
10
11#include "Pandora/Pandora.h"
12
14#include "Objects/TrackState.h"
15
17
18#include <fstream>
19
20namespace pandora
21{
22
27{
28public:
36 BinaryFileWriter(const pandora::Pandora &pandora, const std::string &fileName, const FileMode fileMode = APPEND);
37
42
46 template<typename T>
47 StatusCode WriteVariable(const T &t);
48
49private:
50 StatusCode WriteHeader(const ContainerId containerId);
52 StatusCode WriteSubDetector(const SubDetector *const pSubDetector);
53 StatusCode WriteLArTPC(const LArTPC *const pLArTPC);
54 StatusCode WriteDetectorGap(const DetectorGap *const pDetectorGap);
55 StatusCode WriteCaloHit(const CaloHit *const pCaloHit);
56 StatusCode WriteTrack(const Track *const pTrack);
57 StatusCode WriteMCParticle(const MCParticle *const pMCParticle);
58 StatusCode WriteRelationship(const RelationshipId relationshipId, const void *address1, const void *address2, const float weight);
59
60 std::ofstream::pos_type m_containerPosition;
61 std::ofstream m_fileStream;
62};
63
64//------------------------------------------------------------------------------------------------------------------------------------------
65
66template<typename T>
68{
69 m_fileStream.write(reinterpret_cast<const char*>(&t), sizeof(T));
70
71 if (!m_fileStream.good())
72 return STATUS_CODE_FAILURE;
73
74 return STATUS_CODE_SUCCESS;
75}
76
77template<>
78inline StatusCode BinaryFileWriter::WriteVariable(const std::string &t)
79{
80 const unsigned int stringSize(t.size());
81 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(stringSize));
82 m_fileStream.write(reinterpret_cast<const char*>(t.c_str()), stringSize);
83
84 if (!m_fileStream.good())
85 return STATUS_CODE_FAILURE;
86
87 return STATUS_CODE_SUCCESS;
88}
89
90template<>
92{
93 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(t.GetX()));
94 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(t.GetY()));
95 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(t.GetZ()));
96 return STATUS_CODE_SUCCESS;
97}
98
99template<>
101{
102 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(t.GetPosition()));
103 PANDORA_RETURN_RESULT_IF(STATUS_CODE_SUCCESS, !=, this->WriteVariable(t.GetMomentum()));
104 return STATUS_CODE_SUCCESS;
105}
106
107} // namespace pandora
108
109#endif // #ifndef PANDORA_BINARY_FILE_WRITER_H
Header file for the cartesian vector class.
Header file for the file writer class.
Header file for the pandora class.
#define PANDORA_RETURN_RESULT_IF(StatusCode1, Operator, Command)
Definition StatusCodes.h:19
Header file for the track state class.
BinaryFileWriter class.
StatusCode WriteSubDetector(const SubDetector *const pSubDetector)
Write a sub detector to the file.
std::ofstream::pos_type m_containerPosition
Position of start of the current event/geometry container object in file.
StatusCode WriteDetectorGap(const DetectorGap *const pDetectorGap)
Write the detector gap parameters to the file.
StatusCode WriteTrack(const Track *const pTrack)
Write a track to the current position in the file.
StatusCode WriteLArTPC(const LArTPC *const pLArTPC)
Write a lar tpc to the file.
StatusCode WriteHeader(const ContainerId containerId)
Write the container header to the file.
StatusCode WriteCaloHit(const CaloHit *const pCaloHit)
Write a calo hit to the current position in the file.
StatusCode WriteMCParticle(const MCParticle *const pMCParticle)
Write a mc particle to the current position in the file.
std::ofstream m_fileStream
The stream class to write to the file.
StatusCode WriteRelationship(const RelationshipId relationshipId, const void *address1, const void *address2, const float weight)
Write a relationship between two objects with specified addresses.
StatusCode WriteFooter()
Write the container footer to the file.
StatusCode WriteVariable(const T &t)
Write a variable to the file.
CaloHit class.
Definition CaloHit.h:26
CartesianVector class.
float GetX() const
Get the cartesian x coordinate.
float GetZ() const
Get the cartesian z coordinate.
float GetY() const
Get the cartesian y coordinate.
DetectorGap class.
Definition DetectorGap.h:25
FileWriter class.
Definition FileWriter.h:29
LArTPC class.
Definition LArTPC.h:26
MCParticle class.
Definition MCParticle.h:26
Pandora class.
Definition Pandora.h:40
SubDetector class.
Definition SubDetector.h:26
Track class.
Definition Track.h:26
TrackState class.
Definition TrackState.h:22
const CartesianVector & GetMomentum() const
Get the track momentum vector.
Definition TrackState.h:80
const CartesianVector & GetPosition() const
Get the track position vector.
Definition TrackState.h:73
FileMode
The file mode enum.
Definition PandoraIO.h:84
RelationshipId
The relationship identification enum.
Definition PandoraIO.h:57
ContainerId
The container identification enum.
Definition PandoraIO.h:24
StatusCode
The StatusCode enum.