Changeset 2820


Ignore:
Timestamp:
Aug 16, 2019 2:21:20 PM (3 months ago)
Author:
gegorbet
Message:

dens_match mods: report_directory, remove_distribs, HRadius units, Boundary+Smooth_upperlimits, ModelPars_duplicate_percents

Location:
trunk/programs/us_density_match
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/programs/us_density_match/us_density_match.cpp

    r2818 r2820  
    311311   QString fname;
    312312   QString fpath;
     313   QDir diro( reppath );
     314   if ( !diro.exists( ) )  // Make sure report directory exists
     315      QDir( US_Settings::reportDir() ).mkdir( runid );
    313316
    314317   // Write sedimentation coeff, bfrac CSV files
     
    840843 << bdens << soluID << tsys.bdensity;
    841844
    842    
    843 //   te_distr_info->setText( tr( "Run:  " ) + tsys.run_name
    844 //      + " (" + tsys.method + ")\n    " + tsys.analys_name );
    845845   int nsolmc  = model.components.size();
    846846
     
    11841184   }
    11851185
     1186   // Summarize new set of models in info box
     1187   models_summary();
     1188
     1189   // Build and plot updated data
     1190   build_bf_dists();    // (Re-)build boundary fraction distributions
     1191   build_bf_vects();    // (Re-)build boundary fraction vectors
    11861192DbgLv(1) << "rmvdis:plot_data";
    11871193   plot_data();
     
    12001206   {  // Redo text box summarizing models; calculate vectors
    12011207DbgLv(1) << "mdlpar: Accepted";
    1202       QString mdesc     = mdescs[ 0 ].section( mdescs[ 0 ].left( 1 ), 1, 1 );
    1203       mdesc             = QString( mdesc ).left( 50 );
    1204       QString dinfo     = alldis[ 0 ].run_name.section( ".", 0, -2 ) + "\n\n"
    1205                         + tr( "  D2O Percent  Density  Label  MDescr.\n" );
    1206 
    1207       for ( int jj = 0; jj < alldis.size(); jj++ )
    1208       {  // Compose and display a distribution line for distro info box
    1209          double d2opct     = alldis[ jj ].d2opct;
    1210          double bdens      = alldis[ jj ].bdensity;
    1211          QString mlab      = alldis[ jj ].label;
    1212          mdesc             = mdescs[ jj ].section( mdescs[ jj ].left( 1 ), 1, 1 );
    1213          mdesc             = alldis[ jj ].run_name;
    1214          int kk            = mdesc.indexOf( "-run" );
    1215          mdesc             = ( kk > 0 )
    1216                             ? "..." + QString( mdesc ).mid( ( kk + 1 ), 20 )
    1217                               + "..."
    1218                             : mdesc;
    1219          dinfo            += QString().sprintf( "%.1f  %f  ", d2opct, bdens )
    1220                              + mlab + "  " + mdesc + "\n";
    1221       }
    1222 
    1223       te_distr_info->setText( dinfo );
     1208      // Summarize new set of models in info box
     1209      models_summary();
     1210
     1211      // Rebuild vectors and replot data
     1212DbgLv(1) << "mdlpar:   plot_data";
     1213      build_bf_dists();
     1214      build_bf_vects();
     1215      plot_data();
    12241216   }
    12251217}
     
    12401232#endif
    12411233
    1242    const QString xlabs[] = {      "s", "f/f0", "mass","vbar", "D", "f",  "r"   };
    1243    const double  xvlos[] = {      1.0,   1.0,    2e+4,  0.60, 1e-8, 1e-8, 1e-8 };
    1244    const double  xvhis[] = {     10.0,   4.0,    1e+5,  0.80, 1e-7, 1e-7, 1e-7 };
    1245    const double  xmins[] = { -10000.0,   1.0,     0.0,  0.01, 1e-9, 1e-9, 1e-9 };
    1246    const double  xmaxs[] = {  10000.0,  50.0,   1e+10,  3.00, 1e-5, 1e-5, 1e-4 };
    1247    const double  xincs[] = {     0.01,  0.01,  1000.0,  0.01, 1e-9, 1e-9, 1e-9 };
     1234   const QString xlabs[] = {      "s", "f/f0", "mass","vbar", "D", "f",  "rh"  };
     1235   const double  xvlos[] = {      1.0,   1.0,    2e+4,  0.60, 1e-8, 1e-8, 0.1 };
     1236   const double  xvhis[] = {     10.0,   4.0,    1e+5,  0.80, 1e-7, 1e-7, 1000.};
     1237   const double  xmins[] = { -10000.0,   1.0,     0.0,  0.01, 1e-9, 1e-9, 1e-1 };
     1238   const double  xmaxs[] = {  10000.0,  50.0,   1e+10,  3.00, 1e-5, 1e-5, 1e+3 };
     1239   const double  xincs[] = {     0.01,  0.01,  1000.0,  0.01, 1e-9, 1e-9, 1e-2 };
    12481240#if 0
    12491241   const QString xlabs[] = {      "s", "f/f0",  "MW", "vbar", "D", "f"  };
     
    13621354{
    13631355   int ndists       = alldis.size();
     1356   if ( ndists < 1 )
     1357      return;
    13641358   for ( int jj = 0; jj < ndists; jj++ )
    13651359   {  // Build bfrac distro for each model
     
    15131507      double frico     = R_GC * K20 / ( difco * AVOGADRO );
    15141508      double hyrad     = frico / ( 6.0 * M_PI * VISC_20W );
    1515       v_hrads << hyrad;
     1509      v_hrads << ( hyrad * 1.e+9 );
    15161510   }
    15171511DbgLv(1) << "BldVc: hr 0 1 k n" << v_hrads[0] << v_hrads[1]
     
    16071601      a_title  = tr( "Diffusion Coefficient (1e-7)" );
    16081602   else if ( pltndx == ATTR_R )
    1609       a_title  = tr( "Hydrodynamic Radius" );
     1603      a_title  = tr( "Hydrodynamic Radius (nm)" );
    16101604   else if ( pltndx == ATTR_F )
    16111605      a_title  = tr( "Boundary Fraction" );
     
    16441638   build_bf_vects();    // (Re-)build boundary fraction vectors
    16451639   plot_data();         // Plot data
     1640
     1641   // Also limit percent so upper limit is 100.0
     1642   double mx_bpct    = 100.0 - ct_boundaryPos->value();
     1643   ct_boundaryPct->setMaximum( mx_bpct );
     1644DbgLv(1) << "UpdDiv:  mx_bpct" << mx_bpct;
     1645
     1646   // Limit smoothing so upper limit half of divisions and odd
     1647   double mx_smoo    = ct_division->value() * 0.5;
     1648   int nsmoo         = (int)mx_smoo;
     1649   nsmoo            += ( ( nsmoo & 1 ) == 0 ) ? 1 : 0;
     1650   mx_smoo           = nsmoo;
     1651DbgLv(1) << "UpdDiv:  mx_smoo" << mx_smoo;
     1652   ct_smoothing  ->setMaximum( mx_smoo );
    16461653}
    16471654
     
    16751682}
    16761683
     1684// Write summary of models to info box
     1685void US_Density_Match::models_summary( void )
     1686{
     1687   QString dinfo     = alldis[ 0 ].run_name.section( ".", 0, -2 ) + "\n\n"
     1688                     + tr( "  D2O_Percent  Density  Label  MDescr.\n" );
     1689DbgLv(1) << "mosmry: hdr" << dinfo;
     1690
     1691   for ( int jj = 0; jj < alldis.size(); jj++ )
     1692   {  // Compose and display a distribution line for distro info box
     1693      double d2opct     = alldis[ jj ].d2opct;
     1694      double bdens      = alldis[ jj ].bdensity;
     1695      QString mlab      = alldis[ jj ].label;
     1696DbgLv(1) << "mosmry:  jj" << jj << "d2opct bdens mlab" << d2opct << bdens << mlab;
     1697      QString mdesc     = alldis[ jj ].run_name;
     1698      int kk            = mdesc.indexOf( "-run" );
     1699      mdesc             = ( kk > 0 )
     1700                         ? "..." + QString( mdesc ).mid( ( kk + 1 ), 20 )
     1701                           + "..."
     1702                         : mdesc;
     1703DbgLv(1) << "mosmry:    mdesc" << mdesc;
     1704      dinfo            += QString().sprintf( "%.1f  %f  ", d2opct, bdens )
     1705                          + mlab + "  " + mdesc + "\n";
     1706   }
     1707
     1708   te_distr_info->setText( dinfo );
     1709}
     1710
  • trunk/programs/us_density_match/us_density_match.h

    r2816 r2820  
    189189      QString anno_title  ( int );
    190190      QString ptype_text  ( int );
     191      void models_summary ( void );
    191192      void write_csv( const QString, const QString, QVector< double >&,
    192193                                     const QString, QVector< double >& );
  • trunk/programs/us_density_match/us_model_params.cpp

    r2816 r2820  
    327327      QString pname   = cname.section( ":", 0, 0 );
    328328      QString etext   = lned->text();
     329      bool nonempty   = !etext.isEmpty();
    329330DbgLv(1) << " vlf:  jj" << jj << "etext" << etext << "pname" << pname;
    330331
    331332      if      ( pname == "D2OP" )
    332333      {  // Count D2O percent values given
    333          if ( !etext.isEmpty() )
     334         if ( nonempty )
    334335         {
     336            nad2pc++;     // Bump count all D2Opc non-empty
    335337            double pctval   = etext.toDouble();
    336             if ( etext == "0"  ||  etext == "0.0" )
    337             {  // Zero percent:  bump counts
    338                nzd2pc++;
    339                nad2pc++;
     338            if ( pctval == 0.0 )
     339            {
     340               nzd2pc++;  // Bump count zero percent D2O
    340341DbgLv(1) << " vlf:    pctval" << pctval << "nzd2pc nad2pc" << nzd2pc << nad2pc;
    341342            }
    342             else if ( pctval > 0.0 )
    343             {  // Non-zero numeric: bump percent count
    344                nad2pc++;
    345 DbgLv(1) << " vlf:    pctval" << pctval << "nad2pc" << nad2pc;
    346             }
    347343         }
    348344      }
    349345      else if ( pname == "DENS" )
    350346      {  // Count densities given
    351          if ( !etext.isEmpty() )
     347         if ( nonempty )
    352348         {
    353349            double density  = etext.toDouble();
     
    363359      else if ( pname == "MLAB" )
    364360      {  // Count labels given
    365          if ( !etext.isEmpty() )
     361         if ( nonempty )
    366362            nalabs++;
    367363DbgLv(1) << " vlf:    nalabs" << nalabs;
     
    369365   }
    370366DbgLv(1) << " vlf: nzd2pc nad2pc nadens nalabs" << nzd2pc << nad2pc << nadens << nalabs
    371  << "allden size" << allden.size();
     367 << "allden size" << allden.size() << "nd_orig" << nd_orig;
    372368
    373369   // All model parameters are given if
    374370   //  at least one zero-percent is given;
    375371   //  percent,density,label counts equal row count;
    376    //  and number of unique densities equals row count.
     372   //  and number of unique densities greater than one.
    377373   bool filled    = ( ( nzd2pc > 0 )  &&
    378374                      ( nad2pc == nd_orig )  &&
    379375                      ( nadens == nd_orig )  &&
    380376                      ( nalabs == nd_orig )  &&
    381                       ( allden.size() == nadens ) );
     377                      ( allden.size() > 1 ) );
    382378DbgLv(1) << " vlf:   FILLED" << filled;
    383379   pb_accept ->setEnabled( filled );  // If all filled, enable Accept button
     
    404400      QString etext   = lned->text();
    405401
    406       if      ( pname == "D2OP" )
     402      if ( pname == "D2OP"  &&  !etext.isEmpty() )
    407403      {
    408          if ( !etext.isEmpty() )
     404         nad2pc++;          // Bump total non-empty D2Opc count
     405         double pctval   = etext.toDouble();
     406         if ( pctval == 0.0 )
    409407         {
    410             double pctval   = etext.toDouble();
    411             if ( etext == "0"  ||  etext == "0.0" )
    412             {  // Count 0 percent and total percent
    413                nzd2pc++;
    414                nad2pc++;
    415             }
    416             else if ( pctval > 0.0 )
    417             {  // Count total non-empty percent values given
    418                nad2pc++;
    419             }
     408            nzd2pc++;       // Bump count of 0 percent D2O
    420409         }
    421410      }
Note: See TracChangeset for help on using the changeset viewer.