This file is indexed.

/usr/include/astrometry/anwcs.h is in astrometry.net 0.46-0ubuntu2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
  This file is part of the Astrometry.net suite.
  Copyright 2010 Dustin Lang.

  The Astrometry.net suite is free software; you can redistribute
  it and/or modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation, version 2.

  The Astrometry.net suite is distributed in the hope that it will be
  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with the Astrometry.net suite ; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
*/

#ifndef ANWCSLIB_H
#define ANWCSLIB_H

#include "sip.h"
#include "an-bool.h"
#include "qfits_header.h"
#include "bl.h"

/** Interface to Mark Calabretta's wcslib, if available, and
 Astrometry.net's TAN/SIP implementation.  Also WCSTools. */

#define ANWCS_TYPE_WCSLIB 1
#define ANWCS_TYPE_SIP 2
#define ANWCS_TYPE_WCSTOOLS 3

struct anwcs_t {
	/**
	 If type == ANWCS_TYPE_WCSLIB:
	   data is a private struct containing a wcslib  "struct wcsprm*".

	 If type == ANWCS_TYPE_SIP:
	   data is a "sip_t*"

	 If type == ANWCS_TYPE_WCSTOOLS:
	   data is a "struct WorldCoor*"
	 */
	int type;
	void* data;
};
typedef struct anwcs_t anwcs_t;



pl* anwcs_walk_outline(const anwcs_t* wcs, const dl* path, int fill);



// len: length in characters of 'str'
anwcs_t* anwcs_wcslib_from_string(const char* str, int len);
char* anwcs_wcslib_to_string(const anwcs_t* wcs, char** s, int* len);

anwcs_t* anwcs_open(const char* filename, int ext);

anwcs_t* anwcs_open_wcslib(const char* filename, int ext);

anwcs_t* anwcs_open_wcstools(const char* filename, int ext);

anwcs_t* anwcs_wcstools_from_string(const char* str, int len);

anwcs_t* anwcs_open_sip(const char* filename, int ext);

anwcs_t* anwcs_open_tan(const char* filename, int ext);

anwcs_t* anwcs_new_sip(const sip_t* sip);

anwcs_t* anwcs_new_tan(const tan_t* tan);

// Creates an axis-aligned TAN WCS at the given RA,Dec with "width" width in degrees
// and W x H  pixels.
anwcs_t* anwcs_create_box(double ra, double dec, double width, int W, int H);

anwcs_t* anwcs_create_box_upsidedown(double ra, double dec, double width, int W, int H);

anwcs_t* anwcs_create_hammer_aitoff(double refra, double refdec,
									double zoomfactor,
									int W, int H, anbool yflip);

anwcs_t* anwcs_create_allsky_hammer_aitoff(double refra, double refdec,
										   int W, int H);
anwcs_t* anwcs_create_allsky_hammer_aitoff2(double refra, double refdec,
                                            int W, int H);

int anwcs_write(const anwcs_t* wcs, const char* filename);

int anwcs_write_to(const anwcs_t* wcs, FILE* fid);

int anwcs_add_to_header(const anwcs_t* wcs, qfits_header* hdr);

int anwcs_radec2pixelxy(const anwcs_t* wcs, double ra, double dec, double* p_x, double* p_y);

int anwcs_pixelxy2radec(const anwcs_t* wcs, double px, double py, double* ra, double* dec);

int anwcs_pixelxy2xyz(const anwcs_t* wcs, double px, double py, double* p_xyz);

int anwcs_xyz2pixelxy(const anwcs_t* wcs, const double* xyz, double *px, double *py);

anbool anwcs_radec_is_inside_image(const anwcs_t* wcs, double ra, double dec);

void anwcs_get_cd_matrix(const anwcs_t* wcs, double* p_cd);

/**
 The SIP implementation guarantees:

   ramin <= ramax
      ramin may be < 0, or ramax > 360, if the image straddles RA=0.
 */
void anwcs_get_radec_bounds(const anwcs_t* wcs, int stepsize,
							double* pramin, double* pramax,
							double* pdecmin, double* pdecmax);

void anwcs_print(const anwcs_t* wcs, FILE* fid);

// useful for python
void anwcs_print_stdout(const anwcs_t* wcs);

// Center and radius of the field.
// RA,Dec,radius in degrees.
int anwcs_get_radec_center_and_radius(const anwcs_t* anwcs,
									  double* p_ra, double* p_dec, double* p_radius);

void anwcs_walk_image_boundary(const anwcs_t* wcs, double stepsize,
							   void (*callback)(const anwcs_t* wcs, double x, double y, double ra, double dec, void* token),
							   void* token);

anbool anwcs_find_discontinuity(const anwcs_t* wcs, double ra1, double dec1,
							  double ra2, double dec2,
							  double* pra3, double* pdec3,
							  double* pra4, double* pdec4);

anbool anwcs_is_discontinuous(const anwcs_t* wcs, double ra1, double dec1,
							double ra2, double dec2);

/*
 // Assuming there is a discontinuity between (ra1,dec1) and (ra2,dec2),
 // return 
 int anwcs_get_discontinuity(const anwcs_t* wcs, double ra1, double dec1,
 double ra2, double dec2,
 double* dra, double* ddec);
 */
dl* anwcs_walk_discontinuity(const anwcs_t* wcs,
							 double ra1, double dec1, double ra2, double dec2,
							 double ra3, double dec3, double ra4, double dec4,
							 double stepsize,
							 dl* radecs);

anbool anwcs_overlaps(const anwcs_t* wcs1, const anwcs_t* wcs2, int stepsize);

double anwcs_imagew(const anwcs_t* anwcs);
double anwcs_imageh(const anwcs_t* anwcs);

void anwcs_set_size(anwcs_t* anwcs, int W, int H);

int anwcs_scale_wcs(anwcs_t* anwcs, double scale);

// angle in deg
int anwcs_rotate_wcs(anwcs_t* anwcs, double angle);

// Approximate pixel scale, in arcsec/pixel, at the reference point.
double anwcs_pixel_scale(const anwcs_t* anwcs);

void anwcs_free(anwcs_t* wcs);

// useful for python: get the sip_t*, if this anwcs wraps a SIP structure; NULL else
sip_t* anwcs_get_sip(const anwcs_t* wcs);

#endif