source: trunk/external/atnf/PKSIO/PKSreader.cc@ 1705

Last change on this file since 1705 was 1452, checked in by Malte Marquarding, 16 years ago

update from livedata CVS

File size: 5.8 KB
RevLine 
[1325]1//#---------------------------------------------------------------------------
2//# PKSreader.cc: Class to read Parkes multibeam data.
3//#---------------------------------------------------------------------------
[1427]4//# Copyright (C) 2000-2008
[1325]5//# Associated Universities, Inc. Washington DC, USA.
6//#
7//# This library is free software; you can redistribute it and/or modify it
8//# under the terms of the GNU Library General Public License as published by
9//# the Free Software Foundation; either version 2 of the License, or (at your
10//# option) any later version.
11//#
12//# This library is distributed in the hope that it will be useful, but WITHOUT
13//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
15//# License for more details.
16//#
17//# You should have received a copy of the GNU Library General Public License
18//# along with this library; if not, write to the Free Software Foundation,
19//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
20//#
21//# Correspondence concerning AIPS++ should be addressed as follows:
22//# Internet email: aips2-request@nrao.edu.
23//# Postal address: AIPS++ Project Office
24//# National Radio Astronomy Observatory
25//# 520 Edgemont Road
26//# Charlottesville, VA 22903-2475 USA
27//#
[1452]28//# $Id: PKSreader.cc,v 19.12 2008-11-17 06:58:07 cal103 Exp $
[1325]29//#---------------------------------------------------------------------------
30//# Original: 2000/08/23, Mark Calabretta, ATNF
31//#---------------------------------------------------------------------------
32
33#include <atnf/PKSIO/PKSreader.h>
34#include <atnf/PKSIO/PKSFITSreader.h>
35
36#ifndef NOPKSMS
37#include <atnf/PKSIO/PKSMS2reader.h>
38#endif
39
40#include <casa/IO/RegularFileIO.h>
41#include <casa/OS/File.h>
42
43//--------------------------------------------------------------- getPKSreader
44
45// Return an appropriate PKSreader for a Parkes Multibeam dataset.
46
47PKSreader* getPKSreader(
48 const String name,
49 const Int retry,
50 const Int interpolate,
[1452]51 String &format)
[1325]52{
53 // Check accessibility of the input.
54 File inFile(name);
55 if (!inFile.exists()) {
56 format = "DATASET NOT FOUND";
[1452]57 return 0x0;
[1325]58 }
59
60 if (!inFile.isReadable()) {
61 format = "DATASET UNREADABLE";
[1452]62 return 0x0;
[1325]63 }
64
65 // Determine the type of input.
[1452]66 PKSreader *reader = 0x0;
[1325]67 if (inFile.isRegular()) {
68 // Is it MBFITS or SDFITS?
[1427]69 if (strstr(name.chars(), ".sdfits")) {
70 // Looks like SDFITS, possibly gzip'd.
[1325]71 format = "SDFITS";
72 reader = new PKSFITSreader("SDFITS");
73
74 } else {
[1427]75 RegularFileIO file(name);
76 char buf[32];
77 file.read(30, buf, False);
78 buf[30] = '\0';
79 if (String(buf) == "SIMPLE = T") {
80 // Looks like SDFITS.
81 format = "SDFITS";
82 reader = new PKSFITSreader("SDFITS");
83
84 } else {
85 // Assume it's MBFITS.
86 format = "MBFITS";
87 reader = new PKSFITSreader("MBFITS", retry, interpolate);
88 }
[1325]89 }
90
91 } else if (inFile.isDirectory()) {
92 if (File(name + "/DATA_DESCRIPTION").exists()) {
93 // MS version 2.
94 #ifdef NOPKSMS
95 format = "MS2 INPUT FORMAT IS NO LONGER SUPPORTED";
96 #else
97 format = "MS2";
98 reader = new PKSMS2reader();
99 #endif
100 }
101
102 } else {
103 format = "UNRECOGNIZED INPUT FORMAT";
104 }
105
[1452]106 return reader;
107}
[1325]108
[1452]109//--------------------------------------------------------------- getPKSreader
110
111// Search a list of directories for a Parkes Multibeam dataset and return an
112// appropriate PKSreader for it.
113
114PKSreader* getPKSreader(
115 const String name,
116 const Vector<String> directories,
117 const Int retry,
118 const Int interpolate,
119 Int &iDir,
120 String &format)
121{
122 PKSreader *reader = 0x0;
123
124 iDir = -1;
125 Int nDir = directories.nelements();
126 for (Int i = 0; i < nDir; i++) {
127 String inName = directories(i) + "/" + name;
128 reader = getPKSreader(inName, retry, interpolate, format);
129 if (reader) {
130 iDir = i;
131 break;
132 }
133 }
134
135 return reader;
136}
137
138//--------------------------------------------------------------- getPKSreader
139
140// Open an appropriate PKSreader for a Parkes Multibeam dataset.
141
142PKSreader* getPKSreader(
143 const String name,
144 const Int retry,
145 const Int interpolate,
146 String &format,
147 Vector<Bool> &beams,
148 Vector<Bool> &IFs,
149 Vector<uInt> &nChan,
150 Vector<uInt> &nPol,
151 Vector<Bool> &haveXPol,
152 Bool &haveBase,
153 Bool &haveSpectra)
154{
155 PKSreader *reader = getPKSreader(name, retry, interpolate, format);
156
[1325]157 // Try to open it.
158 if (reader) {
159 if (reader->open(name, beams, IFs, nChan, nPol, haveXPol, haveBase,
160 haveSpectra)) {
161 format += " OPEN ERROR";
162 delete reader;
[1452]163 reader = 0x0;
[1325]164 }
165 }
166
[1452]167 return reader;
[1325]168}
169
170//--------------------------------------------------------------- getPKSreader
171
[1452]172// Search a list of directories for a Parkes Multibeam dataset and open an
[1325]173// appropriate PKSreader for it.
174
175PKSreader* getPKSreader(
176 const String name,
177 const Vector<String> directories,
178 const Int retry,
179 const Int interpolate,
180 Int &iDir,
181 String &format,
182 Vector<Bool> &beams,
183 Vector<Bool> &IFs,
184 Vector<uInt> &nChan,
185 Vector<uInt> &nPol,
186 Vector<Bool> &haveXPol,
187 Bool &haveBase,
188 Bool &haveSpectra)
189{
[1452]190 PKSreader *reader = getPKSreader(name, directories, retry, interpolate,
191 iDir, format);
[1325]192
[1452]193 // Try to open it.
194 if (reader) {
195 if (reader->open(name, beams, IFs, nChan, nPol, haveXPol, haveBase,
196 haveSpectra)) {
197 format += " OPEN ERROR";
198 delete reader;
199 reader = 0x0;
[1427]200 }
201 }
202
[1452]203 return reader;
[1427]204}
Note: See TracBrowser for help on using the repository browser.