Changeset 1078


Ignore:
Timestamp:
May 29, 2011 9:54:59 PM (9 years ago)
Author:
gegorbet
Message:

Next-stage commit - a few fixes and upgrades. More to follow.

File:
1 edited

Legend:

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

    r1069 r1078  
    455455
    456456   QString msg = tr( "In file directory\n    " ) + filedir + " ,\n" +
    457                  tr( "File\n    " ) + fname_edit + "\n" +
     457                 tr( "file\n    " ) + fname_edit + "\n" +
    458458                 tr( "has been modified with the line:\n    " ) +
    459459                 edtext.mid( mlsx, mlnn );
     
    468468   msg += tr( "\n\nDo you want to remove all fit-meniscus models\n"
    469469              "(and associated noises) except for the one\n"
    470               "corresponding to the minimum RMSD value?" );
     470              "that has the minimum RMSD value?" );
    471471
    472472   int response = QMessageBox::question( this, tr( "Edit File Updated" ),
     
    475475   if ( response == QMessageBox::Yes )
    476476   {
    477 qDebug() << " Remove Models";
     477qDebug() << " call Remove Models";
    478478      remove_models();
    479479   }
     
    557557      QString editID     = db.value( 6 ).toString();
    558558      QString ansysID    = descript.section( '.', -2, -2 );
    559       QString iterID     = ansysID .section( '_',  6,  6 );
     559      QString iterID     = ansysID .section( '_',  4,  4 );
    560560qDebug() << "DbSc:   modelID vari meni" << modelID << variance << meniscus;
    561561
     
    580580qDebug() << "DbSc:      ftfname" << ftfname;
    581581      }
     582else qDebug() << "DbSc:    iterID" << iterID;
    582583   }
    583584
     
    742743
    743744   msg += tr( "\n\nThe meniscus value was also updated for the"
    744               "\nappropriate edit record in the database." );
     745              "\ncorresponding edit record in the database." );
    745746   return;
    746747}
    747748
    748 // Reduce f-m models (and associated noise) to the single chosen one
     749// Remove f-m models (and associated noise) except for the single chosen one
    749750void US_FitMeniscus::remove_models()
    750751{
     752   QString srchRun  = filedir.section( "/", -1, -1 );
     753   QString srchEdit = fname_load.section( ".", -3, -3 );
     754   QString srchTrip = srchEdit.section( "-", 1, 1 );
     755           srchEdit = srchEdit.section( "-", 0, 0 );
     756//qDebug() << "RmvMod: scn1 srchRun srchEdit srchTrip"
     757// << srchRun << srchEdit << srchTrip;
     758
     759   // Scan models files; get list of fit-meniscus type matching run/edit/triple
     760   QStringList modfilt;
     761   modfilt << "M*.xml";
     762   QString     moddir   = US_Settings::dataDir() + "/models";
     763   QStringList modfiles = QDir( moddir ).entryList(
     764         modfilt, QDir::Files, QDir::Name );
     765   moddir               = moddir + "/";
     766
     767   QStringList     lmodFnams;             // local model full path file names
     768   QStringList     lmodGUIDs;             // Local model GUIDs
     769   QList< double > lmodVaris;             // Local variance values
     770   QList< double > lmodMenis;             // Local meniscus values
     771   QStringList     lmodDescs;             // Local descriptions
     772
     773   QStringList     dmodIDs;               // Database model IDs
     774   QStringList     dmodGUIDs;             // Database model GUIDs
     775   QList< double > dmodVaris;             // Database variance values
     776   QList< double > dmodMenis;             // Database meniscus values
     777   QStringList     dmodDescs;             // Database descriptions
     778   int nlmods           = 0;
     779   int ndmods           = 0;
     780   int nlnois           = 0;
     781   int ndnois           = 0;
     782   int lArTime          = 0;
     783   int dArTime          = 0;
     784   int lkModx           = -1;
     785   int dkModx           = -1;
     786
     787   for ( int ii = 0; ii < modfiles.size(); ii++ )
     788   {
     789      QString modfname   = modfiles.at( ii );
     790      QString modpath    = moddir + modfname;
     791      US_Model model;
     792     
     793      if ( model.load( modpath ) != US_DB2::OK )
     794         continue;    // Can't use if can't load
     795
     796      QString descript   = model.description;
     797      QString runID      = descript.section( '.',  0, -4 );
     798      QString tripID     = descript.section( '.', -3, -3 );
     799      QString anRunID    = descript.section( '.', -2, -2 );
     800      QString editLabl   = anRunID .section( '_',  0,  0 );
     801//qDebug() << "RmvMod:  scn1 ii runID editLabl tripID"
     802// << ii << runID << editLabl << tripID;
     803
     804      if ( runID != srchRun  ||  editLabl != srchEdit  ||  tripID != srchTrip )
     805         continue;    // Can't use if from a different runID or edit or triple
     806
     807      QString iterID     = anRunID .section( '_',  4,  4 );
     808//qDebug() << "RmvMod:    iterID" << iterID;
     809
     810      if ( iterID.length() != 10  ||  ! iterID.contains( "-m" ) )
     811         continue;    // Can't use if not a fit-meniscus type
     812
     813      // Probably a file from the right set, but let's check for other sets
     814      int     arTime     = anRunID .section( '_',  1,  1 ).mid( 1 ).toInt();
     815
     816      if ( arTime > lArTime )
     817      {  // If first set or new one younger than previous, start lists
     818         lmodFnams.clear();
     819         lmodGUIDs.clear();
     820         lmodVaris.clear();
     821         lmodMenis.clear();
     822         lmodDescs.clear();
     823         lArTime            = arTime;
     824      }
     825
     826      else if ( arTime < lArTime )
     827      {  // If new one older than previous, skip it
     828         continue;
     829      }
     830
     831      lmodFnams << modpath;             // Save full path file name
     832      lmodGUIDs << model.modelGUID;     // Save model GUID
     833      lmodVaris << model.variance;      // Save variance
     834      lmodMenis << model.meniscus;      // Save meniscus
     835      lmodDescs << model.description;   // Save description
     836   }
     837
     838   nlmods         = lmodFnams.size();
     839qDebug() << "RmvMod: nlmods" << nlmods;
     840   double minVari = 99e+10;
     841
     842   for ( int ii = 0; ii < nlmods; ii++ )
     843   {  // Scan to identify model in set with lowest variance
     844qDebug() << "low Vari scan: ii vari meni desc" << ii << lmodVaris.at(ii)
     845 << lmodMenis.at(ii) << lmodDescs.at(ii).right( 22 );
     846      if ( lmodVaris.at( ii ) < minVari )
     847      {
     848         minVari        = lmodVaris.at( ii );
     849         lkModx         = ii;
     850//qDebug() << "low Vari scan:   minVari lkModx" << minVari << lkModx;
     851      }
     852   }
     853qDebug() << "RmvMod:  minVari lkModx" << minVari << lkModx;
     854
     855   QString     invID = QString::number( US_Settings::us_inv_ID() );
     856   US_Passwd pw;
     857   US_DB2 db( pw.getPasswd() );
     858   QStringList query;
     859
     860   // Make a list of f-m models that match for DB, if possible
     861   if ( dkdb_cntrls->db() )
     862   {
     863      query << "get_model_desc" << invID;
     864      db.query( query );
     865
     866      while( db.next() )
     867      {
     868         QString modelID    = db.value( 0 ).toString();
     869         QString modelGUID  = db.value( 1 ).toString();
     870         QString descript   = db.value( 2 ).toString();
     871         double  variance   = db.value( 3 ).toString().toDouble();
     872         double  meniscus   = db.value( 4 ).toString().toDouble();
     873         QString runID      = descript.section( '.',  0, -4 );
     874         QString tripID     = descript.section( '.', -3, -3 );
     875         QString anRunID    = descript.section( '.', -2, -2 );
     876         QString editLabl   = anRunID .section( '_',  0,  0 );
     877//qDebug() << "RmvMod:  scn1 ii runID editLabl tripID"
     878// << ii << runID << editLabl << tripID;
     879
     880         if ( runID != srchRun  ||  editLabl != srchEdit
     881          ||  tripID != srchTrip )
     882         continue;    // Can't use if from a different runID or edit or triple
     883
     884         QString iterID     = anRunID .section( '_',  4,  4 );
     885//qDebug() << "RmvMod:    iterID" << iterID;
     886
     887         if ( iterID.length() != 10  ||  ! iterID.contains( "-m" ) )
     888            continue;    // Can't use if not a fit-meniscus type
     889
     890         // Probably a file from the right set, but let's check for other sets
     891         int     arTime     = anRunID .section( '_',  1,  1 ).mid( 1 ).toInt();
     892
     893         if ( arTime > dArTime )
     894         {  // If first set or new one younger than previous, start lists
     895            dmodIDs  .clear();
     896            dmodGUIDs.clear();
     897            dmodVaris.clear();
     898            dmodMenis.clear();
     899            dmodDescs.clear();
     900            dArTime            = arTime;
     901         }
     902
     903         else if ( arTime < dArTime )
     904         {  // If new one older than previous, skip it
     905            continue;
     906         }
     907
     908         dmodIDs   << modelID;             // Save model DB ID
     909         dmodGUIDs << modelGUID;           // Save model GUID
     910         dmodVaris << variance;            // Save variance
     911         dmodMenis << meniscus;            // Save meniscus
     912         dmodDescs << descript;            // Save description
     913      }
     914
     915      ndmods         = dmodIDs.size();
     916qDebug() << "RmvMod: ndmods" << ndmods;
     917      double minVari = 99e+10;
     918
     919      for ( int ii = 0; ii < ndmods; ii++ )
     920      {  // Scan to identify model in set with lowest variance
     921qDebug() << "low Vari scan: ii vari meni desc" << ii << dmodVaris.at(ii)
     922 << dmodMenis.at(ii) << dmodDescs.at(ii).right( 22 );
     923         if ( dmodVaris.at( ii ) < minVari )
     924         {
     925            minVari        = dmodVaris.at( ii );
     926            dkModx         = ii;
     927//qDebug() << "low Vari scan:   minVari dkModx" << minVari << dkModx;
     928         }
     929      }
     930
     931      // Now, compare the findings for local versus database
     932      if ( nlmods == ndmods )
     933      {
     934         int    jj      = 0;
     935         int    kk      = ndmods - 1;
     936         int    nmatch  = 0;
     937         int    nmatfo  = 0;
     938
     939         while ( jj < nlmods )
     940         {
     941            if ( dmodGUIDs[ jj ] == lmodGUIDs[ kk ]  &&
     942                 dmodDescs[ jj ] == lmodDescs[ kk ] )
     943               nmatch++;
     944
     945            else if ( dmodGUIDs[ jj ] == lmodGUIDs[ jj ]  &&
     946                      dmodDescs[ jj ] == lmodDescs[ jj ]  &&
     947                      dmodGUIDs[ kk ] == lmodGUIDs[ kk ]  &&
     948                      dmodDescs[ kk ] == lmodDescs[ kk ] )
     949               nmatfo++;
     950
     951            jj++;
     952            kk--;
     953         }
     954
     955         if ( nmatch == nlmods )
     956         {  // As expected, database records are in reverse order
     957qDebug() << "++local/dbase match, but are in reverse order";
     958            // Reverse the order of DB records
     959            jj             = 0;
     960            kk             = ndmods - 1;
     961            while ( jj < kk )
     962            {
     963               QString modelID    = dmodIDs  [ jj ];
     964               QString modelGUID  = dmodGUIDs[ jj ];
     965               double  variance   = dmodVaris[ jj ];
     966               double  meniscus   = dmodMenis[ jj ];
     967               QString descript   = dmodDescs[ jj ];
     968               dmodIDs  [ jj ]    = dmodIDs  [ kk ];
     969               dmodGUIDs[ jj ]    = dmodGUIDs[ kk ];
     970               dmodVaris[ jj ]    = dmodVaris[ kk ];
     971               dmodMenis[ jj ]    = dmodMenis[ kk ];
     972               dmodDescs[ jj ]    = dmodDescs[ kk ];
     973               dmodIDs  [ kk ]    = modelID;
     974               dmodGUIDs[ kk ]    = modelGUID;
     975               dmodVaris[ kk ]    = variance;
     976               dmodMenis[ kk ]    = meniscus;
     977               dmodDescs[ kk ]    = descript;
     978               jj++;
     979               kk--;
     980            }
     981         }
     982
     983         else if ( nmatfo == nlmods )
     984         {  // Also OK if they match and are in the same order
     985qDebug() << "++local/dbase match, and in the same order";
     986         }
     987
     988         else
     989         {  // Not good if they do not match
     990qDebug() << "**local/dbase DO NOT MATCH";
     991qDebug() << "  nmatch nmo ndmods nlms" << nmatch << nmatfo << ndmods << nlmods;
     992            return;
     993         }
     994      }
     995
     996      else if ( nlmods == 0 )
     997      {  // It is OK if there are no local records, when DB ones were found
     998qDebug() << "++only dbase records exist";
     999      }
     1000
     1001      else
     1002      {  // Non-zero local & DB, but they do not match
     1003qDebug() << "**local/dbase DO NOT MATCH in count";
     1004qDebug() << "  nlmods ndmods" << nlmods << ndmods;
     1005         return;
     1006      }
     1007   }
     1008
     1009   if ( ndmods > 0  ||  nlmods > 0 )
     1010   {  // There are models to scan, so build a list of models,noises to remove
     1011      QStringList     rmodIDs;
     1012      QStringList     rmodGUIDs;
     1013      QStringList     rmodDescs;
     1014      QStringList     rmodFnams;
     1015      QStringList     rnoiIDs;
     1016      QStringList     rnoiFnams;
     1017      QStringList     rnoiDescs;
     1018      int             nlrmod = 0;
     1019      int             ndrmod = 0;
     1020      int             nlrnoi = 0;
     1021      int             ndrnoi = 0;
     1022
     1023      for ( int jj = 0; jj < max( nlmods, ndmods ); jj++ )
     1024      {  // Build the list of model files and DB ids for deletion
     1025         if ( jj != lkModx )
     1026         {
     1027            if ( nlmods > 0 )
     1028            {
     1029               rmodFnams << lmodFnams[ jj ];
     1030               if ( ndmods == 0 )
     1031               {
     1032                  rmodGUIDs << lmodGUIDs[ jj ];
     1033                  rmodDescs << lmodDescs[ jj ];
     1034               }
     1035               nlrmod++;
     1036            }
     1037
     1038            if ( ndmods > 0 )
     1039            {
     1040               rmodIDs   << dmodIDs  [ jj ];
     1041               rmodGUIDs << dmodGUIDs[ jj ];
     1042               rmodDescs << dmodDescs[ jj ];
     1043               ndrmod++;
     1044            }
     1045         }
     1046      }
     1047
     1048      for ( int jj = 0; jj < nlmods; jj++ )
     1049      {  // Build the list of local noise files to remove
     1050         QString fname      = lmodFnams[ jj ];
     1051         US_Noise noise;
     1052         noise.load( fname );
     1053         QString descrip    = noise.description;
     1054         QString basedesc   = descrip.section( ".", 0, -2 );
     1055         int     modx       = rmodDescs.indexOf( basedesc + ".model" );
     1056
     1057         if ( modx >= 0 )
     1058         {  // This noise belongs to a model on the delete list
     1059            rnoiFnams << fname;
     1060            rnoiDescs << descrip;
     1061            nlrnoi++;
     1062         }
     1063      }
     1064
     1065      for ( int jj = 0; jj < ndmods; jj++ )
     1066      {  // Build the list of DB noise IDs to remove
     1067         QString noiseGUID  = dmodIDs[ jj ];
     1068         query.clear();
     1069         query << "get_noiseID" << noiseGUID;
     1070         db.query( query );
     1071         db.next();
     1072         QString noiseID    = db.value( 0 ).toString();
     1073         US_Noise noise;
     1074         noise.load( noiseID, &db );
     1075         QString descrip    = noise.description;
     1076         QString basedesc   = descrip.section( ".", 0, -2 );
     1077         int     modx       = rmodDescs.indexOf( basedesc + ".model" );
     1078
     1079         if ( modx >= 0 )
     1080         {
     1081            rnoiIDs   << noiseID;
     1082
     1083            if ( nlmods == 0 )
     1084               rnoiDescs << descrip;
     1085
     1086            ndrnoi++;
     1087         }
     1088      }
     1089
     1090      nlnois             = nlrnoi + ( nlrnoi > nlrmod ? 2 : 1 );
     1091      ndnois             = ndrnoi + ( ndrnoi > ndrmod ? 2 : 1 );
     1092qDebug() << "RmvMod: nlrmod ndrmod nlrnoi ndrnoi"
     1093 << nlrmod << ndrmod << nlrnoi << ndrnoi;
     1094      QString msg = tr( "%1 local model files;\n"
     1095                        "%2 database model files;\n"
     1096                        "%3 local noise files;\n"
     1097                        "%4 database noise files;\n"
     1098                        "have been identified for removal\n"
     1099                        "Do you really want to delete them?" )
     1100         .arg( nlrmod ).arg( ndrmod ).arg( nlrnoi ).arg( ndrnoi );
     1101
     1102      int response = QMessageBox::question( this,
     1103            tr( "Remove Models and Noises?" ),
     1104            msg, QMessageBox::Yes, QMessageBox::Cancel );
     1105
     1106      if ( response == QMessageBox::Yes )
     1107      {
     1108qDebug() << " Remove Models and Noises";
     1109      }
     1110   }
     1111
     1112   else
     1113   {  // No models were found!!! (huh!!!)
     1114qDebug() << "**NO local/dbase models-to-remove were found!!!!";
     1115   }
     1116
    7511117   return;
    7521118}
     1119
Note: See TracChangeset for help on using the changeset viewer.