9 #define APRIL_TRACK_H 1
12 #include "Api/PandoraApi.h"
14 #include "Pandora/ObjectCreation.h"
15 #include "Pandora/PandoraObjectFactories.h"
17 #include "Persistency/BinaryFileReader.h"
18 #include "Persistency/BinaryFileWriter.h"
19 #include "Persistency/XmlFileReader.h"
20 #include "Persistency/XmlFileWriter.h"
23 namespace april_content
26 typedef std::vector<pandora::InputTrackState> LCInputTrackStates;
27 typedef std::vector<pandora::TrackState> APRILTrackStates;
49 const APRILTrackStates &GetTrackStates()
const;
53 APRILTrackStates m_trackStates;
60 class APRILTrackFactory :
public pandora::ObjectFactory<object_creation::Track::Parameters, object_creation::Track::Object>
76 pandora::StatusCode
Read(Parameters &, pandora::FileReader &)
const;
84 pandora::StatusCode
Write(
const Object *
const , pandora::FileWriter &)
const;
92 pandora::StatusCode
Create(
const Parameters ¶meters,
const Object *&pObject)
const;
99 object_creation::
Track::Object(parameters),
102 for (
auto const& inputTrackState: parameters.
m_trackStates ) {
103 m_trackStates.push_back( inputTrackState.Get() );
110 inline const APRILTrackStates &APRILTrack::GetTrackStates()
const
112 return m_trackStates;
127 const APRILTrackParameters &lcTrackParameters(dynamic_cast<const APRILTrackParameters&>(parameters));
130 return pandora::STATUS_CODE_SUCCESS;
138 LCInputTrackStates trackStates;
140 if (pandora::BINARY == fileReader.GetFileType())
142 pandora::BinaryFileReader &binaryFileReader(dynamic_cast<pandora::BinaryFileReader&>(fileReader));
143 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, binaryFileReader.ReadVariable(nTrackStates));
144 for (
int i = 0; i < nTrackStates; ++i)
146 pandora::TrackState trackState(0.0,0.0,0.0,0.0,0.0,0.0);
147 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, binaryFileReader.ReadVariable(trackState));
148 trackStates.push_back( pandora::InputTrackState(trackState) );
151 else if (pandora::XML == fileReader.GetFileType())
153 pandora::XmlFileReader &xmlFileReader(dynamic_cast<pandora::XmlFileReader&>(fileReader));
154 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, xmlFileReader.ReadVariable(
"NumberOfTrackStates", nTrackStates));
155 for (
int i = 0; i < nTrackStates; ++i)
157 pandora::TrackState trackState(0.0,0.0,0.0,0.0,0.0,0.0);
158 std::stringstream trackStateName;
159 trackStateName <<
"TrackState" << i;
160 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, xmlFileReader.ReadVariable(trackStateName.str(), trackState));
161 trackStates.push_back( pandora::InputTrackState(trackState) );
166 return pandora::STATUS_CODE_INVALID_PARAMETER;
172 return pandora::STATUS_CODE_SUCCESS;
180 const APRILTrack *
const pAPRILTrack(dynamic_cast<const APRILTrack*>(pObject));
183 return pandora::STATUS_CODE_INVALID_PARAMETER;
185 const APRILTrackStates& trackStates = pAPRILTrack->GetTrackStates();
186 int nTrackStates = trackStates.size();
188 if (pandora::BINARY == fileWriter.GetFileType())
190 pandora::BinaryFileWriter &binaryFileWriter(dynamic_cast<pandora::BinaryFileWriter&>(fileWriter));
191 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, binaryFileWriter.WriteVariable(nTrackStates));
192 for (
auto const& trackState : trackStates)
194 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, binaryFileWriter.WriteVariable(trackState));
197 else if (pandora::XML == fileWriter.GetFileType())
199 pandora::XmlFileWriter &xmlFileWriter(dynamic_cast<pandora::XmlFileWriter&>(fileWriter));
200 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, xmlFileWriter.WriteVariable(
"NumberOfTrackStates", nTrackStates));
201 int trackStateCounter=0;
202 for (
auto const& trackState : trackStates)
204 std::stringstream trackStateName;
205 trackStateName <<
"TrackState" << trackStateCounter;
206 PANDORA_RETURN_RESULT_IF(pandora::STATUS_CODE_SUCCESS, !=, xmlFileWriter.WriteVariable(trackStateName.str(), trackState));
212 return pandora::STATUS_CODE_INVALID_PARAMETER;
215 return pandora::STATUS_CODE_SUCCESS;
pandora::StatusCode Create(const Parameters ¶meters, const Object *&pObject) const
Create an object with the given parameters.
Definition: APRILTrack.h:125
pandora::StatusCode Read(Parameters &, pandora::FileReader &) const
Read any additional (derived class only) object parameters from file using the specified file reader...
Definition: APRILTrack.h:135
APRILTrack extension of the Track class for LC-content.
Definition: APRILTrack.h:42
LCInputTrackStates m_trackStates
Vector of TrackStates.
Definition: APRILTrack.h:36
Parameters * NewParameters() const
Create new parameters instance on the heap (memory-management to be controlled by user) ...
Definition: APRILTrack.h:118
Track class.
Definition: Track.h:48
APRILTrack Parameters, allow multiple track states at the calorimeter.
Definition: APRILTrack.h:33
APRILTrackFactory responsible for APRILTrack creation.
Definition: APRILTrack.h:60
pandora::StatusCode Write(const Object *const , pandora::FileWriter &) const
Persist any additional (derived class only) object parameters using the specified file writer...
Definition: APRILTrack.h:177