Ignore:
Timestamp:
08/04/11 12:58:21 (13 years ago)
Author:
Takeshi Nakazato
Message:

New Development: No

JIRA Issue: No

Ready for Test: No

Interface Changes: No

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...

Preparation for check in tuning on NRO filler.
Merge changes in trunk.

r2154
r2156
r2158
r2198-2203
r2212
r2261


Location:
branches/parallel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/parallel

  • branches/parallel/external-alma

  • branches/parallel/external-alma/atnf/PKSIO/NRODataset.cc

    r2031 r2262  
    8383  }
    8484  same_ = -1 ;
     85
     86  // Record for frequency setting
     87  frec_ = Record() ;
    8588}
    8689
     
    602605}
    603606
     607double NRODataset::getScanTime( int i )
     608{
     609  double startTime = getStartIntTime( i ) ;
     610  double interval = getIPTIM() / 86400.0 ; // [sec]->[day]
     611  return startTime+0.5*interval ;
     612}
     613
    604614vector<bool> NRODataset::getIFs()
    605615{
     
    657667  NRODataRecord *record = getRecord( i ) ;
    658668  string arryt = string( record->ARRYT ) ;
    659   //string sbeamno = arryt.substr( 1, arryt.size()-1 ) ;
    660   //uInt ib = atoi( sbeamno.c_str() ) - 1 ;
    661669  uInt ib = getArrayId( arryt ) ;
    662 
    663   int ia = -1 ;
     670  string rxname = getRX()[0] ;
     671  string key = arryt ;
     672  if ( rxname.find("MULT2") != string::npos )
     673    key = "BEARS" ;
     674
     675  if ( frec_.isDefined( key ) ) {
     676    // frequency for the array is already calculated
     677    Vector<Double> f =  frec_.asArrayDouble( key ) ;
     678    Double *f_p = f.data() ;
     679    for ( int i = 0 ; i < 3 ; i++ )
     680      v[i] = (double)(f_p[i]) ;
     681    return v ;
     682  }
     683
     684  //int ia = -1 ;
    664685  bool isAOS = false ;
    665686  //cout << "NRODataset::getFrequencies()  record->ARRYT=" << record->ARRYT << endl ;
    666687  //cout << "NRODataset::getFrequencies()  ib = " << ib << endl ;
    667688
    668   if ( strncmp( record->ARRYT, "X", 1 ) == 0 ) {
    669     // FX
    670     if ( strncmp( (record->ARRYT)+1, "1", 1 ) == 0
    671          || strncmp( (record->ARRYT)+1, "3", 1 ) ) {
    672       // FX1, 3
    673       ia = 2 ;
    674     }
    675     else {
    676       // FX2, 4
    677       ia = 1 ;
    678     }
    679   }
    680   else if ( strncmp( record->ARRYT, "A", 1 ) == 0 )
    681     ia = 2 ;  // AC
    682   else if ( strncmp( record->ARRYT, "W", 1 ) == 0 ) {
    683     // AOS-W   
    684     ia = 2 ; 
     689  if ( arryt[0] == 'W' || arryt[0] == 'U' || arryt[0] == 'H' )
    685690    isAOS = true ;
    686   }
    687   else if ( strncmp( record->ARRYT, "U", 1 ) == 0 ) {
    688     // AOS-U
    689     ia = 2 ; 
    690     isAOS = true ;
    691   }
    692   else if ( strncmp( record->ARRYT, "H", 1 ) == 0 ) {
    693     // AOS-H
    694     isAOS = true ;
    695     //cout << record->ARRYT << " " <<  strlen(record->ARRYT) << endl ;
    696     //cout << (record->ARRYT)+1 << endl ;
    697     if ( strncmp( (record->ARRYT)+2, " ", 1 ) == 0 ) {
    698       // H1-9
    699       if ( strncmp( (record->ARRYT)+1, "9", 1 ) == 0 ) {
    700         // H9
    701         ia = 2 ;
    702       }
    703       else {
    704         // H1-8
    705         ia = 1 ;
    706       }
    707     }
    708     else {
    709       // H10-16
    710       ia = 2 ;
    711     }
    712   }
    713 
    714   int iu ;
     691
     692  Bool isUSB ;
    715693  if ( record->FQIF1 > 0 )
    716     iu = 1 ;  // USB
     694    isUSB = True ;  // USB
    717695  else
    718     iu = 2 ;  // LSB
     696    isUSB = False ;  // LSB
    719697
    720698  int ivdef = -1 ;
    721   //if ( strncmp( (dataset_->getVDEF()).c_str(), "RAD", 3 ) == 0 )
    722699  if ( (getVDEF()).compare( 0, 3, "RAD" ) == 0 )
    723700    ivdef = 0 ;
    724   //else if ( strncmp( dataset_->getVDEF(), "OPT", 3 ) == 0 )
    725701  else if ( (getVDEF()).compare( 0, 3, "OPT" ) == 0 )
    726702    ivdef = 1 ;
     
    734710
    735711  int ncal = getNFCAL()[ib] ;
    736   vector<double> freqs( ncal ) ;
    737712  double cw = 0.0 ;
    738713  vector<double> fqcal = getFQCAL()[ib] ;
    739714  vector<double> chcal = getCHCAL()[ib] ;
    740 
     715  double f0cal = getF0CAL()[ib] ;
     716  Vector<Double> freqs( ncal, fq0-f0cal ) ;
     717
     718  double factor = vel / cvel ;
     719  if ( ivdef == 0 )
     720    factor = 1.0 / ( 1.0 - factor ) ;
    741721  for ( int ii = 0 ; ii < ncal ; ii++ ) {
    742     freqs[ii] = fqcal[ii] ;
    743     freqs[ii] -= getF0CAL()[ib] ;
    744     if ( ia == 1 ) {
    745       if ( iu == 1 ) {
    746         freqs[ii] = fq0 + freqs[ii] ;
    747       }
    748       else if ( iu == 2 ) {
    749         freqs[ii] = fq0 - freqs[ii] ;
    750       }
    751     }
    752     else if ( ia == 2 ) {
    753       if ( iu == 1 ) {
    754         freqs[ii] = fq0 - freqs[ii] ;
    755       }
    756       else if ( iu == 2 ) {
    757         freqs[ii] = fq0 + freqs[ii] ;
    758       }
    759     }     
    760 //       if ( ivdef == 0 ) {
    761 //         double factor = 1.0 / ( 1.0 - vel / cvel ) ;
    762 //         freqs[ii] = freqs[ii] * factor - record->FQTRK * ( factor - 1.0 ) ;
    763 //       }
    764 //       else if ( ivdef == 1 ) {
    765 //         double factor = vel / cvel ;
    766 //         freqs[ii] = freqs[ii] * ( 1.0 + factor ) - record->FQTRK * factor ;
    767 //       }
     722    freqs[ii] += fqcal[ii] ;
     723    if ( ivdef == 0 ) {
     724      freqs[ii] = freqs[ii] * factor + record->FQTRK * ( 1.0 - factor ) ;
     725    }
     726    else if ( ivdef == 1 ) {
     727      freqs[ii] = freqs[ii] * ( 1.0 + factor ) - record->FQTRK * factor ;
     728    }
     729
     730    //ofstream ofs("freqs.txt",ios::out|ios::app) ;
     731    //ofs << setprecision(16) ;
     732    //ofs << i << " " << record->ARRYT << " " << chcal[ii] << " " << freqs[ii] << " " << record->ISCAN << " " << fqcal[ii] << " " << f0cal << " " << record->FQTRK << " " << vel << endl ;
     733    //ofs.close() ;
     734
    768735  }
    769736
     
    790757  }
    791758  else {
    792     cw = getBERES()[ib] ;
     759
     760    cw = ( freqs[1] - freqs[0] )
     761      / ( chcal[1] - chcal[0] ) ;   
     762
     763    if ( isUSB ) {
     764      // channel frequency inversion
     765      cw *= -1.0 ;
     766      Double tmp = freqs[1] ;
     767      freqs[1] = freqs[0] ;
     768      freqs[0] = tmp ;
     769    }
    793770   
    794     if ( iu == 2 )
    795       cw *= -1.0 ;
    796 
    797     if ( cw == 0.0 ) {
    798       cw = ( freqs[1] - freqs[0] )
    799         / ( chcal[1] - chcal[0] ) ;
    800 //           if ( cw < 0.0 )
    801 //             cw = - cw ;
    802     }
    803771    v[0] = chcal[0] - 1 ; // 0-base
    804772    v[1] = freqs[0] ;
     
    806774  }
    807775
    808   // conversion from TOPO to LSRK
    809   v[1] = toLSR( v[1], getStartIntTime( i ), record_->SCX, record_->SCY ) ;
    810 
    811   if ( refFreq_[ib] != 0.0 ) {
    812     v[1] = refFreq_[ib] ;
    813   }
    814   else {
     776  if ( refFreq_[ib] == 0.0 )
    815777    refFreq_[ib] = v[1] ;
    816   }
     778
     779  // register frequency setting to Record
     780  Vector<Double> f( v ) ;
     781  frec_.define( key, f ) ;
    817782
    818783  return v ;
Note: See TracChangeset for help on using the changeset viewer.