UltraScan III
us_mwlramp.cpp
Go to the documentation of this file.
1 
3 #include <QtGui>
4 #include "us_mwlramp.h"
5 #include "us_util.h"
6 #include "us_settings.h"
7 #include "us_editor.h"
8 
10 {
11 
12 }
13 
14 
15 bool US_mwlRamp::import_data( QString& mwldir, QLineEdit* lestat,
16  QVector< US_mwlRamp::RampRawData >& allData, QString& runID_xml_mwl )
17 {
18  bool status = true;
19  cur_dir = mwldir;
20  le_status = lestat;
21 // qDebug() << cur_dir;
22 
23  QDir ddir( cur_dir, "*", QDir::Name, QDir::Files | QDir::Readable );
24 // qDebug() << "before make absolute" << ddir;
25  ddir.makeAbsolute();
26  if ( cur_dir.right( 1 ) != "/" ) cur_dir += "/";
27 
28  // read xml
29  read_runxml( ddir, cur_dir );
30  runID_xml_mwl = runID;
31 
32  int kcelchn = cellchans.count();
33  cellchans.clear();
34 
35  QString old_runID = runID;
36  runID.replace( QRegExp( "![A-Za-z0-9_-]" ), "_" );
37 
38  if ( runID != old_runID )
39  {
40  QMessageBox::warning( 0,
41  tr( "RunID Name Changed" ),
42  tr( "The runID name has been changed. It may consist only\n"
43  "of alphanumeric characters, underscore, or hyphen.\n"
44  " New runID: " ) + runID );
45  }
46 
47  // Read in the data
48  QStringList mwrfs = ddir.entryList( QStringList( "*.mwsr" ),
49  QDir::Files, QDir::Name );
50  QStringList chans;
51  cells.clear();
52  mwrfs.sort();
53  nfile = mwrfs.size();
54  le_status->setText( QString( "%1 files from %2 ..." )
55  .arg( nfile ).arg( runID ) );
56  qApp->processEvents();
57  qDebug() << "MwDa: nfile" << nfile;
58 
59  // read from measurement-filenames
60  for ( int ii = 0; ii < nfile; ii++ )
61  {
62  QString fname = mwrfs.at( ii );
63  QString fpath = cur_dir + fname;
64  QString acell = fname.section( ".", -3, -3 );
65  QString chann = fname.section( ".", -2, -2 );
66 
67 // qDebug() << "\nacell" << acell << "\nchann" << chann;
68 
69  if ( !cells.contains( acell ) ) cells << acell;
70  if ( !chans.contains( chann ) ) chans << chann;
71 
72 
73  fnames << fname;
74  fpaths << fpath;
75  }
76 
77  int ncell = cells.size();
78  int nchan = chans.size();
79 // qDebug() << "MwDa Ramp: ncell nchan" << ncell << nchan;
80  ncelchn = ncell * nchan;
81  if ( ncelchn != kcelchn )
82  {
83  qDebug() << "kcelchn ncelchn" << kcelchn << ncelchn;
84  }
85  cells .sort();
86  chans .sort();
87  cellchans.clear();
88  le_status->setText( QString( "%1 cell(s) and %2 channel(s) ..." )
89  .arg( ncell ).arg( nchan ) );
90  qApp->processEvents();
91 
92  for ( int ii = 0; ii < ncell; ii++ )
93  {
94  for ( int jj = 0; jj < nchan; jj++ )
95  {
96  QString celchn = cells[ ii ] + " / " + chans[ jj ];
97  cellchans << celchn;
98  }
99  }
100 
101  for ( int cc = 0; cc < cellchans.size(); cc++)
102  {
103  qDebug() << cellchans.at(cc) << fpaths.at(cc);
104 
105  QFile fi(fpaths.at(cc));
106  if ( ! fi.open( QIODevice::ReadOnly ) )
107  {
108  qDebug() << "*ERROR* Unable to open" << fpaths.at(cc);
109  status = false;
110  }
111 
112  QDataStream ds( &fi );
113  RampRawData raw;
114 
115  char cbuf[ 2 ];
116  ds.readRawData( cbuf, 2 );
117  raw.cell = QChar( '0' | cbuf[ 0 ] );
118  raw.chan = QChar( cbuf[ 1 ] );
119  qint16 temp;
120  ds >> temp;
121  raw.temperature = ((double)temp)/10;
122  qDebug() << "raw.cell"<< raw.cell << raw.chan << raw.temperature;
123  qint16 n;
124  ds >> n;
125  n = n + 1;
126  qDebug() << "#scans" << n;
127  qint16 n_wl;
128  ds >> n_wl;
129  qDebug() << "#wl" << n_wl;
130 
131  qint16 wl_array_temp;
132  raw.wl_array.resize(n_wl);
133  for (int ii = 0; ii < n_wl; ii++)
134  {
135  ds >> wl_array_temp;
136  raw.wl_array [ii] = (int)wl_array_temp;
137  }
138 
139  raw.rpm.resize(n);
140  for (int ii = 0; ii<n; ii++)
141  {
142  ds >> raw.rpm [ii];
143  }
144 
145  raw.time.resize(n);
146  for (int ii = 0; ii<n; ii++)
147  {
148  ds >> raw.time [ii];
149  }
150 
151  raw.w2t.resize(n);
152  for (int ii = 0; ii<n; ii++)
153  {
154  ds >> raw.w2t [ii];
155  }
156  qDebug() << "n_wl n" << n_wl << n;
157  // (1) initialize 2Darray: [wl] [data]
158  raw.intarray.resize(n_wl);
159  for (int wl = 0; wl<n_wl; wl++)
160  { raw.intarray[wl].resize(n); }
161  // (2) read data
162 
163  qDebug()<<"sizeintarray"<<raw.intarray.size() <<"raw.intarray[cc].size()"<<raw.intarray[cc].size();
164  for (int wl = 0; wl<n_wl; wl++)
165  {
166  for (int dat = 0; dat<n; dat++)
167  {
168  ds >> raw.intarray [wl] [dat];
169  }
170  }
171 
172  slambda = raw.wl_array[0];
173  elambda = raw.wl_array[n_wl -1];
174 qDebug() << slambda << elambda <<"slambda << elambda";
175  nlamb_i = n_wl;
176 
177  raw.bottom = bottoms[cc];
178  raw.meniscus = menisci[cc];
179  raw.radius = radius;
180  raw.description = samplenames[cc];
181 
182  allData.resize(cellchans.size());
183  allData[cc] = raw;
184  qDebug() << "alldat"<< allData[cc].chan<<"temp"<<allData[cc].temperature;
185  }
186 
187  for (int ii = 0; ii < nlamb_i; ii++)
188  { ri_wavelns.append(int(allData[0].wl_array[ii]));}
189  qDebug() << "ri"<< ri_wavelns.size() <<"raw"<< allData[0].wl_array.size();
190 
191  for ( int cc = 0; cc < ncelchn; cc++ )
192  {ex_wavelns << ri_wavelns;}
193 
194  return status;
195 }
196 
197 
198 // Read the run XML file and return its values
199 void US_mwlRamp::read_runxml( QDir ddir, QString curdir )
200 {
201  QStringList mwrfs = ddir.entryList( QStringList( "*.mwsr.xml" ),
202  QDir::Files, QDir::Name );
203  int nxfile = mwrfs.count();
204 
205  if ( nxfile > 1 )
206  {
207  qDebug() << "*ERROR* '*.mwsr.xml' count > 1" << nxfile << curdir;
208  return;
209  }
210  qDebug() << mwrfs.size();
211  QString fname = mwrfs.at( 0 );
212  QString fpath = curdir + fname;
213 
214  QFile xfi( fpath );
215 
216  if ( ! xfi.open( QIODevice::ReadOnly ) )
217  {
218  qDebug() << "*ERROR* Unable to open" << fname;
219  qDebug() << fpath;
220  return;
221  }
222 
223  QXmlStreamReader xml( &xfi );
224  QString celi;
225  QString chni;
226  QString cech;
227  double menisc;
228  double bott;
229  cellchans.clear();
230 
231  while( ! xml.atEnd() )
232  {
233  xml.readNext();
234  if ( xml.isStartElement() )
235  {
236  QXmlStreamAttributes att = xml.attributes();
237  if ( xml.name() == "runID" )
238  {
239  runID = att.value( "name" ).toString();
240  radius = att.value( "radius_measurement" ).toString().toDouble();
241  }
242  else if ( xml.name() == "cell" )
243  {
244  celi = att.value( "id" ).toString();
245  celi = QString::number( celi.toInt() );
246  }
247  else if ( xml.name() == "channel" )
248  {
249  chni = att.value( "id" ).toString();
250  cech = celi + " / " + chni;
251  QString desc= att.value( "sample" ).toString();
252  menisc = att.value( "radius_meniscus").toString().toDouble();
253  bott = att.value( "radius_bottom" ).toString().toDouble();
254 
255  if ( ! cellchans.contains( cech ) )
256  {
257  cellchans << cech;
258  samplenames << desc;
259  menisci << menisc;
260  bottoms << bott;
261  }
262 
263  }
264  }
265  }
266  xfi.close();
267 }
268 
269 // Clear all data from US_mwlRamp
271 {
272  runID.clear();
273  cellchans.clear();
274  samplenames.clear();
275  menisci.clear();
276  bottoms.clear();
277  ri_wavelns.clear();
278  ex_wavelns.clear();
279  fpaths.clear();
280  fnames.clear();
281 }
282