source: trunk/external-alma/asdm2ASAP/asdm2ASAP.cc @ 2197

Last change on this file since 2197 was 2197, checked in by Takeshi Nakazato, 13 years ago

New Development: Yes

JIRA Issue: Yes CAS-1913

Ready for Test: No

Interface Changes: Yes/No?

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...

Prototype program asdm2ASAP that converts ASDM into Scantable directory.
Since top-level CMakeLists.txt is not yet updated, those codes will not
be built at the moment.

File size: 2.8 KB
Line 
1#include <iostream>
2#include <casa/Utilities/Regex.h>
3#include <casa/Inputs/Input.h>
4#include <casa/BasicSL/String.h>
5#include <casa/Containers/Record.h>
6#include <casa/OS/Directory.h>
7#include <Scantable.h>
8#include "ASDMFiller.h"
9
10using namespace std ;
11using namespace asdm ;
12using namespace casa ;
13using namespace asap ;
14
15int main( int argc, char *argv[] )
16{
17  // options
18  Input inp ;
19  String indent = "   " ;
20  String versionInfo = "$Id$\nConverts an ASDM dataset into Scantable.\nUsage:\n"+indent+argv[0]+" -antenna <antenna name or id> -asdm <ASDM directory> -asap <Scantable name>" ;
21  inp.version( versionInfo ) ;
22
23  inp.create( "antenna", "0", "antenna name or id", "String" ) ;
24  inp.create( "asdm", "", "ASDM directory name", "String" ) ;
25  inp.create( "asap", "", "Scantable name", "String" ) ;
26  inp.create( "apc", "False", "Retrieve Atm Phase Corrected data or not", "Bool" ) ;
27  inp.create( "overwrite", "True", "Overwrite existing Scantable or not", "Bool" ) ;
28  inp.readArguments( argc, argv ) ;
29
30  string asdmname = inp.getString( "asdm" ) ;
31  string antenna = inp.getString( "antenna" ) ;
32  string asapname = inp.getString( "asap" ) ;
33  Bool apcCorrected = inp.getBool( "apc" ) ;
34  Bool overwrite = inp.getBool( "overwrite" ) ;
35   
36   
37  // create ASDMFiller object
38  CountedPtr<Scantable> stable( new Scantable() ) ;
39  ASDMFiller *filler = new ASDMFiller( stable ) ;
40
41  // open data
42  Record rec ;
43  Record asdmRec ;
44  Regex reg( "[0-9]+$" ) ;
45  asdmRec.define( "apc", apcCorrected ) ;
46  if ( reg.match( antenna.c_str(), antenna.size() ) != String::npos ) {
47    // antenna is specifiec as id
48    int aid = atoi( antenna.c_str() ) ;
49    asdmRec.define( "antenna", aid ) ;
50  }
51  else {
52    // antenna is specified as name
53    asdmRec.define( "antenna", antenna ) ;
54  }
55  rec.defineRecord( "asdm", asdmRec ) ;
56  filler->open( asdmname, rec ) ;
57
58  // output filename
59  CountedPtr<ASDMReader> reader = filler->getReader() ;
60  string aname = reader->getAntennaName() ;
61  int aid = reader->getAntennaId() ;
62  if ( asapname.size() == 0 ) {
63    asapname = asdmname + "." + aname + ".asap" ;
64  }
65
66  cout << "specified option summary:" << endl ;
67  cout << "   antenna = " << antenna << " (ID: " << aid << ")" << endl ;
68  cout << "   asdmname = " << asdmname << endl ;
69  cout << "   asapname = " << asapname << endl ;
70  cout << "   apcCorrected = " << apcCorrected << endl ;
71
72  // save scantable on disk
73  Directory dir( asapname ) ;
74  if ( dir.exists() ) {
75    if ( overwrite ) {
76      cout << "Delete existing file..." << endl ;
77      dir.removeRecursive() ;
78    }
79    else {
80      cerr << "Output file " << asapname << " exists." << endl ;
81      return 1 ;
82    }
83  }
84
85  // fill data
86  filler->fill() ;
87
88  // close data
89  filler->close() ;
90
91  // save data
92  stable->makePersistent( asapname ) ;
93
94  // finalize
95  reader = 0 ;
96  delete filler ;
97
98  return 0 ;
99}
Note: See TracBrowser for help on using the repository browser.