[med-svn] [SCM] aghermann branch, master, updated. 3b87b4f8039ed683022537a0599b7dea069974d2

Andrei Zavada johnhommer at gmail.com
Sun Sep 30 22:40:55 UTC 2012


The following commit has been merged in the master branch:
commit 3b87b4f8039ed683022537a0599b7dea069974d2
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Mon Oct 1 01:40:16 2012 +0300

    fix towards accurate page count (mainly CSCourse issue)

diff --git a/ChangeLog b/ChangeLog
index 0947c4b..35b4b66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+v. 0.7.2 (2012-..-..)
+	* Tolerate size_t division arith off-by-ones when contructing
+	  profiles (just don't crash on this);
+	* Enable omp for mass profile constructions & other heavy
+	  operations;
+	* Correctly do status bar updates on tree rescan;
+	* configure: don't require gcc >= 4.7.1;
+	* MF: preserve tunables when reopening a previous model run;
+	* 
+
 v. 0.7.1 (2012-09-23)
 	* Apply window to taper edges before taking FFT.
 	* Fix startup when user has moved last-used dir between sessions.
diff --git a/src/expdesign/recording.cc b/src/expdesign/recording.cc
index 29eb844..1bf0d29 100644
--- a/src/expdesign/recording.cc
+++ b/src/expdesign/recording.cc
@@ -101,7 +101,8 @@ CSCourse (CSubject& J, const string& d, const sigfile::SChannel& h,
 			}
 
 		int	pa = (size_t)difftime( F.start_time(), _0at) / _pagesize,
-			pz = (size_t)difftime( F.end_time(), _0at) / _pagesize;
+//			pz = (size_t)difftime( F.end_time(), _0at) / _pagesize;
+			pz = pa + F.length_in_seconds() / _pagesize;
 	      // anchor zero page, get pagesize from edf^W CBinnedPower^W either goes
 		printf( "CSCourse::CSCourse(): adding %s of [%s, %s, %s] %zu pages (%d indeed) recorded %s",
 			sigfile::metric_method(params._profile_type), F.subject(), F.session(), F.episode(),
diff --git a/src/libsigfile/edf.hh b/src/libsigfile/edf.hh
index f802b5c..ed2c76b 100644
--- a/src/libsigfile/edf.hh
+++ b/src/libsigfile/edf.hh
@@ -109,9 +109,9 @@ class CEDFFile
 		{
 			return _end_time;
 		}
-	double recording_time() const // in seconds
+	time_t recording_time() const // in seconds
 		{
-			return (double) (n_data_records * data_record_size);
+			return n_data_records * data_record_size;
 		}
 
 	// setters
diff --git a/src/libsigfile/edf.ii b/src/libsigfile/edf.ii
index 4680604..818f722 100644
--- a/src/libsigfile/edf.ii
+++ b/src/libsigfile/edf.ii
@@ -168,7 +168,7 @@ put_region_( A h,
 	if ( unlikely (offset >= samplerate(h) * recording_time()) )
 		throw range_error("CEDFFile::put_region_(): offset beyond end of file");
 	if ( unlikely (offset + src.size() > samplerate(h) * recording_time()) ) {
-		fprintf( stderr, "CEDFFile::put_region_(): attempt to write past end of file (%zu + %zu > %zu * %g)\n",
+		fprintf( stderr, "CEDFFile::put_region_(): attempt to write past end of file (%zu + %zu > %zu * %lu)\n",
 			 offset, src.size(), samplerate(h), recording_time());
 		throw range_error("CEDFFile::put_region_(): attempt to write past end of file");
 	}
diff --git a/src/libsigfile/source-base.hh b/src/libsigfile/source-base.hh
index a005702..5b3c47f 100644
--- a/src/libsigfile/source-base.hh
+++ b/src/libsigfile/source-base.hh
@@ -201,7 +201,7 @@ class CSource_base {
       // recording time and duration
 	virtual const time_t& start_time()		const = 0;
 	virtual const time_t& end_time()		const = 0;
-	virtual double recording_time()			const = 0;
+	virtual time_t recording_time()			const = 0;
 
       // channels
 	virtual size_t n_channels()			const = 0;
diff --git a/src/libsigfile/source.cc b/src/libsigfile/source.cc
index 54a8b72..c2cc556 100644
--- a/src/libsigfile/source.cc
+++ b/src/libsigfile/source.cc
@@ -39,12 +39,12 @@ CSource (const char* fname,
 	if ( flags | ~no_ancillary_files ) {
 		// CHypnogram::
 		CHypnogram::load( sigfile::make_fname_hypnogram(fname, pagesize));
-		size_t scorable_pages = _obj->recording_time() / pagesize;  // implicit floor
+		size_t scorable_pages = ceil( (double)_obj->recording_time() / pagesize);  // implicit floor
 		if ( CHypnogram::pages() != scorable_pages ) {
-			// if ( CHypnogram::length() > 0 )
-			// 	fprintf( stderr, "CEDFFile(\"%s\"): number of scorable pages @pagesize=%zu (%zu) "
-			// 		 "differs from the number read from hypnogram file (%zu); discarding hypnogram\n",
-			// 		 fname, pagesize, scorable_pages, CHypnogram::length());
+			if ( CHypnogram::pages() > 0 )
+				fprintf( stderr, "CSource(\"%s\"): number of scorable pages @pagesize=%zu (%lu / %zu = %zu) "
+					 "differs from the number read from hypnogram file (%zu); adjusting hypnogram size\n",
+					 fname, pagesize, _obj->recording_time(), pagesize, scorable_pages, CHypnogram::pages());
 			CHypnogram::_pages.resize( scorable_pages);
 		}
 	}

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list