IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 12, 2011, 6:06:39 AM (15 years ago)
Author:
eugene
Message:

fix the multifilter analysis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110404/Ohana/src/relphot/src/StarOps.c

    r31262 r31272  
    2929float getMrel (Catalog *catalog, off_t meas, int cat) {
    3030
    31   int Nsec, Nsecfilt, code;
     31  int Nsec, Nsecfilt, photcode;
    3232  int ave;
    3333  float value;
    3434
    3535  ave = catalog[cat].measure[meas].averef;
    36   code = catalog[cat].measure[meas].photcode;
    37 
    38   // XXX DEP : this should use a flag associated with secfilt
    39   if (catalog[cat].average[ave].flags & STAR_BAD) return (NAN); 
     36  photcode = catalog[cat].measure[meas].photcode;
     37
     38  int ecode = GetPhotcodeEquivCodebyCode (photcode);
     39  Nsec = GetPhotcodeNsec(ecode);
     40  Nsecfilt = GetPhotcodeNsecfilt ();
     41
     42  // is this star OK?
     43  if (catalog[cat].secfilt[Nsecfilt*ave+Nsec].flags & STAR_BAD) return (NAN); 
    4044 
    41   Nsec = GetPhotcodeNsec(code);
    42   Nsecfilt = GetPhotcodeNsecfilt ();
    43 
    4445  value = catalog[cat].secfilt[Nsecfilt*ave+Nsec].M;
    4546  return (value);
     
    5253  float Msys, Mcal, Mmos, Mgrid;
    5354  StatType stats;
    54   int Nsec, Nsecfilt, ecode;
    55 
    56   Nsecfilt = GetPhotcodeNsecfilt ();
     55
     56  int Nsecfilt = GetPhotcodeNsecfilt ();
    5757  Nfew = Nsys = Nbad = Ncal = Nmos = Ngrid = 0;
    5858
     
    6464
    6565        int thisCode = photcodes[Ns][0].code;
    66         Nsec = GetPhotcodeNsec(thisCode);
     66        int Nsec = GetPhotcodeNsec(thisCode);
    6767
    6868        /* calculate the average value for a single star */
    69         // XXX this flag should be set by secfilt, not average
    70         if (catalog[i].average[j].flags & STAR_BAD) continue; 
     69
     70        // skip bad stars
     71        if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue;
    7172        m = catalog[i].average[j].measureOffset;
    7273
     
    7475        for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) {
    7576          // skip measurements that do not match the current photcode
    76           ecode = GetPhotcodeEquivCodebyCode (catalog[i].measure[m].photcode);
     77          int ecode = GetPhotcodeEquivCodebyCode (catalog[i].measure[m].photcode);
    7778          if (ecode != thisCode) { continue; }
    7879
     
    123124
    124125        // when performing the grid analysis, STAR_TOOFEW will be set to 1;
    125         // XXX DEP this makes no sense: need a separate flag for each secfilt
    126126        if (N <= STAR_TOOFEW) { /* too few measurements */
    127           catalog[i].average[j].flags |= ID_STAR_FEW;
     127          catalog[i].secfilt[Nsecfilt*j+Nsec].flags |= ID_STAR_FEW;
    128128          Nfew ++;
    129129        } else {
    130           catalog[i].average[j].flags &= ~ID_STAR_FEW;
     130          catalog[i].secfilt[Nsecfilt*j+Nsec].flags &= ~ID_STAR_FEW;
    131131        }       
    132132
     
    408408    for (i = Ntot = 0; i < Ncatalog; i++) {
    409409      for (j = 0; j < catalog[i].Naverage; j++) {
    410         if (catalog[i].average[j].flags & STAR_BAD) continue;
     410        if ( catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD ) continue;
    411411        Xm = catalog[i].secfilt[Nsecfilt*j+Nsec].Xm;
    412412        if (Xm == -1) continue;
     
    434434        mark = (dM > MaxScatter) || (Xm == NAN_S_SHORT) || (Chisq > MaxChisq);
    435435        if (mark) {
    436           catalog[i].average[j].flags |= ID_STAR_POOR;
     436          catalog[i].secfilt[Nsecfilt*j+Nsec].flags |= ID_STAR_POOR;
    437437          Ndel ++;
    438438        } else {
    439           catalog[i].average[j].flags &= ~ID_STAR_POOR;
     439          catalog[i].secfilt[Nsecfilt*j+Nsec].flags &= ~ID_STAR_POOR;
    440440        }
    441441        Nave ++;
     
    492492
    493493        int thisCode = photcodes[Ns][0].code;
    494 
     494        int Nsec = GetPhotcodeNsec(thisCode);
     495       
    495496        /* skip bad stars to prevent them from becoming good (on inner sample) */
    496         if (catalog[i].average[j].flags & STAR_BAD) continue; 
     497        if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue; 
    497498
    498499        /* accumulate list of valid measurements */
     
    582583}
    583584
    584 StatType statsStarN (Catalog *catalog, int Ncatalog, int seccode) {
     585StatType statsStarN (Catalog *catalog, int Ncatalog, int Nsec, int seccode) {
    585586
    586587  off_t j, k, m, Ntot;
     
    589590  float Mcal, Mmos, Mgrid;
    590591  StatType stats;
     592  int N1, N2, N3, N4, N0;
     593  N1 = N2 = N3 = N4 = N0 = 0;
     594
     595  int Nsecfilt = GetPhotcodeNsecfilt ();
    591596
    592597  Ntot = 0;
     
    603608
    604609      /* calculate the average value for a single star */
    605       if (catalog[i].average[j].flags & STAR_BAD) continue; 
     610      if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) { N1++; continue;  }
    606611      m = catalog[i].average[j].measureOffset;
    607 
    608       int ecode = GetPhotcodeEquivCodebyCode (catalog[i].measure[m].photcode);
    609       if (ecode == seccode) continue;
    610612
    611613      N = 0;
    612614      for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) {
     615        int ecode = GetPhotcodeEquivCodebyCode (catalog[i].measure[m].photcode);
     616        if (ecode != seccode) { N0++; continue;}
    613617        Mcal = getMcal  (m, i);
    614         if (isnan(Mcal)) continue;
     618        if (isnan(Mcal)) { N2++; continue;}
    615619        Mmos = getMmos  (m, i);
    616         if (isnan(Mmos)) continue;
     620        if (isnan(Mmos)) { N3++; continue; }
    617621        Mgrid = getMgrid (m, i);
    618         if (isnan(Mgrid)) continue;
     622        if (isnan(Mgrid)) { N4++; continue;}
    619623        N++;
    620624      }
     
    626630  }
    627631
     632  fprintf (stderr, "N1: %d, N2: %d, N3: %d, N4: %d, N0: %d\n", N1, N2, N3, N4, N0);
    628633  liststats (list, dlist, n, &stats);
    629634  free (list);
     
    655660
    656661      /* calculate the average value for a single star */
    657       if (catalog[i].average[j].flags & STAR_BAD) continue; 
     662      if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue; 
    658663       
    659664      Xm = catalog[i].secfilt[Nsecfilt*j+Nsec].Xm;
     
    694699
    695700      /* calculate the average value for a single star */
    696       if (catalog[i].average[j].flags & STAR_BAD) continue; 
     701      if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue; 
    697702
    698703      dM = catalog[i].secfilt[Nsecfilt*j+Nsec].dM;
     
    733738    for (i = 0; i < Ncatalog; i++) {
    734739      for (j = 0; j < catalog[i].Naverage; j++) {
    735         if (catalog[i].average[j].flags & STAR_BAD) continue; 
     740        if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue; 
    736741        dMrel = catalog[i].secfilt[Nsecfilt*j+Nsec].dM;
    737742        bin = dMrel / 0.00025;
     
    773778    for (i = 0; i < Ncatalog; i++) {
    774779      for (j = 0; j < catalog[i].Naverage; j++) {
    775         if (catalog[i].average[j].flags & STAR_BAD) continue;
     780        if (catalog[i].secfilt[Nsecfilt*j+Nsec].flags & STAR_BAD) continue;
    776781        xlist[N] = catalog[i].secfilt[Nsecfilt*j+Nsec].M;
    777782        value    = catalog[i].secfilt[Nsecfilt*j+Nsec].Xm;
Note: See TracChangeset for help on using the changeset viewer.