Changeset 39958 for trunk/doc/release.2015/ps1.datasystem/datasystem.tex
- Timestamp:
- Jan 27, 2017, 6:55:08 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/release.2015/ps1.datasystem/datasystem.tex
r39894 r39958 87 87 \keywords{Surveys:\PSONE } 88 88 89 \section{INTRODUCTION}\label{sec:intro} 89 \section{Introduction} 90 \label{sec: intro} 90 91 91 92 This is the second in a series of seven papers describing the 92 93 Pan-STARRS1 Surveys, the data reduction techiques and the resulting 93 94 data products. This paper (Paper II) describes how the various data 94 processing stages are organised and implemented in the Imag ing95 processing stages are organised and implemented in the Image 95 96 Processing Pipeline (IPP), including details of the the processing 96 database which is a critical element in the IPP infrastructure .97 database which is a critical element in the IPP infrastructure. 97 98 98 99 %Chambers et al. 2017 (Paper I) … … 142 143 described in detail in \cite{2012ApJ...750...99T}. 143 144 145 The Pan-STARRS Image Processing Pipeline consists of a suite of 146 software programs and data systems that are designed to reduce 147 astronomical images, with a focus on parallelization necessary to 148 speed the processing of the large images produced by the GPC1 camera. 149 Part of this parallelization is derived from the fact that this camera 150 consists of 60 independent orthogonal transfer array (OTA) devices, 151 and can therefore be processed simultaneously. Although there are 152 multiple stages that operate on an entire exposure at once, the 153 majority of stages operate only on smaller segments of a full exposure 154 to allow the processing tasks to be spread over the machines in the 155 processing cluster. 156 157 This paper presents a description of the IPP data handling system. 158 Section \ref{sec: subsystems} describes the major IPP subsystems that 159 underlie the main pipeline, providing a set of common interfaces and 160 tools used at multiple stages. The main processing stages of the 161 pipeline are described in Section \ref{sec: stages}, although all 162 exposures may not necessarily pass through each of these stages. The 163 hardware systems that have done the processing for the PV3 data 164 release are listed in Section \ref{sec: hardware}, with some details 165 on the scale of computing needed to reduce this large number of 166 exposures. Finally, Section \ref{sec: discussion} presents a 167 discussion of some of the lessons learned in the creation of the IPP, 168 and its utility in reducing data from other cameras and telescopes. 169 144 170 {\color{red} {\em Note: These papers are being placed on arXiv.org to 145 171 provide crucial support information at the time of the public … … 151 177 152 178 \section{IPP Software Subsystems} 179 \label{sec: subsystems} 180 181 The IPP relies on a number of common libraries and programs to handle 182 various tasks that are shared between multiple stages of the 183 processing. These subsystems are described in this section, to 184 provide an introduction to these essential components that underlie 185 the rest of the pipeline. 153 186 154 187 \subsection{Processing Database} 188 \label{subsec: database} 155 189 156 190 A critical element in the Pan-STARRS IPP infrastructure is the … … 163 197 back to the database. In this way, the database records this history 164 198 of the processing, and also provides the information needed to 165 successive processing stages to begin their own tasks. 199 successive processing stages to begin their own tasks. 166 200 167 201 The processing database is colloquially referred to as the `gpc1' … … 169 203 processing of images and data products related to the PS1 GPC1 camera. 170 204 This same database engine also has instances for other cameras 171 processed by the IPP, e.g., GPC2, the test cameras TC1, TC3, the172 Imaging Sky Probe (ISP) , etc.205 processed by the IPP, e.g., GPC2, the test cameras TC1, TC3, and the 206 Imaging Sky Probe (ISP). 173 207 174 208 Within the processing database, the various processing stages are 175 209 represented as a set of tables. In general, there is a top level 176 table which defines the conceptual list of processing items either to 177 be done, in progress, or completed. An associated table lists the 178 details of elements which have been processed. For example, one 179 critical stage is the Chip processing stage, discussed below, in which 180 the individual chips from an exposure are detrended and sources are 181 detected. Within the gpc1 database, there is a top-level table called 182 `chipRun' in which each exposure has a single entry. Associated with 183 this table is the `chipProcessedImfile' table, which contains one row 184 for each of the (up to 60) chips associated with the exposure. The 185 top-level tables, such as chipRun, are populated once the system has 186 decided that a specific item (e.g., an exposure) should be processed 187 at that stage. Initially, the entry is given a state of `run', 188 denoting that the exposure is ready to be processed. The low-level 189 table entries, such as the chipProcessedImfile entries, are only 190 populated once the element (e.g., the chip) has been processed by the 191 analysis system. Once all elements for a given stage, e.g., chips in 192 this case, are completed, then the status of the top-level table entry 193 (chipRun) are switched from `run' to `done'. 194 195 If the analysis of an element (e.g., chip) completed successfully, 196 then the corresponding table row (e.g., chipProcessedImfile) is listed 197 with a fault of 0. If the analysis failed, then a non-zero fault is 198 recorded. An analysis which results in a fault is one in which the 199 failure is thought to be temporary. For example, if a computer had a 200 network glitch and was unable to write out some of the output files, 201 this would be an ephemeral failure which was not a failing of the 202 data, but merely the processing system. On the other hand, if the 203 analysis failed because of a problem with the input data, this is 204 noted by setting a non-zero value in a different table field, 205 `quality'. For example, if the chip analysis failed to discover any 206 stars because the image was completely saturated, the analysis can 207 complete successfully (fault = 0), but the `quality' field will be set 208 to a non-zero value. The various processing stages are able to select 209 only the good (quality = 0) elements of a prior stage when choosing 210 items for processing. For example, the Camera calibration stage will 211 only use data from chips with good quality data, dropping the failed 212 chips from the rest of the analysis. On the other hand, a fault in 213 one of the elements for a given stage will block any dependent stages 214 from processing that item. In this way, if a glitch occurs and a chip 215 from an exposure failed to be written to disk in the Chip stage, the 216 system will not partially process the exposure with the rest of the 217 chips. Since many of the faults which occur are ephemeral, the 218 processing stages are set up to occasional clear and re-try the 219 faulted entries. Thus, automatic processing is able to keep the data 220 flowing even in the face of occasional network glitches or hardware 221 crashes. 210 primary table which defines the conceptual list of processing items 211 either to be done, in progress, or completed. An associated secondary 212 table lists the details of elements which have been processed. Table 213 \ref{tab: database schema} contains an outline of the database schema, 214 showing the relations between tables organized by processing stage. 215 As an example, one critical stage is the \ippstage{chip} processing 216 stage, discussed below, in which the individual chips from an exposure 217 are detrended and sources are detected. Within the gpc1 database, the 218 primary table called \ippdbtable{chipRun} in which each exposure has a 219 single entry. Associated with this table is the 220 \ippdbtable{chipProcessedImfile} table, which contains one row for 221 each of the (up to 60) chips associated with the exposure. The 222 primary tables, such as \ippdbtable{chipRun}, are populated once the 223 system has decided that a specific item (e.g., an exposure) should be 224 processed at that stage. Initially, the entry is given a state of 225 ``run'', denoting that the exposure is ready to be processed. The 226 low-level table entries, such as the \ippdbtable{chipProcessedImfile} 227 entries, are only populated once the element (e.g., the chip) has been 228 processed by the analysis system. Once all elements for a given 229 stage, e.g., chips in this case, are completed, then the status of the 230 top-level table entry (\ippdbtable{chipRun}) are switched from ``run'' 231 to ``full''. 232 233 If the analysis of an element (e.g., the individual OTA chip) 234 completed successfully, then the corresponding table row (e.g., 235 \ippdbtable{chipProcessedImfile}) is listed with a \ippdbcolumn{fault} 236 of 0. If the analysis failed, then a non-zero \ippdbcolumn{fault} is 237 recorded. An analysis which results in a \ippdbcolumn{fault} is one 238 in which the failure is thought to be temporary. For example, if the 239 processing computer had a network interruption and was unable to write 240 some of the output files, this would be an ephemeral failure which was 241 not a failing of the data, but merely the processing system. On the 242 other hand, if the analysis failed because of a problem with the input 243 data, this is noted by setting a non-zero value in a different table 244 field, \ippdbcolumn{quality}. For example, if the chip analysis 245 failed to discover any stars because the image was completely 246 saturated, the analysis can complete successfully (\ippdbcolumn{fault} 247 = 0), but the \ippdbcolumn{quality} field will be set to a non-zero 248 value. The various processing stages are able to select only the good 249 (\ippdbcolumn{quality} = 0) elements of a prior stage when choosing 250 items for processing. For example, the \ippstage{camera} calibration 251 stage will only use data from chips with good \ippdbcolumn{quality} 252 data, dropping the failed chips from the rest of the analysis. On the 253 other hand, a \ippdbcolumn{fault} in one of the elements for a given 254 stage will block any dependent stages from processing that item. In 255 this way, if such a temporary failure occurs, the system will not 256 process an exposure through subsequent stages without the component 257 that has failed temporarily. Since many of the \ippdbcolumn{fault}s 258 which occur are ephemeral, the processing stages are set up to 259 occasional clear and re-try the faulted entries. Thus, automatic 260 processing is able to keep the data flowing even in the face of 261 occasional network glitches or hardware crashes. 222 262 223 263 \subsection{Nebulous} 224 264 \label{subsec: nebulous} 225 265 Storing the large volume of data that is generated by the GPC1 camera 226 266 was recognized early in the Pan-STARRS project as a major concern. … … 229 269 the files, with a Simple Object Access Protocol interface between the 230 270 database and the other IPP programs. The actual files are stored on 231 NFS mounted partitions on a series of storage nodes in the IPP 232 cluster. 233 234 The original design of \ippprog{Nebulous} intended to aid in the 271 NFS mounted partitions on a series of storage nodes in the IPP cluster 272 that can be accessed throughout the cluster. This distribution of 273 files is useful to balance the disk I/O, as this parallelizes the 274 load. 275 276 The original design of \ippprog{Nebulous} was intended to aid in the 235 277 targetted processing of data, by having specific image data (such as 236 278 all the images from one OTA device) located on a single storage node. 237 279 This would allow any jobs involving that data to be assigned to the 238 storage node, eliminating network I O. Important data could be239 duplicated to a furtherdata nodes, with the alternate locations280 storage node, eliminating network I/O. Important data could be 281 duplicated to additional data nodes, with the alternate locations 240 282 stored in the database. In practice, however, hardware failures and 241 283 increases in hard drive storage volumes and network bandwidth have 242 reduced the amount thatthe IPP processing is targeted.284 reduced the degree to which the IPP processing is targeted. 243 285 244 286 When a program creates a new file in \ippprog{Nebulous}, it supplies 245 an URI of the form \ texttt{neb://HOST.VOLUME/PATH/FILENAME}. The host287 an URI of the form \code{neb://HOST.VOLUME/PATH/FILENAME}. The host 246 288 and volume specifiers are optional, and allow a file to be created on 247 a specific node. The path and filename appear as a standard full file 248 location, and are used internally as the ``external id''. A 249 storage\_object is then created in the database for this id, and an 250 instance of the file created on the specified node (or at random from 251 available nodes if left empty). 252 253 254 \subsection{Pantasks \& Parallel Processing} 289 a specific node. The path and filename appear similar to a standard 290 full file location, and are used internally as the ``external id''. A 291 storage object entry is then created in the database for this id, and 292 an instance of the file created on the specified node (or at random 293 from available nodes if left empty). This instance is created in a 294 deterministic filename location. The external id is hashed using the 295 SHA-1 function, and the first four hexadecimal digits of this hash are 296 separated into two two-digit strings and used as the top and second 297 level directory location for the disk file. The disk file is created 298 using the database instance id, and a transformed version of the 299 external id, which has colons replacing any forward slash characters, 300 to convert the external id path into a filename. For the example URI 301 above, this results in a file located on disk in a location like 302 \code{/data/HOST.VOLUME/nebulous/d5/d8/9244993440.PATH:FILENAME}. 303 This file naming structure is useful, as it duplicates database 304 contents on disk. 305 306 The storage volumes that contain the data on disk are defined in the 307 \ippprog{Nebulous} database in a number of ways. First, the locations 308 and mount points for the actual NFS storage are listed in the 309 \ippdbtable{volume} table. This table contains columns indicating if 310 the volume should be used for reading (\ippdbcolumn{available}) and 311 writing (\ippdbcolumn{allocate}), allowing these properties to be 312 manually set, which is useful in scheduling downtime for hardware 313 issues. Another column, \ippdbcolumn{xattr}, is used to control the 314 behavior of this volume, with specific values used to denote desired 315 behavior. For instance, the value of $1$ is used to indicate that a 316 volume should only be used as a backup volume (which accepts only 317 replicated copies), and the value of $5$ is used to indicate that the 318 volume is permanently unavailable, and should be ignored. 319 320 In addition to this permanent table describing the volumes, a 321 \ippdbtable{mountedvol} table also exists that only lists those 322 volumes that are currently visible and accessible from the 323 \ippprog{Nebulous} database server. This table also lists the total 324 and currently available disk space on each volume, allowing the 325 \ippprog{Nebulous} load balancing routines to prioritize those volumes 326 with large unused disk space before filling the volumes with only 327 small amounts remaining. This table is regenerated every ten to 328 twenty minutes, after a scan of each of the volumes listed in the 329 \ippdbtable{volume} table. 330 331 The final table controlling the operations of the \ippprog{Nebulous} 332 volumes is the \ippdbtable{cabinet} table, which organizes the 333 individual volumes into ``cabinets,'' a concept loosly based on the 334 physical arrangement of the storage servers in the data center. These 335 cabinets are used to prevent the replication of a storage object 336 within a group of volumes where all instances of the object could be 337 taken off line by a single failure. As the data center cabinets share 338 power supplies among the servers they contain, ensuring physical 339 distance between replicated copies is important to guarantee that a 340 temporary failure of one of these devices does not significantly 341 impact processing. 255 342 256 343 \subsection{DVO} 344 \label{subsec: DVO} 257 345 258 346 The Pan-STARRS IPP uses an internal database system, distinct from the … … 262 350 database system, called the ``Desktop Virtual Observatory'' (DVO) was 263 351 developed originally for the LONEOS project, and used as part of the 264 CFHT Elixir system (Magnier \& Cuillandre REF). The capabilities of352 CFHT Elixir system \citep{2004PASP..116..449M}. The capabilities of 265 353 this databasing system have been somewhat expanded for the Pan-STARRS 266 354 context. … … 268 356 One of the main purposes of the DVO system is to define the 269 357 relationship between individual detections of an astronomical object 270 and the definition of that object. Before describing the database 271 schema, we will discuss the process by which detections are associated 272 with objects. New detections are generally added to the database in a 273 group associated with, for example, an image from the GPC1 camera. As 274 new detections are loaded, they are compared to the objects already 275 stored in the database. If an object is already found in the database 276 within the match radius, the new detection is associated to that 277 object. If more than one object exists within the database, the 278 detection is associated with the closest object. 358 and the definition of that object. New detections are generally added 359 to the database in a group associated with, for example, an image from 360 the GPC1 camera. As new detections are loaded, they are compared to 361 the objects already stored in the database. If an object is already 362 found in the database within the match radius of \note{one arcsecond}, the new detection is 363 associated to that object. If more than one object exists within the 364 database, the detection is associated with the closest object. 279 365 280 366 Detections in DVO have a special piece of metadata called the 281 \code{photcode} which identifies the source of the measurement. A 282 \code{photcode} has a name which in general consists of the name of 283 the camera or telescope (e.g., GPC1 or 2MASS), the name (or short-hand 284 name) of the filter used for the measurement (e.g., $g$), and an 285 identifier for the detector, if not unique (e.g., XY01 for GPC1). 286 Along with each name, there is a numerical value for the photcode. A 287 table within the DVO system, \code{Photcode}, lists the photcoes and 288 defines a number of additional pieces of information for each 289 photcode. These include the nominal zero point and airmass slope, as 290 well as color trends to transform a measurement in the specific 291 photcode to a common system. There are 3 classes of photcodes defined 292 within the DVO system. Those photcodes associated with detections 293 from an image loaded into the database system are called \code{DEP} 294 photcodes. There are also photcodes associated with the average 295 photometry values, called SEC photcodes. There are also those 296 measurements which come from external data sources for which DVO does 297 not have any information to determine a calibration (e.g., 298 instrumental magnitudes and detector coordinates). These are 299 measurements are reference values and are assigned REF photcodes. 367 \ippdbcolumn{photcode} which identifies the source of the measurement. 368 A \ippdbcolumn{photcode} has a name which in general consists of the 369 name of the camera or telescope (e.g., GPC1 or 2MASS), the name (or 370 short-hand name) of the filter used for the measurement (e.g., 371 \gps{}), and an identifier for the detector, if not unique (e.g., XY01 372 for a GPC1 OTA). Along with each name, there is a numerical value for 373 the photcode. A table within the DVO system, \ippdbtable{Photcode}, 374 lists the photcodes and defines a number of additional pieces of 375 information for each photcode. These include the nominal zero point 376 and airmass slope, as well as color trends to transform a measurement 377 in the specific photcode to a common system. There are 3 classes of 378 photcodes defined within the DVO system. Those photcodes associated 379 with detections from an image loaded into the database system are 380 called \ippmisc{DEP} photcodes. There are also photcodes associated with 381 the average photometry values, called \ippmisc{SEC} photcodes. There are 382 also those measurements which come from external data sources for 383 which DVO does not have any information to determine a calibration 384 (e.g., instrumental magnitudes and detector coordinates). These are 385 measurements are reference values and are assigned \ippmisc{REF} 386 photcodes. 300 387 301 388 In the implementation of DVO used for the PV3 calibration analysis, … … 304 391 of files for table which are spatially partitioned. The binary FITS 305 392 tables may be optionally compressed using the (to date) experimental 306 FITS binary table compression strategy outlined by REF. In this393 FITS binary table compression strategy outlined by \note{REF}. In this 307 394 compression scheme, using a strategy similar to that used for FITS 308 image compression ( REF), the data stored in the binary table is395 image compression (\note{REF}), the data stored in the binary table is 309 396 compressed and stored in the 'HEAP' section of the FITS table. In 310 397 brief, each column in the FITS table is compressed as one (or more) … … 342 429 region bounded by lines of constant RA,DEC are contained in a specific 343 430 file. The boundaries and the associated partition names are stored in 344 one of the supporting tables, \code{SkyTable}. This table contains 345 the definitions of the boundaries for each sky region (\code{R_MIN}, 346 \code{R_MAX}, \code{D_MIN}, \code{D_MAX}), the name of the sky region, 347 an ID (\code{INDEX}, equal to the sequence number of the region in the 431 one of the supporting tables, \ippdbtable{SkyTable}. This table 432 contains the definitions of the boundaries for each sky region 433 (\ippdbcolumn{R\_MIN}, \ippdbcolumn{R\_MAX}, \ippdbcolumn{D\_MIN}, 434 \ippdbcolumn{D\_MAX}), the name of the sky region, an ID 435 (\ippdbcolumn{INDEX}, equal to the sequence number of the region in the 348 436 table), and index entries to enable navigation within the table. The 349 437 regions are defined in a hierarchical sense, with a series of levels 350 each containing a finer mesh of regions covering the sky. 438 each containing a finer mesh of regions covering the sky. 351 439 352 440 In the default used by the PV3 DVO, the partitioning scheme is based … … 358 446 4 - 8 smaller partitions. This level exactly matches the HST GSC 359 447 layout, and uses the same naming convention to identify the 360 partitions: n0000/0000, etc. \note{more on the names?}. Level 4 361 further divides these regions by a factor of 16. In the 362 \code{SkyTable}, a region at one level has a pointer to its parent 363 region (the one which contains it) and a sequence pointing to its 364 children (regions it contains). The \code{SkyTable} enables fast 365 lookups of the on-disk partitions which map to a specific coordinate 366 on the sky. In general, a single DVO will have the full sky 367 represented with tables at a single level, though it is possible for 368 mixed levels to be used, this mode is not well tested. For the PV3 369 master database, the partitioning at the 5th level results in \approx 370 150,000 regions to cover the full sky, of which \approx 110,000 are 371 used for the PV3 $3\pi$ data. The densest portions of the bulge 372 contain at most \approx 300k astronomical objects in the database 373 files, with an associated maximum of 30M measurements in these files. 374 With the compression scheme described above, this makes the largest 375 database files \approx 3GB, which can be loaded into memory in 30 376 seconds on our partition machines. 448 partitions: \code{n0000/0000}, etc. \note{more on the names?}. Level 449 4 further divides these regions by a factor of 16. In the 450 \ippdbtable{SkyTable}, a region at one level has a pointer to its 451 parent region (the one which contains it) and a sequence pointing to 452 its children (regions it contains). The \ippdbtable{SkyTable} enables 453 fast lookups of the on-disk partitions which map to a specific 454 coordinate on the sky. In general, a single DVO will have the full 455 sky represented with tables at a single level, though it is possible 456 for mixed levels to be used, this mode is not well tested. For the 457 PV3 master database, the partitioning at the \note{should this be 458 4th?} 5th level results in \approx 150,000 regions to cover the full 459 sky, of which \approx 110,000 are used for the PV3 $3\pi$ data. The 460 densest portions of the bulge contain at most \approx 300,000 461 astronomical objects in the database files, with an associated maximum 462 of 30 million measurements in these files. With the compression 463 scheme described above, this makes the largest database files \approx 464 3GB, which can be loaded into memory in 30 seconds on the processing 465 machines that contain partition data. 377 466 378 467 The DVO software system allows the tables which are partitioned across … … 380 469 call partition hosts. A single file defines the names of these 381 470 partition hosts and the location of the database partition on the 382 disks of that machine. The \ code{SkyTable} contains elements to471 disks of that machine. The \ippdbtable{SkyTable} contains elements to 383 472 define by ID the parition host to which a partitioned set of tables 384 473 has been assigned. Operations which query the database, or perform … … 395 484 manipulating the enormous database on a reasonable timescale. 396 485 397 \subs ection{Tables which describe objects}486 \subsubsection{Astronomical Objects} 398 487 399 488 Two tables carry the most important information about the astronomical 400 objects in the database: Average and SecFilt. These two tables 401 specify the main average properties of the astronomical object. The 402 Average table includes the astrometric information ($\alpha, \delta, 403 \mu \alpha, \mu \delta, \pi$) and associated errors, data quality 404 flags for each object, links to the other tables, and a number of IDs, 405 with one row for each astronomical object. \note{go into complete 406 detail here on the IDs?}. The SecFilt table\footnote{The name 407 SecFilt is a bit of a historical misnomer: originally, DVO was 408 designed for a monochromatic survey and data for a single 409 photometric band was maintained in the Average table. Later, DVO 410 was adapted to a multifilter system and additional filters were 411 added to the SecFilt (Secondary Filter) table. Eventually, the 412 schema was normalized and all photometric data placed in SecFilt, 413 with the Primary filter concept being dropped, but the name has 414 since stuck.} contains average photometric information for a 415 collection of filters. A given DVO instance has a specified set of 416 filters for which average photometry is stored in the SecFilt table. 417 The number and choice of filters for the SecFilt may be modified by 418 the database administrator fairly easily, but the process of updating 419 the database is somewhat expensive (\approx 24 hours for the current 420 PV3 instance). Thus the choice is semi-static for a given DVO 421 instance. In the case of the PV3 DVO instance, 9 average bandpasses 422 are defined: {\it g, r, i, z, y, J, H, K, w}. The SecFilt table 423 contains one row for each filter for each object, thus the PV3 DVO 424 contains 9 times as many rows as the Average table. The order of the 425 table is fixed in relation to the Average table: row $i$ of Average 426 defines the object with photometry contained in rows $9i \rightarrow 9i + 427 8$ ($i$ is zero counting). 489 objects in the database: \ippdbtable{Average} and 490 \ippdbtable{SecFilt}. These two tables specify the main average 491 properties of the astronomical object. The \ippdbtable{Average} table includes the 492 astrometric information ($\alpha, \delta, \mu \alpha, \mu \delta, 493 \pi$) and associated errors, data quality flags for each object, links 494 to the other tables, and a number of IDs, with one row for each 495 astronomical object. \note{go into complete detail here on the IDs?}. 496 The \ippdbtable{SecFilt} table\footnote{The name \ippdbtable{SecFilt} 497 is a bit of a historical misnomer: originally, DVO was designed for 498 a monochromatic survey and data for a single photometric band was 499 maintained in the Average table. Later, DVO was adapted to a 500 multifilter system and additional filters were added to the 501 \ippdbtable{SecFilt} (Secondary Filter) table. Eventually, the 502 schema was normalized and all photometric data placed in 503 \ippdbtable{SecFilt}, with the Primary filter concept being dropped, 504 but the name has since stuck.} contains average photometric 505 information for a collection of filters. A given DVO instance has a 506 specified set of filters for which average photometry is stored in the 507 \ippdbtable{SecFilt} table. The number and choice of filters for the 508 \ippdbtable{SecFilt} may be modified by the database administrator 509 fairly easily, but the process of updating the database is somewhat 510 expensive (\approx 24 hours for the current PV3 instance). Thus the 511 choice is semi-static for a given DVO instance. In the case of the 512 PV3 DVO instance, 9 average bandpasses are defined: \gps{}, \rps{}, 513 \ips{}, \zps{}, \yps{}, {\it J, H, K}, and \wps{}. The 514 \ippdbtable{SecFilt} table contains one row for each filter for each 515 object, thus the PV3 DVO contains 9 times as many rows as the 516 \ippdbtable{Average} table. The order of the table is fixed in 517 relation to the \ippdbtable{Average} table: row $i$ of 518 \ippdbtable{Average} defines the object with photometry contained in 519 rows $9i \rightarrow 9i + 8$ ($i$ is zero counting). 428 520 429 521 The individual measurements of the astronomical objects are carried in 430 the table \code{Measure}. This table lists the values measured by 431 \code{psphot} for each chip, warp, or stack image. This includes the 432 instrumental magnitudes for the PSF, aperture, and Kron photometry; 433 raw position (Xccd, Yccd) and second moments (Mxx, Myy, Mxy), along 434 with shape parameters of the PSF model at the position of the object 435 (FWx, FWy, theta). This table also includes metadata such as the 436 exposure time, the date \& time of the observation, airmass, azimuth, 437 and information specifying the filter \note{describe the photcodes}. 438 The \code{Measure} table also carried the calibration magnitude offsts 439 ($M_{\rm cal}$ and $M_{\rm flat}$ discussed below) and the 440 astrometrically calibrated position. Astrometric offsets for several 441 systematic corrections discussed below are also defined for each 442 measurement. Since stacks and forced warp photometry may have 443 non-significant values, the table is somewhat de-normalized in that it 444 also carried instrumental flux values for the PSF, aperture, and Kron 445 photometry. 446 447 In the \code{Measure} table, there are three fields which provide two 448 independent links from the specific measurement to the associated 449 object: \code{Measure.catID} specifies the spatial partition to which 450 the measurement belongs; \code{Measure.objID} specifies to which entry 451 in the \code{Average} table the measurement belongs. These two 32 bit 452 fields can thus be combined into a single 64 bit unique ID for all 453 objects in the database. In addition, the field \code{Measure.averef} 454 specifies the row number in the \code{Average} table of the associated 455 object. The \code{Measure} table may be unsorted, in which case it is 456 slow to find the measurements associated with a specific object (a 457 full table scan is required). After the table is sorted, the 458 \code{Measure} rows for a given object are grouped together. In the 459 case, the fields \code{Average.measureOffset} and 460 \code{Average.Nmeasure} define an index for the code to jump to the 461 list of measurements for a single object. The field 462 \code{Measure.imageID} defines the link from the measurement to the 463 image which supplied the measurement. 522 the table \ippdbtable{Measure}. This table lists the values measured 523 by \ippprog{psphot} for each \ippstage{chip}, \ippstage{warp}, or 524 \ippstage{stack} stage image. This includes the instrumental magnitudes for 525 the PSF, aperture, and Kron photometry; raw position 526 (\ippdbcolumn{Xccd}, \ippdbcolumn{Yccd}) and second moments 527 (\ippdbcolumn{Mxx}, \ippdbcolumn{Myy}, \ippdbcolumn{Mxy}), along with 528 shape parameters of the PSF model at the position of the object 529 (\ippdbcolumn{FWx}, \ippdbcolumn{FWy}, \ippdbcolumn{theta}). Metadata 530 about the exposure that the measurement was derived from is also 531 include, such as the exposure time, the date \& time of the 532 observation, airmass, azimuth, and \ippdbcolumn{photcode} information 533 specifying the filter. The \ippdbtable{Measure} table also carries 534 the calibration magnitude offsts ($M_{\rm cal}$ and $M_{\rm flat}$, 535 discussed below) and the astrometrically calibrated position. 536 Astrometric offsets for several systematic corrections discussed below 537 are also defined for each measurement. Since stacks and forced warp 538 photometry may have non-significant values, the table is somewhat 539 de-normalized in that it also carries instrumental flux values for the 540 PSF, aperture, and Kron photometry. 541 542 In the \ippdbtable{Measure} table, there are three fields which 543 provide two independent links from the specific measurement to the 544 associated object: \ippdbtable{Measure}.\ippdbcolumn{catID} specifies 545 the spatial partition to which the measurement belongs; 546 \ippdbtable{Measure}.\ippdbcolumn{objID} specifies to which entry in 547 the \ippdbtable{Average} table the measurement belongs. These two 32 548 bit fields can thus be combined into a single 64 bit ID unique for all 549 objects in the database. In addition, the field 550 \ippdbtable{Measure}.\ippdbcolumn{averef} specifies the row number in 551 the \ippdbtable{Average} table of the associated object. The 552 \ippdbtable{Measure} table may be unsorted, in which case it is slow 553 to find the measurements associated with a specific object (a full 554 table scan is required). After the table is sorted, the 555 \ippdbcolumn{Measure} rows for a given object are grouped together. 556 In this case, the fields 557 \ippdbtable{Average}.\ippdbcolumn{measureOffset} and 558 \ippdbcolumn{Average}.\ippdbcolumn{Nmeasure} define an index for the 559 code to jump to the list of measurements for a single object. The 560 field \ippdbtable{Measure}.\ippdbcolumn{imageID} defines the link from 561 the measurement to the image which supplied the measurement. 464 562 465 563 \note{some discussion of the db construction, addstar, dvomerge, etc?} 466 564 467 565 For the warp images, we also measure the weak lensing KSB parameters 468 related to the shear and smear tensors. These measurements are stored 469 in the \code{Lensing} table, along with the radial aperture fluxes for 470 radii numbers 5, 6, \& 7 (XX, XX, XX arcsec). This table contains one 471 row for every warp row. Similarly to the \code{Measure} table, the fields 472 \code{objID}, \code{catID}, and \code{averef} define links from the 473 \code{Lensing} table to the \code{Average} table. In a similar 474 fashion, the fields \code{Average.lensingOffset} and 475 \code{Average.Nlensing} are the index into the sorted \code{Lensing} 476 table entries. \note{discuss failure of the Lensing to Measure 477 indexing} 478 479 The values stored in the \code{Lensing} table are used to calculate 480 average values for each of these types of measurements in each 481 filter. The \code{Lensobj} table stores the averaged KSB and radial 482 aperture photometry for each of the 5 filters \grizy. This table 483 contains one entry per object per filter. The table is not generally 484 stored unsorted as it is calculated after the full database is 485 populated. The link from \code{Average} to \code{Lensobj} is defined 486 by the fields \code{Average.offsetLensobj} and 487 \code{Average.Nlensobj}. Each \code{Lensobj} row also includes the 488 photcode (filter) for which the average lensing (and radial aperture) 489 properties have been calculated. 490 491 The \code{Galphot} table stores the results of the forced galaxy 566 related to the shear and smear tensors \citep{1995ApJ...449..460K}. 567 These measurements are stored in the \ippdbcolumn{Lensing} table, 568 along with the radial aperture fluxes for radii numbers 5, 6, \& 7 569 (respectively 3.0, 4.63, and 7.43 arcsec). This table contains one 570 row for every warp row. \note{warp row hasn't been defined anywhere.} 571 Similarly to the \ippdbtable{Measure} table, the fields 572 \ippdbcolumn{objID}, \ippdbcolumn{catID}, and \ippdbcolumn{averef} 573 define links from the \ippdbtable{Lensing} table to the 574 \ippdbtable{Average} table. In a similar fashion, the fields 575 \ippdbtable{Average}.\ippdbcolumn{lensingOffset} and 576 \ippdbtable{Average}.\ippdbcolumn{Nlensing} are the index into the 577 sorted \ippdbtable{Lensing} table entries. \note{discuss failure of 578 the Lensing to Measure indexing} 579 580 The values stored in the \ippdbtable{Lensing} table are used to 581 calculate average values for each of these types of measurements in 582 each filter. The \ippdbtable{Lensobj} table stores the averaged KSB 583 and radial aperture photometry for each of the 5 filters \grizy. This 584 table contains one entry per object per filter. The table is not 585 generally stored unsorted as it is calculated after the full database 586 is populated. The link from \ippdbtable{Average} to 587 \ippdbtable{Lensobj} is defined by the fields 588 \ippdbtable{Average}.\ippdbcolumn{offsetLensobj} and 589 \ippdbtable{Average}.\ippdbcolumn{Nlensobj}. Each 590 \ippdbtable{Lensobj} row also includes the \ippdbcolumn{photcode} for which 591 the average lensing (and radial aperture) properties have been 592 calculated. 593 594 The \ippdbtable{Galphot} table stores the results of the forced galaxy 492 595 fitting analysis for each object that has been measured. This table 493 contains one row per filter and model type (Sersic, Exponential, 596 contains one row per filter and model type (Sersic, Exponential, or 494 597 DeVaucouleur) if forced galaxy models have been calculate for the 495 598 object. \note{need to expand on this somewhat} 496 599 497 The \ code{Starpar} table carries measurements provide by Greg Green \&498 Eddie Schlafly from their analysis of the SED of objects in the PS1 499 $3\pi$ data, using the \note{PV1?} version of the analysis (Green et 500 al REF). In this work, the goal was a 3D model of the dust in the 501 Galaxy based on Pan-STARRS (\note{and WISE \& 2MASS?})photometry. As600 The \ippdbtable{Starpar} table carries measurements provide by Greg 601 Green \& Eddie Schlafly from their analysis of the SED of objects in 602 the PS1 $3\pi$ data, using the \note{PV1?} version of the analysis 603 \citep{2015ApJ...810...25G}. In this work, the goal was a 3D model of 604 the dust in the Galaxy based on Pan-STARRS and 2MASS photometry. As 502 605 part of this analysis, the authors fit the SEDs of all \note{stellar?} 503 606 sources with stellar models including free parameters of extinction, … … 505 608 these photometric distance modulus measurements are not extremely 506 609 precise (see below), they provide a constraint on the distance is used 507 in our analysis of the astrometry (see Section~\ref{sec:astrometry}).508 509 \subs ection{Other Tables}610 in our analysis of the astrometry \citep[][see]{magnier2017a}. 611 612 \subsubsection{Other Tables} 510 613 511 614 Data from GPC1 (and other cameras processed by the IPP) are loaded 512 into DVO in units \code{smf} files generated by the Camera calibration 513 stage. As described above, these files contain all measurements from 514 a complete exposure, with measurements from each chip grouped into 515 separate FITS tables. When these measurements are loaded into the 516 \code{Measure} and similar tables, a subset of the information from 517 the chip header is used to populated a row in the DVO \code{Image} 518 table. This table contains one row for each chip known to DVO, with 519 information such as the filter (\code{photcode}), the exposure time, 520 the airmass, the astrometric calibration terms, the photometric 521 zero point, etc. For GPC1 and other mosaic cameras, an additional row 522 is defined to carry the projection and camera distortion elements of 523 the astrometry model. As chips are loaded into this table, they are 524 assigned an internal ID (a running sequence in the table). Images may 525 also be assigned an external ID: in the case of the GPC1 images, this 526 ID is defined by the processing mysql database and is guaranteed to be 527 unique within the processing system. 615 into DVO in units \code{smf} files generated by the \ippstage{camera} 616 calibration stage (see section \ref{subsec: camera} below). As 617 described above, these files contain all measurements from a complete 618 exposure, with measurements from each chip grouped into separate FITS 619 tables. When these measurements are loaded into the 620 \ippdbtable{Measure} and similar tables, a subset of the information 621 from the chip header is used to populated a row in the DVO 622 \ippdbtable{Image} table. This table contains one row for each chip 623 known to DVO, with information such as the filter 624 (\ippdbcolumn{photcode}), the exposure time, the airmass, the 625 astrometric calibration terms, the photometric zero point, etc. For 626 GPC1 and other mosaic cameras, an additional row is defined to carry 627 the projection and camera distortion elements of the astrometry model. 628 As chips are loaded into this table, they are assigned an internal ID 629 (a running sequence in the table). Images may also be assigned an 630 external ID: in the case of the GPC1 images, this ID is defined by the 631 processing mysql database and is guaranteed to be unique within the 632 processing system. 528 633 529 634 Other tables are used to track information used by the calibration 530 635 system. This includes the complete set of flat-field corrections 531 determined by the photometry calibration analysis (see 532 Section~\ref{sec:relphot}) and the astrometric flat-field corrections 533 determined by the astrometry calibration analysis (see Section~\ref{sec:relastro}) 636 determined by the photometry calibration analysis and the astrometric 637 flat-field corrections determined by the astrometry calibration 638 analysis \citep[][see]{magnier2017a}. 639 640 \subsection{Datastore repositories} 641 \label{subsec: datastore} 642 643 Transferring data between the IPP and other parts of the Pan-STARRS 644 system is generally accomplished via a ``datastore'', an http service 645 that exposes data in a common form. One of the main datastores used 646 by the IPP is the one located at the summit. This datastore exposes, 647 a list of the exposures obtained since the start of the PS1 648 operations. Requests to this server may restrict to the latest by 649 time. Each row in the listing includes basic information about the 650 exposure: an exposure identifier (e.g., o5432g0123o; 651 see~\ref{GPC1.names} for details), the date and time of the exposure, 652 the telescope commanded pointing, the filter and exposure time, and 653 the observation comment for that exposure. The row also provides a 654 link to a listing of the chips associated with that exposure. This 655 listing includes a link to the individual chip FITS files as well as 656 an md5 checksum. Systems which are allowed access may download chip 657 FITS files via http requests to the provided links. 658 659 The IPP also uses datastores to provide access to its own data 660 products. The detections identified in the \ippstage{diff} stage 661 images are organized by the \ippstage{publish} stage, which writes 662 output files containing those detections to a datastore that is 663 monitored by the Moving Object Processing System 664 \citep[][MOPS]{2013PASP..125..357D}, which analyses the detections to 665 identify asteroids. Separate datastores are also used by the 666 \ippstage{distribution} stage to provide access to data products to 667 the Pan-STARRS Science Consortium members. 668 669 \subsection{Pantasks \& Parallel Processing} 670 \label{subsec: pantasks} 671 672 The actual processing of data is managed by the \ippprog{pantasks} 673 program. This program launches a series of connections to other 674 computers in the IPP compute cluster, and launches instances of the 675 \ippprog{pclient} program that wait for jobs to be submitted. These 676 jobs are generated from \ippmisc{ippTasks} command scripts that each 677 contain one set of tasks, written in the opihi language shared with 678 DVO. These task scripts are generally sorted by the IPP stage. The 679 tasks listed in these scripts are mainly written in the form of a pair 680 of \ippmisc{load} and \ippmisc{run} tasks. 681 682 The \ippmisc{load} task for a particular stage queries the processing 683 database via an appropriate \ippmisc{ippTool} (see section \ref{subsec: 684 ipptools} below) for a list of jobs that are waiting to be run. 685 This task is executed on the host running the \ippprog{pantasks} 686 server, and only one of each type of \ippmisc{load} task is permitted to 687 run simultaneously, preventing race conditions. To manage the 688 processing, the primary database tables for each stage contain a 689 \ippdbcolumn{label} field. This field groups data into categories, 690 and the appropriate list of \ippdbcolumn{label}s are supplied to the 691 \ippprog{pantasks} program to be included in the queries to ensure 692 that only jobs for the active \ippdbcolumn{label}s are executed. The 693 results from the database query are stored in \ippmisc{books} within the 694 \ippprog{pantasks} environment, with each resulting result row saved 695 to a separate entry within the \ippmisc{book}. These \ippmisc{books} are 696 similar to an associative array indexing the entries (\ippmisc{pages} to 697 continue the analogy) to be accessed via a particular key. Keys for 698 most stages are a combination of the stage id and an identifier for 699 the individual component for the job that will be executed. The rest 700 of the column results from the query are stored to the \ippmisc{page}, 701 with each field stored with the database column name. An additional 702 field is added, the \ippdbcolumn{pantasksState}, which is set to 703 \ippmisc{INIT}, indicating that this \ippmisc{page} is a new addition to the 704 \ippmisc{book}. Once all results from the database query have been 705 saved, the \ippmisc{load} task terminates, and waits to be rerun after 706 some timeout (on the order of a minute). Once all new \ippmisc{pages} 707 have been added, the task then scans the \ippmisc{book} for any pages 708 with \ippdbcolumn{pantasksState} set to \ippmisc{DONE}, and removes them 709 from the book, as these represent jobs that have finished. 710 711 Parallel to the \ippmisc{load} task, the \ippmisc{run} tasks are executed 712 by the \ippprog{pclient} code on one of the client nodes. These 713 clients can access the \ippmisc{books} from \ippprog{pantasks}, and scan 714 the \ippmisc{book} to determine if it contains \ippmisc{pages}, and if one 715 of those pages contains an entry with the \ippdbcolumn{pantasksState} 716 set to \ippmisc{INIT}. If such a \ippmisc{page} is found, the task sets 717 this field to \ippmisc{RUN} (ensuring no other \ippmisc{run} task will 718 attempt to process that page as well), and uses the information stored 719 on the page to construct a valid command line for the appropriate IPP 720 script. The script (described below) command line is then executed, 721 and upon completion, pass the exit code back to \ippprog{pantasks}, 722 allowing for an accounting of success and failures. The page is then 723 set to \ippmisc{DONE}, indicating the job has completed, and the 724 \ippmisc{page} can be removed from the \ippmisc{book} by the next call of 725 the \ippmisc{load} task. As the \ippmisc{run} tasks will involve processing 726 that may not complete in a known period of time, there is a timeout 727 limit set for the task, after which the \ippprog{pantasks} process can 728 terminate the task. This prevents unproductive jobs from building up. 729 730 In addition to these tasks, most stages have \ippmisc{revert} tasks 731 paired with the \ippmisc{run} task. These tasks issue an appropriate 732 \ippmisc{ippTool} command to remove entries from the stage's secondary 733 database table that have the \ippdbcolumn{fault} field set to a value 734 other than zero. This step allows these failures to be cleared from 735 the system, and schedule those jobs again for a retry. Again, this 736 query is limited by the set of active \ippdbcolumn{label}s, ensuring 737 that only the data currently being processed is reverted. Similarly, 738 some stages have \ippmisc{advance} tasks that update the primary table to 739 indicate that all of its components are complete. For many of the 740 early stages of the pipeline (the \ippstage{chip} through 741 \ippstage{warp} stages), this \ippmisc{advance} task also adds an entry 742 into the database table for the next stage of processing for the 743 exposure being considered. This step allows the data to process 744 automatically from stage to stage without intervention. 745 746 \subsubsection{Stage automation} 747 \label{subsec: automation} 748 \note{I'm not convinced this is the right place for it, but it felt like a natural extension of the ``advance''}. 749 750 Beyond the warp stage, there is no longer a single ``next'' stage into 751 which data can be queued. Because of this, more robust methods are 752 used to advance the data. For processing data that is actively being 753 observed at the summit, this is handled by a set of ``nightly 754 science'' tasks and an associated \ippmisc{ippScript}. The goal of 755 these tasks is to ensure that exposures are correctly paired into sets 756 of \ippstage{warp}-\ippstage{warp} difference images, and that nightly 757 stacks are generated for MD fields. 758 759 Queuing the diffs is done by first examining the set of all exposures 760 that have been taken at the summit on the current night of observing, 761 and querying information from each stage up through \ippstage{warp} 762 stage. These exposures are grouped by \ippdbcolumn{filter} and 763 \ippdbcolumn{object}, which is a unique identifier for each telescope 764 pointing on the sky. Exposures in each group are then sorted by 765 increasing observation date (\ippdbcolumn{dateobs}), and the 766 information from each stage is used to ensure that the observations 767 have completed all stages through \ippstage{warp} successfully. If 768 this is not the case, the script ignores that group until a future 769 scan, to allow the data to finish processing. If the lack of 770 completion is due to a failure at a stage prior to \ippstage{warp}, 771 then that exposure is dropped from the group to allow the remainder to 772 be considered for \ippstage{diff}s. The remaining exposures are then 773 paired sequentially, with the final exposure ignored in the case of an 774 odd number of exposures (caused by either a failure in the processing 775 of an exposure or due to the telescope closing for weather prior to 776 completing all scheduled observations). Once the observing process 777 completes (signalled to the nightly science task and script by the 778 presence in the database of entries for dark exposures that are taken 779 each morning after the telescope closes), and the script has generated 780 all \ippstage{diff} pairs that can be made with the above rule, a 781 second pass is performed, this time with the exposures in each group 782 sorted by decreasing observation date. This change in ordering allows 783 exposures that were excluded due to an odd number of exposures to be 784 paired with the exposure closest in time (with the exposure that was 785 previously first ignored). 786 787 The nightly stacks are queued based on checking that a minimum number 788 of complete \ippstage{warp} entries exist for each filter and field. 789 For the nightly MD processing, this minimum number was set to 8 790 exposures, as this is the number of exposures taken for each field. 791 Once this number was reached, no more exposures are expected, so 792 \ippstage{stack} database entries can be queued with the 793 \ippstage{warp} entries. Again, failures and weather can reduce the 794 number of usable exposures, so the task generates \ippstage{stack} 795 entries using whatever exposures are available if one has not yet been 796 constructed by the time the morning dark exposures are registered into 797 the database. 798 799 Automating the nightly processing is important, as it ensures that 800 data is processed as soon as it is downloaded from the summit, 801 reducing the lag between an observation and the reduced data. The 802 other processing task that requires automation is the reprocessing of 803 the entire $3\Pi$ survey, as the size of the dataset make it 804 challenging to do manually. To manage this, the ``large area 805 processing'' (LAP) task and script are used. The first stage of this 806 processing is generating an entry in the \ippdbtable{lapSequence} 807 table defining a new reprocessing. After this, individual 808 \ippdbtable{lapRun} entries can be queued that define a 809 \ippdbcolumn{filter} and a \ippdbcolumn{projection\_cell} to be 810 considered. A \ippdbcolumn{projection\_cell} is a unit of sky defined 811 to be a square four degrees on each side which has a single tangent 812 plane projection \citep[][see]{watersc2017}. Once this entry is 813 defined, is is populated with exposures (stored in the 814 \ippdbtable{lapExp} table in the database), with any exposure located 815 within 5 degrees of the center of the projection cell included. This 816 radius ensures that any exposure that overlaps the projection cell 817 will be included. Once the exposures have been added, the other 818 exposures within the same sequence are checked to see if a 819 \ippstage{chip} stage entry has been generated, and if so, the 820 \ippdbcolumn{chip\_id} for that entry is saved into the 821 \ippdbtable{lapExp} as well. This linkage ensures that each exposure 822 is only processed once. If no entry is found, a new \ippstage{chip} 823 entry is queued for processing. The task periodically checks the 824 status of the exposures in each \ippdbtable{lapRun} entry, and if they 825 have all completed the \ippstage{warp} stage, then a \ippstage{stack} 826 is queued for each skycell contained within the 827 \ippdbcolumn{projection\_cell}. 828 829 \subsection{ippTools and ippScripts} 830 \label{subsec: ipptools} 831 832 As shown above, the \ippprog{pantasks} tasks rely on \ippmisc{ippTools} 833 calls for database queries. Each stage has an appropriate 834 \ippmisc{ippTool}, allowing the database interaction to be governed by a 835 fixed set of inserts and queries. Isolating the database interaction 836 in this way adds a layer of validation before queries are executed, 837 and ensures that all database modifications are handled in a uniform 838 fashion. 839 840 In addition to simple queries and updates to entries already in the 841 database, the various \ippmisc{ippTools} programs can also be used to 842 define new processing runs for a stage. Again, using pre-defined 843 queries wrapped in a program allow the options to be parsed to ensure 844 that any new processing run definitions are appropriately restricted 845 in scope, reducing the chance that mistakes will fill the database 846 with many unwanted jobs. 847 848 Connecting the \ippprog{pantasks} parallel processing environment to 849 the actual IPP analysis programs are a series of \ippmisc{ippScripts} 850 written in Perl. These scripts are what are actually executed by 851 \ippprog{pantasks}, with command line options provided based on the 852 database query performed there by the \ippmisc{load} task. These 853 options are combined with configuration information stored in 854 \ippmisc{ippconfig} recipe files. 855 856 The appropriate recipe is selected from the configuration information, 857 based on the source camera of the data to be processed, and optionally 858 modified by the \ippdbcolumn{reduction} field in the database. These 859 optional \ippdbcolumn{reduction} entries provide a way to group a 860 non-standard set of processing options together across multiple 861 stages, by selecting a recipe that is not the default. 862 863 With the set of configuration options and database entries for the 864 data to be processed, the \ippmisc{ippScript} checks the input files 865 that will be used, and confirms that a valid copy of each is available 866 from the \ippprog{Nebulous} system. For stages that have a large 867 number of inputs (such as the \ippstage{stack} stage, which requires 868 images, masks, variance maps, and detection catalogs from each of the 869 potentially large number of \ippstage{warp} stage inputs), the input 870 files are organized into temporary input list files, formatted in an 871 appropriate way for the analysis program that will process them. 872 873 The script also sets up an output logfile for this processing run, 874 ensuring that any status information from either the script itself or 875 the underlying analysis is stored on disk. The majority of this 876 information is identical between calls to the script, but for rare 877 failures of the analysis programs, retaining this information allows 878 for such problems to be diagnosed and repaired. 879 880 The command line for the main analysis program is constructed based on 881 the database values, the recipe options, and the input file names. 882 The analysis program is then executed, and any failure reported back 883 to the parent \ippprog{pantasks} process. In the standard case of the 884 analysis completing successfully, the script checks that the expected 885 output products were generated, preventing hidden I/O errors from 886 being a problem with subsequent processing of those output products. 887 888 One output product that must exist is the \code{stats} file, which is 889 generated by the analysis program and contains statistics about the 890 processing, including such things as the image background level, the 891 fraction of masked pixels, and the version numbers of the analysis 892 program. This stats file is then parsed by the 893 \ippprog{ppStatsFromMetadata} program, which uses the information 894 within to generate command options for the \ippmisc{ippTool} program 895 to ensure that these statistics are included in the database row that 896 is created in the secondary database table for the individual 897 component processed. 898 899 \subsection{psLib and psModules} 900 \label{subsec: pslib} 901 902 Underlying all of the analysis programs are the \ippmisc{psLib} and 903 \ippmisc{psModules} C libraries. The more fundamental \ippmisc{psLib} 904 library defines the internal data structures that are used (arrays of 905 arbitrary type, vectors, images, and hash tables among others), manage 906 data access (particularly for FITS images and tables), and organize 907 string and error handling in a uniform fashion. This library also 908 contains fundamental math operations, covering vector statistics, 909 matrix operations, and function minimization. Common image operations 910 such as binning, interpolation, and convolution are also provided, as 911 well as the methods to to write JPEG versions of the data for 912 visualizations. Finally, general coordinate transformations are 913 provided between planes and projections of spheres. 914 915 The functions provided by \ippmisc{psModules} have more focused scopes 916 that are nevertheless still shared between multiple programs. The 917 isolation of source objects is included, providing the organization of 918 detections that is used in the \ippprog{psphot} photometry analysis 919 \citep{magnier2017c}. The PSF matching required for \ippstage{stack} 920 and \ippstage{diff} stage image combinations is as well. The 921 unification of configuration options between config files on disk and 922 the options specified on the command line is handled by 923 \ippmisc{psModules} functions, as is the contruction of data 924 structures in memory to represent the astronomical camera based on the 925 header information in the input file. The functions to generate and 926 apply the detrend corrections to the data are also provided by this 927 library. 928 929 \note{This likely needs cleaning up and more information.} 534 930 535 931 \section{IPP Data Processing Stages} 536 537 \subsection{Download from Summit} 538 539 As exposures are taken by the PS1 telescope \& camera system, the 60 540 OTA CCDs are read out by the camera software system and each chip is 541 written to disk on computers at the summit in the PS1 facility. The 542 chip images are written to a collection of machines in the PS1 543 facility called the `pixel servers'. After the images are written to 544 disk, a summary listing of the information about the exposure and the 545 chip images are written to an http server system called the 546 `datastore'. The datastore exposes, via http, a list of the exposures 547 obtained since the start of the PS1 operations. Requests to this 548 server may restrict to the latest by time. Each row in the listing 549 includes basic information about the exposure: an exposure identifier 550 (e.g., o5432g0123o; see~\ref{GPC1.names} for details), the date and 551 time of the exposure, \note{etc}. The row also provides a link to a 552 listing of the chips associated with that exposure. This listing 553 includes a link to the individual chip FITS files as well as an md5 554 CHECKSUM. Systems which are allowed access may download chip FITS 555 files via http requests to the provided links. 556 557 During night-time operations, while the telescope is observing the sky 558 and the camera subsystem is saving images to the pixel servers and 559 adding their information to the datastore list, the IPP subsystem 560 called `summitcopy' monitors the datastore in order to discover new 561 exposures ready for download. Once a new exposure has been listed on 562 the datastore, summitcopy adds an entry of the exposure to a table in 563 the processing database (summitExp). This tells the summitcopy to 564 look for the list of chips, which are then added to another table 565 (summitImfile). The summitcopy system then attempts to download the 566 chips from the summit pixel servers with an http request. As the chip 567 files are downloaded, their md5 checksum values are calculated and 568 compared with the value reported by the camera subsystem / datastore. 569 Download failures are rare and marked as a non-zero fault, allowing for a 570 manual recovery, rather than automatically rejecting the failed 571 chips. 932 \label{sec: stages} 933 934 935 \subsection{Summit copy} 936 \label{subsec: summit copy} 937 938 As exposures are taken by the PS1 telescope \& GPC1 camera system, the 939 data from the 60 OTA devices are read out by the camera software 940 wsystem and written to disk on a collection of computers at the summit 941 in the PS1 facility called ``pixel servers.'' After the images are 942 written to disk, a summary listing of the information about the 943 exposure and the chip images are added to the summit datastore. 944 945 During night-time operations, while the summit datastore is being 946 populated, the IPP subsystem called \ippstage{summitcopy} monitors the 947 datastores listed in the \ippdbtable{pzDatastore} table of the 948 database in order to discover new exposures ready for download. Once 949 a new exposure has been listed on the datastore, \ippstage{summitcopy} 950 adds an entry of the exposure to a table in the processing database 951 (\ippdbtable{summitExp}), indexed by an identifier that simply 952 increments the number of exposures announced by the summit, the 953 \ippdbcolumn{summit\_id}. This tells the \ippstage{summitcopy} system 954 to look for the list of chips, which are then added to another table 955 (\ippdbtable{summitImfile}). This system then attempts to download 956 the chips (registering the results of those operations into the 957 \ippdbtable{pzDownloadExp} and \ippdbtable{pzDownloadImfile} tables) 958 from the summit pixel servers via an http request. As the image files 959 are downloaded, their MD5 checksum values are calculated and compared 960 with the value reported by the summit datastore. Download failures 961 are rare and marked with a non-zero \ippdbcolumn{fault}, allowing for 962 a manual recovery, rather than automatically rejecting the failed 963 chips. Once all the components of the exposure have been downloaded, 964 they are further entered into the \ippdbtable{newExp} and 965 \ippdbtable{newImfile} tables, which index the exposures by 966 \ippdbcolumn{exp\_id}. This switch in index indicates that the 967 exposure has successfully been copied from the summit to the IPP 968 cluster, and that further processing is no longer dependent on outside 969 resources. 572 970 573 971 \subsection{Image Registration} 574 575 Once chips for an exposure have all been downloaded, the exposure is 576 ready to be registered. In this context, `registration' refers to the 577 process of adding them to the database listing of known, raw exposures 578 (not to be confused with 'registration' in the sense of pixel 579 re-alignment). The result of the registration analysis is an entry 580 for each exposure in the rawExp table, and one for each chip in the 581 rawImfile table. These tables are critical for downstream processing 582 to identify what exposures are available for processing in any other 583 stage. In the registration stage, a large amount of descriptive 584 metadata for each chip is added to the rawImfile table, some of which 585 is extracted from the chip FITS file headers (e.g., RA, DEC, FILTER) 586 and some of which is determined by a quick analysis of the pixels 587 (e.g., mean pixel values, standard deviation). The chip-level 588 information is merged into a set of exposure-level metadata and added 589 to the rawExp table entry. The exposure-level metadata may be the 590 same as any one of the chip, in a case where the values are duplicated 591 across the chip files (e.g., the name of the telescope or the date \& 592 time of the exposure), or it may be a calculation based on the values 593 from each chip (e.g., average of the average pixel values). 972 \label{subsec: registration} 973 974 Once the chips for an exposure have all been downloaded, the exposure 975 is ready to be registered. In this context, `registration' refers to 976 the process of adding them to the database listing of known, raw 977 exposures (not to be confused with 'registration' in the sense of 978 pixel re-alignment). The result of the registration analysis is an 979 entry for each exposure in the \ippdbtable{rawExp} table, and one for 980 each chip in the \ippdbtable{rawImfile} table. These tables are 981 critical for downstream processing to identify what exposures are 982 available for processing in any other stage. At the registration 983 stage, a large amount of descriptive metadata for each chip is added 984 to the \ippdbtable{rawImfile} table, the majority of which is 985 extracted from the chip FITS file headers (e.g., RA, DEC, FILTER) and 986 some of which is determined by a quick analysis of the pixels (e.g., 987 mean pixel values, standard deviation). The chip-level information is 988 merged into a set of exposure-level metadata and added to the 989 \ippdbtable{rawExp} table entry. The exposure-level metadata may be 990 the same as any one of the chip, in a case where the values are 991 duplicated across the chip files (e.g., the name of the telescope or 992 the date \& time of the exposure), or it may be a calculation based on 993 the values from each chip (e.g., average of the average pixel values). 594 994 595 995 Unlike much of the rest of the IPP stage, the raw exposures may only 596 996 have a single entry in the registration tables of the processing 597 database tables (rawExp and rawImfile). 997 database tables (\ippdbtable{rawExp} and \ippdbtable{rawImfile}). 998 999 For GPC1, the image registration stage is also the stage at which the 1000 \ippprog{burntool} analysis is run. This analysis is more completely 1001 described in \citet{waters2017}. In brief, the \ippprog{burntool} 1002 program identifies bright sources on the image, and identifies 1003 persistence trails that result from the incomplete transfer of charge. 1004 As this charge can leak out in subsequent exposures, the burntool 1005 analysis is run sequentially on the exposures, based on the 1006 observation date and time listed in the headers, with the results 1007 stored in an text table. As a result of the sequential nature of this 1008 analysis, the registration of exposures is blocked until the 1009 \ippprog{burntool} has been run on the previous exposures. 1010 1011 Once the registration process has finished, new science exposures that 1012 have an \ippdbcolumn{obs\_mode} value that indicates they are part of 1013 a particular science survey are automatically launched into the 1014 science analysis by defining entries for the \ippstage{chip} 1015 processing stage, as described above. This analysis can be relaunched 1016 multiple times, such as for the large scale PV3 reprocessing. 1017 However, this automatic process ensures the shortest time between 1018 observation and analysis, which is particularly important in the 1019 search for transient sources. 598 1020 599 1021 \subsection{Chip Processing} 600 601 The science analysis of an exposure begins with the processing of the 602 individual chips, the Chip Processing stage. This analysis step has 603 two main goals: the removal of the instrumental signature from the 604 pixel values (detrending) and the detection of the sources in the 605 objects. In the Chip stage, the individual chips are processed 606 independently in parallel within the data processing cluster. Within 607 the processing computer cluster, most of the data storage resources 608 are in the form of computers with large raids as well as substantial 609 processing capability. The processing system attempts to locate one 610 copy of specific raw chips on pre-defined computers for each chip. 611 The processing system is aware of this data localization and attempts 612 to target the processing of a particular chip to the machine on which 613 the data for that chip is stored. The output products are then 614 primarily saved back to the same machine. This `targetted' processing 615 was an early design choice to minimize the system wide network load 616 during processing. In practice, as computer disks filled up at 617 different rates, the data has not been localized to a very high 618 degree. The targeted processing has probably reduced the network load 1022 \label{subsec: chip} 1023 1024 The science analysis of an exposure begins with the \ippstage{chip} 1025 stage, which operates on the individual OTA image files. This 1026 analysis step has two main goals: detrending the image to remove the 1027 instrumental signature from the pixel values, and the detection of 1028 astronomical sources in the objects. Based on the entry the 1029 \ippdbtable{chipRun} primary table defining the processing details 1030 (with the \ippdbcolumn{state} column indicating it needs processing), 1031 and the associated information listed in the \ippdbtable{rawImfile}, 1032 jobs can be spawned for each component OTA. The \ippprog{pantasks} 1033 environment managing the jobs attempts to target the processing host 1034 to one that should host the OTA, to reduce number of operations done 1035 on remote data. In practice, this targeted processing has not had as 1036 large of an effect as was originally intended, as the data volume has 1037 reduced the ability of any one node to reliably contain a particular 1038 OTA. The targeted processing has probably reduced the network load 619 1039 somewhat but it has not been as critical of a requirement as 620 1040 originally expected. 621 1041 622 The Chip processing stage consists of: reading the raw image into 623 memory, appyling the detrending steps \citep[see][]{waters2017}, 624 stiching the individual OTA cells into a single chip image, detection 625 and characterization of the sources in the image 626 \citep[see][]{magnier2017b}, and output of the various data products. 627 These include the detrended chip image, variance image, and mask 628 image, as well as the FITS catalog of detected sources. The PSF model 629 and background model are also saved, along with a processing log. A 1042 %% In the \ippstage{chip} stage, 1043 %% the individual OTA image files are processed independently in parallel 1044 %% within the data processing cluster. \note{move this to kihei 1045 %% discussion?} Within the processing computer cluster, most of the 1046 %% data storage resources are in the form of computers with large raids 1047 %% as well as substantial processing capability. The processing system 1048 %% attempts to locate one copy of specific raw registered data on 1049 %% pre-defined computers that have been set as storage targets for that 1050 %% OTA. The processing system is aware of this data localization and 1051 %% attempts to target the processing for each OTA to the machine on which 1052 %% the data for that detector is stored. The output products are then 1053 %% primarily saved back to the same machine. This `targetted' processing 1054 %% was an early design choice to minimize the system wide network load 1055 %% during processing. In practice, as computer disks filled up at 1056 %% different rates, the data has not been localized to a very high 1057 %% degree. 1058 1059 The actual image processing is performed by the \ippprog{ppImage} 1060 program. This program reads the raw data into memory and applies the 1061 detrend corrections \citep[see][]{waters2017} to each cell in the OTA 1062 (which are stored as different extensions in the FITS file format), 1063 and then mosaics the cells into a single contiguous \ippstage{chip} 1064 stage image. This step also creates in memory additional images to 1065 hold the mask data, which indicates which pixels may not be valid, and 1066 the variance image, constructed as the Poissonian noise on the number 1067 of electrons detected based on the original pixel value and the 1068 detector gain. A background model is then fit across the image and 1069 subtracted to remove the expected contribution from the sky 1070 \citep[see][]{waters2017} for details. 1071 1072 With the image calibration procedure finished, object identification 1073 and photometry can be performed. Although this can be done using a 1074 stand alone program, \ippprog{psphot}, the underlying functions are 1075 contained in a library that allows \ippprog{ppImage} to directly do 1076 this analysis, removing the need to write out and re-read the image 1077 data. The details of the detection and characterization of the 1078 sources in the image are provided in \citet{magnier2017b}. 1079 1080 The results of the image processing are then written to disk, 1081 including the science, mask, and variance images, the background model 1082 subtracted, the PSF model used in the photometry process, and a FITS 1083 catalog of detected sources. Additional binned images of the full OTA 1084 are also saved, providing $16\times{}16$ and $256\times{}256$ pixel 1085 binning scales for quick visualization. The processing log and a 630 1086 selection of summary metadata describing the processing results are 631 saved and written to the processing database along with the completion 632 status of the process. Finally, binned chip images are generated (on 633 two scales, binned by 16 and 256 pixels) for use in the visualization 634 system of the processing monitor tool. 1087 also written to disk. This metadata is used to populate a row in the 1088 \ippdbtable{chipProcessedImfile} table (linked to the 1089 \ippdbtable{chipRun} entry by a shared \ippdbcolumn{chip\_id} value) 1090 to indicate that the processing of this OTA is complete. 1091 1092 As each OTA is processed independently of the others across a number 1093 of computers, the \ippprog{pantasks} managing the jobs periodically 1094 runs an \ippmisc{advance} task that checks that the number of rows in 1095 \ippdbtable{chipProcessedImfile} with \ippdbcolumn{fault} equal to 1096 zero matches the associated number of rows in \ippdbtable{rawImfile}. 1097 If this condition is met, than all processing for that exposure is 1098 finished, and the \ippdbcolumn{state} field is set to ``full''. If 1099 the \ippdbtable{chipRun}.\ippdbcolumn{end\_stage} field is set to 1100 \ippstage{chip}, then no further action is taken. However, this field 1101 is usually set to a subsequent stage (most often \ippstage{warp}), 1102 then an entry for this exposure is added to the \ippdbtable{camRun} 1103 table, and processing continues. 1104 1105 %% The \ippstage{chip} processing stage consists of: reading the raw image into 1106 %% memory, applying the detrending steps \citep[see][]{waters2017}, 1107 %% stiching the individual OTA cells into a single chip image, detection 1108 %% and characterization of the sources in the image 1109 %% \citep[see][]{magnier2017b}, and output of the various data products. 1110 %% These include the detrended chip image, variance image, and mask 1111 %% image, as well as the FITS catalog of detected sources. The PSF model 1112 %% and background model are also saved, along with a processing log. A 1113 %% selection of summary metadata describing the processing results are 1114 %% saved and written to the processing database along with the completion 1115 %% status of the process. Finally, binned chip images are generated (on 1116 %% two scales, binned by 16 and 256 pixels) for use in the visualization 1117 %% system of the processing monitor tool. \note{describe elsewhere?} 1118 1119 %% The database structure for the \stage{chip} stage mimics that of raw 1120 %% data, with a \ippdbtable{chipRun} characterizing the processing of a 1121 %% single exposure, mapping to a set of \ippdbtable{chipProcessedImfile} 1122 %% entries for each OTA via a common \ippdbcolumn{chip\_id}. 635 1123 636 1124 \subsection{Camera Calibration} 637 638 After sources have been detected and measured for each of the chip, 639 the next stage is to perform a basic calibration of the full exposure. 640 This stage starts with the collection of FITS tables containing the 641 instrumental measurements of the detected sources, primarily the 642 positions ($x_{\rm ccd}, y_{\rm ccd}$) and the instrumental PSF 643 magnitudes. The data for all chips of an exposure are loaded by the 644 analysis program. The header information is used to determine the 645 coordinates of the telescope boresite (RA, DEC, Position angle). 646 These three coordinates are used, along with a model of the camera 647 layout, to generate an initial guess for the astrometry of each chip. 648 Reference star coordinates and magnitudes are loaded from a reference 649 catalog for a region corresponding to the boundaries of the exposure, 650 padded by a large fraction of the exposure diameter in case of a 651 modest pointing error. The guess astrometry is used to match the 652 reference catalog to the observed stellar positions in the focal plane 653 coordinate system. Once an acceptable match is found, the astrometric 654 calibration of the individual chips is performed, including a a fit to 655 a single model for the distortion introduced by the camera optics. 656 After the astrometic analysis is completed, the photometric 657 calibration is determined using the final match to the reference 658 catalog. At this stage, pre-determined color terms may be included to 659 convert the reference photometry to an appropriate photometric 660 system. For PS1, this is used to generate synthetic w-band photometry 661 for areas where no PS1-based calibrated w-band photometry is 662 available. For more details, see \cite{magnier2017c}. 1125 \label{subsec: camera} 1126 1127 After sources have been detected and measured for each of the chips, 1128 the next stage is to perform a basic calibration of the full exposure 1129 in the \ippstage{camera} stage. This runs as a single job for the 1130 entire exposure, passing the collection of FITS table catalogs 1131 generated from each OTA in the \ippstage{chip} stage to the 1132 \ippprog{psastro} program. Although the full catalog is loaded, the 1133 calibration primarily concerns the positions ($x_{\rm ccd}, y_{\rm 1134 ccd}$) and the instrumental PSF magnitudes. The header information 1135 in these catalogs is used to determine the coordinates of the 1136 telescope boresite (RA, DEC, position angle). These three coordinates 1137 are used, along with a pre-determined model of the OTA layout within 1138 the camera, to generate an initial guess for the astrometry of each 1139 chip. Reference star coordinates and magnitudes are loaded from a 1140 reference catalog for a region corresponding to the boundaries of the 1141 exposure, padded by a large fraction (25\%) of the exposure diameter 1142 to help guarantee a solution in the case of a modest pointing error. 1143 The guess astrometry is used to match the reference catalog to the 1144 observed stellar positions in the focal plane coordinate system. Once 1145 an acceptable match is found, the astrometric calibration of the 1146 individual chips is performed, including a fit to a single model for 1147 the distortion introduced by the camera optics. After the astrometic 1148 analysis is completed, the photometric calibration is determined using 1149 the final match to the reference catalog. At this stage, 1150 pre-determined color terms may be included to convert the reference 1151 photometry to an appropriate photometric system. For PS1, this is 1152 used to generate synthetic w-band photometry for areas where no 1153 PS1-based calibrated w-band photometry is available. For more 1154 details, see \cite{magnier2017c}. The result of these calibrations is 1155 stored as a single multi-extension FITS table containing the results 1156 from each OTA as a separate extension. 663 1157 664 1158 In addition to the astrometric and photometric calibrations, the 665 Camera stage also generates the dynamic masks for the images. The dynamic 666 masks include masking for optical ghosts, glints, saturated stars, 667 diffraction spikes, and electronic crosstalk. The mask images 668 generated by the Chip stage are updated with these dynamic masks and a 669 new set of files are saved for the downstream analysis stages. 670 671 The Camera stage also merges the binned chip images 672 (see~\ref{sec:chip}) into single jpeg images of the entire focal 673 plane. These jpeg images can then be displayed by the process 1159 \ippstage{camera} stage also generates the dynamic masks for the 1160 images. These include masking for optical ghosts, glints, saturated 1161 stars, diffraction spikes, and electronic crosstalk. The mask images 1162 generated by the \ippstage{chip} stage are updated with these dynamic 1163 masks and a new set of files are saved for the downstream analysis 1164 stages. The \ippstage{camera} stage also merges the binned chip 1165 images (see~\ref{sec:chip}) into single jpeg images of the entire 1166 focal plane. These jpeg images can then be displayed by the process 674 1167 monitoring system to visualize the data processing. 675 1168 676 \subsection{Warp} 677 678 Once astrometric and photometric calibrations have been performed, 679 images are geometrically transformed into a set of common pixel-grid 680 images with simple projections from the sky. These images, called 681 skycells, can then be used in subsequent stacking and difference image 682 analysis without concern about the astrometric transformation of an 683 exposure. This processing is called `warping'; the warp analysis 684 stage is run on all exposures before they are processed further. For 685 details on the warping algorithm, see \cite{waters2017}. 686 687 The output products from the Warp stage consist of the skycell images 688 containing the signal, the variance, and the mask information. These 689 images have been shipped to STScI and \note{are available / will be 690 available} from the image extraction tools \note{in DR2}. 691 692 \subsection{Stack} 693 694 The skycell images generated by the Warp process are added together to 695 make deeper, higher signal-to-noise images in the Stack stage. The 696 stacks also fill in coverage gaps between different exposures, 697 resulting in an image of the sky with more uniform coverage than a 698 single exposure. See~\cite{waters2017} for details on the stack 699 combination algorithm. 1169 Again, summary metadata is saved to disk as well, and the results 1170 listed therein are used to populate a row in the 1171 \ippdbtable{camProcessedExp} database table. As the full exposure is 1172 processed all at once, this update also updates the associated 1173 \ippdbtable{camRun} entry, linked by the \ippdbcolumn{cam\_id}. As 1174 with the \ippstage{chip} stage, the 1175 \ippdbtable{camRun}.\ippdbcolumn{end\_stage} is for a subsequent 1176 stage, an appropriate entry is added to the \ippdbtable{fakeRun} 1177 table. 1178 1179 \subsection{Fake Analysis} 1180 \label{subsec: fake} 1181 1182 The \ippstage{fake} stage was originally designed to do false source 1183 injection and recovery, in order to determine the detection efficiency 1184 of sources on the exposure. However, early in the design of the IPP, 1185 this task was moved to the rest of the photometry analysis done at the 1186 \ippstage{chip} stage. Removing the stage would require significant 1187 changes to the database schema. As a result, this conveniently named 1188 stage generally does no actual data processing, and consists mainly of 1189 database operations to move the exposure on to the \ippstage{warp} 1190 stage. The operations mimic the \ippstage{chip} stage, with 1191 individual jobs run for each OTA that update rows in the 1192 \ippdbtable{fakeProcessedImfile}, and an \ippmisc{advance} task that 1193 updates the \ippdbtable{fakeRun} table and promotes the exposure to 1194 the next stage by adding a row to the \ippdbtable{warpRun} table. 1195 1196 \subsection{Image Warping} 1197 \label{subsec: warp} 1198 1199 The \ippstage{warp} stage moves the data from a given exposure beyond 1200 away from being camera specific and towards a uniform sky oriented 1201 arrangement. There are a number of ``tessellations'' defined and used 1202 by the IPP to define the extent and scaling of images on this uniform 1203 arrangement. A tessellation can be defined for a limited region, such 1204 as M31 or other fields of particular interest that can be well 1205 described by a single tangent plane projection, or for larger regions 1206 which have multiple projection centers. For the $3\Pi$ survey, the 1207 \ippmisc{RINGS.V3} tessellation was used that used projection centers 1208 spaced every four degrees in both RA and DEC, with $0\farcs{}25$ 1209 pixels. These projections are further broken down into ``skycells'' 1210 that form a $10\times{}10$ grid within the projection, with an overlap 1211 region of 60" between adjacent skycells to ensure that objects are not 1212 split on all images. 1213 1214 These tessellations are stored in the DVO format, with 1215 \ippdbtable{SkyTable} entries defining the projection centers and 1216 image boundaries for all the skycells. The first step of the 1217 \ippstage{warp} stage is determining which skycells overlap with the 1218 input exposure. These overlaps are determined by the 1219 \ippprog{dvoImageOverlaps} program, which compares the astrometrically 1220 calibrated catalog from the \ippstage{camera} stage to the 1221 \ippdbtable{SkyTable} entries. The output of this command is used to 1222 populate the \ippdbtable{warpSkyCellMap} table in the database, which 1223 contains a row for each skycell and OTA that overlap. This results in 1224 more rows than there are OTAs, as each skycell can contain 1225 contributions from multiple OTAs. 1226 1227 Once this mapping has been defined, jobs to construct each skycell are 1228 run, passing the \ippstage{camera} stage catalog and the 1229 \ippstage{chip} stage images (including the variance images and the 1230 updated masks) to the \ippprog{pswarp} program. For details on the 1231 warping algorithm, see \cite{waters2017}. The output of this program 1232 are the geometrically transformed images containing all input pixels 1233 warped to the common skycell pixel grid, which can subsequently be 1234 used for stacking and difference image analysis. The image, mask, and 1235 variance generated at this stage will be available from the image 1236 extraction tools at the MAST archive at STScI as part of the DR2 data 1237 release. A catalog is also generated containing the locations of 1238 sources from the input catalog that fall within area of the 1239 \ippstage{warp}. 1240 1241 When the jobs have completed, an entry for the skycell is added to the 1242 \ippdbtable{warpSkyfile} database table, linked to the 1243 \ippdbtable{warpRun} entry by a common \ippdbcolumn{warp\_id}. An 1244 \ippmisc{advance} task again checks that all potential skycells have 1245 been generated. At this point, the direct promotion of exposures from 1246 one stage to the next stops, as the logic for matching exposures for 1247 combination is more complicated than simply adding a single entry (as 1248 discussed above). 1249 1250 \subsection{Stack Combination} 1251 \label{subsec: stack} 1252 1253 The skycell images generated by the \ippstage{warp} process are added 1254 together to make deeper, higher signal-to-noise images in the 1255 \ippstage{stack} stage. These stacked images also fill in coverage 1256 gaps between different exposures, resulting in an image of the sky 1257 with more uniform coverage than a single exposure. 700 1258 701 1259 In the IPP processing, stacks may be made with various options for the … … 703 1261 filter for each Medium Deep field are combined into a set of stacks 704 1262 for that field. These so-called `nightly stacks' are used by the 705 transient survey projects to detect the faint supernovae, among other 706 transient events. For the PV3 $3\pi$ analysis, all filter images from 707 the $3\pi$ survey observation were stacked together to generate a 708 single set of images with $\sim 10 - 20\times$ the exposure of the 709 individual survey exposures. The signal, variance, and mask images 710 resulting from these deep stacks are part of the DR1 release and are 711 available from the image extraction tools. 1263 transient survey projects to detect faint supernovae, among other 1264 transient events. For the PV3 $3\pi$ analysis, all images in each 1265 filter from the observations for this survey were stacked together to 1266 generate a single set of images with $\sim 10 - 20\times$ the exposure 1267 of the individual survey exposures. 712 1268 713 1269 For the PV3 processing of the Medium Deep fields, stacks have been 714 1270 generated for the nightly groups and for the full depth using all 715 exposures (deep stacks). In addition, a 'best seeing' set of stack 716 have been produced \note{using image quality cuts to be described}. 717 We have also generated out-of-season stacks for the Medium Deep 718 fields, in which all image not from a particular observing season for 719 a field are combined into a stack. These later stacks are useful as 720 deep templates when studying long-term transient events in the Medium 721 Deep fields as they are not (or less) contaminated by the flux of the 722 transients from a given season. 1271 exposures, producing ``deep stacks''. In addition, a 'best seeing' 1272 set of stacks have been produced \note{using image quality cuts to be 1273 described}. We have also generated out-of-season stacks for the 1274 Medium Deep fields, in which all image not from a particular observing 1275 season for a field are combined into a stack. These later stacks are 1276 useful as deep templates when studying long-term transient events in 1277 the Medium Deep fields as they are not (or less) contaminated by the 1278 flux of the transients from a given season. 1279 1280 When a given set of \ippstage{stack} stage are defined, exposures with 1281 existing \ippstage{warp} entries that match the filter, position, and 1282 other criteria such as seeing are grouped by their skycell. An entry 1283 is then added for each skycell in the \ippdbtable{stackRun} table, 1284 with the \ippdbcolumn{warp\_id} entries for the exposures added to the 1285 \ippdbtable{stackInputSkyfile} table, linked to the 1286 \ippdbtable{stackRun} entry by the \ippdbcolumn{stack\_id} field. 1287 This defines the mapping for which exposures contribute to the 1288 \ippstage{stack}. This breaks exposures into single skycells, but as 1289 adjacent \ippstage{stack} skycells may contain inputs from different 1290 exposures, there is no simple way to group the processing at the 1291 \ippstage{stack} stage into exposures. 1292 1293 The \ippstage{stack} jobs pass the information about the input images 1294 and catalogs to the \ippprog{ppStack} program, which performs the 1295 image combinations. See~\cite{waters2017} for details on the stack 1296 combination algorithm. In addition to the standard image, mask, and 1297 variance produced at other stage, additional images are constructed 1298 with information about the contributions to each pixel. A number 1299 image contains the number of input exposures used for each pixel, 1300 along with an exposure time map, and a weighted exposure time map that 1301 scales the exposure time based on the relative variance of each input. 1302 These images for the $3\Pi$ analysis are currently available from the 1303 MAST image extraction tools at STSci. 1304 1305 Upon completing the generation of these images, a row is added to the 1306 \ippdbtable{stackSumSkyfile} table with statistics about 1307 \ippstage{stack} processing. As this completes all processing for the 1308 entry, no \ippmisc{advance} job is required. 723 1309 724 1310 \subsection{Stack Photometry} 725 726 The stack images are generated in the Stack stage of the IPP, but the 727 source detection and extraction analysis of those images is deferred 728 until a separate stage, the Stack Photometry stage. This separation 729 is maintained because the stack photometry analysis is performed on 730 all 5 filter stack images at the same time. By deferring the 731 analysis, the processing system may decouple the generation of the 732 pixels from the source detection. This makes the sequencing of 1311 \label{subsec: staticsky} 1312 1313 Although images are generated in the \ippstage{stack} stage of the 1314 IPP, the source detection and extraction analysis of those images is 1315 deferred to the \ippstage{staticsky} stage. This separation is 1316 maintained because the photometry analysis of the \ippstage{stack} 1317 images is performed on all 5 filters simultaneously. By deferring 1318 this analysis, the processing system may also decouple the generation 1319 of the pixels from the source detection. This makes the sequencing of 733 1320 analysis somewhat easier and less subject to blocks due to a failure 734 in the stacking analysis. 735 736 The stack photometry algorithms are described in detail in 737 \cite{magnier2017b}. In short, sources are detected in all 5 filter 738 images down to the $5\sigma$ significance. The collection of detected 739 sources is merged into a single master list. If a source is detected 740 in at least two bands, or only in $y$-band, then a PSF model is fitted 741 to the pixels of the other bands in which the source was not detected. 742 This forced photometry results in lower significance measurements of 743 the flux at the positions of objects which are thought to be real 744 sources, by virtue of triggering a detection in at least two bands. 745 The relaxed limit for $y$-band is included to allow for searches of 746 $y$-dropout objects: it is known that faint, high-redshift quasars may 747 be detected in $y$-band only. The casual user of the PV3 dataset 748 should be wary of sources detected only in $y$-band as these are 749 likely to have a higher false-positive rate than the other stack 750 sources. 751 752 The stack photometry output files consist of a set of FITS tables in a 753 single file, with one file for each filter. Within one of these 754 files, the tables include: the measurements of sources based on the 755 PSF model; aperture like parameters such as the Petrosian flux and 756 radius; the convolved Galaxy model fits; the radial aperture 757 measurements. \note{is this list complete?} 1321 in the stacking analysis. Similar to the \ippstage{stack} stage, an 1322 entry is created in the \ippdbtable{staticskyRun} table, linked to a 1323 series of rows in the \ippdbtable{staticskyInput} table by a common 1324 \ippdbcolumn{sky\_id}, each of which also contains the appropriate 1325 \ippdbcolumn{stack\_id} entries for the skycell under consideration. 1326 1327 The input images are passed to the \ippprog{psphotStack} program, 1328 which does the analysis. The stack photometry algorithms are 1329 described in detail in \cite{magnier2017b}. In short, sources are 1330 detected in all 5 filter images down to the $5\sigma$ significance. 1331 The collection of detected sources is merged into a single master 1332 list. If a source is detected in at least two bands, or only in 1333 \yps{} band, then a PSF model is fitted to the pixels of the other 1334 bands in which the source was not detected. This forced photometry 1335 results in lower significance measurements of the flux at the 1336 positions of objects which are thought to be real sources, by virtue 1337 of triggering a detection in at least two bands. The relaxed limit 1338 for \yps{} band is included to allow for searches of \yps{} dropout 1339 objects: it is known that faint, high-redshift quasars may be detected 1340 in \yps{} band only. Sources detected only in \yps{} band are 1341 therefore more likely to have a higher false-positive rate than the 1342 other stack sources. 1343 1344 The stack photometry output files consist of a set of FITS table 1345 catalogs, with one file for each filter. Within these files, there 1346 are multiple table extensions that include: the measurements of 1347 sources based on the PSF model; aperture like parameters such as the 1348 Petrosian flux and radius; the convolved galaxy model fits; and the 1349 radial aperture measurements. \note{is this list complete?} Once the 1350 photometry is complete, a row is added to the 1351 \ippdbtable{staticskyResult} table with basic statistics from the 1352 analysis. 758 1353 759 1354 The stack photometry output catalogs are re-calibrated for both 760 photometry and astrometry in a process very similar to the Camera 761 calibration stage. In the case of the stack calibration, however, 762 each skycell is processed independently. The same reference catalog 763 is used for the Camera and Stack calibration stages. 1355 photometry and astrometry in a process very similar to the 1356 \ippstage{camera} calibration stage. In the case of this 1357 \ippstage{skycal} stage, each skycell is processed independently. 1358 Because of this independence, when queued for processing, the entries 1359 in the \ippdbtable{skycalRun} table contain the \ippdbcolumn{sky\_id} 1360 and \ippdbcolumn{stack\_id} entries of the parent data directly. As 1361 in the \ippstage{camera} stage, the \ippprog{psastro} program reads in 1362 the stack photometry catalog, and produces a calibrated output. A 1363 different processing recipe is supplied to \ippprog{psastro}, which 1364 controls for the different data. The same reference catalog is used 1365 for the \ippstage{camera} and \ippstage{stack} calibration stages. 1366 Upon completion, the analysis statistics are written to the 1367 \ippdbtable{skycalResult} table. \note{Any difference in output formats?} 764 1368 765 1369 \subsection{Forced Warp Photometry} 1370 \label{subsec: fullforce} 766 1371 767 1372 Traditionally, projects which use multiple exposures to increase the 768 1373 depth and sensitivity of the observations have generated something 769 equivalent to the stack images produced by the IPP analysis . In770 theory, the photometry of the stack images produces the `best' 771 photometry catalog, with best sensitivity and the best data quality at 772 a ll magnitudes (c.f, CFHT Legacy survey, COSMOS, etc). In practice,773 the stack images have some significant limitations due to the 774 difficulty of modelling the PSF variations. This difficulty is 775 particularly severe for the Pan-STARRS $3\pi$ survey stacks due tothe776 combination of the substantial mask fraction of the individual 777 exposures, the large instrinsic image quality variations within a 778 single exposure, and the wide range of image quality conditions under 779 which data were obtainedand used to generate the $3\pi$ PV3 stacks.1374 equivalent to the stack images produced by the IPP analysis (c.f, CFHT 1375 Legacy survey, COSMOS, etc). In theory, the photometry of the stack 1376 images produces the `best' photometry catalog, with best sensitivity 1377 and the best data quality at all magnitudes. In practice, the stack 1378 images have some significant limitations due to the difficulty of 1379 modelling the PSF variations. This difficulty is particularly severe 1380 for the Pan-STARRS $3\pi$ survey stacks due to the combination of the 1381 substantial mask fraction of the individual exposures, the large 1382 instrinsic image quality variations within a single exposure, and the 1383 wide range of image quality conditions under which data were obtained 1384 and used to generate the $3\pi$ PV3 stacks. 780 1385 781 1386 For any specific stack, the point spread function at a particular … … 790 1395 location. In the end, the stack images have a effective point spread 791 1396 function which is not just variable, but changing significantly on 792 small scales in a highly textured fashion. 1397 small scales in a highly textured fashion. \note{duplicates previous paragraph?} 793 1398 794 1399 Any measurement which relies on a good knowledge of the PSF at the … … 796 1401 present in the stack, or the measurement will be somewhat degraded. 797 1402 The highly textured PSF variations make this a very challenging 798 problem: not would such a PSF model require an unusually fine-grained1403 problem: not only would such a PSF model require an unusually fine-grained 799 1404 PSF model, there would likely not be enough PSF stars in an given 800 1405 stack to determine the model at the resolution required. The IPP … … 805 1410 changes apparent in the stack images. 806 1411 807 Thus PSF photometry as well as convolved Galaxy models in the stack1412 Thus PSF photometry as well as convolved galaxy models in the stack 808 1413 are degraded by the PSF variations. Aperture-like measurements are in 809 1414 general not as affected by the PSF variations, as long as the aperture … … 815 1420 816 1421 The PV3 $3\pi$ analysis solves this problem by using the sources 817 detected in the Stack images and performing forced photometry on the1422 detected in the stack images and performing forced photometry on the 818 1423 individual warp images used to generate the stack. This analysis is 819 1424 performed on all warps for a single filter as a single job, though 820 this is more of a bookkeep ping aid as it is not necessary for the1425 this is more of a bookkeeping aid as it is not necessary for the 821 1426 analysis of the different warps to know about the results of the other 822 1427 warps. … … 836 1441 measurement as the signal-to-noise increases by $\sqrt{N}$. 837 1442 838 \subs ection{Forced Galaxy Models}1443 \subsubsection{Forced Galaxy Models} 839 1444 840 1445 The convolved galaxy models are also re-measured on the warp images by … … 855 1460 (and thus the best galaxy magnitude value). 856 1461 857 For each warp image, the Stack value for the major and minor axis are1462 For each warp image, the stack value for the major and minor axis are 858 1463 used as the center of a $7\times 7$ grid search of the major and minor 859 1464 axis parameter values. The grid spacing is defined as a function of … … 890 1495 891 1496 \subsection{Difference Images} 892 1497 \label{subsec: diff} 893 1498 Two of the primary science drivers for the Pan-STARRS system are the 894 1499 search hazardous asteroids and the search for Type Ia supernovae to … … 904 1509 images are matched. \note{discuss Alard-Lupton}. 905 1510 906 In the Difference Imagestage, the IPP generates diffferece images for907 specified pairs of images. It is possible for the difference image to1511 In the \ippstage{diff} stage, the IPP generates diffferece images for 1512 appropriately specified pairs of images. It is possible for the difference image to 908 1513 be generated from a pair of warp images, from a warp and a stack of 909 1514 some variety, or from a pair of stacks. During the PS1 survey, pairs … … 918 1523 for these fields each night. 919 1524 920 For the PV3 processing, the entire collection of warps for the $3\pi$1525 For the PV3 $3\Pi$ processing, the entire collection of warps for the 921 1526 survey were combined with the $3\pi$ stacks to generate `warp-stack 922 1527 diffs'. 923 1528 924 1529 \subsection{Addstar : DVO Ingest} 1530 \label{subsec: addstar} 925 1531 926 1532 \subsection{Calibration Operations} 1533 \label{subsec: calibration} 927 1534 928 1535 \subsection{IPP to PSPS} 1536 \label{subsec: ipp2psps} 1537 \note{Default to pointing to Flewelling et al 2017?} 929 1538 930 1539 \subsection{PSPS Load \& Merge} 1540 \label{subsec: psps} 1541 \note{Default as well to pointing to Flewelling et al 2017?} 931 1542 932 1543 \section{IPP Hardware Systems} 1544 \label{sec: hardware} 1545 933 1546 934 1547 \subsection{Kihei Processing Cluster} 1548 \label{subsec: kihei} 1549 1550 The majority of all Pan-STARRS processing has been performed on the 1551 dedicated IPP cluster, located in Kihei on Maui. This cluster was 1552 originally located at the Maui High Performance Computing Center 1553 (MHPCC), a United States Air Force research laboratory center managed 1554 by the University of Hawaii. This site was chosen based on the 1555 original development funding provided by the Air Force Research Labs 1556 \citep[see][for more details]{chambers2017}. Once the Air Force 1557 funding stopped being a significant driver for Pan-STARRS, the cluster was 1558 physically moved from the MHPCC to a similar nearby computing center 1559 located at the Maui Research and Technology Center. 1560 1561 The computing cluster is comprised of three main types of computers, 1562 with a variety of individual specifications due to the cluster being 1563 assembled from multiple generations of purchases. The data storage 1564 nodes contain \note{check, as this contains B nodes} approximately 10 1565 petabytes of storage space that are used to store both the raw 1566 exposure data downloaded from the telescope as well as processed data 1567 products. These nodes are also used to do processing, and have jobs 1568 targeted to them in an effort to reduce the network I/O demands 1569 (see~\ref{chip section} for more on this process). 1570 1571 These storage nodes are not fully capable of completing all processing 1572 on the short timescale necessary for each night's worth of data. To 1573 increase the processing capability, we have a large number 1574 \note{actual number?} of ``compute'' nodes, that have small amounts of 1575 local storage, but are able to add processing power. In addition to 1576 the direct processing of image data, these nodes are also used to 1577 manage the \ippprog{Nebulous} file interface, as well as controlling 1578 the job scheduling for the processing. 1579 1580 The final type of computer in the cluster are the database servers. 1581 These special purpose computers \note{have lots of memory and disk 1582 space? Is that it?} are used to store and manage both the IPP gpc1 1583 and \ippprog{Nebulous} databases. In addition to the main master 1584 servers, we have duplicate servers used as database replicants, which 1585 allow for quick switching from the main to backup servers in case of a 1586 hardware issue that cannot be resolved immediately. 935 1587 936 1588 \subsection{Los Alamos National Labs} 1589 \label{subsec: LANL} 937 1590 938 1591 In order to increase the processing rate for the $3\Pi$ PV3 data, we … … 1036 1689 1037 1690 \subsection{UH Cray Cluster} 1691 \label{subsec: UH Cray} 1038 1692 1039 1693 In December 2014, the University of Hawaii installed a 178-compute … … 1060 1714 994,890 runs processed there. 1061 1715 1716 \section{Discussion} 1717 \label{sec: discussion} 1062 1718 1063 1719 \acknowledgments … … 1083 1739 \input{datasystem.bbl} 1084 1740 1741 \appendix 1742 1743 \section{GPC1 Database Schema Outline} 1744 \label{sec: database schema} 1745 1746 Table \ref{tab: database schema} provides a list of a majority of the 1747 tables in the GPC1 database schema. Tables that have been excluded 1748 are either no longer used in IPP processing, or are used for rare 1749 reductions that were not used for the PV3 data release. The tables 1750 are grouped into stages, with the primary table and any secondary 1751 tables for that stage listed together, along with the primary key 1752 column that link the tables together. 1753 1754 \begin{center} 1755 \begin{deluxetable}{lllll} 1756 \tablecolumns{5} 1757 \tablewidth{0pc} 1758 \tablecaption{GPC1 Database Schema Outline} 1759 \tablehead{\colhead{Stage} & \colhead{Primary Table} & \colhead{Secondary Table} & \colhead{Key} & \colhead{Notes}} 1760 \startdata 1761 \ippstage{addstar} & \ippdbtable{addRun} & \ippdbtable{addProcessedExp} & \ippdbcolumn{add\_id} & \\ 1762 \ippstage{camera} & \ippdbtable{camRun} & \ippdbtable{camProcessedExp} & \ippdbcolumn{cam\_id} & \\ 1763 \ippstage{chip} & \ippdbtable{chipRun} & \ippdbtable{chipProcessedImfile} & \ippdbcolumn{chip\_id} & \\ 1764 \ippstage{detrend} & \ippdbtable{detRun} & \ippdbtable{detRunSummary} & \ippdbcolumn{det\_id} & \\ 1765 & & \ippdbtable{detInputExp} & & \\ 1766 & & \ippdbtable{detRegisteredImfile} & & Information about detrends produced externally.\\ 1767 & & \ippdbtable{detStackedImfile} & & \\ 1768 & \ippdbtable{detProcessedExp} & \ippdbtable{detProcessedImfile} & & \\ 1769 & \ippdbtable{detResidExp} & \ippdbtable{detResidImfile} & & \\ 1770 & \ippdbtable{detNormalizedExp} & \ippdbtable{detNormalizedImfile} & & \\ 1771 \ippstage{diff} & \ippdbtable{diffRun} & \ippdbtable{diffSkyfile} & \ippdbcolumn{diff\_id} & \\ 1772 & & \ippdbtable{diffInputSkyfile} & & \\ 1773 \ippstage{distribution} & \ippdbtable{distRun} & \ippdbtable{distComponent} & \ippdbcolumn{dist\_id} & \\ 1774 & & \ippdbtable{distTarget} & & \\ 1775 \ippstage{fake} & \ippdbtable{fakeRun} & \ippdbtable{fakeProcessedImfile} & \ippdbcolumn{fake\_id} & \\ 1776 \ippstage{fullforce} & \ippdbtable{fullForceRun} & \ippdbtable{fullForceInput} & \ippdbcolumn{ff\_id} & \\ 1777 & & \ippdbtable{fullForceResult} & & \\ 1778 & & \ippdbtable{fullForceSummary} & & Properties about average parameters from all results.\\ 1779 \ippstage{lap} & \ippdbtable{lapSequence} & \ippdbtable{lapRun} & \ippdbcolumn{seq\_id} & Sequence of full reprocessing\\ 1780 & \ippdbtable{lapRun} & \ippdbtable{lapExp} & \ippdbcolumn{lap\_id} & \\ 1781 \ippstage{publish} & \ippdbtable{publishRun} & \ippdbtable{publishDone} & \ippdbcolumn{pub\_id} & \\ 1782 & & \ippdbtable{publishClient} & & \\ 1783 \ippstage{summitcopy} & \ippdbtable{pzDataStore} & & & Lists locations to check for new exposures.\\ 1784 & \ippdbtable{summitExp} & \ippdbtable{summitImfile} & \ippdbcolumn{summit\_id} & Exposures available at the telescope.\\ 1785 & \ippdbtable{pzDownloadExp}& \ippdbtable{pzDownloadImfile} & & Exposures that are being downloaded.\\ 1786 & \ippdbtable{newExp} & \ippdbtable{newImfile} & \ippdbcolumn{exp\_id} & Exposures that have been saved to IPP cluster.\\ 1787 1788 \ippstage{registration} & \ippdbtable{rawExp} & \ippdbtable{rawImfile} & \ippdbcolumn{exp\_id} & \\ 1789 \ippstage{remote} & \ippdbtable{remoteRun} & \ippdbtable{remoteComponent} & \ippdbcolumn{remote\_id} & \\ 1790 \ippstage{skycal} & \ippdbtable{skycalRun} & \ippdbtable{skycalResult} & \ippdbcolumn{skycal\_id} & \\ 1791 \ippstage{stack} & \ippdbtable{stackRun} & \ippdbtable{stackInputSkyfile} & \ippdbcolumn{stack\_id} & \\ 1792 & & \ippdbtable{stackSumSkyfile} & & \\ 1793 \ippstage{staticsky} & \ippdbtable{staticskyRun} & \ippdbtable{staticskyInput} & \ippdbcolumn{sky\_id} & \\ 1794 & & \ippdbtable{staticskyResult} & & \\ 1795 \ippstage{warp} & \ippdbtable{warpRun} & \ippdbtable{warpImfile} & \ippdbcolumn{warp\_id} & \\ 1796 & & \ippdbtable{warpSkyCellMap} & & Mapping of input chips to projection skycells.\\ 1797 & & \ippdbtable{warpSkyfile} & & \\ 1798 \enddata 1799 \label{tab: database schema} 1800 \end{deluxetable} 1801 \end{center} 1802 1085 1803 1086 1804 \end{document}
Note:
See TracChangeset
for help on using the changeset viewer.
