lsst.synpipe  15.0-4-g9ee0f43+2
compareModel.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 """
3 Compare the input fake galaxy model to the output one
4 """
5 from __future__ import absolute_import
6 import argparse
7 
8 import numpy as np
9 
10 import astropy.table
11 
12 import lsst.pipe.base
13 import lsst.afw.table
15 import lsst.daf.persistence as dafPersist
16 
17 from .matchFakes import getFakeSources
18 
19 
20 def getParams(record, galType='sersic'):
21  """
22  return the semi-major axis, axis ratio and position angle (in degrees)
23  """
24  fluxType = {'dev': 'cmodel.dev',
25  'exp': 'cmodel.exp',
26  'sersic': 'cmodel',
27  'cmodel': 'cmodel'}[galType]
28 
29  e = lsst.afw.geom.ellipses.Axes(record.get(fluxType + '.ellipse'))
30  q = (e.getB() / e.getA())
31  reff = e.getA()
32  pa = (e.getTheta() * 180.0 / np.pi)
33  return reff, q, pa
34 
35 
36 def getMag(record, fluxType='cmodel'):
37  """
38  return the magnitude and error
39  """
40  flux, fluxerr = record.get(fluxType), record.get(fluxType+'.err')
41  mag, magerr = -2.5 * np.log10(flux), 2.5/np.log(10.0)*fluxerr/flux
42  mag += record.get('zeropoint')
43  return mag, magerr
44 
45 
46 def writeNumpyTable(fakeTable):
47  """Writes output to numpy
48  """
49  npTable = np.recarray(len(fakeTable),
50  dtype={'names': ['id', 'fakeid', 'visit', 'ccd',
51  'cmodelMag', 'expMag',
52  'devMag',
53  'expReff', 'devReff',
54  'expBA', 'devBA',
55  'expPosAng', 'devPosAng',
56  'cmodelMagErr', 'expMagErr',
57  'devMagErr', 'nchild', 'parent'],
58  'formats': [int, int, int, int,
59  float, float,
60  float, float, float, float,
61  float, float, float, float,
62  float, float, int, int]})
63  for indFake, fake in enumerate(fakeTable):
64  npTable[indFake]['id'] = fake.get('id')
65  npTable[indFake]['fakeid'] = fake.get('fakeId')
66  npTable[indFake]['ccd'] = fake.get('ccd')
67  npTable[indFake]['visit'] = fake.get('visit')
68  nameMatch = {'sersic': 'cmodel',
69  'exp': 'cmodel.exp',
70  'cmodel': 'cmodel',
71  'dev': 'cmodel.dev'}
72  for name in ('cmodel', 'exp', 'dev'):
73  m1, m2 = getMag(fake, nameMatch[name]+'.flux')
74  npTable[indFake][name+'Mag'] = m1
75  npTable[indFake][name+'MagErr'] = m2
76  for name in ('exp', 'dev'):
77  params = getParams(fake, name)
78  npTable[indFake][name+'Reff'] = params[0]
79  npTable[indFake][name+'BA'] = params[1]
80  npTable[indFake][name+'PosAng'] = params[2]
81  npTable[indFake]['nchild'] = fake.get('deblend.nchild')
82  npTable[indFake]['parent'] = fake.get('parent')
83  return npTable
84 
85 
86 def main(root, visit, ccds, galType='sersic', output='outputs/'):
87  """
88  main function for controlling fake source comparison
89  """
90  butler = dafPersist.Butler(root)
91  fakeTable = None
92  for ccd in ccds:
93  dataId = {'visit': visit, 'ccd': ccd}
94  try:
95  temp = getFakeSources(butler, dataId, tol=1.0,
96  visit=True, ccd=True)
97  except:
98  continue
99  if fakeTable is None:
100  fakeTable = temp.copy(True)
101  else:
102  fakeTable.extend(temp, True)
103 
104  npTable = writeNumpyTable(fakeTable)
105  rerunName = root.split('/')[-2]
106  fitsTable = astropy.table.Table(npTable).write(output+'/'+rerunName +
107  '_galMags.txt', format='ascii')
108 
109 
110 if __name__ == '__main__':
111  parser = argparse.ArgumentParser()
112  parser.add_argument('root', help="Root directory of data repository")
113  parser.add_argument("visit", type=int, help="Visit")
114  parser.add_argument("--ccd", nargs='+', type=int, help="CCD(s)")
115  parser.add_argument('-g', '--galtype', type=str, dest='galType',
116  choices=['exp', 'dev', 'sersic'])
117  parser.add_argument('-o', '--outputpath', dest='outpath',
118  help='path for output')
119  args = parser.parse_args()
120 
121  main(args.root, args.visit, args.ccd, galType=args.galType,
122  output=args.outpath)
def getMag(record, fluxType='cmodel')
Definition: compareModel.py:36
def getParams(record, galType='sersic')
Definition: compareModel.py:20
def getFakeSources(butler, dataId, tol=1.0, extraCols=('zeropoint', 'visit', 'ccd'), includeMissing=False, footprints=False, radecMatch=None, multiband=False, reffMatch=False, pix=0.168, minRad=None, raCol='RA', decCol='Dec')
Definition: matchFakes.py:225
def writeNumpyTable(fakeTable)
Definition: compareModel.py:46
def main(root, visit, ccds, galType='sersic', output='outputs/')
Definition: compareModel.py:86