[2321] | 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 |
|
---|
| 9 | using namespace casa;
|
---|
| 10 |
|
---|
| 11 | namespace asap {
|
---|
| 12 |
|
---|
| 13 | std::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 |
|
---|
| 30 | std::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 |
|
---|
| 48 | std::string STUpgrade::three2four(const std::string& name) {
|
---|
[2332] | 49 | std::string fname = name;
|
---|
[2321] | 50 | Table origtab(name);
|
---|
| 51 | Vector<String> cnames(3);
|
---|
| 52 | cnames[0] = "RESTFREQUENCY";
|
---|
| 53 | cnames[1] = "NAME";
|
---|
| 54 | cnames[2] = "FORMATTEDNAME";
|
---|
[2332] | 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 | }
|
---|
[2321] | 89 | return fname;
|
---|
| 90 | }
|
---|
| 91 |
|
---|
| 92 | }
|
---|