WSF
Report.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2017 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef REPORTBASE_HPP
13#define REPORTBASE_HPP
14
15#include <algorithm>
16#include <iostream>
17#include <map>
18#include <queue>
19#include <string>
20#include <unordered_map>
21#include <vector>
22
23#include "post_processor_lib_export.h"
24
25#include "UtAngle.hpp"
26#include "UtCalendar.hpp"
27class UtCalendar;
28class UtInput;
29#include "UtTime.hpp"
30
31#include "Options.hpp"
32
33// =================================================================================================
34
35class POST_PROCESSOR_LIB_EXPORT Header
36{
37 public:
38 enum class DataType
39 {
40 Bool,
41 Double,
42 Int,
43 Lat,
44 Lon,
45 String,
46 Time,
47 Angle
48 };
49
50 enum class CountType
51 {
52 cNONE,
53 cCOUNT,
54 cINDEX
55 };
56
63
64 Header(const std::string& aName,
65 const std::vector<DataTag>& aDataTags)
66 : mName(aName),
67 mDataTags(aDataTags) {}
68
69 static Header::DataType GetDataType(const std::string& aType);
70
71 const std::string& GetName() const { return mName; }
72 const std::vector<DataTag>& GetDataTags() const { return mDataTags; }
73
74 private:
75 std::string mName;
76 std::vector<DataTag> mDataTags;
77};
78
79class POST_PROCESSOR_LIB_EXPORT Report
80{
81 public:
82
83 enum class AngleUnitType
84 {
85 cDEGREES,
86 cRADIANS
87 };
88
89 enum class LengthUnitType
90 {
91 cFEET,
92 cMETERS
93 };
94
96 {
97 cNUMERICAL,
98 cJTIDS
99 };
100
101 enum class DelimiterType
102 {
103 cUNKNOWN,
104 cCOMMA,
105 cCOLUMN,
106 cSEMICOLON,
107 cSPACE,
108 cTAB
109 };
110
111 enum class Type
112 {
113 cUNKNOWN,
114 cCOMMUNICATION,
115 cDETECTION,
116 cDSV,
117 cENGAGEMENT,
118 cTRAJECTORY,
119 cECLIPSE
120 };
121
122 struct TagData
123 {
124 size_t mIndex;
126 };
127
128 Report() = delete;
129 Report(const Type aReportType,
130 const Options& aOptions);
131 virtual ~Report() = default;
132
133 bool PrintReport();
134 void ProcessData(std::istream& aInStream);
135
136 virtual bool CreateRequiredData(std::string& aOutputDir) { return true; }
137 virtual bool ProcessInputConfiguration(UtInput& aInput);
138 virtual void PrintReportHeader(std::ostream& aStream) {}
139 virtual bool Filter(std::vector<std::string>& aLine) { return false; }
140
141 std::string PrintDelimiter() const;
142 void SetDelimiter(const std::string& aTypeString);
143 void SetDateTime(const std::vector<std::string>& aDataStrVec);
144
145 double FormatAngle(double aAngle) const;
146 UtTime FormatTime(double aSimTime) const;
147
148 static void FormatNumberColumn(std::ostream& aStream,
149 size_t aNumSpaces,
150 int aNumDigits,
151 int aInt);
152 static void FormatStringColumn(std::ostream& aStream,
153 std::string& aString,
154 int aNumSpaces);
155
156 static std::string GetTypeStr(Report::Type aReportType);
157
158 static Header::DataTag ParseHeaderTag(const std::string& aString,
159 bool aExpectType = false);
160
161 static void Tokenize(const std::string& aStr,
162 std::vector<std::string>& aTokens,
163 const char aDelimiter = ',');
164 static std::vector<std::string> Tokenize(const std::string& aStr,
165 char aDelimiter);
166
167 protected:
168
169 void PrepareExtension(std::string& aOutputDir);
170
171 virtual void PrintReport(std::istream& aInStream,
172 std::ostream& aOutStream) = 0;
173 virtual void ProcessHeaders(std::istream& aStream);
174 Header ProcessHeaderLine(const std::string& aLine);
175 //virtual void GenerateHeaders(std::vector<Header>& headers) {}
176
177 void SetLatLonFormat(int& aFormat) { mLatLonFormat = aFormat; }
178
179 static std::string SubstituteOutputFileVariables(const std::string& aOutputFile,
180 size_t aMC_Number,
181 UtCalendar& aCalendar);
182
183 static std::vector<std::string> ExtractHeaders(std::istream& aStream);
184 std::string FormatDateTime(double aSimTime = 0);
185 std::string FormatDateTime(int aYear,
186 int aMonth,
187 int aDay,
188 int aHour,
189 int aMinute,
190 double aSecond);
191
192 // Option data
194 std::string mReportName;
195 std::string mDataFile;
196 std::string mOutputDir;
197 size_t mStartMC;
198 size_t mEndMC;
199 UtCalendar mSimDateTime;
200
201 // Base Data
203
204 double mStartTime = 0.0;
205 std::string mStartTimeUnits = "seconds";
206 double mEndTime = std::numeric_limits<double>::max();
207 std::string mEndTimeUnits = "seconds";
208
210 bool mUseMC = false;
211
212 std::map<std::string, std::map<std::string, TagData>> mEventToTagData;
213 std::vector<std::string> mEvents;
214
215 std::vector<std::string> mHeader;
216 bool mWriteHeader = true;
217 std::iostream::pos_type mEndOfHeaders = 0;
218
219 // Formatting
220 int mTimeFormat = UtTime::FmtS + 5 + UtTime::FmtShowPoint + UtTime::FmtNoSuffix;
221 int mLatLonFormat = UtAngle::FmtDMS + 2;
223 int mInterval = 1;
224 bool mSingleOutputFile = true;
227 int mPrecision = 8;
229 size_t mMaxTimeSize = 15;
230
231 // Other
232 std::vector<std::string> mRequiredData;
233 std::queue<std::iostream::pos_type> mFilteredDataLoc;
234};
235
236namespace report
237{
238
239namespace util
240{
241
242template<class T, class U>
243bool Contains(const T& aContainer, const U& aValue)
244{
245 auto it = std::find(std::begin(aContainer), std::end(aContainer), aValue);
246 return it != std::end(aContainer);
247}
248
249}
250
251}
252
253#endif
Definition Report.hpp:36
CountType
Definition Report.hpp:51
@ cNONE
Definition Report.hpp:52
const std::string & GetName() const
Definition Report.hpp:71
Header(const std::string &aName, const std::vector< DataTag > &aDataTags)
Definition Report.hpp:64
const std::vector< DataTag > & GetDataTags() const
Definition Report.hpp:72
DataType
Definition Report.hpp:39
@ String
Definition Report.hpp:45
TrackNumericalType mTrackNum
Definition Report.hpp:225
bool PrintReport()
Definition Report.cpp:267
LengthUnitType
Definition Report.hpp:90
@ cMETERS
Definition Report.hpp:92
std::iostream::pos_type mEndOfHeaders
Definition Report.hpp:217
AngleUnitType mAngleUnits
Definition Report.hpp:222
bool mUseMC
Definition Report.hpp:210
bool mWriteHeader
Definition Report.hpp:216
size_t mMaxPlatformNameSize
Definition Report.hpp:228
virtual ~Report()=default
virtual void PrintReportHeader(std::ostream &aStream)
Definition Report.hpp:138
void ProcessData(std::istream &aInStream)
Definition Report.cpp:349
size_t mCurrentMC
Definition Report.hpp:209
bool mSingleOutputFile
Definition Report.hpp:224
UtCalendar mSimDateTime
Definition Report.hpp:199
AngleUnitType
Definition Report.hpp:84
@ cDEGREES
Definition Report.hpp:85
virtual void ProcessHeaders(std::istream &aStream)
Definition Report.cpp:569
std::string mDataFile
Definition Report.hpp:195
int mTimeFormat
Definition Report.hpp:220
TrackNumericalType
Definition Report.hpp:96
@ cNUMERICAL
Definition Report.hpp:97
virtual bool Filter(std::vector< std::string > &aLine)
Definition Report.hpp:139
int mPrecision
Definition Report.hpp:227
void SetLatLonFormat(int &aFormat)
Definition Report.hpp:177
Type
Definition Report.hpp:112
Report()=delete
int mInterval
Definition Report.hpp:223
size_t mEndMC
Definition Report.hpp:198
std::string mOutputDir
Definition Report.hpp:196
LengthUnitType mLengthUnits
Definition Report.hpp:226
std::string mReportName
Definition Report.hpp:194
std::vector< std::string > mRequiredData
Definition Report.hpp:232
double mStartTime
Definition Report.hpp:204
std::map< std::string, std::map< std::string, TagData > > mEventToTagData
Definition Report.hpp:212
size_t mStartMC
Definition Report.hpp:197
virtual bool CreateRequiredData(std::string &aOutputDir)
Definition Report.hpp:136
std::queue< std::iostream::pos_type > mFilteredDataLoc
Definition Report.hpp:233
Header ProcessHeaderLine(const std::string &aLine)
Definition Report.cpp:629
size_t mMaxTimeSize
Definition Report.hpp:229
std::string mEndTimeUnits
Definition Report.hpp:207
DelimiterType mDelimiterType
Definition Report.hpp:202
virtual void PrintReport(std::istream &aInStream, std::ostream &aOutStream)=0
int mLatLonFormat
Definition Report.hpp:221
std::vector< std::string > mHeader
Definition Report.hpp:215
std::string mStartTimeUnits
Definition Report.hpp:205
double mEndTime
Definition Report.hpp:206
std::vector< std::string > mEvents
Definition Report.hpp:213
DelimiterType
Definition Report.hpp:102
@ cCOMMA
Definition Report.hpp:104
Type mReportType
Definition Report.hpp:193
Definition Report.hpp:240
bool Contains(const T &aContainer, const U &aValue)
Definition Report.hpp:243
Definition Report.hpp:237
Definition Report.hpp:58
DataType dataType
Definition Report.hpp:61
std::string name
Definition Report.hpp:59
CountType countType
Definition Report.hpp:60
Definition Options.hpp:21
Definition Report.hpp:123
size_t mIndex
Definition Report.hpp:124
Header::DataType mType
Definition Report.hpp:125
Copyrights Multiple, All Rights Reserved