source: trunk/src/STUpgrade.cpp@ 2687

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

New Development: No

JIRA Issue: No

Ready for Test: No

Interface Changes: 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...

###THIS SHOULD NOT BE INCLUDED RELEASE 3.3###
Take care of the data that the version number is 3 while the definition
of MOLECULE table is along version 4. For such data, just increment
version number.


File size: 2.9 KB
Line 
1#include <tables/Tables/Table.h>
2#include <tables/Tables/ScaColDesc.h>
3#include <tables/Tables/ArrColDesc.h>
4#include <tables/Tables/ArrayColumn.h>
5
6#include "STUpgrade.h"
7
8
9using namespace casa;
10
11namespace asap {
12
13std::string STUpgrade::upgrade(const std::string& name) {
14 std::string inname = name;
15 Table origtab(name);
16 uInt version = origtab.keywordSet().asuInt("VERSION");
17 if (version == version_) {
18 return name;
19 }
20 if (version == 2) {
21 inname = two2three(inname);
22 version = 3;
23 }
24 if (version == 3) {
25 return three2four(inname);
26 }
27 throw(AipsError("Unsupported version of ASAP file."));
28}
29
30std::string STUpgrade::two2three(const std::string& name) {
31
32 std::string fname = name+".asap3";
33 Table origtab(name);
34 origtab.deepCopy(fname, Table::New);
35 Table tab(fname, Table::Update);
36 tab.removeColumn("PARANGLE");
37 Table tfocus = tab.rwKeywordSet().asTable("FOCUS");
38 ScalarColumnDesc<Float> pa("PARANGLE");
39 pa.setDefault(Float(0.0));
40 tfocus.addColumn(pa);
41 //tfocus.rwKeywordSet().define("PARALLACTIFY", False)
42 Int verid = tab.rwKeywordSet().fieldNumber("VERSION");
43 tab.rwKeywordSet().define(verid, uInt(3));
44 tab.tableInfo().setType("Scantable");
45 return fname;
46}
47
48std::string STUpgrade::three2four(const std::string& name) {
49 std::string fname = name;
50 Table origtab(name);
51 Vector<String> cnames(3);
52 cnames[0] = "RESTFREQUENCY";
53 cnames[1] = "NAME";
54 cnames[2] = "FORMATTEDNAME";
55 Table origmoltab = origtab.rwKeywordSet().asTable("MOLECULES");
56 const ColumnDesc &desc = (origmoltab.tableDesc().columnDescSet())[cnames[0]];
57 Bool isScalar = desc.isScalar() ;
58 if ( isScalar ) {
59 fname += ".asap4";
60 origtab.deepCopy(fname, Table::New);
61 Table tab(fname, Table::Update);
62 Table moltable = tab.rwKeywordSet().asTable("MOLECULES");
63 ROScalarColumn<Double> rfcol(moltable, cnames[0]);
64 ROScalarColumn<String> nmecol(moltable, cnames[1]);
65 ROScalarColumn<String> fmtnmecol(moltable, cnames[2]);
66 Vector<Double> rf = rfcol.getColumn();
67 Vector<String> nme = nmecol.getColumn();
68 Vector<String> fmtnme = fmtnmecol.getColumn();
69 Array<Double> arf = rf.addDegenerate(1);
70 Array<String> anme = nme.addDegenerate(1);
71 Array<String> afmtnme = fmtnme.addDegenerate(1);
72 moltable.removeColumn(cnames);
73 moltable.addColumn(ArrayColumnDesc<Double>(cnames[0]));
74 moltable.addColumn(ArrayColumnDesc<String>(cnames[1]));
75 moltable.addColumn(ArrayColumnDesc<String>(cnames[2]));
76 ArrayColumn<Double> arfcol(moltable, cnames[0]);
77 ArrayColumn<String> anmecol(moltable, cnames[1]);
78 ArrayColumn<String> afmtnmecol(moltable, cnames[2] );
79 arfcol.putColumn(arf);
80 anmecol.putColumn(anme);
81 afmtnmecol.putColumn(afmtnme);
82 Int verid = tab.rwKeywordSet().fieldNumber("VERSION");
83 tab.rwKeywordSet().define(verid, uInt(4));
84 }
85 else {
86 Int verid = origtab.rwKeywordSet().fieldNumber("VERSION");
87 origtab.rwKeywordSet().define(verid, uInt(4));
88 }
89 return fname;
90}
91
92}
Note: See TracBrowser for help on using the repository browser.