Example #1
0
int main(){
	for(int n=1;n<=4;n++) {
		auto pairs = random_pairs(n);
		std::vector<double> omegars(n);
		transform(pairs.begin(),pairs.end(),omegars.begin(),[](spin_pair p){return p.omegar();});
		for(auto &cor:omegars) {
			double ratios[3] = { 0.9,1,1.1 };
			for(auto &ratio:ratios) {
				double w1 = cor*ratio;
				stringstream fnstream;
				fnstream << "n=" << n << ",w1=" << w1/1_MHz << "MHz.txt";
				string suffix = fnstream.str();
				ofstream pairs_out(string("pairs-")+suffix);
				ofstream pes_out(string("pes-")+suffix);
				pairs_simulation(w1,pairs,pairs_out);
				pes_simulation(w1,pairs,pes_out);
			}
		}
	}
}
Example #2
0
void PairFinder::saveFile()
{
    QFile pairs_out(outputFile);
    pairs_out.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out(&pairs_out);
    sdmixer::Localization loc;

    for( int i = 0; i < numpairs; ++i)
    {
        for(int j = 0; j < dimensions; ++j)
        {
            out << loc.getShortDim(i) << " ";
        }
        out << loc.ShortIntensity << " ";
        out << loc.frame << " ";
        for(int j = 0; j < dimensions; ++j)
        {
            out << loc.getLongDim(i) << " ";
        }
        out << loc.LongIntensity << "\n";
    }

}
Example #3
0
void PairFinder::FindPairs(bool fishing, int last_frame)
{

    std::vector<int> grouped_rows;

    QFile pairs_out(outputFile);
    QTextStream out(&pairs_out);

    if(!fishing)
    {
        qDebug()<<"searching for pairs...";
        pairs_out.open(QIODevice::WriteOnly | QIODevice::Text);
        writeHeader(out);
    }


    int number_unpaired = 0;
    std::vector<UnpairedLocalization> unpaired_vec;

    numpairs=0;
    int curr_row=0;
    int increment = 1;
    int endrow = 0;

    if (last_frame == -1 || last_frame >= rawDataRows)
        endrow = rawDataRows;
    else
        endrow = last_frame;

    std::vector<int> pair_row_id;

    while (curr_row < endrow-1)
    {
        /*qDebug() << "curr_row: " << curr_row;
        qDebug() << "increment: " << increment;*/
        sdmixer::Localization loc;

            //qDebug() << input[curr_row*rawDataCols+FrameColumn];
            //qDebug() << input[(curr_row+increment)*rawDataCols+FrameColumn];
        //if( input[curr_row*rawDataCols+FrameColumn] == input[(curr_row+increment)*rawDataCols+FrameColumn] )
        //if(curr_row+increment < rawDataRows)
        if( input[curr_row][FrameColumn] == input[curr_row+increment][FrameColumn] )
        {
            double EllipsoidSumR=0;
            double EllipsoidSumL=0;
                //qDebug() << curr_row;
                //qDebug() << curr_row+increment;
            for (int d = 0; d < dimensions; ++d)
            {
                //double tempL = ((input[curr_row*rawDataCols + d] - Offset[d]) - input[(curr_row+increment)*rawDataCols+d]);
                //double tempR = (input[(curr_row+increment)*rawDataCols+d] - Offset[d]) - input[curr_row*rawDataCols + d];
                double tempL = ((input[curr_row][d] - Offset[d]) - input[curr_row+increment][d]);
                double tempR = (input[curr_row+increment][d] - Offset[d]) - input[curr_row][d];

                //qDebug() <<"tempL: "<< tempL;
                    //qDebug() << "tempR: " << tempR;

                tempL*=tempL;
                tempR*=tempR;
                tempL/=(Epsilon[d]*Epsilon[d]);
                tempR/=(Epsilon[d]*Epsilon[d]);
                EllipsoidSumL += tempL;
                EllipsoidSumR += tempR;
            }
            if (EllipsoidSumL <= 1 || EllipsoidSumR <= 1)
            {
                pair_row_id.push_back(curr_row);
                pair_row_id.push_back(curr_row+increment);
                //qDebug() << "saved " << curr_row << " & " << curr_row+increment;

                ++numpairs;
                    //qDebug() << EllipsoidSumL << " @ " << curr_row << " & " << (curr_row+increment);
                    //qDebug() << EllipsoidSumR << " @ " << curr_row << " & " << (curr_row+increment);

                int compare_col;
                if(LeftRight)
                    compare_col = xCol;
                else
                    compare_col = yCol;
                bool factorShort;
                if(ShortChannel == 1)
                {
                        //if(input[curr_row*rawDataCols+compare_col] < input[(curr_row+increment)*rawDataCols+compare_col])
                    if(input[curr_row][compare_col] < input[curr_row+increment][compare_col])
                            factorShort = false;
                        else
                            factorShort = true;
                }
                else
                {
                    //if(input[curr_row*rawDataCols+compare_col] < input[(curr_row+increment)*rawDataCols+compare_col])
                    if(input[curr_row][compare_col] < input[curr_row+increment][compare_col])
                        factorShort = true;
                    else
                        factorShort = false;
                }
                /*loc.xShort=input[(curr_row+factorShort*increment)*rawDataCols+xCol];
                loc.yShort=input[(curr_row+factorShort*increment)*rawDataCols+yCol];
                if(dimensions>2)
                    loc.zShort=input[(curr_row+factorShort*increment)*rawDataCols+zCol];
                loc.ShortIntensity=input[(curr_row+factorShort*increment)*rawDataCols+IntensityColumn];
                loc.frame = input[curr_row*rawDataCols+FrameColumn];
                loc.xLong=input[(curr_row+(!factorShort)*increment)*rawDataCols+xCol];
                loc.yLong=input[(curr_row+(!factorShort)*increment)*rawDataCols+yCol];
                if(dimensions>2)
                    loc.zLong=input[(curr_row+(!factorShort)*increment)*rawDataCols+zCol];
                loc.LongIntensity=input[(curr_row+(!factorShort)*increment)*rawDataCols+IntensityColumn];
*/
                loc.xShort=input[curr_row+factorShort*increment][xCol];
                loc.yShort=input[curr_row+factorShort*increment][yCol];
                if(dimensions>2)
                    loc.zShort=input[curr_row+factorShort*increment][zCol];
                loc.ShortIntensity=input[curr_row+factorShort*increment][IntensityColumn];
                loc.frame = input[curr_row][FrameColumn];
                loc.xLong=input[curr_row+(!factorShort)*increment][xCol];
                loc.yLong=input[curr_row+(!factorShort)*increment][yCol];
                if(dimensions>2)
                    loc.zLong=input[curr_row+(!factorShort)*increment][zCol];
                loc.LongIntensity=input[curr_row+(!factorShort)*increment][IntensityColumn];

                if(!fishing)
                {
                    sdm->pushBackLocalization(loc);
                    if(runGrouping)
                        grouping_input.push_back(loc);

                    for(int ii = 0; ii < dimensions; ++ii)
                    {
                        out << loc.getShortDim(ii) << " ";
                    }
                    out << loc.ShortIntensity << " ";
                    out << loc.frame << " ";
                    for(int jj = 0; jj < dimensions; ++jj)
                    {
                        out << loc.getLongDim(jj) << " ";
                    }
                    out << loc.LongIntensity << "\n";
                }
                else
                {
                    fishing_run current_run;
                    for(int ii = 0; ii < dimensions; ++ii)
                        current_run.setOffset(ii, Offset[ii]);


                    current_run.numpairs = numpairs;
                    fishing_results.push_back(current_run);
                }
                grouped_rows.push_back(curr_row);
                grouped_rows.push_back(curr_row+increment);

            }
            if ((curr_row+increment) < rawDataRows - 1)
                increment++;
            else
            {
                curr_row++;
                increment = 1;
            }
        }
        else
        {
            curr_row++;
            increment = 1;
        }
    }
    if(numpairs!=0 && !fishing)
    {
        std::sort ( grouped_rows.begin(), grouped_rows.end() );
        multiple_counter = std::abs(std::distance(std::unique ( grouped_rows.begin(), grouped_rows.end()), grouped_rows.end()));
        std::stringstream ss;
        ss << "found " << multiple_counter << " multiple pairs.";

        sdm->writeToLogFile(QString::fromStdString(ss.str()));
        qDebug() << "found " << multiple_counter << " multiple pairs." ;
    }
    if(!fishing)
        pairs_out.close();

    if(UnpairedOut && !fishing)
    {
        for (int nrow = 0; nrow < rawDataRows; ++nrow)
        {
            if(std::find(pair_row_id.begin(), pair_row_id.end(), nrow)==pair_row_id.end())
            {
                //qDebug() << nrow;

                UnpairedLocalization uloc;
                for(int ii = 0; ii < dimensions; ++ii)
                    uloc.set(ii, input[nrow][ii]);
                uloc.frame=input[nrow][FrameColumn];
                uloc.intensity=input[nrow][IntensityColumn];

                unpaired_vec.push_back(uloc);
                number_unpaired++;
            }
        }
        std::stringstream ss;
        ss << "found " << number_unpaired << " unpaired localizations.";

        sdm->writeToLogFile(QString::fromStdString(ss.str()));
        qDebug() << "found " << number_unpaired << " unpaired localizations.";

        QFile unpaired_out(unpairedFile);
        unpaired_out.open(QIODevice::WriteOnly | QIODevice::Text);
        QTextStream out(&unpaired_out);
        out << header << "\n";

        UnpairedLocalization loc;

        for( int i = 0; i < number_unpaired; ++i)
        {
            loc = unpaired_vec[i];
            for(int j = 0; j < dimensions; ++j)
            {
                out << loc.get(j) << " ";
            }
            out << loc.frame << " ";
            out << loc.intensity << "\n";
        }
        unpaired_out.close();
    }


    //sdmixer::log(sdm, os.str());

}