void OutputTraceChunks(GridMesh<TraceChunk> &traceChunks, const char *fileName) { //ofstream out("flow_0_data_chunks.txt"); ofstream out(fileName); int rowStart,rowEnd,colStart, colEnd; // for (size_t bIx = 0; bIx < traceChunks.GetNumBin(); bIx++) { for (size_t bIx = 0; bIx < 1; bIx++) { traceChunks.GetBinCoords(bIx, rowStart, rowEnd, colStart, colEnd); TraceChunk &tc = traceChunks.GetItem(bIx); float sum = 0; for (int i = 0; i < tc.mTime.npts(); i++) { sum += tc.mTime.deltaFrameSeconds[i]; } for (int row = rowStart; row < rowEnd; row++) { for (int col = colStart; col < colEnd; col++) { out << row << "\t" << col; for (size_t frame = 0; frame < tc.mDepth; frame++) { out << "\t" << tc.At(row, col, frame); } out << endl; } } } out.close(); }
void Traces::CalcReference(int rowStep, int colStep, GridMesh<std::vector<float> > &gridReference) { gridReference.Init(mRow, mCol, rowStep, colStep); int numBin = gridReference.GetNumBin(); int rowStart = -1, rowEnd = -1, colStart = -1, colEnd = -1; for (int binIx = 0; binIx < numBin; binIx++) { gridReference.GetBinCoords(binIx, rowStart, rowEnd, colStart, colEnd); vector<float> &trace = gridReference.GetItem(binIx); CalcRegionReference(MaskEmpty, rowStart, rowEnd, colStart, colEnd, trace); } }
void OutputSigmaTmidEstimates(GridMesh<SigmaEst> &sigmaTMid, const char *fileName) { ofstream out(fileName); int rowStart,rowEnd,colStart, colEnd; out << "rowStar" << "\t" << "rowEnd" << "\t" << "colStart" << "\t" << "colEnd" << "\t" << "sigma.t0.est" << "\t" << "tmidnuc.t0.est" << "\t" << "t0.est" << "\t" << "rate" <<endl; for (size_t bIx = 0; bIx < sigmaTMid.GetNumBin(); bIx++) { sigmaTMid.GetBinCoords(bIx, rowStart, rowEnd, colStart, colEnd); SigmaEst &est = sigmaTMid.GetItem(bIx); out << rowStart << "\t" << rowEnd << "\t" << colStart << "\t" << colEnd << "\t" << est.mSigma << "\t" << est.mTMidNuc << "\t" << est.mT0 << "\t" << est.mRate << endl; } out.close(); }
void BFReference::FilterForOutliers(Image &bfImg, Mask &mask, float iqrThreshold, int rowStep, int colStep) { const RawImage *raw = bfImg.GetImage(); GridMesh<float> grid; grid.Init(raw->rows, raw->cols, rowStep, colStep); int numBin = grid.GetNumBin(); int rowStart = -1, rowEnd = -1, colStart = -1, colEnd = -1; for (int binIx = 0; binIx < numBin; binIx++) { grid.GetBinCoords(binIx, rowStart, rowEnd, colStart, colEnd); FilterRegionOutliers(bfImg, mask, iqrThreshold, rowStart, rowEnd, colStart, colEnd); } }
void BFReference::FillInReference(std::vector<char> &wells, std::vector<float> &metric, GridMesh<int> &grid, double minQuantile, double maxQuantile, int numWells) { int rStart = -1, rEnd = -1, cStart = -1, cEnd = -1; for (size_t bIx = 0; bIx < grid.GetNumBin(); bIx++) { grid.GetBinCoords(bIx, rStart, rEnd, cStart, cEnd); FillInRegionRef(rStart, rEnd, cStart, cEnd, metric, minQuantile, maxQuantile,numWells, wells); } }
void Traces::CalcIncorporationStartReference(int nRowStep, int nColStep, GridMesh<SampleStats<float> > &grid) { grid.Init(mRow, mCol, nRowStep, nColStep); int numBin = grid.GetNumBin(); int rowStart = -1, rowEnd = -1, colStart = -1, colEnd = -1; for (int binIx = 0; binIx < numBin; binIx++) { SampleStats<float> &startStat = grid.GetItem(binIx); grid.GetBinCoords(binIx, rowStart, rowEnd, colStart, colEnd); CalcIncorpBreakRegionStart(rowStart, rowEnd, colStart, colEnd, startStat); } }
void BFReference::CalcSignalReference2(const std::string &datFile, const std::string &bgFile, Mask &mask, int traceFrame) { Image bfImg; Image bfBkgImg; bfImg.SetImgLoadImmediate (false); bfBkgImg.SetImgLoadImmediate (false); bool loaded = bfImg.LoadRaw(datFile.c_str()); bool bgLoaded = bfBkgImg.LoadRaw(bgFile.c_str()); if (!loaded) { ION_ABORT("*Error* - No beadfind file found, did beadfind run? are files transferred? (" + datFile + ")"); } if (!bgLoaded) { ION_ABORT("*Error* - No beadfind background file found, did beadfind run? are files transferred? (" + bgFile + ")"); } const RawImage *raw = bfImg.GetImage(); assert(raw->cols == GetNumCol()); assert(raw->rows == GetNumRow()); assert(raw->cols == mask.W()); assert(raw->rows == mask.H()); int StartFrame = bfImg.GetFrame(-663); //5 int EndFrame = bfImg.GetFrame(350); //20 int NNinnerx = 1, NNinnery = 1, NNouterx = 12, NNoutery = 8; cout << "DC start frame: " << StartFrame << " end frame: " << EndFrame << endl; bfImg.FilterForPinned(&mask, MaskEmpty, false); bfImg.XTChannelCorrect(); // bfImg.XTChannelCorrect(&mask); Traces trace; trace.Init(&bfImg, &mask, FRAMEZERO, FRAMELAST, FIRSTDCFRAME,LASTDCFRAME); bfImg.Normalize(StartFrame, EndFrame); if (mDoRegionalBgSub) { trace.SetMeshDist(0); } trace.CalcT0(true); if (mDoRegionalBgSub) { GridMesh<float> grid; grid.Init(raw->rows, raw->cols, mRegionYSize, mRegionXSize); int numBin = grid.GetNumBin(); int rowStart = -1, rowEnd = -1, colStart = -1, colEnd = -1; for (int binIx = 0; binIx < numBin; binIx++) { cout << "BG Subtract Region: " << binIx << endl; grid.GetBinCoords(binIx, rowStart, rowEnd, colStart, colEnd); Region reg; reg.row = rowStart; reg.h = rowEnd - rowStart; reg.col = colStart; reg.w = colEnd - colStart; bfImg.BackgroundCorrectRegion(&mask, reg, MaskAll, MaskEmpty, NNinnerx, NNinnery, NNouterx, NNoutery, NULL); } } else { bfImg.BackgroundCorrect(&mask, MaskEmpty, MaskEmpty, NNinnerx, NNinnery, NNouterx, NNoutery, NULL); } int length = GetNumRow() * GetNumCol(); mBfMetric.resize(length, std::numeric_limits<double>::signaling_NaN()); for (int wIx = 0; wIx < length; wIx++) { if (mask[wIx] & MaskExclude || mask[wIx] & MaskPinned) continue; int t0 = (int)trace.GetT0(wIx); mBfMetric[wIx] = 0; float zSum = 0; int count = 0; for (int fIx = min(t0-20, 0); fIx < t0-10; fIx++) { zSum += bfImg.At(wIx,fIx); count ++; } for (int fIx = t0+3; fIx < t0+15; fIx++) { mBfMetric[wIx] += (bfImg.At(wIx,fIx) - (zSum / count)); } } bfImg.Close(); for (int i = 0; i < length; i++) { if (mask[i] & MaskExclude || mWells[i] == Exclude) { mWells[i] = Exclude; } else { mask[i] = MaskIgnore; } } cout << "Filling reference. " << endl; FillInReference(mWells, mBfMetric, mGrid, mMinQuantile, mMaxQuantile, mNumEmptiesPerRegion); for (int i = 0; i < length; i++) { if (mWells[i] == Reference) { mask[i] = MaskEmpty; } } }
void BFReference::CalcReference(const std::string &datFile, Mask &mask, std::vector<float> &metric) { Image bfImg; bfImg.SetImgLoadImmediate (false); bool loaded = bfImg.LoadRaw(datFile.c_str()); if (!loaded) { ION_ABORT("*Error* - No beadfind file found, did beadfind run? are files transferred? (" + datFile + ")"); } const RawImage *raw = bfImg.GetImage(); assert(raw->cols == GetNumCol()); assert(raw->rows == GetNumRow()); assert(raw->cols == mask.W()); assert(raw->rows == mask.H()); if (!mDebugFile.empty()) { DebugTraces(mDebugFile, mask, bfImg); } bfImg.FilterForPinned(&mask, MaskEmpty, false); // int StartFrame= bfImg.GetFrame((GetDcStart()*1000/15)-1000); // int EndFrame = bfImg.GetFrame((GetDcEnd()*1000/15)-1000); int StartFrame = bfImg.GetFrame(-663); //5 int EndFrame = bfImg.GetFrame(350); //20 cout << "DC start frame: " << StartFrame << " end frame: " << EndFrame << endl; bfImg.XTChannelCorrect(); FilterForOutliers(bfImg, mask, mIqrOutlierMult, mRegionYSize, mRegionXSize); bfImg.Normalize(StartFrame, EndFrame); // bfImg.XTChannelCorrect(&mask); int NNinnerx = 1, NNinnery = 1, NNouterx = 12, NNoutery = 8; if (mDoRegionalBgSub) { GridMesh<float> grid; grid.Init(raw->rows, raw->cols, mRegionYSize, mRegionXSize); int numBin = grid.GetNumBin(); int rowStart = -1, rowEnd = -1, colStart = -1, colEnd = -1; for (int binIx = 0; binIx < numBin; binIx++) { grid.GetBinCoords(binIx, rowStart, rowEnd, colStart, colEnd); Region reg; reg.row = rowStart; reg.h = rowEnd - rowStart; reg.col = colStart; reg.w = colEnd - colStart; bfImg.BackgroundCorrectRegion(&mask, reg, MaskAll, MaskEmpty, NNinnerx, NNinnery, NNouterx, NNoutery, NULL); } } else { bfImg.BackgroundCorrect(&mask, MaskEmpty, MaskEmpty, NNinnerx, NNinnery, NNouterx, NNoutery, NULL); } Region region; region.col = 0; region.row = 0; region.w = GetNumCol(); //mGrid.GetColStep(); region.h = GetNumRow(); // mGrid.GetRowStep(); int startFrame = bfImg.GetFrame(12); // frame 15 on uncompressed 314 // int endFrame = bfImg.GetFrame(raw->timestamps[bfImg.Ge]5300); // frame 77 or so int endFrame = bfImg.GetFrame(5000); // frame 77 or so bfImg.CalcBeadfindMetric_1(&mask, region, "pre", startFrame, endFrame); const double *results = bfImg.GetResults(); int length = GetNumRow() * GetNumCol(); metric.resize(length); copy(&results[0], &results[0] + (length), metric.begin()); bfImg.Close(); }