nidas  v1.2-1520
Extract2D.h
Go to the documentation of this file.
1 #ifndef _nidas_dynld_raf_extract2d_h_
2 #define _nidas_dynld_raf_extract2d_h_
3 
4 
5 #include <nidas/core/Project.h>
6 #include <nidas/core/FileSet.h>
9 #include <nidas/core/XMLParser.h>
10 #include <nidas/core/DSMConfig.h>
11 #include <nidas/core/DSMSensor.h>
14 #include <nidas/util/UTime.h>
15 #include <nidas/util/util.h>
17 #include <nidas/util/Process.h>
18 
19 namespace nidas { namespace dynld { namespace raf {
20 
21 
22 #define TWOD_BUFFER_SIZE (4096)
23 
24 // PADS record format. This is what we will repackage the records into.
25 struct PADS_rec
26 {
27  int16_t year;
28  int16_t month;
29  int16_t day;
30  int16_t hour;
31  int16_t minute;
32  int16_t second;
33  int16_t msec; // msec of this record
34  int16_t wday; // overload time, msec
35  unsigned char data[TWOD_BUFFER_SIZE]; // image buffer
36 };
37 typedef struct PADS_rec PADS_rec;
38 
39 
40 // ADS record format. This is what we will repackage the records into.
41 struct P2d_rec
42 {
43  short id; // 'P1','C1','P2','C2', H1, H2
44  short hour;
45  short minute;
46  short second;
47  short year;
48  short month;
49  short day;
50  short tas; // true air speed
51  short msec; // msec of this record
52  short overld; // overload time, msec
53  unsigned char data[TWOD_BUFFER_SIZE]; // image buffer
54 };
55 typedef struct P2d_rec P2d_rec;
56 
57 
58 using namespace nidas::core;
59 using namespace nidas::dynld;
60 using namespace std;
61 
62 
63 class Probe
64 {
65 public:
66  Probe() :
67  sensor(0), resolution(0), resolutionM(0.0), id(0), serialNumber(),
68  clockFreq(12.0), waveLength(658), hasOverloadCount(0), nDiodes(64),
69  recordCount(0), rejectRecordCount(0), rejectTooFewParticleCount(0),
70  rejectTooFewDiodesCount(0), diodeCount(), particleCount(),
71  totalParticles(0), inDOF(0)
72  {
73  memset(diodeCount, 0, sizeof(diodeCount));
74  memset(particleCount, 0, sizeof(particleCount));
75  }
76 
77  // Input info.
79 
80  // Output info.
81  size_t resolution; // in micron
82  float resolutionM; // in meters
83  short id;
84  string serialNumber;
85  float clockFreq; // in Mhz
86  int waveLength; // laser wave length in nanometers
87 
88  // File info.
90 
91  // Number of diodes, 64 for Fast2D, 32 for old probes.
92  size_t nDiodes;
93 
94  // Total number of records found in file.
95  size_t recordCount;
96 
97  // Total number of records rejected.
101 
102  /* Count of each diode value of 1 for the entire flight, sync words excluded.
103  * This diagnostic output helps find which diode is bad when the probe runs away.
104  */
105  size_t diodeCount[64]; // 64 is max possible diodes.
106 
107  /* Count of number of particles per record.
108  * This diagnostic output helps find which diode is bad when the probe runs away.
109  */
110  size_t particleCount[512]; // 512 is max possible slices/record.
111 
113  size_t inDOF;
114 
115 private:
116  Probe(const Probe&);
117  Probe& operator=(const Probe&);
118 };
119 
120 
121 
122 class Extract2D : public HeaderSource
123 {
124 public:
125 
126  Extract2D();
127 
128  virtual int parseRunstring(int argc, char** argv) throw();
129 
130  virtual int usage(const char* argv0);
131 
132  virtual int run() throw() = 0;
133 
134 // static functions
135  static void sigAction(int sig, siginfo_t* siginfo, void*);
136 
137  static void setupSignals();
138 
139  void sendHeader(dsm_time_t,SampleOutput* out)
141 
142 protected:
143 
147  virtual size_t countParticles(Probe * probe, const unsigned char * record) = 0;
148 
154  virtual size_t computeDiodeCount(Probe * probe, const unsigned char * record) = 0;
155 
159  void setTimeStamp(P2d_rec & record, Sample *samp);
160  void setTimeStamp(PADS_rec & record, Sample *samp);
161 
162  static bool interrupted;
163 
165 
168 
171 
174 
175  string xmlFileName;
176 
177  list<string> inputFileNames;
178 
180 
182 
184 
185  set<dsm_sample_id_t> includeIds;
186 
187  set<dsm_sample_id_t> excludeIds;
188 
189  map<dsm_sample_id_t,dsm_sample_id_t> newids;
190 
192 };
193 
194 }}}
195 #endif
size_t hasOverloadCount
Definition: Extract2D.h:89
short second
Definition: Extract2D.h:46
bool outputDiodeCount
Whether to output diode count histogram.
Definition: Extract2D.h:167
short hour
Definition: Extract2D.h:44
int16_t minute
Definition: Extract2D.h:31
set< dsm_sample_id_t > excludeIds
Definition: Extract2D.h:187
int16_t year
Definition: Extract2D.h:27
short day
Definition: Extract2D.h:49
float resolutionM
Definition: Extract2D.h:82
An interface for sending a SampleHeader to a SampleOutput.
Definition: HeaderSource.h:42
short year
Definition: Extract2D.h:47
float clockFreq
Definition: Extract2D.h:85
short id
Definition: Extract2D.h:43
size_t resolution
Definition: Extract2D.h:81
Interface of an output stream of samples.
Definition: SampleOutput.h:47
long long dsm_time_t
Posix time in microseconds, the number of non-leap microseconds since 1970 Jan 1 00:00 UTC...
Definition: Sample.h:61
SampleInputHeader header
Definition: Extract2D.h:183
void setupSignals()
Definition: dmd_mmat_test.cc:286
int outputFileLength
Definition: Extract2D.h:181
size_t minNumberParticlesRequired
Definition: Extract2D.h:191
unsigned char data[TWOD_BUFFER_SIZE]
Definition: Extract2D.h:53
short msec
Definition: Extract2D.h:51
string xmlFileName
Definition: Extract2D.h:175
map< dsm_sample_id_t, dsm_sample_id_t > newids
Definition: Extract2D.h:189
size_t rejectTooFewParticleCount
Definition: Extract2D.h:99
Definition: SampleInputHeader.h:36
size_t rejectRecordCount
Definition: Extract2D.h:98
Probe()
Definition: Extract2D.h:66
Definition: Extract2D.h:41
set< dsm_sample_id_t > includeIds
Definition: Extract2D.h:185
list< string > inputFileNames
Definition: Extract2D.h:177
size_t totalParticles
Definition: Extract2D.h:112
int16_t msec
Definition: Extract2D.h:33
size_t recordCount
Definition: Extract2D.h:95
int usage(const char *argv0)
Definition: ck_calfile.cc:35
int16_t second
Definition: Extract2D.h:32
bool outputHeader
Definition: Extract2D.h:164
bool copyAllRecords
Copy 100% of 2D records from source file to output file, no filtering.
Definition: Extract2D.h:173
Interface to a data sample.
Definition: Sample.h:189
int waveLength
Definition: Extract2D.h:86
DSMSensor provides the basic support for reading, processing and distributing samples from a sensor a...
Definition: DSMSensor.h:87
string serialNumber
Definition: Extract2D.h:84
Definition: Extract2D.h:122
Definition: IOException.h:37
void sigAction(int sig, siginfo_t *, void *)
Definition: dmd_mmat_test.cc:281
Definition: Extract2D.h:63
static bool interrupted
Definition: Extract2D.h:162
Definition: Extract2D.h:25
int parseRunstring(int argc, char **argv)
Definition: arinc_out.cc:102
string outputFileName
Definition: Extract2D.h:179
short month
Definition: Extract2D.h:48
size_t nDiodes
Definition: Extract2D.h:92
size_t rejectTooFewDiodesCount
Definition: Extract2D.h:100
short minute
Definition: Extract2D.h:45
int16_t wday
Definition: Extract2D.h:34
int16_t month
Definition: Extract2D.h:28
size_t inDOF
Definition: Extract2D.h:113
int16_t day
Definition: Extract2D.h:29
bool outputParticleCount
Whether to output particle count histogram.
Definition: Extract2D.h:170
unsigned char data[TWOD_BUFFER_SIZE]
Definition: Extract2D.h:35
short overld
Definition: Extract2D.h:52
DSMSensor * sensor
Definition: Extract2D.h:78
short tas
Definition: Extract2D.h:50
int16_t hour
Definition: Extract2D.h:30
short id
Definition: Extract2D.h:83
#define TWOD_BUFFER_SIZE
Definition: Extract2D.h:22