Changeset 2263 for branches/parallel/src/FillerBase.cpp
- Timestamp:
- 08/04/11 15:42:43 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/parallel/src/FillerBase.cpp
r2247 r2263 24 24 { 25 25 row_ = TableRow(table_->table()); 26 27 mEntry_.resize( 0 ) ; 28 mIdx_.resize( 0 ) ; 29 fEntry_.resize( 0 ) ; 30 fIdx_.resize( 0 ) ; 31 wEntry_.resize( 0 ) ; 32 wIdx_.resize( 0 ) ; 26 33 } 27 34 … … 78 85 { 79 86 /// @todo this has to change when nchan isn't global anymore 80 uInt id= table_->frequencies().addEntry(refpix, refval, incr); 87 uInt nEntry = fEntry_.size() ; 88 Int idx = -1 ; 89 Vector<Double> entry( 3 ) ; 90 entry[0] = refpix ; 91 entry[1] = refval ; 92 entry[2] = incr ; 93 for ( uInt i = 0 ; i < nEntry ; i++ ) { 94 if ( allEQ( entry, fEntry_[i] ) ) { 95 idx = i ; 96 break ; 97 } 98 } 99 uInt id ; 100 if ( idx != -1 ) 101 id = fIdx_[idx] ; 102 else { 103 id= table_->frequencies().addEntry(refpix, refval, incr); 104 RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID"); 105 fEntry_.push_back( entry ) ; 106 fIdx_.push_back( id ) ; 107 } 81 108 RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID"); 82 109 *mfreqidCol = id; … … 87 114 void FillerBase::setMolecule(const Vector<Double>& restfreq) 88 115 { 89 Vector<String> tmp; 90 uInt id = table_->molecules().addEntry(restfreq, tmp, tmp); 116 uInt nEntry = mEntry_.size() ; 117 Int idx = -1 ; 118 for ( uInt i = 0 ; i < nEntry ; i++ ) { 119 if ( restfreq.conform( mEntry_[i] ) ) { 120 if ( allEQ( restfreq, mEntry_[i] ) ) { 121 idx = i ; 122 break ; 123 } 124 } 125 } 126 uInt id ; 127 if ( idx != -1 ) 128 id = mIdx_[idx] ; 129 else { 130 Vector<String> tmp ; 131 id = table_->molecules().addEntry(restfreq,tmp,tmp) ; 132 mEntry_.push_back( restfreq ) ; 133 mIdx_.push_back( id ) ; 134 } 91 135 RecordFieldPtr<uInt> molidCol(row_.record(), "MOLECULE_ID"); 92 136 *molidCol = id; … … 125 169 Float windspeed, Float windaz) 126 170 { 127 uInt id = table_->weather().addEntry(temperature, pressure, 128 humidity, windspeed, windaz); 129 RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID"); 130 *mweatheridCol = id; 171 uInt nEntry = wEntry_.size() ; 172 Int idx = -1 ; 173 Vector<Float> entry( 5 ) ; 174 entry[0] = temperature ; 175 entry[1] = pressure ; 176 entry[2] = humidity ; 177 entry[3] = windspeed ; 178 entry[4] = windaz ; 179 for ( uInt i = 0 ; i < nEntry ; i++ ) { 180 if ( allEQ( entry, wEntry_[i] ) ) { 181 idx = i ; 182 break ; 183 } 184 } 185 uInt id ; 186 if ( idx != -1 ) 187 id = wIdx_[idx] ; 188 else { 189 id = table_->weather().addEntry(temperature, pressure, 190 humidity, windspeed, windaz); 191 wEntry_.push_back( entry ) ; 192 wIdx_.push_back( id ) ; 193 } 194 RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID"); 195 *mweatheridCol = id; 131 196 } 132 197 … … 183 248 Float windaz) 184 249 { 250 uInt nEntry = wEntry_.size() ; 251 Int idx = -1 ; 252 Vector<Float> entry( 5 ) ; 253 entry[0] = temperature ; 254 entry[1] = pressure ; 255 entry[2] = humidity ; 256 entry[3] = windspeed ; 257 entry[4] = windaz ; 258 for ( uInt i = 0 ; i < nEntry ; i++ ) { 259 if ( allEQ( entry, wEntry_[i] ) ) { 260 idx = i ; 261 break ; 262 } 263 } 185 264 uInt id ; 186 Table tab = table_->weather().table() ; 187 Table subt = tab( tab.col("TEMPERATURE") == temperature \ 188 && tab.col("PRESSURE") == pressure \ 189 && tab.col("HUMIDITY") == humidity \ 190 && tab.col("WINDSPEED") == windspeed \ 191 && tab.col("WINDAZ") == windaz, 1 ) ; 192 Int nrow = tab.nrow() ; 193 Int nrowSel = subt.nrow() ; 194 if ( nrowSel == 0 ) { 195 tab.addRow( 1, True ) ; 196 TableRow row( tab ) ; 197 TableRecord &rec = row.record() ; 198 RecordFieldPtr<casa::uInt> rfpi ; 199 rfpi.attachToRecord( rec, "ID" ) ; 200 *rfpi = (uInt)nrow ; 201 RecordFieldPtr<casa::Float> rfp ; 202 rfp.attachToRecord( rec, "TEMPERATURE" ) ; 203 *rfp = temperature ; 204 rfp.attachToRecord( rec, "PRESSURE" ) ; 205 *rfp = pressure ; 206 rfp.attachToRecord( rec, "HUMIDITY" ) ; 207 *rfp = humidity ; 208 rfp.attachToRecord( rec, "WINDSPEED" ) ; 209 *rfp = windspeed ; 210 rfp.attachToRecord( rec, "WINDAZ" ) ; 211 *rfp = windaz ; 212 row.put( nrow, rec ) ; 213 id = (uInt)nrow ; 214 } 215 else { 216 ROTableColumn tc( subt, "ID" ) ; 217 id = tc.asuInt( 0 ) ; 265 if ( idx != -1 ) 266 id = wIdx_[idx] ; 267 else { 268 Table tab = table_->weather().table() ; 269 Table subt = tab( tab.col("TEMPERATURE") == temperature \ 270 && tab.col("PRESSURE") == pressure \ 271 && tab.col("HUMIDITY") == humidity \ 272 && tab.col("WINDSPEED") == windspeed \ 273 && tab.col("WINDAZ") == windaz, 1 ) ; 274 Int nrow = tab.nrow() ; 275 Int nrowSel = subt.nrow() ; 276 if ( nrowSel == 0 ) { 277 tab.addRow( 1, True ) ; 278 TableRow row( tab ) ; 279 TableRecord &rec = row.record() ; 280 RecordFieldPtr<casa::uInt> rfpi ; 281 rfpi.attachToRecord( rec, "ID" ) ; 282 *rfpi = (uInt)nrow ; 283 RecordFieldPtr<casa::Float> rfp ; 284 rfp.attachToRecord( rec, "TEMPERATURE" ) ; 285 *rfp = temperature ; 286 rfp.attachToRecord( rec, "PRESSURE" ) ; 287 *rfp = pressure ; 288 rfp.attachToRecord( rec, "HUMIDITY" ) ; 289 *rfp = humidity ; 290 rfp.attachToRecord( rec, "WINDSPEED" ) ; 291 *rfp = windspeed ; 292 rfp.attachToRecord( rec, "WINDAZ" ) ; 293 *rfp = windaz ; 294 row.put( nrow, rec ) ; 295 id = (uInt)nrow ; 296 } 297 else { 298 ROTableColumn tc( subt, "ID" ) ; 299 id = tc.asuInt( 0 ) ; 300 } 301 wEntry_.push_back( entry ) ; 302 wIdx_.push_back( id ) ; 218 303 } 219 304 RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
Note: See TracChangeset
for help on using the changeset viewer.