source: trunk/src/STSelector.cpp @ 812

Last change on this file since 812 was 812, checked in by mar637, 18 years ago

Selection object for Scantable. Initial revision.

File size: 3.2 KB
Line 
1//
2// C++ Implementation: STSelector
3//
4// Description:
5//
6//
7// Author: Malte Marquarding <asap@atnf.csiro.au>, (C) 2006
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include <tables/Tables/ExprNode.h>
13#include <tables/Tables/TableParse.h>
14#include <casa/BasicSL/String.h>
15#include <casa/iostream.h>
16#include <casa/iomanip.h>
17
18#include "STSelector.h"
19
20using namespace asap;
21using namespace casa;
22
23STSelector::STSelector() :
24  taql_("")
25{
26}
27
28STSelector::STSelector( const STSelector & other ) :
29  selections_(other.selections_),
30  taql_(other.taql_) {
31}
32
33STSelector& STSelector::operator=( const STSelector& other )
34{
35  if (&other != this) {
36    this->selections_ = other.selections_;
37    this->taql_ = other.taql_;
38  }
39  return *this;
40}
41
42STSelector::~STSelector()
43{
44}
45
46void STSelector::setScans( const std::vector< int >& scans )
47{
48  set("SCANNO", scans);
49}
50
51void STSelector::setBeams( const std::vector< int >& beams )
52{
53  set("BEAMNO", beams);
54}
55
56void STSelector::setIFs( const std::vector< int >& ifs )
57{
58  set("IFNO", ifs);
59}
60
61void STSelector::setPolarizations( const std::vector< int >& pols )
62{
63  set("POLNO", pols);
64}
65
66void STSelector::set(const std::string& key, const std::vector< int >& val)
67{
68  if ( val.size() > 0 ) {
69    selections_[key] = val;
70  }
71}
72
73void STSelector::setTaQL( const std::string& taql )
74{
75  taql_ = taql;
76}
77
78Table STSelector::apply( const Table& tab )
79{
80  if ( empty() ) {
81    return tab;
82  }
83  TableExprNode query;
84  idmap::const_iterator it = selections_.begin();
85  for (it; it != selections_.end(); ++it) {
86    TableExprNode theset(Vector<Int>( (*it).second ));
87    if ( query.isNull() ) {
88      query = tab.col((*it).first).in(theset);
89    } else {
90      query = tab.col((*it).first).in(theset) && query;
91    }
92  }
93  // add taql query
94  if ( taql_.size() > 0 ) {
95    Table tmpt = tab;
96
97    if ( !query.isNull() ) { // taql and selection
98      tmpt = tableCommand(taql_, tab(query));
99    } else { // taql only
100      tmpt = tableCommand(taql_, tab);
101    }
102    return tmpt.copyToMemoryTable("dummy");
103  } else {
104    return tab(query).copyToMemoryTable("dummy");
105  }
106}
107
108std::vector< int > STSelector::get( const std::string& key)
109{
110  if (selections_.count(key) > 0) {
111    return  std::vector<int>();//selections_[key];
112  }
113}
114
115std::vector< int > STSelector::getScans( )
116{
117  return get("SCANNO");
118}
119
120std::vector< int > STSelector::getBeams( )
121{
122  return get("BEAMNO");
123}
124
125std::vector< int > STSelector::getIFs( )
126{
127  return get("IFNO");
128}
129
130std::vector< int > STSelector::getPols( )
131{
132  return get("POLNO");
133}
134
135std::string asap::STSelector::print( )
136{
137  ostringstream oss;
138  oss.flags(std::ios_base::left);
139  oss << setw(15) << "Selection:";
140  if ( empty() ) {
141    oss << "none";
142    return String(oss);
143  }
144
145  idmap::const_iterator it = selections_.begin();
146  while (it != selections_.end()) {
147    if ( it != selections_.begin() )
148      oss << setw(15) << " ";
149    oss << it->first << ": " << Vector<Int>(it->second);
150    ++it;
151    if ( it != selections_.end() ) oss << endl;
152  }
153  if ( taql_.size() > 0 ) {
154    oss << endl << setw(15) << "" << taql_;
155  }
156  return String(oss);
157}
158
159bool asap::STSelector::empty( ) const
160{
161  return (selections_.empty() && taql_.size() == 0 );
162}
Note: See TracBrowser for help on using the repository browser.