Ignore:
Timestamp:
09/08/11 19:35:40 (13 years ago)
Author:
ShinnosukeKawakami
Message:

merged parallel branch to trunk

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src

  • trunk/src/FillerBase.cpp

    r2242 r2289  
    2828    RecordFieldPtr<Int> fitIdCol( row_.record(), "FIT_ID" ) ;
    2929    *fitIdCol = -1 ;
     30
     31    mEntry_.resize( 0 ) ;
     32    mIdx_.resize( 0 ) ;
     33    fEntry_.resize( 0 ) ;
     34    fIdx_.resize( 0 ) ;
     35    wEntry_.resize( 0 ) ;
     36    wIdx_.resize( 0 ) ;
    3037}
    3138
     
    8289{
    8390  /// @todo this has to change when nchan isn't global anymore
    84   uInt id= table_->frequencies().addEntry(refpix, refval, incr);
     91  uInt nEntry = fEntry_.size() ;
     92  Int idx = -1 ;
     93  Vector<Double> entry( 3 ) ;
     94  entry[0] = refpix ;
     95  entry[1] = refval ;
     96  entry[2] = incr ;
     97  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     98    if ( allEQ( entry, fEntry_[i] ) ) {
     99      idx = i ;
     100      break ;
     101    }
     102  }
     103  uInt id ;
     104  if ( idx != -1 )
     105    id = fIdx_[idx] ;
     106  else {
     107    id= table_->frequencies().addEntry(refpix, refval, incr);
     108    RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID");
     109    fEntry_.push_back( entry ) ;
     110    fIdx_.push_back( id ) ;
     111  }
    85112  RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID");
    86113  *mfreqidCol = id;
     
    91118void FillerBase::setMolecule(const Vector<Double>& restfreq)
    92119{
    93   Vector<String> tmp;
    94   uInt id = table_->molecules().addEntry(restfreq, tmp, tmp);
     120  uInt nEntry = mEntry_.size() ;
     121  Int idx = -1 ;
     122  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     123    if ( restfreq.conform( mEntry_[i] ) ) {
     124      if ( allEQ( restfreq, mEntry_[i] ) ) {
     125        idx = i ;
     126        break ;
     127      }
     128    }
     129  }
     130  uInt id ;
     131  if ( idx != -1 )
     132    id = mIdx_[idx] ;
     133  else {
     134    Vector<String> tmp ;
     135    id = table_->molecules().addEntry(restfreq,tmp,tmp) ;
     136    mEntry_.push_back( restfreq ) ;
     137    mIdx_.push_back( id ) ;
     138  }
    95139  RecordFieldPtr<uInt> molidCol(row_.record(), "MOLECULE_ID");
    96140  *molidCol = id;
     
    129173                        Float windspeed, Float windaz)
    130174{
    131     uInt id = table_->weather().addEntry(temperature, pressure,
    132                                          humidity, windspeed, windaz);
    133     RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
    134     *mweatheridCol = id;
     175  uInt nEntry = wEntry_.size() ;
     176  Int idx = -1 ;
     177  Vector<Float> entry( 5 ) ;
     178  entry[0] = temperature ;
     179  entry[1] = pressure ;
     180  entry[2] = humidity ;
     181  entry[3] = windspeed ;
     182  entry[4] = windaz ;
     183  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     184    if ( allEQ( entry, wEntry_[i] ) ) {
     185      idx = i ;
     186      break ;
     187    }
     188  }
     189  uInt id ;
     190  if ( idx != -1 )
     191    id = wIdx_[idx] ;
     192  else {
     193    id = table_->weather().addEntry(temperature, pressure,
     194                                    humidity, windspeed, windaz);
     195    wEntry_.push_back( entry ) ;
     196    wIdx_.push_back( id ) ;
     197  }
     198  RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
     199  *mweatheridCol = id;
    135200}
    136201
     
    187252                             Float windaz)
    188253{
     254  uInt nEntry = wEntry_.size() ;
     255  Int idx = -1 ;
     256  Vector<Float> entry( 5 ) ;
     257  entry[0] = temperature ;
     258  entry[1] = pressure ;
     259  entry[2] = humidity ;
     260  entry[3] = windspeed ;
     261  entry[4] = windaz ;
     262  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     263    if ( allEQ( entry, wEntry_[i] ) ) {
     264      idx = i ;
     265      break ;
     266    }
     267  }
    189268  uInt id ;
    190   Table tab = table_->weather().table() ;
    191   Table subt = tab( tab.col("TEMPERATURE") == temperature \
    192                     && tab.col("PRESSURE") == pressure \
    193                     && tab.col("HUMIDITY") == humidity \
    194                     && tab.col("WINDSPEED") == windspeed \
    195                     && tab.col("WINDAZ") == windaz, 1 ) ;
    196   Int nrow = tab.nrow() ;
    197   Int nrowSel = subt.nrow() ;
    198   if ( nrowSel == 0 ) {
    199     tab.addRow( 1, True ) ;
    200     TableRow row( tab ) ;
    201     TableRecord &rec = row.record() ;
    202     RecordFieldPtr<casa::uInt> rfpi ;
    203     rfpi.attachToRecord( rec, "ID" ) ;
    204     *rfpi = (uInt)nrow ;
    205     RecordFieldPtr<casa::Float> rfp ;
    206     rfp.attachToRecord( rec, "TEMPERATURE" ) ;
    207     *rfp = temperature ;
    208     rfp.attachToRecord( rec, "PRESSURE" ) ;
    209     *rfp = pressure ;
    210     rfp.attachToRecord( rec, "HUMIDITY" ) ;
    211     *rfp = humidity ;
    212     rfp.attachToRecord( rec, "WINDSPEED" ) ;
    213     *rfp = windspeed ;
    214     rfp.attachToRecord( rec, "WINDAZ" ) ;
    215     *rfp = windaz ;
    216     row.put( nrow, rec ) ;
    217     id = (uInt)nrow ;
    218   }
    219   else {
    220     ROTableColumn tc( subt, "ID" ) ;
    221     id = tc.asuInt( 0 ) ;
     269  if ( idx != -1 )
     270    id = wIdx_[idx] ;
     271  else {
     272    Table tab = table_->weather().table() ;
     273    Table subt = tab( tab.col("TEMPERATURE") == temperature     \
     274                      && tab.col("PRESSURE") == pressure        \
     275                      && tab.col("HUMIDITY") == humidity        \
     276                      && tab.col("WINDSPEED") == windspeed      \
     277                      && tab.col("WINDAZ") == windaz, 1 ) ;
     278    Int nrow = tab.nrow() ;
     279    Int nrowSel = subt.nrow() ;
     280    if ( nrowSel == 0 ) {
     281      tab.addRow( 1, True ) ;
     282      TableRow row( tab ) ;
     283      TableRecord &rec = row.record() ;
     284      RecordFieldPtr<casa::uInt> rfpi ;
     285      rfpi.attachToRecord( rec, "ID" ) ;
     286      *rfpi = (uInt)nrow ;
     287      RecordFieldPtr<casa::Float> rfp ;
     288      rfp.attachToRecord( rec, "TEMPERATURE" ) ;
     289      *rfp = temperature ;
     290      rfp.attachToRecord( rec, "PRESSURE" ) ;
     291      *rfp = pressure ;
     292      rfp.attachToRecord( rec, "HUMIDITY" ) ;
     293      *rfp = humidity ;
     294      rfp.attachToRecord( rec, "WINDSPEED" ) ;
     295      *rfp = windspeed ;
     296      rfp.attachToRecord( rec, "WINDAZ" ) ;
     297      *rfp = windaz ;
     298      row.put( nrow, rec ) ;
     299      id = (uInt)nrow ;
     300    }
     301    else {
     302      ROTableColumn tc( subt, "ID" ) ;
     303      id = tc.asuInt( 0 ) ;
     304    }
     305    wEntry_.push_back( entry ) ;
     306    wIdx_.push_back( id ) ;
    222307  }
    223308  RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
Note: See TracChangeset for help on using the changeset viewer.