Changeset 12012
- Timestamp:
- Feb 23, 2007, 8:34:37 AM (19 years ago)
- Location:
- branches/dvo-mods-2007-02/Ohana/src
- Files:
-
- 17 edited
-
addstar/src/find_matches.c (modified) (4 diffs)
-
addstar/src/find_matches_closest.c (modified) (3 diffs)
-
addstar/src/find_matches_refstars.c (modified) (2 diffs)
-
getstar/src/select_by_region.c (modified) (1 diff)
-
libautocode/def/average.d (modified) (3 diffs)
-
opihi/dvo/compare.c (modified) (1 diff)
-
opihi/dvo/dmt.c (modified) (1 diff)
-
opihi/dvo/gstar.c (modified) (3 diffs)
-
opihi/dvo/imdata.c (modified) (2 diffs)
-
opihi/dvo/paverage.c (modified) (1 diff)
-
relphot/include/relphot.h (modified) (1 diff)
-
relphot/src/StarOps.c (modified) (9 diffs)
-
relphot/src/bcatalog.c (modified) (1 diff)
-
relphot/src/initialize.c (modified) (1 diff)
-
relphot/src/plot_scatter.c (modified) (1 diff)
-
relphot/src/setMrelFinal.c (modified) (1 diff)
-
uniphot/src/update_catalog.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches.c
r12008 r12012 15 15 16 16 /* photcode data - must by of type DEP; options.photcode is equiv PRI/SEC photcode */ 17 /* this function requires incoming stars to have the same photcode.equiv value */17 /* this function requires incoming stars to have the same (valid!) photcode.equiv value */ 18 18 Nsecfilt = GetPhotcodeNsecfilt (); 19 19 Nsec = GetPhotcodeNsec (options.photcode); … … 183 183 catalog[0].measure[Nmeas].theta = MIN ((0xffff/360.0)*stars[N].df, NO_MAG); 184 184 185 /* it is not valid to pass PRI/SEC/REF photcodes to this routine */ 186 /* check for entries in the secfilt lists */ 187 Mcat = PhotCat (&catalog[0].measure[Nmeas]); 188 Mval = (Nsec == -1) ? &catalog[0].average[n].M : &catalog[0].secfilt[n*Nsecfilt+Nsec].M; 189 if (*Mval == NO_MAG) *Mval = Mcat; 185 /* set the average magnitude if not already set and photcode.equiv is valid */ 190 186 /* in UPDATE mode, this value is not saved; use relphot to recalculate */ 187 if (Nsec > -1) { 188 if (catalog[0].secfilt[n*Nsecfilt+Nsec].M != NO_MAG) { 189 catalog[0].secfilt[n*Nsecfilt+Nsec].M = PhotCat (&catalog[0].measure[Nmeas]); 190 } 191 } 191 192 192 193 /* adds the measurement to the calibration if appropriate color terms are found */ … … 248 249 catalog[0].average[Nave].R = stars[N].R; 249 250 catalog[0].average[Nave].D = stars[N].D; 250 catalog[0].average[Nave].M = NO_MAG; 251 catalog[0].average[Nave].dM = NO_MAG; 251 catalog[0].average[Nave].Xp = 0; 252 252 catalog[0].average[Nave].Nm = 1; 253 253 catalog[0].average[Nave].Nn = 0; 254 catalog[0].average[Nave].Xp = NO_MAG;255 catalog[0].average[Nave].Xm = NO_MAG;256 catalog[0].average[Nave].Xg = NO_MAG;257 254 catalog[0].average[Nave].offset = Nmeas; 258 255 catalog[0].average[Nave].missing = -1; … … 298 295 /* XXX replace df here with theta, right? */ 299 296 300 Mcat = PhotCat (&catalog[0].measure[Nmeas]); 301 Mval = (Nsec == -1) ? &catalog[0].average[Nave].M : &catalog[0].secfilt[Nave*Nsecfilt+Nsec].M; 302 if (*Mval == NO_MAG) *Mval = Mcat; 297 /* set the average magnitude if not already set and photcode.equiv is valid */ 298 /* in UPDATE mode, this value is not saved; use relphot to recalculate */ 299 if (Nsec > -1) { 300 catalog[0].secfilt[Nave*Nsecfilt+Nsec].M = PhotCat (&catalog[0].measure[Nmeas]); 301 } 303 302 304 303 /* next[Nmeas] should always be -1 in this context (it is always the only -
branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches_closest.c
r12008 r12012 201 201 catalog[0].measure[Nmeas].theta = MIN ((0xffff/360.0)*stars[N].df, NO_MAG); 202 202 203 /* it is not valid to pass PRI/SEC/REF photcodes to this routine */ 204 /* check for entries in the secfilt lists */ 205 Mcat = PhotCat (&catalog[0].measure[Nmeas]); 206 Mval = (Nsec == -1) ? &catalog[0].average[n].M : &catalog[0].secfilt[n*Nsecfilt+Nsec].M; 207 if (*Mval == NO_MAG) *Mval = Mcat; 203 /* set the average magnitude if not already set and photcode.equiv is valid */ 208 204 /* in UPDATE mode, this value is not saved; use relphot to recalculate */ 205 if (Nsec > -1) { 206 if (catalog[0].secfilt[n*Nsecfilt+Nsec].M != NO_MAG) { 207 catalog[0].secfilt[n*Nsecfilt+Nsec].M = PhotCat (&catalog[0].measure[Nmeas]); 208 } 209 } 209 210 210 211 /* adds the measurement to the calibration if appropriate color terms are found */ … … 246 247 catalog[0].average[Nave].R = stars[N].R; 247 248 catalog[0].average[Nave].D = stars[N].D; 248 catalog[0].average[Nave].M = NO_MAG; 249 catalog[0].average[Nave].dM = NO_MAG; 249 catalog[0].average[Nave].Xp = 0; 250 250 catalog[0].average[Nave].Nm = 1; 251 251 catalog[0].average[Nave].Nn = 0; 252 catalog[0].average[Nave].Xp = NO_MAG;253 catalog[0].average[Nave].Xm = NO_MAG;254 catalog[0].average[Nave].Xg = NO_MAG;255 252 catalog[0].average[Nave].offset = Nmeas; 256 253 catalog[0].average[Nave].missing = -1; … … 295 292 catalog[0].measure[Nmeas].theta = MIN ((0xffff/360.0)*stars[N].df, NO_ERR); 296 293 297 Mcat = PhotCat (&catalog[0].measure[Nmeas]); 298 Mval = (Nsec == -1) ? &catalog[0].average[Nave].M : &catalog[0].secfilt[Nave*Nsecfilt+Nsec].M; 299 if (*Mval == NO_MAG) *Mval = Mcat; 294 /* set the average magnitude if not already set and photcode.equiv is valid */ 295 /* in UPDATE mode, this value is not saved; use relphot to recalculate */ 296 if (Nsec > -1) { 297 catalog[0].secfilt[Nave*Nsecfilt+Nsec].M = PhotCat (&catalog[0].measure[Nmeas]); 298 } 300 299 301 300 /* next[Nmeas] should always be -1 in this context (it is always the only -
branches/dvo-mods-2007-02/Ohana/src/addstar/src/find_matches_refstars.c
r12008 r12012 212 212 catalog[0].average[Nave].R = stars[N][0].R; 213 213 catalog[0].average[Nave].D = stars[N][0].D; 214 catalog[0].average[Nave].Xp = 0; 215 catalog[0].average[Nave].Nm = 1; 216 catalog[0].average[Nave].Nn = 0; 217 catalog[0].average[Nave].offset = Nmeas; 218 catalog[0].average[Nave].missing = -1; 219 catalog[0].average[Nave].code = 0; 214 220 215 221 if (ACCEPT_MOTION) { … … 233 239 } 234 240 235 catalog[0].average[Nave].M = NO_MAG;236 catalog[0].average[Nave].dM = NO_MAG;237 catalog[0].average[Nave].Nm = 1;238 catalog[0].average[Nave].Nn = 0;239 catalog[0].average[Nave].Xp = NO_MAG;240 catalog[0].average[Nave].Xm = NO_MAG;241 catalog[0].average[Nave].Xg = NO_MAG;242 catalog[0].average[Nave].offset = Nmeas;243 catalog[0].average[Nave].missing = -1;244 catalog[0].average[Nave].code = 0;245 246 241 for (j = 0; j < Nsecfilt; j++) { 247 242 catalog[0].secfilt[Nave*Nsecfilt+j].M = NO_MAG; -
branches/dvo-mods-2007-02/Ohana/src/getstar/src/select_by_region.c
r9630 r12012 38 38 if (D > region[0].Dmax) continue; 39 39 40 if (MagLimitUse && (catalog[0].average[i].M > MagLimitValue)) continue; 40 /* XXX add photcode as argument to MagLimitUse */ 41 if (MagLimitUse && (catalog[0].secfilt[Nsecfilt*i].M > MagLimitValue)) continue; 41 42 42 43 output[0].average[Nave] = catalog[0].average[i]; -
branches/dvo-mods-2007-02/Ohana/src/libautocode/def/average.d
r12008 r12012 2 2 EXTNAME DVO_AVERAGE 3 3 TYPE BINTABLE 4 SIZE 844 SIZE 72 5 5 DESCRIPTION DVO Average Object Table 6 6 … … 19 19 FIELD dP, PAR_ERR, float, parallax error, arcsec 20 20 21 FIELD M, MAG, float, primary mag, mag 22 FIELD dM, MAG_ERR, float, error on primary mag, mag 21 # XXX drop the old primary magnitude concept 22 # FIELD M, MAG, float, primary mag, mag 23 # FIELD dM, MAG_ERR, float, error on primary mag, mag 24 # FIELD Xm, CHISQ_MAG, short, chisq for primary mag, [100*log(value)] 25 # FIELD Xg, CHISQ_GAL, short, chisq for galaxy mags, [100*log(value)] 26 23 27 FIELD Xp, SIGMA_POS, short, position scatter, 1/100 arcsec 24 FIELD Xm, CHISQ_MAG, short, chisq for primary mag, [100*log(value)]25 FIELD Xg, CHISQ_GAL, short, chisq for galaxy mags, [100*log(value)]26 28 FIELD Nm, NMEAS, unsigned short, number of measures 27 29 FIELD Nn, NMISS, unsigned short, number of missings … … 43 45 44 46 # the DVO object IDs are generated internally and are not equivalent to the PSPS object IDs 47 # probably need to add position chisq -
branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/compare.c
r7917 r12012 38 38 rvec[0].elements[Nmatch] = catlog1[0].average[i].R; 39 39 dvec[0].elements[Nmatch] = catlog1[0].average[i].D; 40 mvec[0].elements[Nmatch] = catlog1[0].average[i].M;40 // mvec[0].elements[Nmatch] = catlog1[0].average[i].M; 41 41 drvec[0].elements[Nmatch] = dX; 42 42 ddvec[0].elements[Nmatch] = dY; 43 dmvec[0].elements[Nmatch] = catlog1[0].average[i].M - catlog2[0].average[j].M;43 // dmvec[0].elements[Nmatch] = catlog1[0].average[i].M - catlog2[0].average[j].M; 44 44 Nmatch ++; 45 45 if (Nmatch == NMATCH - 1) { -
branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/dmt.c
r12008 r12012 82 82 if (catalog.average[i].Nm != 3) continue; 83 83 m = catalog.average[i].offset; 84 M0 = (Ns == -1) ? catalog.average[i].M: catalog.secfilt[i*Nsec+Ns].M;84 M0 = (Ns == -1) ? NO_MAG : catalog.secfilt[i*Nsec+Ns].M; 85 85 M1 = PhotCat (&catalog.measure[m+0]); 86 86 M2 = PhotCat (&catalog.measure[m+1]); -
branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/gstar.c
r12008 r12012 259 259 case 0: /* average mags */ 260 260 if (seq == -1) { 261 print_value ( average[0].M, average[0].M);261 print_value (NO_MAG, NO_MAG); 262 262 } else { 263 263 print_value (secfilt[seq].M, secfilt[seq].M); … … 267 267 case 1: /* average mags errors */ 268 268 if (seq == -1) { 269 print_value ( average[0].dM, average[0].dM);269 print_value (NO_MAG, NO_MAG); 270 270 } else { 271 271 print_value (secfilt[seq].dM, secfilt[seq].dM); … … 275 275 case 2: /* average mag chisq */ 276 276 if (seq == -1) { 277 print_value ( pow (10.0, 0.01*average[0].Xm), average[0].Xm);277 print_value (NO_MAG, NO_MAG); 278 278 } else { 279 279 print_value (pow (10.0, 0.01*secfilt[seq].Xm), secfilt[seq].Xm); -
branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/imdata.c
r12008 r12012 39 39 } 40 40 } 41 42 gprint (GP_ERR, "function is poorly defined; disabled and may be removed\n"); 43 return (FALSE); 41 44 42 45 if (argc != 4) { … … 179 182 if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue; 180 183 n = catalog.measure[i].averef; 181 vec[0].elements[N] = catalog.average[n].M;184 // vec[0].elements[N] = catalog.average[n].M; 182 185 N++; 183 186 } -
branches/dvo-mods-2007-02/Ohana/src/opihi/dvo/paverage.c
r12008 r12012 116 116 while (average[i].R > Rmax) average[i].R -= 360.0; 117 117 118 mag = (Nsec == -1) ? average[i].M: secfilt[i*Nsecfilt+Nsec].M;118 mag = (Nsec == -1) ? NO_MAG : secfilt[i*Nsecfilt+Nsec].M; 119 119 Zvec[Npts] = MIN (1.0, MAX (0.01, (mag - Mz) / Mr)); 120 120 if (LimExclude && (Zvec[Npts] > 0.99)) continue; -
branches/dvo-mods-2007-02/Ohana/src/relphot/include/relphot.h
r10506 r12012 84 84 85 85 PhotCode *photcode; 86 int PhotPrimary;87 86 int PhotNsec; 88 87 int PhotSec; -
branches/dvo-mods-2007-02/Ohana/src/relphot/src/StarOps.c
r12008 r12012 28 28 if (catalog[cat].average[ave].code & STAR_BAD) return (NO_MAG); 29 29 30 value = PhotPrimary ? catalog[cat].average[ave].M :catalog[cat].secfilt[PhotNsec*ave+PhotSec].M;30 value = catalog[cat].secfilt[PhotNsec*ave+PhotSec].M; 31 31 return (value); 32 32 } … … 76 76 liststats (list, dlist, N, &stats); 77 77 78 if (PhotPrimary) { 79 catalog[i].average[j].M = stats.mean; 80 catalog[i].average[j].dM = stats.sigma; 81 catalog[i].average[j].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 82 } else { 83 catalog[i].secfilt[PhotNsec*j+PhotSec].M = stats.mean; 84 catalog[i].secfilt[PhotNsec*j+PhotSec].dM = stats.sigma; 85 catalog[i].secfilt[PhotNsec*j+PhotSec].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 86 } 78 catalog[i].secfilt[PhotNsec*j+PhotSec].M = stats.mean; 79 catalog[i].secfilt[PhotNsec*j+PhotSec].dM = stats.sigma; 80 catalog[i].secfilt[PhotNsec*j+PhotSec].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 87 81 } 88 82 } … … 139 133 140 134 /* use sigma or error in dM for output? */ 141 if (PhotPrimary) { 142 catalog[i].average[j].M = stats.mean; 143 catalog[i].average[j].dM = MAX (stats.sigma, stats.error); 144 catalog[i].average[j].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 145 } else { 146 catalog[i].secfilt[PhotNsec*j+PhotSec].M = stats.mean; 147 catalog[i].secfilt[PhotNsec*j+PhotSec].dM = MAX (stats.error, stats.sigma); 148 catalog[i].secfilt[PhotNsec*j+PhotSec].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 149 } 135 catalog[i].secfilt[PhotNsec*j+PhotSec].M = stats.mean; 136 catalog[i].secfilt[PhotNsec*j+PhotSec].dM = MAX (stats.error, stats.sigma); 137 catalog[i].secfilt[PhotNsec*j+PhotSec].Xm = (stats.Nmeas > 1) ? 100.0*log10(stats.chisq) : NO_MAG; 150 138 } 151 139 } … … 205 193 for (j = 0; j < catalog[i].Naverage; j++) { 206 194 if (catalog[i].average[j].code & STAR_BAD) continue; 207 Xm = PhotPrimary ? catalog[i].average[j].Xm :catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;195 Xm = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm; 208 196 if (Xm == -1) continue; 209 197 Chisq = pow (10.0, 0.01*Xm); 210 198 xlist[Ntot] = Chisq; 211 slist[Ntot] = PhotPrimary ? catalog[i].average[j].dM :catalog[i].secfilt[PhotNsec*j+PhotSec].dM;199 slist[Ntot] = catalog[i].secfilt[PhotNsec*j+PhotSec].dM; 212 200 dlist[Ntot] = 1; 213 201 Ntot ++; … … 225 213 for (i = 0; i < Ncatalog; i++) { 226 214 for (j = 0; j < catalog[i].Naverage; j++) { 227 dM = PhotPrimary ? catalog[i].average[j].dM :catalog[i].secfilt[PhotNsec*j+PhotSec].dM;228 Xm = PhotPrimary ? catalog[i].average[j].Xm :catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;215 dM = catalog[i].secfilt[PhotNsec*j+PhotSec].dM; 216 Xm = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm; 229 217 Chisq = pow (10.0, 0.01*Xm); 230 218 mark = (dM > MaxScatter) || (Xm == NO_MAG) || (Chisq > MaxChisq); … … 422 410 if (catalog[i].average[j].code & STAR_BAD) continue; 423 411 424 Xm = PhotPrimary ? catalog[i].average[j].Xm :catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;412 Xm = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm; 425 413 if (Xm == NO_MAG) continue; 426 414 list[n] = pow (10.0, 0.01*Xm); … … 458 446 if (catalog[i].average[j].code & STAR_BAD) continue; 459 447 460 dM = PhotPrimary ? catalog[i].average[j].dM :catalog[i].secfilt[PhotNsec*j+PhotSec].dM;448 dM = catalog[i].secfilt[PhotNsec*j+PhotSec].dM; 461 449 list[n] = dM; 462 450 dlist[n] = 1; … … 487 475 for (j = 0; j < catalog[i].Naverage; j++) { 488 476 if (catalog[i].average[j].code & STAR_BAD) continue; 489 dMrel = PhotPrimary ? catalog[i].average[j].dM :catalog[i].secfilt[PhotNsec*j+PhotSec].dM;477 dMrel = catalog[i].secfilt[PhotNsec*j+PhotSec].dM; 490 478 bin = dMrel / 0.00025; 491 479 bin = MAX (0, MIN (NBIN-1, bin)); … … 518 506 for (j = 0; j < catalog[i].Naverage; j++) { 519 507 if (catalog[i].average[j].code & STAR_BAD) continue; 520 xlist[N] = PhotPrimary ? catalog[i].average[j].M :catalog[i].secfilt[PhotNsec*j+PhotSec].M;521 value = PhotPrimary ? catalog[i].average[j].Xm :catalog[i].secfilt[PhotNsec*j+PhotSec].Xm;508 xlist[N] = catalog[i].secfilt[PhotNsec*j+PhotSec].M; 509 value = catalog[i].secfilt[PhotNsec*j+PhotSec].Xm; 522 510 if (value == NO_MAG) continue; 523 511 ylist[N] = 0.01*value; -
branches/dvo-mods-2007-02/Ohana/src/relphot/src/bcatalog.c
r12008 r12012 28 28 if (RESET) { 29 29 float *p; 30 p = (PhotPrimary) ? &subcatalog[0].average[Naverage].M : &subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].M; 31 *p = NO_MAG; 32 p = (PhotPrimary) ? &subcatalog[0].average[Naverage].dM : &subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].dM; 33 *p = NO_MAG; 30 subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].M = NO_MAG; 31 subcatalog[0].secfilt[PhotNsec*Naverage+PhotSec].dM = NO_MAG; 34 32 subcatalog[0].average[Naverage].code &= ~ID_STAR_FEW; 35 33 subcatalog[0].average[Naverage].code &= ~ID_STAR_POOR; -
branches/dvo-mods-2007-02/Ohana/src/relphot/src/initialize.c
r7080 r12012 18 18 } 19 19 20 PhotPrimary = (photcode[0].type == PHOT_PRI);21 20 PhotNsec = GetPhotcodeNsecfilt (); 22 21 PhotSec = GetPhotcodeNsec (photcode[0].code); -
branches/dvo-mods-2007-02/Ohana/src/relphot/src/plot_scatter.c
r12008 r12012 36 36 if ((Mgrid = getMgrid (m, i)) == NO_MAG) continue; 37 37 38 Mrel = PhotPrimary ? catalog[i].average[j].M :catalog[i].secfilt[PhotNsec*j+PhotSec].M;38 Mrel = catalog[i].secfilt[PhotNsec*j+PhotSec].M; 39 39 xlist[N] = Mrel; 40 40 ylist[N] = PhotSys (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]) - Mcal - Mmos - Mgrid - Mrel; -
branches/dvo-mods-2007-02/Ohana/src/relphot/src/setMrelFinal.c
r12008 r12012 11 11 12 12 for (i = 0; i < catalog[0].Naverage; i++) { 13 p = (PhotPrimary) ? &catalog[0].average[i].M : &catalog[0].secfilt[PhotNsec*i+PhotSec].M; 14 *p = NO_MAG; 15 p = (PhotPrimary) ? &catalog[0].average[i].dM : &catalog[0].secfilt[PhotNsec*i+PhotSec].dM; 16 *p = NO_MAG; 17 q = (PhotPrimary) ? &catalog[0].average[i].Xm : &catalog[0].secfilt[PhotNsec*i+PhotSec].Xm; 18 *q = NO_MAG; 13 catalog[0].secfilt[PhotNsec*i+PhotSec].M = NO_MAG; 14 catalog[0].secfilt[PhotNsec*i+PhotSec].dM = NO_MAG; 15 catalog[0].secfilt[PhotNsec*i+PhotSec].Xm = NO_MAG; 19 16 20 17 m = catalog[0].average[i].offset; -
branches/dvo-mods-2007-02/Ohana/src/uniphot/src/update_catalog.c
r12008 r12012 4 4 5 5 int i, j, m, found; 6 int Primary,Nsec, Nsecfilt;6 int Nsec, Nsecfilt; 7 7 float *Mp; 8 8 PhotCode *code; 9 9 10 Primary = (photcode[0].type == PHOT_PRI);11 10 Nsec = GetPhotcodeNsec (photcode[0].code); 12 11 Nsecfilt = GetPhotcodeNsecfilt (); … … 15 14 for (i = 0; i < catalog[0].Naverage; i++) { 16 15 17 Mp = Primary ? &catalog[0].average[i].M : &catalog[0].secfilt[i*Nsecfilt+Nsec].M; 18 if (*Mp != NO_MAG) *Mp += sgroup[0].M; 16 if (catalog[0].secfilt[i*Nsecfilt+Nsec].M != NO_MAG) { 17 catalog[0].secfilt[i*Nsecfilt+Nsec].M += sgroup[0].M; 18 } 19 19 20 20 m = catalog[0].average[i].offset;
Note:
See TracChangeset
for help on using the changeset viewer.
