void ParseWell(size_t rowIx, size_t colIx, size_t regionIx, vector<int> &match, Mask &mask, int maskCenter, int maskMatch, vector<Traces> &flows, ostream &out, int frameStart, int frameEnd) { int idx = mask.ToIndex(rowIx, colIx); if ((mask[idx] & maskCenter) == 0) { return; } centerSeen++; vector<int> wells; vector<float> trace; mask.GetNeighbors(rowIx, colIx, wells); ION_ASSERT(wells.size() == match.size(), "Wells don't match string."); if (PatternMatch(match, wells, mask, maskMatch)) { out <<rowIx << "\t" << colIx << "\t" << idx << "\t" << regionIx << "\t"; for (size_t i = 0; i < wells.size(); i++) { int full = ((mask[wells[i]] & maskMatch) > 0) ? 1 : 0; out << full; } for (size_t i = 0; i < flows.size(); i++) { flows[i].GetTraces(idx, trace); float sum = 0; for (int fIx = frameStart; fIx < frameEnd; fIx++) { sum += trace[fIx]; } sum = sum / (frameEnd - frameStart); out << "\t" << sum; } for (size_t i = 0; i < flows.size(); i++) { out << "\t" << flows[i].GetT0(idx); } out << endl; } }