Helios++
Helios software for LiDAR simulations
HDA_SimStepRecorder.h
1 #ifdef DATA_ANALYTICS
2 #pragma once
3 
4 #include <HDA_RecordBuffer.h>
5 #include <sim/core/SurveyPlayback.h>
6 
7 #include <string>
8 #include <memory>
9 
10 namespace helios { namespace analytics{
11 
19 class HDA_SimStepRecorder{
20 protected:
21  // *** ATTRIBUTES *** //
22  // ******************** //
26  SurveyPlayback *sp;
31  std::string outdir;
35  std::shared_ptr<HDA_RecordBuffer<double>> platformPositionX;
39  std::shared_ptr<HDA_RecordBuffer<double>> platformPositionY;
43  std::shared_ptr<HDA_RecordBuffer<double>> platformPositionZ;
47  std::shared_ptr<HDA_RecordBuffer<double>> platformRoll;
51  std::shared_ptr<HDA_RecordBuffer<double>> platformPitch;
55  std::shared_ptr<HDA_RecordBuffer<double>> platformYaw;
60  std::shared_ptr<HDA_RecordBuffer<double>> platformMountX;
65  std::shared_ptr<HDA_RecordBuffer<double>> platformMountY;
70  std::shared_ptr<HDA_RecordBuffer<double>> platformMountZ;
75  std::shared_ptr<HDA_RecordBuffer<double>> platformMountRoll;
80  std::shared_ptr<HDA_RecordBuffer<double>> platformMountPitch;
85  std::shared_ptr<HDA_RecordBuffer<double>> platformMountYaw;
89  std::shared_ptr<HDA_RecordBuffer<double>> scannerPositionX;
93  std::shared_ptr<HDA_RecordBuffer<double>> scannerPositionY;
97  std::shared_ptr<HDA_RecordBuffer<double>> scannerPositionZ;
101  std::shared_ptr<HDA_RecordBuffer<double>> scannerRoll;
105  std::shared_ptr<HDA_RecordBuffer<double>> scannerPitch;
109  std::shared_ptr<HDA_RecordBuffer<double>> scannerYaw;
113  std::shared_ptr<HDA_RecordBuffer<double>> scannerHeadRoll;
117  std::shared_ptr<HDA_RecordBuffer<double>> scannerHeadPitch;
121  std::shared_ptr<HDA_RecordBuffer<double>> scannerHeadYaw;
125  std::shared_ptr<HDA_RecordBuffer<double>> deflectorEmittingRoll;
129  std::shared_ptr<HDA_RecordBuffer<double>> deflectorEmittingPitch;
133  std::shared_ptr<HDA_RecordBuffer<double>> deflectorEmittingYaw;
137  std::shared_ptr<HDA_RecordBuffer<double>> beamOriginX;
141  std::shared_ptr<HDA_RecordBuffer<double>> beamOriginY;
145  std::shared_ptr<HDA_RecordBuffer<double>> beamOriginZ;
149  std::shared_ptr<HDA_RecordBuffer<double>> beamRoll;
153  std::shared_ptr<HDA_RecordBuffer<double>> beamPitch;
157  std::shared_ptr<HDA_RecordBuffer<double>> beamYaw;
162  std::shared_ptr<HDA_RecordBuffer<double>> measErrSeq;
167  std::shared_ptr<HDA_RecordBuffer<double>> measErrPar;
168 
169 
170 public:
171  // *** CONSTRUCTION / DESTRUCTION *** //
172  // ************************************ //
180  HDA_SimStepRecorder(
181  SurveyPlayback *sp,
182  std::string const &path
183  ) :
184  sp(sp),
185  outdir(path)
186  {
187  validateOutDir();
188  openBuffers();
189  }
190 
191  virtual ~HDA_SimStepRecorder() {
192  if(isAnyBufferOpen()){
193  closeBuffers();
194  }
195  }
196 
197  // *** MAIN RECORD METHOD *** //
198  // **************************** //
202  virtual void record();
208  virtual void delayedRecord();
209 
210  // *** RECORDER METHODS *** //
211  // ************************** //
216  virtual void validateOutDir();
222  virtual bool isAnyBufferOpen();
226  virtual void openBuffers();
232  virtual void closeBuffers();
233 
234 protected:
235  // *** CONCRETE RECORD METHODS *** //
236  // ********************************* //
241  virtual void recordPlatform();
246  virtual void recordPlatformMount();
251  virtual void recordScanner();
256  virtual void recordScannerHead();
261  virtual void recordDeflector();
266  virtual void recordBeam();
271  virtual void recordStochastic();
279  virtual std::string craftOutputPath(std::string const &fname);
280 };
281 
282 
283 }}
284 
285 #endif
Survey playback class, used to extend simulation functionalities so it can be controlled.
Definition: SurveyPlayback.h:18