public static Data Load(string folder) { var frequencies = FitsIO.ReadFrequencies(Path.Combine(folder, "freq.fits")); var uvw = FitsIO.ReadUVW(Path.Combine(folder, "uvw0.fits")); var flags = FitsIO.ReadFlags(Path.Combine(folder, "flags0.fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length); double norm = 2.0; var visibilities = FitsIO.ReadVisibilities(Path.Combine(folder, "vis0.fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length, norm); for (int i = 1; i < 8; i++) { var uvw0 = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + i + ".fits")); var flags0 = FitsIO.ReadFlags(Path.Combine(folder, "flags" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length); var visibilities0 = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length, norm); uvw = FitsIO.Stitch(uvw, uvw0); flags = FitsIO.Stitch(flags, flags0); visibilities = FitsIO.Stitch(visibilities, visibilities0); } var visCount2 = 0; for (int i = 0; i < flags.GetLength(0); i++) { for (int j = 0; j < flags.GetLength(1); j++) { for (int k = 0; k < flags.GetLength(2); k++) { if (!flags[i, j, k]) { visCount2++; } } } } var visibilitiesCount = visCount2; var d = new Data(); d.frequencies = frequencies; d.visibilities = visibilities; d.uvw = uvw; d.flags = flags; d.visibilitiesCount = visibilitiesCount; return(d); }
public static MeasurementData LoadLMC(string folder) { var frequencies = FitsIO.ReadFrequencies(Path.Combine(folder, "freq.fits")); var uvw = FitsIO.ReadUVW(Path.Combine(folder, "uvw0.fits")); var flags = FitsIO.ReadFlags(Path.Combine(folder, "flags0.fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length); double norm = 2.0; var visibilities = FitsIO.ReadVisibilities(Path.Combine(folder, "vis0.fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length, norm); for (int i = 1; i < 8; i++) { var uvw0 = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + i + ".fits")); var flags0 = FitsIO.ReadFlags(Path.Combine(folder, "flags" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length); var visibilities0 = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length, norm); uvw = FitsIO.Stitch(uvw, uvw0); flags = FitsIO.Stitch(flags, flags0); visibilities = FitsIO.Stitch(visibilities, visibilities0); } return(new MeasurementData(visibilities, uvw, frequencies, flags)); }
public static LocalDataset LoadTinyMeerKAT(Intracommunicator comm, string folder) { var beginIdx = comm.Rank * 8 / comm.Size; var frequencies = FitsIO.ReadFrequencies(Path.Combine(folder, "freq.fits")); var uvw = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + comm.Rank + ".fits")); var flags = FitsIO.ReadFlags(Path.Combine(folder, "flags" + comm.Rank + ".fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length); var visibilities = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + comm.Rank + ".fits"), uvw.GetLength(0), uvw.GetLength(1), frequencies.Length, 2.0); for (int i = beginIdx + 1; i < beginIdx + 8 / comm.Size; i++) { var uvw0 = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + i + ".fits")); var flags0 = FitsIO.ReadFlags(Path.Combine(folder, "flags" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length); var visibilities0 = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + i + ".fits"), uvw0.GetLength(0), uvw0.GetLength(1), frequencies.Length, 2.0); uvw = FitsIO.Stitch(uvw, uvw0); flags = FitsIO.Stitch(flags, flags0); visibilities = FitsIO.Stitch(visibilities, visibilities0); } return(new LocalDataset(frequencies, uvw, flags, visibilities)); }
public static LocalDataset LoadTinyMeerKAT2(int rank, int nodeCount, string folder) { var blSum = 0; var blFileScans = new int[8]; var blFileCounts = new int[8]; for (int i = 0; i < 8; i++) { blFileCounts[i] = FitsIO.CountBaselines(Path.Combine(folder, "uvw" + i + ".fits")); blSum += blFileCounts[i]; blFileScans[i] = blSum; } var frequencies = FitsIO.ReadFrequencies(Path.Combine(folder, "freq.fits")); var blBeginIdx = rank * (int)(blSum / (double)nodeCount); var blEndIdx = rank + 1 < nodeCount ? (rank + 1) * (int)(blSum / (double)nodeCount) : blSum; var baselineCount = blEndIdx - blBeginIdx; LocalDataset output = null; for (int i = 0; i < 8; i++) { if (blBeginIdx < blFileScans[i]) { var blBefore = i > 0 ? blFileScans[i - 1] : 0; var start = blBeginIdx - blBefore; var end = Math.Min(start + baselineCount, blFileCounts[i]); var uvw = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + i + ".fits"), start, end); var flags = FitsIO.ReadFlags(Path.Combine(folder, "flags" + i + ".fits"), start, end, uvw.GetLength(1), frequencies.Length); var visibilities = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + i + ".fits"), start, end, uvw.GetLength(1), frequencies.Length, 2.0); if (blBeginIdx + baselineCount > blFileCounts[i]) { //continue reading files until all baselines, which belong to the current node, are loaded var baselinesLoaded = end - start; for (int j = i + 1; j < 8; j++) { var end2 = Math.Min(baselineCount - baselinesLoaded, blFileCounts[j]); var uvw0 = FitsIO.ReadUVW(Path.Combine(folder, "uvw" + j + ".fits"), 0, end2); var flags0 = FitsIO.ReadFlags(Path.Combine(folder, "flags" + j + ".fits"), 0, end2, uvw.GetLength(1), frequencies.Length); var visibilities0 = FitsIO.ReadVisibilities(Path.Combine(folder, "vis" + j + ".fits"), 0, end2, uvw.GetLength(1), frequencies.Length, 2.0); uvw = FitsIO.Stitch(uvw, uvw0); flags = FitsIO.Stitch(flags, flags0); visibilities = FitsIO.Stitch(visibilities, visibilities0); baselinesLoaded += end2; if (baselinesLoaded >= baselineCount) { //last file read; break; } } } output = new LocalDataset(frequencies, uvw, flags, visibilities); break; } } return(output); }