[us-commits] r2776 - in trunk/programs: us_com_project us_convert us_xpn_viewer

svn at svn.aucsolutions.com svn at svn.aucsolutions.com
Mon May 27 17:58:25 MDT 2019


Author: alexey
Date: 2019-05-27 23:58:24 +0000 (Mon, 27 May 2019)
New Revision: 2776

Modified:
   trunk/programs/us_com_project/us_com_project_gui.cpp
   trunk/programs/us_com_project/us_com_project_gui.h
   trunk/programs/us_convert/us_convert_gui.cpp
   trunk/programs/us_convert/us_experiment.cpp
   trunk/programs/us_convert/us_experiment.h
   trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.cpp
   trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.h
Log:
Autoflow development:
 * proper assignment of the saved exp. data owner - propagated down from us_experiment
 * when reattaching to LIVE UPDATE, dialog not shown if run has been launched from the Optima panel; showed otherwise
 



Modified: trunk/programs/us_com_project/us_com_project_gui.cpp
===================================================================
--- trunk/programs/us_com_project/us_com_project_gui.cpp	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_com_project/us_com_project_gui.cpp	2019-05-27 23:58:24 UTC (rev 2776)
@@ -402,6 +402,10 @@
 
   qDebug() << "Autoflow record #: " << autoflow_records;
 
+  // //Temporary: delete ExperimentDefinition record ( ExpId = 306, 301 )
+  // int ExpId = 285;
+  // delete_psql_record( ExpId );
+
   if ( autoflow_records < 1 )
     return;
 
@@ -496,7 +500,8 @@
   QString ProtName     = protocol_details[ "protocolName" ];
   QString correctRadii = protocol_details[ "correctRadii" ];
   QString expAborted   = protocol_details[ "expAborted" ];
-
+  QString runID        = protocol_details[ "runID" ];
+  
   QDir directory( currDir );
   
   qDebug() << "CURR DIRECTORY : "   << currDir;
@@ -536,6 +541,111 @@
   
 }
 
+//Slot to delete Postgres Optima ExperimentDefinition record
+void US_ComProjectMain::delete_psql_record( int ExpId )
+{
+  QString schname( "AUC_schema" );
+  
+  QString tabname_expdef( "ExperimentDefinition" );
+  QString tabname_fuge  ( "CentrifugeRunProfile" );
+  QString tabname_abs   ( "AbsorbanceScanParameters" );
+  
+  QString qrytab_expdef  = "\"" + schname + "\".\"" + tabname_expdef + "\"";
+  QString qrytab_fuge    = "\"" + schname + "\".\"" + tabname_fuge + "\"";
+  QString qrytab_abs     = "\"" + schname + "\".\"" + tabname_abs + "\"";
+  
+  
+  QString dbhost      = "demeler5.uleth.ca";
+  int     dbport      = 5552;
+  QString dbname      = "AUC_DATA_DB";
+  QString dbuser      = "";
+  QString dbpasw      = "";
+
+  QSqlDatabase dbxpn;
+  
+  dbxpn           = QSqlDatabase::addDatabase( "QPSQL", "" );
+  dbxpn.setDatabaseName( "XpnData" );
+  dbxpn.setHostName    ( dbhost );
+  dbxpn.setPort        ( dbport );
+  dbxpn.setDatabaseName( dbname  );
+  dbxpn.setUserName    ( dbuser  );
+  dbxpn.setPassword    ( dbpasw );
+
+  qDebug() << "Opening Postgres Connection!!!";
+  
+  if (  dbxpn.open() )
+    {
+      qDebug() << "Connected !!!";
+      
+      QSqlQuery query_expdef(dbxpn);
+      QSqlQuery query_fuge(dbxpn);
+      QSqlQuery query_abs_scan(dbxpn);
+     
+      /*
+      // AbsorbanceScanParameters
+      QString ScanId = "5996";
+      if(! query_abs_scan.prepare(QString("DELETE FROM %1 WHERE \"ScanId\" = %2").arg(qrytab_abs).arg(ScanId) ) )
+	qDebug() << query_abs_scan.lastError().text();
+
+      if (query_abs_scan.exec())
+	{
+	  qDebug() << "AbsorbanceScanParameters record # :" << ScanId  << "deleted !";
+	}
+      else
+	{
+	  QString errmsg   = "Delete record error: " + query_abs_scan.lastError().text();
+	  QMessageBox::critical( this,
+				 tr( "*ERROR* in Deleting Absorbance Record" ),
+				 tr( "An error occurred in the attempt to delete"
+				     " AbsorbanceScanParameters from AUC DB\n  %1 table\n  %2 ." ).arg( qrytab_abs ).arg( errmsg ) );
+	  return;
+	}
+      
+      // Cell Parameters
+      
+      
+      // FugeProfile
+      int FugeId = 308;
+      if(! query_fuge.prepare(QString("DELETE FROM %1 WHERE \"FugeRunProfileId\" = %2").arg(qrytab_fuge).arg(FugeId) ) )
+	qDebug() << query_fuge.lastError().text();
+
+      if (query_fuge.exec())
+	{
+	  qDebug() << "FugeProfile record # :" << FugeId  << "deleted !";
+	}
+      else
+	{
+	  QString errmsg   = "Delete record error: " + query_fuge.lastError().text();;
+	  QMessageBox::critical( this,
+				 tr( "*ERROR* in Deleting Fuge Profile" ),
+				 tr( "An error occurred in the attempt to delete"
+				     " FugeProfile from AUC DB\n  %1 table\n  %2 ." ).arg( qrytab_fuge ).arg( errmsg ) );
+	  return;
+	}
+
+      */
+
+      // ExperimentalDefinition
+      if(! query_expdef.prepare(QString("DELETE FROM %1 WHERE \"ExperimentId\" = %2").arg(qrytab_expdef).arg(ExpId) ) )
+	qDebug() << query_expdef.lastError().text();
+      
+      if (query_expdef.exec())
+	{
+	  qDebug() << "ExperimentDefinition record # :" << ExpId  << "deleted !";
+	}
+      else
+	{
+	  QString errmsg   = "Delete record error: " + query_expdef.lastError().text();;
+	  QMessageBox::critical( this,
+				 tr( "*ERROR* in Deleting Experimental Method" ),
+				 tr( "An error occurred in the attempt to delete"
+				     " exp. method from AUC DB\n  %1 table\n  %2 ." ).arg( qrytab_expdef ).arg( errmsg ) );
+	  return;
+	}
+				
+    }
+}
+
 // Slot to read all Optima machines <------------------------------- // New
 void US_ComProjectMain::read_optima_machines( US_DB2* db )
 {

Modified: trunk/programs/us_com_project/us_com_project_gui.h
===================================================================
--- trunk/programs/us_com_project/us_com_project_gui.h	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_com_project/us_com_project_gui.h	2019-05-27 23:58:24 UTC (rev 2776)
@@ -286,7 +286,9 @@
 
   void to_autoflow_records( void );
 
-  void define_new_experiment( QStringList & ); 
+  void define_new_experiment( QStringList & );
+
+  void delete_psql_record( int );  
   
 signals:
   void pass_to_live_update( QMap < QString, QString > & protocol_details ); 

Modified: trunk/programs/us_convert/us_convert_gui.cpp
===================================================================
--- trunk/programs/us_convert/us_convert_gui.cpp	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_convert/us_convert_gui.cpp	2019-05-27 23:58:24 UTC (rev 2776)
@@ -5376,7 +5376,12 @@
    QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) );
    le_status->setText( tr( "Saving Experiment to DB ..." ) );
    qApp->processEvents();
-   status = ExpData.saveToDB( ( saveStatus == BOTH ), &db, speedsteps );
+
+   if ( us_convert_auto_mode ) //ALEXEY: copy of the method with the ExpData.invID set as the owner (not US_Settings::us_inv_ID() )...
+     status = ExpData.saveToDB_auto( ( saveStatus == BOTH ), &db, speedsteps, ExpData.invID );
+   else
+     status = ExpData.saveToDB( ( saveStatus == BOTH ), &db, speedsteps );
+
    QApplication::restoreOverrideCursor();
 
    if ( status == US_DB2::NO_PROJECT )

Modified: trunk/programs/us_convert/us_experiment.cpp
===================================================================
--- trunk/programs/us_convert/us_experiment.cpp	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_convert/us_experiment.cpp	2019-05-27 23:58:24 UTC (rev 2776)
@@ -178,6 +178,128 @@
    return US_DB2::OK;
 }
 
+//Same as above but for AutoFlow with ExpData.invID set as owner
+int US_Experiment::saveToDB_auto( bool update, US_DB2* db,
+				  QVector< SP_SPEEDPROFILE >& speedsteps, int invID_passed )
+{
+qDebug() << "Exp:svToDB: update" << update << "ss-count" << speedsteps.count();
+   // Let's see if the project is in the db already
+   int status = project.saveToDB( db );
+qDebug() << "Exp:svToDB: projsv status(+NO_PR)" << status << US_DB2::NO_PROJECT
+ << "expID" << expID;
+   if ( status == US_DB2::NO_PROJECT )
+      return status;
+
+   else if ( status != US_DB2::OK )
+      return status;
+
+   // Get the RI information, if appropriate
+   QByteArray RIxml;
+   QByteArray RIxmlEscaped;
+   createRIXml( RIxml );
+   //unsigned long length = db->mysqlEscapeString( RIxmlEscaped, RIxml, RIxml.size() );
+   db->mysqlEscapeString( RIxmlEscaped, RIxml, RIxml.size() );
+
+   // Check for experiment runID in database
+   int saveStatus = 0;
+   QStringList q;
+   status = checkRunID( db );
+   if ( status == US_DB2::OK && ! update )
+   {
+      // Then the runID exists already, and we're not updating
+      return US_DB2::DUPFIELD;
+   }
+
+   if ( status == US_DB2::OK )
+   {
+      // It's ok to update the existing experiment entry
+      q.clear();
+      q  << "update_experiment"
+         << QString::number( expID )
+         << QString( expGUID )
+         << QString::number( project.projectID )
+         << runID
+         << QString::number( labID )
+         << QString::number( instrumentID )
+         << QString::number( operatorID )
+         << QString::number( rotorID )
+         << QString::number( calibrationID )
+         << expType
+         << opticalSystem
+         << RIxmlEscaped
+         << runTemp
+         << label
+         << comments
+         << protocolGUID;
+
+      saveStatus = db->statusQuery( q );
+   }
+
+   else if ( status == US_DB2::NOROWS )
+   {
+      // Create new experiment entry
+      q.clear();
+      q  << "new_experiment"
+         << expGUID
+         << QString::number( project.projectID )
+         << runID
+         << QString::number( labID )
+         << QString::number( instrumentID )
+         << QString::number( operatorID )
+         << QString::number( rotorID )
+         << QString::number( calibrationID )
+         << expType
+         << opticalSystem
+         << RIxml
+         << runTemp
+         << label
+         << comments
+         << protocolGUID
+         << QString::number( invID_passed ); //ALEXEY: passed invID, NOT the US_Settings ::us_inv_ID()
+
+      saveStatus = db->statusQuery( q );
+      expID = db->lastInsertID();
+   }
+
+   if ( expID == 0 )      // double check
+   {
+      qDebug() << "Error saving experiment: " << saveStatus
+               << " " << db->lastError();
+      return saveStatus;
+   }
+
+   // Let's get some info after db update
+   QString idExp = QString::number( expID );
+   q.clear();
+   q << "get_experiment_info" << idExp;
+   db->query( q );
+   db->next();
+
+   date = db->value( 12 ).toString();
+
+   // If multispeed, add speed steps to the database
+   q.clear();
+   q << "delete_speedsteps" << idExp;   // Delete any records for experiment
+   saveStatus = db->statusQuery( q );
+   if ( saveStatus != 0 )
+   {
+      qDebug() << "Delete_SpeedSteps" << saveStatus << db->lastError();
+   }
+qDebug() << "Exp:svToDB: delss status" << saveStatus << db->lastError();
+
+qDebug() << "Exp:svToDB:  ss count" << speedsteps.count() << "expID" << expID;
+   for ( int jj = 0; jj < speedsteps.count(); jj++ )
+   {
+qDebug() << "Exp:svToDB:   jj" << jj << "expID" << expID;
+int ssstat=
+      US_SimulationParameters::speedstepToDB( db, expID, &speedsteps[ jj ] );
+qDebug() << "Exp:svToDB:     ssstat=" << ssstat;
+   }
+
+   return US_DB2::OK;
+}
+
+
 // Function to read an experiment from DB
 int US_Experiment::readFromDB( QString runID, US_DB2* db,
                                QVector< SP_SPEEDPROFILE >& speedsteps )

Modified: trunk/programs/us_convert/us_experiment.h
===================================================================
--- trunk/programs/us_convert/us_experiment.h	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_convert/us_experiment.h	2019-05-27 23:58:24 UTC (rev 2776)
@@ -93,7 +93,8 @@
           \param    speedsteps Reference to vector of experiment speed steps
       */
       int saveToDB( bool, US_DB2*, QVector< SP_SPEEDPROFILE >& );
-
+      int saveToDB_auto( bool, US_DB2*, QVector< SP_SPEEDPROFILE >&, int );
+      
       /*! \brief    Reads experiment information from the db
 
           \param runID  The run ID of the experiment.

Modified: trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.cpp
===================================================================
--- trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.cpp	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.cpp	2019-05-27 23:58:24 UTC (rev 2776)
@@ -2063,7 +2063,10 @@
   invID_passed = protocol_details[ "invID_passed" ];
   correctRadii = protocol_details[ "correctRadii" ];
   expAborted   = protocol_details[ "expAborted" ];
+  runID_passed = protocol_details[ "runID" ];
 
+  qDebug() << "RUNID_PASSED !!! " << runID_passed;
+
   details_at_live_update = protocol_details;
 
   selectOptimaByName_auto( OptimaName );                         //New  
@@ -2096,16 +2099,18 @@
   //
   //                      .arg(RunName).arg(OptimaName) );
 
-  msg_data_avail->exec();
-  
-  if (msg_data_avail->clickedButton() == Close)
+  if ( runID_passed.isEmpty() || runID_passed == "NULL" )
     {
-      timer_data_init->stop();
-      disconnect(timer_data_init, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
-
-      emit close_program(); 
+      msg_data_avail->exec();
+      
+      if (msg_data_avail->clickedButton() == Close)
+	{
+	  timer_data_init->stop();
+	  disconnect(timer_data_init, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
+	  
+	  emit close_program(); 
+	}
     }
-  
 }
 
 //void US_XpnDataViewer::retrieve_xpn_raw_auto( QString & RunID )

Modified: trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.h
===================================================================
--- trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.h	2019-05-22 03:37:32 UTC (rev 2775)
+++ trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.h	2019-05-27 23:58:24 UTC (rev 2776)
@@ -284,6 +284,7 @@
      QString        invID_passed;
      QString        correctRadii;
      QString        expAborted;
+     QString        runID_passed;
 
      QMap < QString, QString > details_at_live_update; 
 



More information about the us-commits mailing list