00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00031 #include <map>
00032 #include "arts.h"
00033 #include "array.h"
00034 #include "mystring.h"
00035 #include "wsv_aux.h"
00036
00037
00040 ArrayOfString wsv_group_names;
00041 map<String, Index> WsvGroupMap;
00042
00044 ArrayOfIndex valid_keyword_groups;
00045
00046
00047 void define_valid_keyword_groups()
00048 {
00049 valid_keyword_groups.resize(0);
00050 valid_keyword_groups.push_back(get_wsv_group_id("String"));
00051 valid_keyword_groups.push_back(get_wsv_group_id("Index"));
00052 valid_keyword_groups.push_back(get_wsv_group_id("Numeric"));
00053 valid_keyword_groups.push_back(get_wsv_group_id("ArrayOfString"));
00054 valid_keyword_groups.push_back(get_wsv_group_id("ArrayOfIndex"));
00055 valid_keyword_groups.push_back(get_wsv_group_id("Vector"));
00056 }
00057
00058
00059 void define_wsv_group_map()
00060 {
00061 for ( Index i=0 ; i<wsv_group_names.nelem() ; ++i )
00062 {
00063 WsvGroupMap[wsv_group_names[i]] = i;
00064 }
00065 }
00066
00067
00069
00080 void define_wsv_group_names()
00081 {
00082
00083
00084
00085 wsv_group_names.resize(0);
00086
00087 wsv_group_names.push_back("Any");
00088 wsv_group_names.push_back("Index");
00089 wsv_group_names.push_back("Numeric");
00090 wsv_group_names.push_back("String");
00091 wsv_group_names.push_back("Vector");
00092 wsv_group_names.push_back("Matrix");
00093 wsv_group_names.push_back("Sparse");
00094 wsv_group_names.push_back("Tensor3");
00095 wsv_group_names.push_back("Tensor4");
00096 wsv_group_names.push_back("Tensor5");
00097 wsv_group_names.push_back("Tensor6");
00098 wsv_group_names.push_back("Tensor7");
00099 wsv_group_names.push_back("Timer");
00100 wsv_group_names.push_back("ArrayOfIndex");
00101 wsv_group_names.push_back("ArrayOfArrayOfIndex");
00102 wsv_group_names.push_back("ArrayOfString");
00103 wsv_group_names.push_back("ArrayOfVector");
00104 wsv_group_names.push_back("ArrayOfMatrix");
00105 wsv_group_names.push_back("ArrayOfArrayOfMatrix");
00106 wsv_group_names.push_back("ArrayOfTensor3");
00107 wsv_group_names.push_back("ArrayOfArrayOfTensor3");
00108 wsv_group_names.push_back("ArrayOfTensor4");
00109 wsv_group_names.push_back("ArrayOfTensor6");
00110 wsv_group_names.push_back("ArrayOfTensor7");
00111 wsv_group_names.push_back("ArrayOfArrayOfTensor6");
00112 wsv_group_names.push_back("ArrayOfLineRecord");
00113 wsv_group_names.push_back("ArrayOfArrayOfLineRecord");
00114 wsv_group_names.push_back("ArrayOfLineshapeSpec");
00115 wsv_group_names.push_back("ArrayOfArrayOfSpeciesTag");
00116 wsv_group_names.push_back("Ppath");
00117 wsv_group_names.push_back("ArrayOfPpath");
00118 wsv_group_names.push_back("Agenda");
00119 wsv_group_names.push_back("GridPos");
00120 wsv_group_names.push_back("ArrayOfArrayOfArrayOfArrayOfGridPos");
00121 wsv_group_names.push_back("GasAbsLookup");
00122 wsv_group_names.push_back("SingleScatteringData");
00123 wsv_group_names.push_back("ArrayOfSingleScatteringData");
00124 wsv_group_names.push_back("GField1");
00125 wsv_group_names.push_back("GField2");
00126 wsv_group_names.push_back("GField3");
00127 wsv_group_names.push_back("GField4");
00128 wsv_group_names.push_back("ArrayOfGField1");
00129 wsv_group_names.push_back("ArrayOfGField2");
00130 wsv_group_names.push_back("ArrayOfGField3");
00131 wsv_group_names.push_back("ArrayOfGField4");
00132 wsv_group_names.push_back("ArrayOfArrayOfGField1");
00133 wsv_group_names.push_back("ArrayOfArrayOfGField3");
00134 wsv_group_names.push_back("ArrayOfRetrievalQuantity");
00135 wsv_group_names.push_back("MCAntenna");
00136 wsv_group_names.push_back("SLIData2");
00137
00138 define_wsv_group_map();
00139 define_valid_keyword_groups();
00140 }
00141
00142
00143 bool is_valid_keyword_group(const Index group)
00144 {
00145 for (Index i = 0; i < valid_keyword_groups.nelem(); i++)
00146 {
00147 if (valid_keyword_groups[i] == group)
00148 return true;
00149 }
00150
00151 return false;
00152 }
00153
00154 void get_wsv_group_ids(ArrayOfIndex& ids, String name)
00155 {
00156 ids.resize(0);
00157 map<String, Index>::const_iterator it = WsvGroupMap.find (name);
00158
00159 Index pos = 0;
00160 while (pos < name.nelem())
00161 {
00162 switch (name[pos])
00163 {
00164 case ' ':
00165 case '\r':
00166 case '\t':
00167 case '#':
00168 name.erase(pos, 1);
00169 break;
00170 default:
00171 pos++;
00172 }
00173 }
00174
00175 pos = 0;
00176 Index prev = 0;
00177 while (pos < name.nelem())
00178 {
00179 while (pos < name.nelem() && name[pos] != ',') pos ++;
00180 Index id = get_wsv_group_id (name.substr(prev, pos-prev));
00181 if (id == -1)
00182 {
00183 ids.resize(0);
00184 return;
00185 }
00186 ids.push_back (id);
00187 pos++;
00188 prev = pos;
00189 }
00190 }
00191
00192 Index get_wsv_group_id(const String& name)
00193 {
00194 map<String, Index>::const_iterator it = WsvGroupMap.find (name);
00195 if (it == WsvGroupMap.end())
00196 return -1;
00197 else
00198 return it->second;
00199 }
00200
00201 String get_array_groups_as_string()
00202 {
00203 String arraygroups;
00204
00205 bool first = true;
00206 for (Index i = 0; i < wsv_group_names.nelem(); i++)
00207 {
00208 if (wsv_group_names[i].substr(0, String("ArrayOf").length()) == "ArrayOf")
00209 {
00210 if (!first) arraygroups += ", "; else first = false;
00211 arraygroups += wsv_group_names[i];
00212 }
00213 }
00214 return arraygroups;
00215 }
00216