From 17965794138be7d1c619fd179c133878f704f4a7 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Sat, 5 Oct 2013 13:38:31 -0600 Subject: [PATCH] Improve wdq file info output, add dry-run option --- debian/changelog | 6 +++ wdq2wav.cpp | 122 +++++++++++++++++++++++------------------------ wdq2wav.h | 2 + 3 files changed, 67 insertions(+), 63 deletions(-) diff --git a/debian/changelog b/debian/changelog index 854c8fd..1728fc1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +wdq2wav (1.0.0-1) unstable; urgency=low + + * New upstream + + -- Kevin M. Rosenberg Sat, 05 Oct 2013 13:37:42 -0600 + wdq2wav (0.9.0-1) unstable; urgency=low * New upstream diff --git a/wdq2wav.cpp b/wdq2wav.cpp index 1c7791f..81b1c9c 100644 --- a/wdq2wav.cpp +++ b/wdq2wav.cpp @@ -25,11 +25,10 @@ #include #include -const char* g_szIdStr = "$Id$"; - bool g_quiet = false; bool g_verbose = false; bool g_debug = false; +bool g_dry_run = false; bool g_ignore_zero = false; bool g_dont_demean = false; @@ -92,7 +91,7 @@ fileBasename (const char* filename) char * str_rm_tail (char *str, const char* const charlist) { - size_t i; + int i; for (i = strlen(str) - 1; i >= 0; i--) if (strchr (charlist, str[i]) != NULL) @@ -119,9 +118,9 @@ usage (const char* progname) std::cout << " -q Supress all messages\n"; std::cout << " -z Scale output without preserving zero point\n"; std::cout << " -m Do not demean the data (don't subtract the mean value from each sample)\n"; + std::cout << " -n Dry run (do not create any output\n"; std::cout << " -v Verbose mode\n"; std::cout << " -d Debug mode\n"; - std::cout << " -r Print program version and exit\n"; std::cout << " -h Print this help message\n"; } @@ -134,18 +133,17 @@ main (int argc, char *argv[]) const char* progname = argv[0]; - while ((c = getopt (argc, argv, "rqvzmdph")) != -1) { + while ((c = getopt (argc, argv, "rqvzmndph")) != -1) { switch (c) { - case 'r': - std::cout << "Version " << g_szIdStr << std::endl; - exit(0); - break; case 'q': g_quiet = true; break; case 'm': g_dont_demean = true; break; + case 'n': + g_dry_run = true; + break; case 'z': g_ignore_zero = true; break; @@ -168,9 +166,6 @@ main (int argc, char *argv[]) } } - if (g_verbose || g_debug) - std::cout << "Version " << g_szIdStr << std::endl; - argc -= optind; argv += optind; if (argc > 3) { @@ -181,39 +176,40 @@ main (int argc, char *argv[]) char wdq_fname[MAX_INPUT_STR]; if (argc >= 1) - strncpy (wdq_fname, argv [0], MAX_INPUT_STR); + strncpy (wdq_fname, argv [0], MAX_INPUT_STR); else { std::cout << "Enter input WinDAQ filename: "; - std::cin.getline (wdq_fname, MAX_INPUT_STR); - } - - char channel_buf [MAX_INPUT_STR]; - if (argc >= 2) - strncpy (channel_buf, argv[1], MAX_INPUT_STR); - else { - std::cout << "Enter channel number: "; - std::cin.getline (channel_buf, MAX_INPUT_STR); - } + std::cin.getline (wdq_fname, MAX_INPUT_STR); + } - char *channel_endptr; - int channel = static_cast(strtol (channel_buf, &channel_endptr, 10)); - if (*channel_endptr != 0) { - std::ostringstream os; - os << "Error: Channel " << channel_buf << " is not an integer"; - error_msg (os.str().c_str()); + char channel_buf [MAX_INPUT_STR]; + if (argc >= 2) + strncpy (channel_buf, argv[1], MAX_INPUT_STR); + else { + std::cout << "Enter channel number: "; + std::cin.getline (channel_buf, MAX_INPUT_STR); + } + + char *channel_endptr; + int channel = static_cast(strtol (channel_buf, &channel_endptr, 10)); + if (*channel_endptr != 0) { + std::ostringstream os; + os << "Error: Channel " << channel_buf << " is not an integer"; + error_msg (os.str().c_str()); usage (progname); return (1); - } - - char wav_fname[MAX_INPUT_STR]; + } + + char wav_fname[MAX_INPUT_STR]; + if (! g_dry_run) { if (argc >= 3) strncpy (wav_fname, argv[2], MAX_INPUT_STR); else { std::cout << "Enter output wav filename: "; std::cin.getline (wav_fname, MAX_INPUT_STR); } - - if (! wdq2wav (wdq_fname, channel, wav_fname, play)) + } + if (! wdq2wav (wdq_fname, channel, wav_fname, play)) return 1; return 0; @@ -247,27 +243,23 @@ wdq2wav (const char* wdq_fname, const int channel, const char *wav_fname, bool p if (! g_quiet || g_verbose || g_debug) { std::ostringstream os1; - os1 << "File: " << wdq_fname; + os1 << "File: " << wdq_fname; info_msg (os1.str().c_str()); - std::ostringstream os; - os << "Legacy Format: "; - if (wdq.m_bLegacy_format) - os << "Yes"; - else - os << "No"; - info_msg(os.str().c_str()); + std::ostringstream os; + os << "Format: " << (wdq.m_bLegacy_format ? "Legacy" : "Non-legacy"); + info_msg(os.str().c_str()); std::ostringstream os2; time_t time = wdq.m_time_acq_start; struct tm* tm = gmtime (&time); - os2 << " Time File Creation: " << asctime(tm); + os2 << "Time File Creation: " << asctime(tm); info_msg_sans_newline (os2.str().c_str()); std::ostringstream os3; time = wdq.m_time_acq_stop; tm = gmtime (&time); - os3 << " Time File Written: " << asctime(tm); + os3 << "Time File Written: " << asctime(tm); info_msg_sans_newline (os3.str().c_str()); std::ostringstream os4; - os4 << " Samples: " << wdq.m_nSamples << + os4 << "Samples: " << wdq.m_nSamples << ", Channels: " << wdq.m_nChannels << ", Sample Rate: " << wdq.m_sample_rate; info_msg (os4.str().c_str()); @@ -281,15 +273,24 @@ wdq2wav (const char* wdq_fname, const int channel, const char *wav_fname, bool p if (! g_quiet || g_verbose || g_debug) { std::ostringstream os1; - os1 << "Channel " << channel; + os1 << "Channel " << channel << ", Units: " << wdq_channel.m_units + << ", Minimum: " << wdq_channel.m_min_raw_data + << " (" << wdq_channel.raw2measured(wdq_channel.m_min_raw_data) + << "), Maximum: " << wdq_channel.m_max_raw_data + << " (" << wdq_channel.raw2measured(wdq_channel.m_max_raw_data) << ")"; info_msg (os1.str().c_str()); - std::ostringstream os2; - os2 << " Units: " << wdq_channel.m_units.c_str(); - info_msg (os2.str().c_str()); - std::ostringstream os3; - os3 << " Raw minimum: " << wdq_channel.m_min_raw_data << - ", maximum: " << wdq_channel.m_max_raw_data; - info_msg (os3.str().c_str()); + + std::cout << "Mean: " << wdq_channel.raw2measured(wdq_channel.m_raw_mean) << + " " << wdq_channel.m_units; + } + + if (! g_dry_run && !g_dont_demean) { + std::cout << " (removing)\n"; + int mean = nearest(wdq_channel.m_raw_mean); + for (int i = 0; i < wdq.m_nSamples; i++) + wdq_channel.m_data[i] -= mean; + } else { + std::cout << " (not removing)\n"; } if (g_debug) { @@ -299,9 +300,12 @@ wdq2wav (const char* wdq_fname, const int channel, const char *wav_fname, bool p info_msg (os4.str().c_str()); std::ostringstream os5; os5 << " Slope " << wdq_channel.m_slope << - ", Intercept " << wdq_channel.m_intercept; + ", Intercept " << wdq_channel.m_intercept; info_msg (os5.str().c_str()); } + + if (g_dry_run) + return true; WavFile wav (wdq_channel, wav_fname); @@ -630,15 +634,7 @@ WindaqChannel::read_channel_data () m_max_scaled_data = (m_slope * data_max) + m_intercept; m_min_scaled_data = (m_slope * data_min) + m_intercept; - if (! g_dont_demean) { - double dmean = total_data / static_cast(r_wdq.m_nSamples); - int mean = nearest(dmean); - std::cout << "Removing mean: " << (dmean * m_slope) + m_intercept << - " " << m_units << std::endl; - - for (i = 0; i < r_wdq.m_nSamples; i++) - m_data[i] -= mean; - } + m_raw_mean = total_data / static_cast(r_wdq.m_nSamples); delete sample_row; return true; diff --git a/wdq2wav.h b/wdq2wav.h index a5e5ad2..fceee29 100644 --- a/wdq2wav.h +++ b/wdq2wav.h @@ -104,9 +104,11 @@ public: signed short int m_max_raw_data; double m_max_scaled_data; double m_min_scaled_data; + double m_raw_mean; WindaqChannel (WindaqFile& wdq, const int channel); ~WindaqChannel (); + double raw2measured(signed short int raw) const { return (raw * m_slope) + m_intercept; } private: bool read_channel_data(); -- 2.34.1