예제 #1
0
            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);
        }