Ignore:
Timestamp:
Nov 22, 1999, 10:43:44 AM (26 years ago)
Author:
ansari
Message:

fin de fichier, start

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Poubelle/archTOI.old/starmatcher.cc

    r581 r612  
    1111
    1212#define STARDUMP
     13
     14#define TEchan TFin
    1315
    1416#include <math.h>
     
    271273     
    272274        double da = azim-az; if (da>360) da -= 360;
    273         if (da < -0.6 || da > 0.4) continue;
     275       // if (da < -0.6 || da > 0.4) continue; // appropriate for TEchan
     276        if (da < -0.7 || da > 0.3) continue; // appropriate for TFin
    274277        double elv0 = elv - GondolaGeom::sstPixelHeight * lastStar.NoDiode;
    275278        if (fabs(elv0-GondolaGeom::elevSST0) > 0.25) continue; // Might be too strong
     
    568571int StarMatcher::getPendulInfo(double sampleNum, pendulInfo& info) {
    569572
     573  static double lastSN = -1;
     574  static pendulInfo lastPendul;
     575 
     576  if (sampleNum == lastSN) {
     577    info = lastPendul;
     578    return 0;
     579  }
     580
    570581  PolFitClip2 fitPendul(30,2);
    571582
    572583  map<double, pendulInfo>::iterator i = pendulInfos.lower_bound(sampleNum);
    573584  if (i == pendulInfos.begin() && (*i).second.SN >= sampleNum) return -1;
    574   if (i == pendulInfos.end()   && (*i).second.SN <= sampleNum) return -1;
    575  
    576   if ((*i).second.SN > sampleNum) i--;
     585  if (i == pendulInfos.end()) return -1;
     586  map<double, pendulInfo>::iterator last = pendulInfos.end();
     587  if (last == pendulInfos.begin()) return -1;
     588  last--;
     589  if (i == last   && (*i).second.SN <= sampleNum) return -1;
     590 
     591  if ((*i).second.SN > sampleNum) i--; // i just before us...
     592 
     593  //$CHECK$ reject if too large a gap...
     594  if (sampleNum - (*i).second.SN > 1000) return -1;
     595  last = i; last++;
     596  if ((*last).second.SN - sampleNum > 1000) return -1;
    577597
    578598  int nn=0;
    579599  double aziprev=0, azicur=0, azi0=0;
    580600  for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.begin(); ii--) {
    581     nn++;
    582601    pendulInfo inf1 = (*ii).second;
     602    if (fabs(inf1.SN - sampleNum) > 1000) continue;
    583603    aziprev = azicur;
    584604    azicur = inf1.azPendul;
     605    nn++;
    585606    if (nn==1) azi0 = azicur;
    586607    if (nn>1 && azicur - aziprev > 180)  azicur -= 360;
     
    593614  if (i != pendulInfos.end()) i++;
    594615  for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.end(); ii++) {
    595     nn++;
    596616    pendulInfo inf1 = (*ii).second;
     617    if (fabs(inf1.SN - sampleNum) > 1000) continue;
    597618    aziprev = azicur;
    598619    azicur = inf1.azPendul;
     620    nn++;
    599621    if (nn>1 && azicur - aziprev > 180)  azicur -= 360;
    600622    if (nn>1 && azicur - aziprev < -180) azicur += 360;
     
    610632  if (info.azPendul <   0) info.azPendul += 360;
    611633  info.angPendul  = fitPendul.valueY(sampleNum);
     634 
     635  lastSN = sampleNum;
     636  lastPendul = info;
     637
    612638  return 0;
    613639}
    614 
    615 #if 0
    616 
    617 int StarMatcher::getPendulInfo(double sampleNum, pendulInfo& info) {
    618   static double* sn    = ::vector(1, 100);
    619   static double* aziP  = ::vector(1, 100);
    620   static double* ampP  = ::vector(1, 100);
    621   static double* sig   = ::vector(1, 100);
    622   static double* aAzi  = ::vector(1, 3);
    623   static double* aAmp  = ::vector(1, 3);
    624   static int*   ia    = ::ivector(1,3);
    625   static double** cov  = ::matrix(1,3,1,3);
    626   int ndata = 0;
    627   map<double, pendulInfo>::iterator i = pendulInfos.lower_bound(sampleNum);
    628   if (i == pendulInfos.begin() && (*i).second.SN >= sampleNum) return -1;
    629   if (i == pendulInfos.end()   && (*i).second.SN <= sampleNum) return -1;
    630  
    631   if ((*i).second.SN > sampleNum) i--;
    632 
    633   int nn=0;
    634   for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.begin(); ii--) {
    635     nn++;
    636     ndata++;
    637     pendulInfo inf1 = (*ii).second;
    638     sn[ndata]   = inf1.SN;
    639     ampP[ndata] = inf1.angPendul;
    640     aziP[ndata] = inf1.azPendul;
    641     int prev = ndata-1;
    642     if (ndata>1 && aziP[ndata] - aziP[prev] > 180)  aziP[ndata] -= 360;
    643     if (ndata>1 && aziP[ndata] - aziP[prev] < -180) aziP[ndata] += 360;
    644     sig[ndata]  = 1;
    645     if (nn>=50) break;
    646   }
    647  
    648   nn=0;
    649   if (i != pendulInfos.end()) i++;
    650   for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.end(); ii++) {
    651     nn++;
    652     ndata++;
    653     pendulInfo inf1 = (*ii).second;
    654     sn[ndata]   = inf1.SN;
    655     ampP[ndata] = inf1.angPendul;
    656     aziP[ndata] = inf1.azPendul;
    657     int prev = ndata-1;
    658     if (nn==1) prev=1;
    659     if (ndata>1 && aziP[ndata] - aziP[prev] > 180)  aziP[ndata] -= 360;
    660     if (ndata>1 && aziP[ndata] - aziP[prev] < -180) aziP[ndata] += 360;
    661     sig[ndata]  = 1;
    662     if (nn>=50) break;
    663   }
    664  
    665   if (ndata < 3) return -1;
    666  
    667   ia[1] = ia[2] = ia[3] = 1;
    668   double chi2;
    669   try {
    670     lfit(sn, aziP,  sig, ndata, aAzi, ia, 3, cov, &chi2, polfunc);
    671     lfit(sn, ampP,  sig, ndata, aAmp, ia, 3, cov, &chi2, polfunc);
    672   } catch(string st) {
    673     return -1;
    674   }
    675 
    676   info.SN = sampleNum;
    677   info.azPendul   = polval(sampleNum, aAzi, 3);
    678   if (info.azPendul > 360) info.azPendul -= 360;
    679   if (info.azPendul <   0) info.azPendul += 360;
    680   info.angPendul  = polval(sampleNum, aAmp, 3);
    681   return 0;
    682 }
    683 
    684 #endif
    685 
    686 #if 0
    687 
    688 int StarMatcher::getPendulInfo(double sampleNum, pendulInfo& info) {
    689   map<double, pendulInfo>::iterator i = pendulInfos.lower_bound(sampleNum);
    690   if (i == pendulInfos.begin() && (*i).second.SN >= sampleNum) return -1;
    691   if (i == pendulInfos.end()   && (*i).second.SN <= sampleNum) return -1;
    692  
    693   if ((*i).second.SN > sampleNum) i--;
    694   pendulInfo inf1 = (*i).second;
    695   i++;
    696   pendulInfo inf2 = (*i).second;
    697  
    698   info.SN = sampleNum;
    699   if (inf2.azPendul - inf1.azPendul > 180)  inf2.azPendul -= 360;
    700   if (inf2.azPendul - inf1.azPendul < -180) inf2.azPendul += 360;
    701   info.azPendul  = inf1.azPendul  + (inf2.azPendul  -  inf1.azPendul) * (sampleNum - inf1.SN) / (inf2.SN - inf1.SN);
    702   if (info.azPendul<0)    info.azPendul += 360;
    703   if (info.azPendul>360)  info.azPendul += 360;
    704   info.angPendul = inf1.angPendul + (inf2.angPendul - inf1.angPendul) * (sampleNum - inf1.SN) / (inf2.SN - inf1.SN);
    705   return 0;
    706 }
    707 
    708 #endif
    709640
    710641
Note: See TracChangeset for help on using the changeset viewer.