Changeset 612 in Sophya for trunk/Poubelle/archTOI.old/starmatcher.cc
- Timestamp:
- Nov 22, 1999, 10:43:44 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Poubelle/archTOI.old/starmatcher.cc
r581 r612 11 11 12 12 #define STARDUMP 13 14 #define TEchan TFin 13 15 14 16 #include <math.h> … … 271 273 272 274 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 274 277 double elv0 = elv - GondolaGeom::sstPixelHeight * lastStar.NoDiode; 275 278 if (fabs(elv0-GondolaGeom::elevSST0) > 0.25) continue; // Might be too strong … … 568 571 int StarMatcher::getPendulInfo(double sampleNum, pendulInfo& info) { 569 572 573 static double lastSN = -1; 574 static pendulInfo lastPendul; 575 576 if (sampleNum == lastSN) { 577 info = lastPendul; 578 return 0; 579 } 580 570 581 PolFitClip2 fitPendul(30,2); 571 582 572 583 map<double, pendulInfo>::iterator i = pendulInfos.lower_bound(sampleNum); 573 584 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; 577 597 578 598 int nn=0; 579 599 double aziprev=0, azicur=0, azi0=0; 580 600 for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.begin(); ii--) { 581 nn++;582 601 pendulInfo inf1 = (*ii).second; 602 if (fabs(inf1.SN - sampleNum) > 1000) continue; 583 603 aziprev = azicur; 584 604 azicur = inf1.azPendul; 605 nn++; 585 606 if (nn==1) azi0 = azicur; 586 607 if (nn>1 && azicur - aziprev > 180) azicur -= 360; … … 593 614 if (i != pendulInfos.end()) i++; 594 615 for (map<double, pendulInfo>::iterator ii=i; ii != pendulInfos.end(); ii++) { 595 nn++;596 616 pendulInfo inf1 = (*ii).second; 617 if (fabs(inf1.SN - sampleNum) > 1000) continue; 597 618 aziprev = azicur; 598 619 azicur = inf1.azPendul; 620 nn++; 599 621 if (nn>1 && azicur - aziprev > 180) azicur -= 360; 600 622 if (nn>1 && azicur - aziprev < -180) azicur += 360; … … 610 632 if (info.azPendul < 0) info.azPendul += 360; 611 633 info.angPendul = fitPendul.valueY(sampleNum); 634 635 lastSN = sampleNum; 636 lastPendul = info; 637 612 638 return 0; 613 639 } 614 615 #if 0616 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 #endif685 686 #if 0687 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 #endif709 640 710 641
Note:
See TracChangeset
for help on using the changeset viewer.