Improve wdq file info output, add dry-run option 1.0
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 5 Oct 2013 19:38:31 +0000 (13:38 -0600)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 5 Oct 2013 19:38:31 +0000 (13:38 -0600)
debian/changelog
wdq2wav.cpp
wdq2wav.h

index 854c8fde20e8e03aa3a234ff5d2f35e67bca7541..1728fc14e6257a6cb644e76131bd8af2a8d12498 100644 (file)
@@ -1,3 +1,9 @@
+wdq2wav (1.0.0-1) unstable; urgency=low
+
+  * New upstream
+
+ -- Kevin M. Rosenberg <kmr@debian.org>  Sat, 05 Oct 2013 13:37:42 -0600
+
 wdq2wav (0.9.0-1) unstable; urgency=low
 
   * New upstream
index 1c7791f8617d7b555c88259eb92b2ea996d92e8f..81b1c9cc57ecc7727c2bb6fb22daac88b047d331 100644 (file)
 #include <stdlib.h>
 #include <wdq2wav.h>
 
-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<int>(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<int>(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<int>(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<double>(r_wdq.m_nSamples);
-    int mean = nearest<int>(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<double>(r_wdq.m_nSamples);
 
   delete sample_row;
   return true;
index a5e5ad2d2c33d00e6751dc90bc635666737aa8dd..fceee293df2b9819095020e7dad1be57d33971c5 100644 (file)
--- 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();