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); } } } }
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"; } }
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()); }