Develop and Download Open Source Software

Browse CVS Repository

Contents of /satellite/neuromanager/neuromanager/PCScanData.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download) (as text)
Tue Mar 14 13:17:47 2006 UTC (18 years, 1 month ago) by orrisroot
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +19 -19 lines
File MIME type: text/x-c++src
added template code for data type plugins.

1 /* --------------------------------------------------------------------- */
2 /* NeuroManager - A spike train analysis tool */
3 /* Copyright (c) 2005-2006 RIKEN, Japan. All rights reserved. */
4 /* http://satellite.sourceforge.jp/ */
5 /* --------------------------------------------------------------------- */
6 /* This program is free software; you can redistribute it and/or */
7 /* modify it under the terms of the GNU General Public License */
8 /* as published by the Free Software Foundation; either version 2 */
9 /* of the License, or (at your option) any later version. */
10 /* */
11 /* This program is distributed in the hope that it will be useful, */
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14 /* GNU General Public License for more details. */
15 /* */
16 /* You should have received a copy of the GNU General Public License */
17 /* along with this program; see the file COPYING.txt. If not, write */
18 /* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth */
19 /* Floor, Boston, MA 02110-1301, USA. */
20 /* --------------------------------------------------------------------- */
21
22 /* $Id: PCScanData.cpp,v 1.1 2006/02/04 13:38:16 orrisroot Exp $ */
23
24 // PCScanData.cpp : implementation of the CPCScanData class
25 //
26
27 #include "stdafx.h"
28 #include "MultiChannelData.h"
29 #include "PCScanData.h"
30
31 CPCScanData::CPCScanData()
32 {
33 InitValues();
34 }
35
36 CPCScanData::~CPCScanData()
37 {
38 InitValues();
39 }
40
41 void CPCScanData::InitValues()
42 {
43 m_strLogFile = _T( "" );
44 m_strVersion = _T( "" );
45 m_strFormat = _T( "" );
46 m_strVolumeCh = _T( "" );
47 m_strFileIntvlCh = _T( "" );
48 m_strRemarks = _T( "" );
49 m_aryChannel.RemoveAll();
50 m_strTapeBcMode = _T( "" );
51 m_strTapeSrateCh = _T( "" );
52 m_strDecimation = _T( "" );
53 m_strTapeSpeed = _T( "" );
54 m_strID = _T( "" );
55 m_strDateTime = _T( "" );
56 m_strCntAddress = _T( "" );
57 m_strMemo = _T( "" );
58 m_strTrigMode = _T( "" );
59 m_straInputRange.RemoveAll();
60 }
61
62 BOOL CPCScanData::LoadDataFile( const char *fname )
63 {
64 if ( !ParseLogFileInfo( fname ) )
65 return FALSE;
66 if ( !MappingBinaryFile() )
67 return FALSE;
68 CalcYAxisRange();
69 return TRUE;
70 }
71
72 BOOL CPCScanData::ParseLogFileInfo( const char *fname )
73 {
74 // error check
75 if ( fname == NULL || *fname == '\0' )
76 return FALSE;
77 // open log file
78 CStdioFile file;
79 if ( !file.Open( fname, CFile::modeRead | CFile::shareDenyWrite ) )
80 return FALSE;
81 // set log file name
82 m_strLogFile = file.GetFilePath();
83 // start parser
84 CString str, key, value;
85 while ( file.ReadString( str ) )
86 {
87 // ignore comment line
88 if ( str.Find( "//" ) == 0 )
89 continue;
90 // tokenize
91 int curpos = 0;
92 key = str.Tokenize( " ", curpos );
93 key.Trim();
94 if ( key.IsEmpty() )
95 continue; // error : unknown line
96 value = str;
97 value.Delete( 0, curpos );
98 value.Trim();
99 if ( value.IsEmpty() )
100 continue; // error : unknown line
101 // categorize
102 if ( key.Compare( "VERSION" ) == 0 )
103 {
104 m_strVersion = value;
105 }
106 else if ( key.Compare( "DATA_FILE" ) == 0 )
107 {
108 CString path = file.GetFilePath();
109 if ( path.Replace( file.GetFileName(), value ) != 1 )
110 {
111 // fatal error : fail to get data file name
112 file.Close();
113 return FALSE;
114 }
115 sl4_string_set( m_strDataFile, path );
116 }
117 else if ( key.Compare( "FORMAT" ) == 0 )
118 {
119 m_strFormat = value;
120 if ( m_strFormat.Compare( "0 INTEL-86" ) == 0 )
121 {
122 m_bByteSwap = FALSE;
123 m_uiBitLength = 2;
124 }
125 else
126 {
127 // fatal error : unknown format type
128 file.Close();
129 return FALSE;
130 }
131 }
132 else if ( key.Compare( "VOLUME_CH" ) == 0 )
133 {
134 m_strVolumeCh = value;
135 }
136 else if ( key.Compare( "FILE_INTVL_CH" ) == 0 )
137 {
138 m_strFileIntvlCh = value;
139 }
140 else if ( key.Compare( "REMARKS" ) == 0 )
141 {
142 m_strRemarks = value;
143 }
144 else if ( key.Compare( "CHANNEL" ) == 0 )
145 {
146 CPCScanData::channel_info cinfo;
147 // value = '01, "01_label", eng.unit, *0.00004069+0.0000000'
148 static char *sep = ", +*";
149 int step = 0;
150 int curpos2 = 0;
151 CString tok;
152 tok = value.Tokenize( sep, curpos2 );
153 while ( !tok.IsEmpty() )
154 {
155 switch ( step )
156 {
157 case 0:
158 {
159 // number : 01
160 int idx;
161 sscanf( tok, "%d", &idx );
162 cinfo.m_dwIndex = idx;
163 break;
164 }
165 case 1:
166 {
167 // label : "01_label"
168 CString label;
169 label = tok;
170 label.Replace( "\"", "" ); // TODO: check
171 cinfo.m_strLabel = label;
172 break;
173 }
174 case 2:
175 {
176 // ????? : eng.unit
177 cinfo.m_strUnit = value;
178 break;
179 }
180 case 3:
181 {
182 // gain : 0.00004069
183 double gain;
184 sscanf( tok, "%lf", &gain );
185 sl4_array_add( m_daGain, &gain );
186 break;
187 }
188 case 4:
189 {
190 // offset?? : 0.000000
191 double offset;
192 sscanf( tok, "%lf", &offset );
193 cinfo.m_dOffset = offset;
194 break;
195 }
196 }
197 tok = value.Tokenize( sep, curpos2 );
198 step ++;
199 }
200 cinfo.m_strChannel = value;
201 // check cinfo
202 if ( step != 5 )
203 {
204 // fatal error : fail to parse 'CHANNEL'
205 file.Close();
206 return FALSE;
207 }
208 m_aryChannel.Add( cinfo );
209 }
210 else if ( key.Compare( "TAPE_BC_MODE" ) == 0 )
211 {
212 m_strTapeBcMode = value;
213 }
214 else if ( key.Compare( "TAPE_SRATE_CH" ) == 0 )
215 {
216 m_strTapeSrateCh = value;
217 }
218 else if ( key.Compare( "DECIMATION" ) == 0 )
219 {
220 m_strDecimation = value;
221 }
222 else if ( key.Compare( "TAPE_SPEED" ) == 0 )
223 {
224 m_strTapeSpeed = value;
225 }
226 else if ( key.Compare( "ID" ) == 0 )
227 {
228 m_strID = value;
229 }
230 else if ( key.Compare( "DATE_TIME" ) == 0 )
231 {
232 m_strDateTime = value;
233 }
234 else if ( key.Compare( "CNT_ADDRESS" ) == 0 )
235 {
236 m_strCntAddress = value;
237 }
238 else if ( key.Compare( "MEMO" ) == 0 )
239 {
240 m_strMemo = value;
241 }
242 else if ( key.Compare( "TRIG_MODE" ) == 0 )
243 {
244 m_strTrigMode = value;
245 }
246 else if ( key.Compare( "INPUT_RANGE" ) == 0 )
247 {
248 m_straInputRange.Add( value );
249 }
250 }
251 file.Close();
252
253 // error check for data file name
254 if ( sl4_string_empty( m_strDataFile ) )
255 return FALSE;
256 // set length
257 sscanf( m_strVolumeCh, "%I64d", &m_qwLength );
258 // set number of channel
259 m_uiChannelNumber = ( UINT ) m_aryChannel.GetSize();
260 // set interval time
261 double interval = 0.0;
262 sscanf( m_strFileIntvlCh, "%lf sec", &interval );
263 m_dSamplingRate = 1.0 / interval;
264 return TRUE;
265 }
266
267 sl4_string_t *CPCScanData::FormatDataInfo()
268 {
269 sl4_string_t * str, *tmp;
270 channel_info cinfo;
271 str = CMultiChannelData::FormatDataInfo();
272 tmp = sl4_string_new( NULL );
273 sl4_string_sprintf( tmp, "-- SONY PC Scan MKII data log file : %s --\n", m_strLogFile );
274 sl4_string_append( str, sl4_string_get( tmp ) );
275 sl4_string_sprintf( tmp, "VERSION %s\n", m_strVersion );
276 sl4_string_append( str, sl4_string_get( tmp ) );
277 sl4_string_sprintf( tmp, "DATA_FILE %s\n", sl4_string_get( m_strDataFile ) );
278 sl4_string_append( str, sl4_string_get( tmp ) );
279 sl4_string_sprintf( tmp, "FORMAT %s\n", m_strFormat );
280 sl4_string_append( str, sl4_string_get( tmp ) );
281 sl4_string_sprintf( tmp, "VOLUME_CH %s\n", m_strVolumeCh );
282 sl4_string_append( str, sl4_string_get( tmp ) );
283 sl4_string_sprintf( tmp, "FILE_INTVL_CH %s\n", m_strFileIntvlCh );
284 sl4_string_append( str, sl4_string_get( tmp ) );
285 sl4_string_sprintf( tmp, "REMARKS %s\n", m_strRemarks );
286 for ( INT_PTR i = 0; i < m_aryChannel.GetSize(); i++ )
287 {
288 cinfo = m_aryChannel.GetAt( i );
289 sl4_string_sprintf( tmp, "CHANNEL[%2d] %s\n", cinfo.m_dwIndex, cinfo.m_strChannel );
290 sl4_string_append( str, sl4_string_get( tmp ) );
291 }
292 sl4_string_sprintf( tmp, "TAPE_BC_MODE %s\n", m_strTapeBcMode );
293 sl4_string_append( str, sl4_string_get( tmp ) );
294 sl4_string_sprintf( tmp, "TAPE_SRATE_CH %s\n", m_strTapeSrateCh );
295 sl4_string_append( str, sl4_string_get( tmp ) );
296 sl4_string_sprintf( tmp, "DECIMATION %s\n", m_strDecimation );
297 sl4_string_append( str, sl4_string_get( tmp ) );
298 sl4_string_sprintf( tmp, "TAPE_SPEED %s\n", m_strTapeSpeed );
299 sl4_string_append( str, sl4_string_get( tmp ) );
300 sl4_string_sprintf( tmp, "ID %s\n", m_strID );
301 sl4_string_append( str, sl4_string_get( tmp ) );
302 sl4_string_sprintf( tmp, "DATE_TIME %s\n", m_strDateTime );
303 sl4_string_append( str, sl4_string_get( tmp ) );
304 sl4_string_sprintf( tmp, "CNT_ADDRESS %s\n", m_strCntAddress );
305 sl4_string_append( str, sl4_string_get( tmp ) );
306 sl4_string_sprintf( tmp, "MEMO %s\n", m_strMemo );
307 sl4_string_append( str, sl4_string_get( tmp ) );
308 sl4_string_sprintf( tmp, "TRIG_MODE %s\n", m_strTrigMode );
309 sl4_string_append( str, sl4_string_get( tmp ) );
310 for ( INT_PTR i = 0; i < m_straInputRange.GetSize(); i++ )
311 {
312 sl4_string_sprintf( tmp, "INPUT_RANGE[%2d] %s\n", i, m_straInputRange.GetAt( i ) );
313 sl4_string_append( str, sl4_string_get( tmp ) );
314 }
315 sl4_string_delete( tmp );
316 return str;
317 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26