Example #1
0
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();

}
Example #2
0
File: daemon.cpp Project: spito/dp
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;
}