22 __all__ = [
"addDetectorBuilderFromConfig",
 
   23            "makeCameraFromPath", 
"makeCameraFromAmpLists"]
 
   27 from ._cameraGeom 
import FOCAL_PLANE, FIELD_ANGLE, PIXELS, TAN_PIXELS, ACTUAL_PIXELS, CameraSys
 
   28 from ._cameraGeom 
import Amplifier
 
   29 from ._camera 
import Camera
 
   30 from ._makePixelToTanPixel 
import makePixelToTanPixel
 
   31 from .pupil 
import PupilFactory
 
   33 cameraSysList = [FIELD_ANGLE, FOCAL_PLANE, PIXELS, TAN_PIXELS, ACTUAL_PIXELS]
 
   34 cameraSysMap = dict((sys.getSysName(), sys) 
for sys 
in cameraSysList)
 
   38     """Build a dictionary of Detector constructor keyword arguments. 
   40     The returned dictionary can be passed as keyword arguments to the Detector 
   41     constructor, providing all required arguments.  However, using these 
   42     arguments directly constructs a Detector with knowledge of only the 
   43     coordinate systems that are *directly* mapped to its own PIXELS coordinate 
   44     system.  To construct Detectors with a shared TransformMap for the full 
   45     Camera, use makeCameraFromCatalogs or makeCameraFromPath instead of 
   46     calling this function or makeDetector directly. 
   50     cameraBuilder : `lsst.afw.cameraGeonm.Camera.Builder` 
   51         Camera builder object to which the new Detector Builder 
   53     detectorConfig : `lsst.pex.config.Config` 
   54         Configuration for this detector. 
   55     amplifiers : `list` [`~lsst.afw.cameraGeom.Amplifier`] 
   56         amplifier information for this detector 
   57     focalPlaneToField : `lsst.afw.geom.TransformPoint2ToPoint2` 
   58         FOCAL_PLANE to FIELD_ANGLE Transform 
   62     detectorBuilder : `lsst.afw.cameraGeom.Detector.InCameraBuilder` 
   63         A builder object for a detector corresponding to the given config, 
   64         associated with the given camera builder object. 
   66     detectorBuilder = cameraBuilder.add(detectorConfig.name, detectorConfig.id)
 
   67     detectorBuilder.fromConfig(detectorConfig)
 
   69     for ampBuilder 
in amplifiers:
 
   70         detectorBuilder.append(ampBuilder)
 
   80     detectorNativeSysPrefix = cameraSysMap.get(detectorConfig.transformDict.nativeSys, PIXELS)
 
   81     assert detectorNativeSysPrefix == PIXELS, 
"Detectors with nativeSys != PIXELS are not supported." 
   83     for toSys, transform 
in transforms.items():
 
   84         detectorBuilder.setTransformFromPixelsTo(toSys, transform)
 
   85     tanPixSys = CameraSys(TAN_PIXELS, detectorConfig.name)
 
   87         bbox=detectorBuilder.getBBox(),
 
   88         orientation=detectorBuilder.getOrientation(),
 
   89         focalPlaneToField=focalPlaneToField,
 
   90         pixelSizeMm=detectorBuilder.getPixelSize(),
 
   93     for toSys, transform 
in transforms.items():
 
   94         detectorBuilder.setTransformFromPixelsTo(toSys, transform)
 
   96     detectorBuilder.setCrosstalk(detectorConfig.getCrosstalk(len(amplifiers)))
 
   98     return detectorBuilder
 
  102     """Make a dictionary of CameraSys: lsst.afw.geom.Transform from a config dict. 
  106     transformConfigDict : value obtained from a `lsst.pex.config.ConfigDictField` 
  107         registry; keys are camera system names. 
  111     transforms : `dict` [`CameraSys` or `CameraSysPrefix`, `lsst.afw.geom.Transform`] 
  112         A dict of CameraSys or CameraSysPrefix: lsst.afw.geom.Transform 
  115     if transformConfigDict 
is not None:
 
  116         for key 
in transformConfigDict:
 
  117             transform = transformConfigDict[key].transform.apply()
 
  118             resMap[CameraSys(key)] = transform
 
  123                        pupilFactoryClass=PupilFactory):
 
  124     """Make a Camera instance from a directory of ampInfo files 
  126     The directory must contain one ampInfo fits file for each detector in cameraConfig.detectorList. 
  127     The name of each ampInfo file must be shortNameFunc(fullDetectorName) + ".fits". 
  131     cameraConfig : `CameraConfig` 
  132         Config describing camera and its detectors. 
  134         Path to ampInfo data files. 
  135     shortNameFunc : callable 
  136         A function that converts a long detector name to a short one. 
  137     pupilFactoryClass : `type`, optional 
  138         Class to attach to camera; default is `lsst.afw.cameraGeom.PupilFactory`. 
  142     camera : `lsst.afw.cameraGeom.Camera` 
  146     for detectorConfig 
in cameraConfig.detectorList.values():
 
  147         shortName = shortNameFunc(detectorConfig.name)
 
  148         ampCatPath = os.path.join(ampInfoPath, shortName + 
".fits")
 
  149         catalog = BaseCatalog.readFits(ampCatPath)
 
  150         ampListDict[detectorConfig.name] = [Amplifier.Builder.fromRecord(record)
 
  151                                             for record 
in catalog]
 
  157                            pupilFactoryClass=PupilFactory):
 
  158     """Construct a Camera instance from a dictionary of detector name: list of 
  163     cameraConfig : `CameraConfig` 
  164         Config describing camera and its detectors. 
  165     ampListDict : `dict` [`str`, `list` [`Amplifier.Builder`]] 
  166         A dictionary of detector name: list of Amplifier.Builder 
  167     pupilFactoryClass : `type`, optional 
  168         Class to attach to camera; `lsst.default afw.cameraGeom.PupilFactory`. 
  172     camera : `lsst.afw.cameraGeom.Camera` 
  175     nativeSys = cameraSysMap[cameraConfig.transformDict.nativeSys]
 
  181     assert nativeSys == FOCAL_PLANE, 
"Cameras with nativeSys != FOCAL_PLANE are not supported." 
  184     cameraBuilder.setPupilFactoryClass(pupilFactoryClass)
 
  187     focalPlaneToField = transformDict[FIELD_ANGLE]
 
  189     for toSys, transform 
in transformDict.items():
 
  190         cameraBuilder.setTransformFromFocalPlaneTo(toSys, transform)
 
  192     for detectorConfig 
in cameraConfig.detectorList.values():
 
  195             detectorConfig=detectorConfig,
 
  196             amplifiers=ampListDict[detectorConfig.name],
 
  197             focalPlaneToField=focalPlaneToField,
 
  200     return cameraBuilder.finish()
 
A helper class for creating and modifying cameras.
def makeCameraFromAmpLists(cameraConfig, ampListDict, pupilFactoryClass=PupilFactory)
def makeTransformDict(transformConfigDict)
def makeCameraFromPath(cameraConfig, ampInfoPath, shortNameFunc, pupilFactoryClass=PupilFactory)
def addDetectorBuilderFromConfig(cameraBuilder, detectorConfig, amplifiers, focalPlaneToField)
def makePixelToTanPixel(bbox, orientation, focalPlaneToField, pixelSizeMm)