Skip to content

Commit

Permalink
Merge pull request #22675 from ggovi/condtools-runinfo-fix-0-10_1_X
Browse files Browse the repository at this point in the history
Bug fix in the processing of RunInfo O2O magnet current
  • Loading branch information
cmsbuild committed Mar 20, 2018
2 parents 92a1e7b + d54b9a8 commit 0a4b454
Showing 1 changed file with 37 additions and 32 deletions.
69 changes: 37 additions & 32 deletions CondTools/RunInfo/src/RunInfoRead.cc
Expand Up @@ -249,44 +249,17 @@ RunInfoRead::readData( const std::string & runinfo_schema
coral::TimeStamp lastCurrentDate;
std::string last_date;
std::vector<double> time_curr;
if ( !magnetCurrentCursor.next() ) {
// we should deal with stable currents... so the query is returning no value and we should take the last modified current value...
edm::LogInfo( "RunInfoReader" ) << "[RunInfoRead::" << __func__ << "]: The magnet current did not change during run " << r_number
<< ". Looking for the most recent change before " << temp_sum.m_stop_time_str << std::endl;
Bnotchanged = true;
std::unique_ptr<coral::IQuery> lastValueQuery( schema2.tableHandle(sDCSMagnetTable).newQuery() );
lastValueQuery->addToOutputList( squoted(sDCSMagnetCurrentColumn), sDCSMagnetCurrentColumn );
lastValueQuery->defineOutputType( sDCSMagnetCurrentColumn, "float" );
coral::AttributeList lastValueBindVariableList;
lastValueBindVariableList.extend<coral::TimeStamp>( "runstop_time" );
lastValueBindVariableList[ "runstop_time" ].data<coral::TimeStamp>() = stop;
std::string lastValueWhereClause( std::string( " NOT " ) + squoted(sDCSMagnetCurrentColumn) + std::string( " IS NULL AND " )
+ sDCSMagnetChangeDateColumn + std::string( " <:runstop_time" ) );
lastValueQuery->setCondition( lastValueWhereClause, lastValueBindVariableList );
lastValueQuery->addToOrderList( sDCSMagnetChangeDateColumn + std::string( " DESC" ) );
coral::ICursor& lastValueCursor = lastValueQuery->execute();
if( lastValueCursor.next() ) {
std::ostringstream oslastvaluedebug;
lastValueCursor.currentRow().toOutputStream( oslastvaluedebug );
LogDebug( "RunInfoReader" ) << oslastvaluedebug.str() << std::endl;
const coral::AttributeList& row = lastValueCursor.currentRow();
last_current = row[sDCSMagnetCurrentColumn].data<float>();
edm::LogInfo( "RunInfoReader" ) << "[RunInfoRead::" << __func__ << "]: Magnet current of previos run(s), not changed during run " << r_number
<< ": " << last_current << std::endl;
}
temp_sum.m_avg_current = last_current;
temp_sum.m_min_current = last_current;
temp_sum.m_max_current = last_current;
temp_sum.m_stop_current = last_current;
temp_sum.m_start_current = last_current;
}

bool changeFound = false;
// first process the changes found within the run boundaries
while( magnetCurrentCursor.next() ) {
std::ostringstream oscurrentdebug;
magnetCurrentCursor.currentRow().toOutputStream( oscurrentdebug );
LogDebug( "RunInfoReader" ) << oscurrentdebug.str() << std::endl;
const coral::AttributeList& row = magnetCurrentCursor.currentRow();
lastCurrentDate = row[sDCSMagnetChangeDateColumn].data<coral::TimeStamp>();
temp_sum.m_current.push_back( row[sDCSMagnetCurrentColumn].data<float>() );
changeFound = true;
if(temp_sum.m_stop_time_str == "null") break;
LogDebug( "RunInfoReader" ) << " last current time extracted == "
<< "-->year " << lastCurrentDate.year()
Expand All @@ -310,7 +283,39 @@ RunInfoRead::readData( const std::string & runinfo_schema
<< "Microseconds since Epoch (UTC) for the transition timestamp: " << last_date_ll;
edm::LogInfo( "RunInfoReader" ) << ostrans.str() << std::endl;
}


// if not change is found within run boundaries, search for the most recent change
if ( !changeFound ){
// we should deal with stable currents... so the query is returning no value and we should take the last modified current value...
edm::LogInfo( "RunInfoReader" ) << "[RunInfoRead::" << __func__ << "]: The magnet current did not change during run " << r_number
<< ". Looking for the most recent change before " << temp_sum.m_stop_time_str << std::endl;
Bnotchanged = true;
std::unique_ptr<coral::IQuery> lastValueQuery( schema2.tableHandle(sDCSMagnetTable).newQuery() );
lastValueQuery->addToOutputList( squoted(sDCSMagnetCurrentColumn), sDCSMagnetCurrentColumn );
lastValueQuery->defineOutputType( sDCSMagnetCurrentColumn, "float" );
coral::AttributeList lastValueBindVariableList;
lastValueBindVariableList.extend<coral::TimeStamp>( "runstop_time" );
lastValueBindVariableList[ "runstop_time" ].data<coral::TimeStamp>() = stop;
std::string lastValueWhereClause( std::string( " NOT " ) + squoted(sDCSMagnetCurrentColumn) + std::string( " IS NULL AND " )
+ sDCSMagnetChangeDateColumn + std::string( " <:runstop_time" ) );
lastValueQuery->setCondition( lastValueWhereClause, lastValueBindVariableList );
lastValueQuery->addToOrderList( sDCSMagnetChangeDateColumn + std::string( " DESC" ) );
coral::ICursor& lastValueCursor = lastValueQuery->execute();
if( lastValueCursor.next() ) {
std::ostringstream oslastvaluedebug;
lastValueCursor.currentRow().toOutputStream( oslastvaluedebug );
LogDebug( "RunInfoReader" ) << oslastvaluedebug.str() << std::endl;
const coral::AttributeList& row = lastValueCursor.currentRow();
last_current = row[sDCSMagnetCurrentColumn].data<float>();
edm::LogInfo( "RunInfoReader" ) << "[RunInfoRead::" << __func__ << "]: Magnet current of previos run(s), not changed during run " << r_number
<< ": " << last_current << std::endl;
}
temp_sum.m_avg_current = last_current;
temp_sum.m_min_current = last_current;
temp_sum.m_max_current = last_current;
temp_sum.m_stop_current = last_current;
temp_sum.m_start_current = last_current;
}
size_t csize = temp_sum.m_current.size();
size_t tsize = time_curr.size();
edm::LogInfo( "RunInfoReader" ) << "[RunInfoRead::" << __func__ << "]: size of time: " << tsize
Expand Down

0 comments on commit 0a4b454

Please sign in to comment.