void PairFinder::doWork() { qDebug()<<"started file loading in new thread"; loadInputFile(); std::stringstream ss1, ss2; ss1 << "Offset (nm): "; ss2 << "Offset (px): "; for (int i = 0; i < dimensions; ++i) { ss1 << Offset[i] << " "; ss2 << Offset[i]/NM_PER_PX << " "; } sdm->writeToLogFile(QString::fromStdString(ss1.str())); sdm->writeToLogFile(QString::fromStdString(ss2.str())); if(canceled) { sdm->setStartDemixingButtonEnabled(true); emit finished(); return; } if(fishing_settings.run) { sdm->writeToLogFile("searching optimal offset"); qDebug() << "starting fishing"; /*if(fishing_settings.range > min_maxValues.max_x) { fishing_settings.range = min_maxValues.max_x/10; if(fishing_settings.range > min_maxValues.max_y) fishing_settings.range = min_maxValues.max_y/10; }*/ double minOffsetX = Offset[0]-(fishing_settings.range/2); double minOffsetY = Offset[1]-(fishing_settings.range/2); double maxOffsetX = Offset[0]+(fishing_settings.range/2); double maxOffsetY = Offset[1]+(fishing_settings.range/2); int counterX = 0; int counterY = 0; while(Offset[0]<maxOffsetX) { Offset[0] = minOffsetX + fishing_settings.increment*counterX; while(Offset[1]<maxOffsetY) { Offset[1] = minOffsetY + fishing_settings.increment*counterY; //qDebug() << "current Offset : " << Offset[0] << " " << Offset[1]; FindPairs(true, fishing_settings.subset); counterY++; } Offset[1]=minOffsetY; counterY=0; counterX++; } int index = 0; fishing_run max_pairs; std::vector<fishing_run>::iterator it; for( it = fishing_results.begin(); it != fishing_results.end(); ++it ) { fishing_run current_result = *it; if (index == 0) { max_pairs = current_result; } if(max_pairs.numpairs < current_result.numpairs) max_pairs = current_result; ++index; } std::stringstream ss1, ss2; ss1 << "new Offset (nm): "; ss2 << "new Offset (px): "; for (int i = 0; i < dimensions; ++i) { //new Offset: Offset[i] = max_pairs.getOffset(i); qDebug() << "new Offset : " << Offset[i]; ss1 << Offset[i] << " "; ss2 << Offset[i]/NM_PER_PX << " "; } sdm->writeToLogFile(QString::fromStdString(ss1.str())); sdm->writeToLogFile(QString::fromStdString(ss2.str())); } FindPairs(false); qDebug() << "found " << numpairs << " pairs"; if ( numpairs == 0) { //QMessageBox msgBox; // msgBox.setText(""); // msgBox.critical(0,"SDmixer Error","No pairs found! Please check input file and offset settings."); /*int ret = msgBox.exec(); if(ret == QMessageBox::Ok)*/ emit error("No pairs found! Please check input file and offset settings."); return; } std::ostringstream os; os << "found " << numpairs << " pairs." ; sdm->writeToLogFile(QString::fromStdString(os.str())); if(runGrouping) { qDebug() << "starting grouping"; sdm->writeToLogFile("starting Grouping"); startGrouping(); } sdm->setPF_min_maxValues(min_maxValues); //saveFile(); emit finished(); }
bool Daemon::processControl( Channel channel ) { InputMessage message; channel->peek( message ); auto cleanup = [&] { channel->receiveHeader( message ); }; Code code = message.tag< Code >(); switch ( code ) { case Code::Enslave: enslave( message, std::move( channel ) ); break; case Code::Disconnect: cleanup(); release( std::move( channel ) ); return false; case Code::Peers: startGrouping( message, std::move( channel ) ); break; case Code::ConnectTo: connecting( message, std::move( channel ) ); break; case Code::Join: join( message, std::move( channel ) ); break; case Code::DataLine: addDataLine( message, std::move( channel ) ); break; case Code::Grouped: cleanup(); grouped( std::move( channel ) ); break; case Code::InitialData: initData( message, std::move( channel ) ); break; case Code::Run: run( message, std::move( channel ) ); break; case Code::PrepareToLeave: cleanup(); prepare( std::move( channel ) ); break; case Code::CutRope: cleanup(); cutRope( std::move( channel ) ); break; case Code::Leave: cleanup(); leave( std::move( channel ) ); break; case Code::Error: cleanup(); error( std::move( channel ) ); break; case Code::Renegade: renegade( message, std::move( channel ) ); break; case Code::Status: cleanup(); status( std::move( channel ) ); break; case Code::Shutdown: cleanup(); shutdown( std::move( channel ) ); break; case Code::ForceShutdown: cleanup(); forceShutdown(); break; case Code::ForceReset: cleanup(); forceReset(); return false; default: cleanup(); throw ResponseException( { Code::Enslave, Code::Disconnect, Code::Peers, Code::ConnectTo, Code::Join, Code::DataLine, Code::Grouped, Code::InitialData, Code::Run, Code::PrepareToLeave, Code::Leave, Code::CutRope, Code::Error, Code::Renegade, Code::Shutdown, Code::ForceShutdown, Code::ForceReset, }, code ); break; } return true; }