LSSTApplications  17.0+11,17.0+34,17.0+56,17.0+57,17.0+59,17.0+7,17.0-1-g377950a+33,17.0.1-1-g114240f+2,17.0.1-1-g4d4fbc4+28,17.0.1-1-g55520dc+49,17.0.1-1-g5f4ed7e+52,17.0.1-1-g6dd7d69+17,17.0.1-1-g8de6c91+11,17.0.1-1-gb9095d2+7,17.0.1-1-ge9fec5e+5,17.0.1-1-gf4e0155+55,17.0.1-1-gfc65f5f+50,17.0.1-1-gfc6fb1f+20,17.0.1-10-g87f9f3f+1,17.0.1-11-ge9de802+16,17.0.1-16-ga14f7d5c+4,17.0.1-17-gc79d625+1,17.0.1-17-gdae4c4a+8,17.0.1-2-g26618f5+29,17.0.1-2-g54f2ebc+9,17.0.1-2-gf403422+1,17.0.1-20-g2ca2f74+6,17.0.1-23-gf3eadeb7+1,17.0.1-3-g7e86b59+39,17.0.1-3-gb5ca14a,17.0.1-3-gd08d533+40,17.0.1-30-g596af8797,17.0.1-4-g59d126d+4,17.0.1-4-gc69c472+5,17.0.1-6-g5afd9b9+4,17.0.1-7-g35889ee+1,17.0.1-7-gc7c8782+18,17.0.1-9-gc4bbfb2+3,w.2019.22
LSSTDataManagementBasePackage
makeBlendedCat.py
Go to the documentation of this file.
1 """Make a catalog of fakes that are highly blended."""
2 
3 import os
4 import random
5 import argparse
6 
7 import numpy as np
8 from astropy.table import Table, Column
9 
10 
11 def disturbRaDec(num, mu=0.6, sigma=0.6):
12  """Disturb the coordinate a little bit."""
13  return (np.random.normal(mu, sigma, num) / 3600.0)
14 
15 
16 def makeBlendedCat(fakeCat, realCat, raCol='ra', decCol='dec',
17  sigma=0.6, mu=0.6):
18  """Make a highly blended version of fake catalog."""
19  # Fake catalog
20  if not os.path.isfile(fakeCat):
21  raise Exception('# Can not find input fake catalog : %s' % fakeCat)
22  else:
23  fakeTab = Table.read(fakeCat, format='fits')
24  nFake = len(fakeTab)
25  print("# There are %d fake galaxies in the catalog" % nFake)
26  # Name of the output catalog
27  blendTab = fakeCat.replace('.fits', '_highb.fits')
28 
29  # Real catalog
30  if not os.path.isfile(realCat):
31  raise Exception('# Can not find input real catalog : %s' % realCat)
32  else:
33  realTab = Table.read(realCat, format='fits')
34  nReal = len(realTab)
35  print("# There are %d real galaxies in the catalog" % nReal)
36 
37  # Randomly select nFake galaxies from the realCat
38  indices = random.sample(list(range(nReal)), nFake)
39 
40  # Replace the RA, DEC with a small shift
41  fakeTab.add_column(Column(realTab[indices][raCol], name='RA_ori'))
42  fakeTab.add_column(Column(realTab[indices][decCol], name='Dec_ori'))
43 
44  fakeTab['RA'] = (realTab[indices][raCol] + disturbRaDec(nFake,
45  mu=mu,
46  sigma=sigma))
47  fakeTab['Dec'] = (realTab[indices][decCol] + disturbRaDec(nFake,
48  mu=mu,
49  sigma=sigma))
50 
51  # Save the new catalog
52  fakeTab.write(blendTab, format='fits', overwrite=True)
53 
54  return fakeTab
55 
56 
57 if __name__ == '__main__':
58 
59  parser = argparse.ArgumentParser()
60  parser.add_argument("fakeCat", help="Input catalog of fake objects")
61  parser.add_argument("realCat", help="Catalog of real objects")
62  parser.add_argument('--ra', '--raCol', dest='raCol',
63  help='Column for RA in realCat',
64  default='ra')
65  parser.add_argument('--dec', '--decCol', dest='decCol',
66  help='Column for DEC in realCat',
67  default='dec')
68  parser.add_argument('--mu', dest='mu',
69  help='mu of a normal distribution',
70  default=0.6, type=float)
71  parser.add_argument('--sigma', dest='sigma',
72  help='sigma of a normal distribution',
73  default=0.6, type=float)
74 
75  args = parser.parse_args()
76 
77  makeBlendedCat(args.fakeCat, args.realCat,
78  raCol=args.raCol, decCol=args.decCol,
79  sigma=args.sigma, mu=args.mu)
def makeBlendedCat(fakeCat, realCat, raCol='ra', decCol='dec', sigma=0.6, mu=0.6)
def disturbRaDec(num, mu=0.6, sigma=0.6)
daf::base::PropertyList * list
Definition: fits.cc:885