UltraScan III
us_adv_analysis_2d.cpp
Go to the documentation of this file.
1 
3 #include "us_2dsa.h"
4 #include "us_adv_analysis_2d.h"
5 #include "us_settings.h"
6 #include "us_gui_settings.h"
7 
8 #include <qwt_legend.h>
9 
10 // constructor: enhanced plot control widget
12  bool& loadDB, QWidget* p ) : US_WidgetsDialog( p, 0 ), loadDB( loadDB )
13 {
14  sparms = sim_par;
15  parentw = p;
16 
17  setObjectName( "US_AdvAnalysis2D" );
18  setPalette( US_GuiSettings::frameColor() );
20 
21  // lay out the GUI
22  setWindowTitle( tr( "2DSA Advanced Controls" ) );
23 
24  mainLayout = new QHBoxLayout( this );
25  optimizeLayout = new QGridLayout( );
26  simparmsLayout = new QGridLayout( );
27 
28  mainLayout->setSpacing ( 2 );
29  mainLayout->setContentsMargins( 2, 2, 2, 2 );
30 
31  mainLayout->addLayout( optimizeLayout );
32  mainLayout->addLayout( simparmsLayout );
33  mainLayout->setStretchFactor( optimizeLayout, 1 );
34  mainLayout->setStretchFactor( simparmsLayout, 1 );
35 
36  QLabel* lb_simpars = us_banner( tr( "Simulation Parameters:" ) );
37  QLabel* lb_bandload = us_label( tr( "Band loading volume (" )
38  + QString( QChar( 181 ) ) + "l):" );
39  QLabel* lb_spoints = us_label( tr( "Simulation Points:" ) );
40  QLabel* lb_refopts = us_banner( tr( "Refinement Options:" ) );
41 
42  QLabel* lb_optimiz = us_banner( tr( "Optimization Methods:" ) );
43  QLabel* lb_repetloc = us_label( tr( "Repetitions:" ) );
44  QLabel* lb_scfactor = us_label( tr( "Scaling Factor:" ) );
45  QLabel* lb_scfact2 = us_label( tr( "Scaling Factor 2:" ) );
46  QLabel* lb_repetran = us_label( tr( "Repetitions:" ) );
47  QLabel* lb_stddevia = us_label( tr( "Standard Deviation:" ) );
48  QLabel* lb_coaldist = us_label( tr( "Coalescing Distance:" ) );
49  QLabel* lb_nbrclips = us_label( tr( "# of Clipped Solutes:" ) );
50  QLabel* lb_regufact = us_label( tr( "Regularization Factor:" ) );
51 
52  QPushButton* pb_help = us_pushbutton( tr( "Help" ) );
53  QPushButton* pb_cancel = us_pushbutton( tr( "Cancel" ) );
54  pb_accept = us_pushbutton( tr( "Accept" ) );
55  pb_ldmodel = us_pushbutton( tr( "Load Model" ) );
56 
57  QLayout* lo_stndcp = us_radiobutton( tr( "Standard Centerpiece" ),
59  QLayout* lo_bandcp = us_radiobutton( tr( "Band-forming Centerpiece" ),
61 
62  ct_bandload = us_counter( 3, 1, 20, 1 );
63  ct_spoints = us_counter( 3, 50, 10000, 10 );
64 
65  ct_bandload->setStep( 0.1 );
66  ct_bandload->setValue( sparms->band_volume * 1000.0 );
67  ct_spoints ->setStep( 10 );
68  ct_spoints ->setValue( sparms->simpoints );
69  ct_bandload->setEnabled( rb_bandcp->isChecked() );
70 
71  QLayout* lo_unifgr =
72  us_checkbox( tr( "Uniform Grid" ), ck_unifgr, true );
73  //QLayout* lo_menisc =
74  // us_checkbox( tr( "Float Meniscus Position" ), ck_menisc );
75  //QLayout* lo_mcarlo =
76  // us_checkbox( tr( "Monte Carlo Iterations" ), ck_mcarlo );
77  QLayout* lo_locugr =
78  us_checkbox( tr( "Local Uniform Grid" ), ck_locugr );
79  QLayout* lo_ranlgr =
80  us_checkbox( tr( "Random Local Grid" ), ck_ranlgr );
81  QLayout* lo_soluco =
82  us_checkbox( tr( "Solute Coalescing" ), ck_soluco );
83  QLayout* lo_clipcs =
84  us_checkbox( tr( "Clip Lowest Concentration Solutes" ), ck_clipcs );
85  QLayout* lo_regulz =
86  us_checkbox( tr( "Regularization" ), ck_regulz );
87  QLayout* lo_mdgrid =
88  us_checkbox( tr( "Model-Defined Grid" ), ck_mdgrid );
89  QLayout* lo_mdrati =
90  us_checkbox( tr( "Model-Defined Ratios and Grid" ), ck_mdrati );
91 
92  ct_repetloc = us_counter( 2, 1, 20, 1 );
93  ct_scfactor = us_counter( 3, 0.01, 10.0, 0.3 );
94  ct_scfact2 = us_counter( 3, 0.01, 10.0, 0.9 );
95  ct_repetran = us_counter( 2, 1, 20, 1 );
96  ct_stddevia = us_counter( 3, 0.01, 10.0, 0.1 );
97  ct_coaldist = us_counter( 3, 0.01, 10.0, 0.1 );
98  ct_nbrclips = us_counter( 2, 1, 20, 1 );
99  //ct_menisrng = us_counter( 3, 0.01, 0.65, 0.03 );
100  //ct_menispts = us_counter( 2, 1, 20, 10 );
101  //ct_mciters = us_counter( 3, 1, 2000, 20 );
102  ct_regufact = us_counter( 3, 0.01, 10.0, 0.9 );
103 
104  ct_repetloc ->setStep( 1 );
105  ct_scfactor ->setStep( 0.01 );
106  ct_scfact2 ->setStep( 0.01 );
107  ct_repetran ->setStep( 1 );
108  ct_stddevia ->setStep( 0.01 );
109  ct_coaldist ->setStep( 0.01 );
110  ct_nbrclips ->setStep( 1 );
111  //ct_menisrng ->setStep( 0.01 );
112  //ct_menispts ->setStep( 1 );
113  //ct_mciters ->setStep( 1 );
114  ct_regufact ->setStep( 0.01 );
115 
116  cmb_mesh = us_comboBox();
117  cmb_mesh->setMaxVisibleItems( 5 );
118  cmb_mesh->addItem( "Adaptive Space Time FE Mesh (ASTFEM)" );
119  cmb_mesh->addItem( "Claverie Fixed Mesh" );
120  cmb_mesh->addItem( "Moving Hat Mesh" );
121  cmb_mesh->addItem( "Specified file (mesh.dat)" );
122  cmb_mesh->addItem( "AST Finite Volume Method (ASTFVM)" );
123  cmb_mesh->setCurrentIndex( (int)sparms->meshType );
124 
126  cmb_moving->setMaxVisibleItems( 2 );
127  cmb_moving->addItem( "Constant Time Grid (Claverie/Acceleration)" );
128  cmb_moving->addItem( "Moving Time Grid (ASTFEM/Moving Hat)" );
129  cmb_moving->setCurrentIndex( (int)sparms->gridType );
130 
131  int row = 0;
132  optimizeLayout->addWidget( lb_optimiz, row++, 0, 1, 6 );
133  optimizeLayout->addLayout( lo_unifgr, row++, 0, 1, 6 );
134  optimizeLayout->addLayout( lo_locugr, row++, 0, 1, 6 );
135  optimizeLayout->addWidget( lb_repetloc, row, 0, 1, 4 );
136  optimizeLayout->addWidget( ct_repetloc, row++, 4, 1, 2 );
137  optimizeLayout->addWidget( lb_scfactor, row, 0, 1, 4 );
138  optimizeLayout->addWidget( ct_scfactor, row++, 4, 1, 2 );
139  optimizeLayout->addWidget( lb_scfact2, row, 0, 1, 4 );
140  optimizeLayout->addWidget( ct_scfact2, row++, 4, 1, 2 );
141  optimizeLayout->addLayout( lo_ranlgr, row++, 0, 1, 6 );
142  optimizeLayout->addWidget( lb_repetran, row, 0, 1, 4 );
143  optimizeLayout->addWidget( ct_repetran, row++, 4, 1, 2 );
144  optimizeLayout->addWidget( lb_stddevia, row, 0, 1, 4 );
145  optimizeLayout->addWidget( ct_stddevia, row++, 4, 1, 2 );
146  optimizeLayout->addLayout( lo_soluco, row++, 0, 1, 6 );
147  optimizeLayout->addWidget( lb_coaldist, row, 0, 1, 4 );
148  optimizeLayout->addWidget( ct_coaldist, row++, 4, 1, 2 );
149  optimizeLayout->addLayout( lo_clipcs, row++, 0, 1, 6 );
150  optimizeLayout->addWidget( lb_nbrclips, row, 0, 1, 4 );
151  optimizeLayout->addWidget( ct_nbrclips, row++, 4, 1, 2 );
152 
153  row = 0;
154  simparmsLayout->addWidget( lb_simpars, row++, 0, 1, 6 );
155  simparmsLayout->addLayout( lo_stndcp, row, 0, 1, 3 );
156  simparmsLayout->addLayout( lo_bandcp, row++, 3, 1, 3 );
157  simparmsLayout->addWidget( lb_bandload, row, 0, 1, 4 );
158  simparmsLayout->addWidget( ct_bandload, row++, 4, 1, 2 );
159  simparmsLayout->addWidget( lb_spoints, row, 0, 1, 4 );
160  simparmsLayout->addWidget( ct_spoints, row++, 4, 1, 2 );
161  simparmsLayout->addWidget( cmb_mesh, row++, 0, 1, 6 );
162  simparmsLayout->addWidget( cmb_moving, row++, 0, 1, 6 );
163  simparmsLayout->addWidget( lb_refopts, row++, 0, 1, 6 );
164  //simparmsLayout->addLayout( lo_menisc, row++, 0, 1, 6 );
165  //simparmsLayout->addWidget( lb_menisrng, row, 0, 1, 4 );
166  //simparmsLayout->addWidget( ct_menisrng, row++, 4, 1, 2 );
167  //simparmsLayout->addWidget( lb_menispts, row, 0, 1, 4 );
168  //simparmsLayout->addWidget( ct_menispts, row++, 4, 1, 2 );
169  //simparmsLayout->addLayout( lo_mcarlo, row++, 0, 1, 6 );
170  //simparmsLayout->addWidget( lb_mciters, row, 0, 1, 4 );
171  //simparmsLayout->addWidget( ct_mciters, row++, 4, 1, 2 );
172  simparmsLayout->addLayout( lo_mdgrid, row++, 0, 1, 6 );
173  simparmsLayout->addLayout( lo_mdrati, row++, 0, 1, 6 );
174  simparmsLayout->addWidget( pb_ldmodel, row++, 0, 1, 6 );
175  simparmsLayout->addLayout( lo_regulz, row++, 0, 1, 6 );
176  simparmsLayout->addWidget( lb_regufact, row, 0, 1, 4 );
177  simparmsLayout->addWidget( ct_regufact, row++, 4, 1, 2 );
178  simparmsLayout->addWidget( pb_help, row, 0, 1, 2 );
179  simparmsLayout->addWidget( pb_cancel, row, 2, 1, 2 );
180  simparmsLayout->addWidget( pb_accept, row++, 4, 1, 2 );
181 
182  ck_unifgr->setChecked( true );
183  ck_locugr->setChecked( true );
184  adjustSize();
185  ck_locugr->setChecked( false );
186 
188 
189  connect( rb_bandcp, SIGNAL( toggled( bool ) ),
190  this, SLOT( checkBandForm( bool ) ) );
191  connect( ck_unifgr, SIGNAL( toggled( bool ) ),
192  this, SLOT( checkUniGrid( bool ) ) );
193  connect( ck_locugr, SIGNAL( toggled( bool ) ),
194  this, SLOT( checkLocalUni( bool ) ) );
195  connect( ck_ranlgr, SIGNAL( toggled( bool ) ),
196  this, SLOT( checkRandLoc( bool ) ) );
197  connect( ck_soluco, SIGNAL( toggled( bool ) ),
198  this, SLOT( checkSoluCoal( bool ) ) );
199  connect( ck_clipcs, SIGNAL( toggled( bool ) ),
200  this, SLOT( checkClipLow( bool ) ) );
201  //connect( ck_menisc, SIGNAL( toggled( bool ) ),
202  // this, SLOT( checkMeniscus( bool ) ) );
203  //connect( ck_mcarlo, SIGNAL( toggled( bool ) ),
204  // this, SLOT( checkMonteCar( bool ) ) );
205  connect( ck_mdgrid, SIGNAL( toggled( bool ) ),
206  this, SLOT( checkMdGrid ( bool ) ) );
207  connect( ck_mdrati, SIGNAL( toggled( bool ) ),
208  this, SLOT( checkMdRatios( bool ) ) );
209  connect( ck_regulz, SIGNAL( toggled( bool ) ),
210  this, SLOT( checkRegular( bool ) ) );
211  connect( pb_ldmodel, SIGNAL( clicked() ),
212  this, SLOT( load_model() ) );
213 
214  connect( pb_help, SIGNAL( clicked() ),
215  this, SLOT( help() ) );
216  connect( pb_cancel, SIGNAL( clicked() ),
217  this, SLOT( reject() ) );
218  connect( pb_accept, SIGNAL( clicked() ),
219  this, SLOT( select() ) );
220 
221  //ck_menisc->setChecked( false );
222  //ck_mcarlo->setChecked( false );
223  ck_regulz->setChecked( false );
224 
225  //ct_menisrng->setEnabled( false );
226  //ct_menispts->setEnabled( false );
227  //ct_mciters ->setEnabled( false );
228  ct_regufact->setEnabled( false );
229 
230  //if ( sparms->band_forming )
231  //{
232  // double bf_mult = sparms->cp_width;
233  // bf_mult = ( bf_mult == 0.0 ) ? 3.00 : bf_mult;
234  // ck_locugr ->setChecked( true );
235  // ct_scfactor->setValue ( bf_mult );
236  //}
237  pb_ldmodel ->setEnabled( false );
238 
239 qDebug() << "Pre-adjust size" << size();
240  adjustSize();
241 qDebug() << "Post-adjust size" << size();
242  resize( 780, 330 );
243 qDebug() << "Post-resize size" << size();
244  qApp->processEvents();
245 }
246 
247 // public slot to get dialog parameters
249  int& rtype, double& rtpar1, double& rtpar2, double& rtpar3,
250  US_Model& modpar, bool& reg, double& repar1 )
251 {
252  rtype = US_2dsaProcess::UGRID;
253  rtpar1 = 8.0;
254  rtpar2 = 0.0;
255  rtpar3 = 0.0;
256 
257  if ( ck_locugr->isChecked() )
258  {
259  rtype = US_2dsaProcess::LUGRID;
260  rtpar1 = ct_repetloc->value();
261  rtpar2 = ct_scfactor->value();
262  rtpar3 = ct_scfact2 ->value();
263  }
264  else if ( ck_ranlgr->isChecked() )
265  {
266  rtype = US_2dsaProcess::RLGRID;
267  rtpar1 = ct_repetran->value();
268  rtpar2 = ct_stddevia->value();
269  }
270  else if ( ck_soluco->isChecked() )
271  {
272  rtype = US_2dsaProcess::SOLCO;
273  rtpar1 = ct_coaldist->value();
274  }
275  else if ( ck_clipcs->isChecked() )
276  {
277  rtype = US_2dsaProcess::CLIPLO;
278  rtpar1 = ct_nbrclips->value();
279  }
280 
281  if ( ck_mdgrid->isChecked() )
282  {
283  rtype = -1;
284  modpar = model;
285  }
286 
287  else if ( ck_mdrati->isChecked() )
288  {
289  rtype = -2;
290  modpar = model;
291  }
292 
293  reg = ck_regulz->isChecked();
294  repar1 = ct_regufact->value();
295 }
296 
297 // enable/disable optimize counters based on chosen method
299 {
300  ct_repetloc->setEnabled( ck_locugr->isChecked() );
301  ct_scfactor->setEnabled( ck_locugr->isChecked() );
302  ct_scfact2 ->setEnabled( ck_locugr->isChecked() );
303  ct_repetran->setEnabled( ck_ranlgr->isChecked() );
304  ct_stddevia->setEnabled( ck_ranlgr->isChecked() );
305  ct_coaldist->setEnabled( ck_soluco->isChecked() );
306  ct_nbrclips->setEnabled( ck_clipcs->isChecked() );
307 
308 }
309 
310 // uncheck optimize options other than one just checked
312 {
313  if ( ckflag != 1 ) ck_unifgr->setChecked( false );
314  if ( ckflag != 2 ) ck_locugr->setChecked( false );
315  if ( ckflag != 3 ) ck_ranlgr->setChecked( false );
316  if ( ckflag != 4 ) ck_soluco->setChecked( false );
317  if ( ckflag != 5 ) ck_clipcs->setChecked( false );
318 }
319 
320 // handle band forming toggled
322 {
323  ct_bandload->setEnabled( checked );
324 }
325 
326 // handle uniform grid checked
327 void US_AdvAnalysis2D::checkUniGrid( bool checked )
328 {
329  if ( checked )
330  {
331  uncheck_optimize( 1 );
333  ck_mdgrid ->setChecked( false );
334  ck_mdrati ->setChecked( false );
335  pb_ldmodel ->setEnabled( false );
336  }
337 
338  else
339  {
341  }
342 
343 qDebug() << "checkuni size" << size();
344 }
345 
346 // handle local uniform grid checked
348 {
349  if ( checked ) { uncheck_optimize( 2 ); optimize_options(); }
350 }
351 
352 // handle random local grid checked
353 void US_AdvAnalysis2D::checkRandLoc( bool checked )
354 {
355  if ( checked ) { uncheck_optimize( 3 ); optimize_options(); }
356 }
357 
358 // handle solute coalescing checked
360 {
361  if ( checked ) { uncheck_optimize( 4 ); optimize_options(); }
362 }
363 
364 // handle clip lowest conc. solute checked
365 void US_AdvAnalysis2D::checkClipLow( bool checked )
366 {
367  if ( checked ) { uncheck_optimize( 5 ); optimize_options(); }
368 }
369 
370 // handle float meniscus position checked
372 {
373 qDebug() << "SET MENISRNG enabled" << checked;
374  ct_menisrng->setEnabled( checked );
375  ct_menispts->setEnabled( checked );
376  if ( checked )
377  ck_mcarlo ->setChecked( !checked );
378 }
379 
380 // handle monte carlo iterations checked
382 {
383  ct_mciters ->setEnabled( checked );
384  if ( checked )
385  ck_menisc ->setChecked( !checked );
386 }
387 
388 // handle model-defined grid checked
389 void US_AdvAnalysis2D::checkMdGrid( bool checked )
390 {
391 qDebug() << "SET MdGrid enabled" << checked;
392  int nsol = model.components.size();
393 
394  if ( checked )
395  {
396  pb_ldmodel ->setEnabled( true );
397  ck_unifgr ->setChecked( false );
398  ck_mdrati ->setChecked( false );
399  pb_accept ->setEnabled( nsol > 0 );
400  }
401 
402  else if ( ck_mdrati->isChecked() )
403  {
404  pb_ldmodel ->setEnabled( true );
405  ck_unifgr ->setChecked( false );
406  pb_accept ->setEnabled( nsol > 0 );
407  }
408 
409  else
410  {
411  pb_ldmodel ->setEnabled( false );
412  pb_accept ->setEnabled( true );
413  }
414 }
415 
416 // handle model-defined ratios checked
418 {
419 qDebug() << "SET MdRatios enabled" << checked;
420  int nsol = model.components.size();
421 
422  if ( checked )
423  {
424  pb_ldmodel ->setEnabled( true );
425  ck_unifgr ->setChecked( false );
426  ck_mdgrid ->setChecked( false );
427  pb_accept ->setEnabled( nsol > 0 );
428  }
429 
430  else if ( ck_mdgrid->isChecked() )
431  {
432  pb_ldmodel ->setEnabled( true );
433  ck_unifgr ->setChecked( false );
434  pb_accept ->setEnabled( nsol > 0 );
435  }
436 
437  else
438  {
439  pb_ldmodel ->setEnabled( false );
440  pb_accept ->setEnabled( true );
441  }
442 }
443 
444 // handle regularization checked
445 void US_AdvAnalysis2D::checkRegular( bool checked )
446 {
447  ct_regufact->setEnabled( checked );
448 }
449 
450 // accept button clicked
452 {
453  sparms->band_forming = rb_bandcp ->isChecked();
454  sparms->band_volume = ct_bandload->value() / 1000.0;
455  sparms->simpoints = (int)ct_spoints ->value();
457  cmb_mesh ->currentIndex();
459  cmb_moving ->currentIndex();
460 
461  if ( sparms->band_forming && ck_locugr->isChecked() )
462  sparms->cp_width = ct_scfactor->value();
463 
464  accept();
465 }
466 
467 // Load-model button clicked
469 {
470  QString mdesc ( "" );
471  QString mfilter( "" );
472 
473  mfilter = QString( "CustomGrid" );
474 
475  US_ModelLoader dialog( loadDB, mfilter, model, mdesc, "" );
476 
477  if ( dialog.exec() == QDialog::Accepted )
478  { // Enable Accept button if a model was loaded
479  pb_accept ->setEnabled( model.components.size() > 0 );
480  }
481 
482  return;
483 }
484