Switch between coordinates of pixel and physical coordinates in n-dimensional FITS image using AstropyFind physical coordinates of a pixel in a fits file with pythonObtaining the equation of the straight line projecting onto a given pixel in an image with opencvHow to get the origin coordinate and pixel physical dimension from a PNG imageAstropy: physical coordinates from swift fits fileExtracting WCS Coordinates from FITSscikit-image pixel by pixel manipulationPython astropy: convert velocities from ECEF to J2000 coordinate systemMayavi's volume slicer to display coordinates instead of indicesCoordinates transformation in AstropyRetrieve projection values from matplotlib plot with astropy/fits data
Understanding Cursive /Joined Writing in Irish Register Death
What is my breathable atmosphere composed of?
Integer Decision Variables Always Forced to Zero in Minimization Problem (MINLP)
Are there any non-WEB re-implementation of TeX Core in recent years?
How do email clients "send later" without storing a password?
Will replacing a fake visa with a different fake visa cause me problems when applying for a legal study permit?
Can I conceal an antihero's insanity - and should I?
How can I discourage sharing internal API keys within a company?
Why did they ever make smaller than full-frame sensors?
How are chord ratios developed exactly?
What is this unknown executable on my boot volume? Is it Malicious?
How to stabilise the bicycle seatpost and saddle when it is all the way up?
Where can I get an anonymous Rav Kav card issued?
Do all humans have an identical nucleotide sequence for certain proteins, e.g haemoglobin?
Uncovering the Accelerated Dragon opening
Does a gnoll speak both Gnoll and Abyssal, or is Gnoll a dialect of Abyssal?
Is low emotional intelligence associated with right-wing and prejudiced attitudes?
Can I toggle Do Not Disturb on/off on my Mac as easily as I can on my iPhone?
What is a realistic time needed to get a properly trained army?
Evidence that matrix multiplication cannot be done in O(n^2 poly(log(n))) time
Why is Kirchoff's loop rule true in a DC circuit?
How are aircraft depainted?
Sample Inverse Color in Photoshop
Why island and not light?
Switch between coordinates of pixel and physical coordinates in n-dimensional FITS image using Astropy
Find physical coordinates of a pixel in a fits file with pythonObtaining the equation of the straight line projecting onto a given pixel in an image with opencvHow to get the origin coordinate and pixel physical dimension from a PNG imageAstropy: physical coordinates from swift fits fileExtracting WCS Coordinates from FITSscikit-image pixel by pixel manipulationPython astropy: convert velocities from ECEF to J2000 coordinate systemMayavi's volume slicer to display coordinates instead of indicesCoordinates transformation in AstropyRetrieve projection values from matplotlib plot with astropy/fits data
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have a FITS image with a header containing information about the coordinates along each axis
NAXIS = 3
NAXIS1 = 259
NAXIS2 = 272
NAXIS3 = 100
CDELT1 = -0.08333333330000001
CDELT2 = 0.08333333330000001
CDELT3 = 0.1
CRPIX1 = 130.5
CRPIX2 = 132.1906015909634
CRPIX3 = 0
CRVAL1 = 255.0
CRVAL2 = 60.0
CRVAL3 = 15.45
Is there an easy way (e.g. and Astropy function) to get the actual (physical) coordinates from the pixel coordinates?
Conversely, is there a built-in function in Astropy to get the coordinates of the closest pixel from actual coordinates?
Edit: I found the WCS.all_pix2world
function, but I don't understand how to use it and I didn't find any examples of use.
From the documentation:
There are two accepted forms for the positional arguments:
- 2 arguments: An N x naxis array of coordinates, and an origin.
- more than 2 arguments: An array for each axis, followed by an origin. These arrays must be broadcastable to one another.
In the first case, what is N
? Wouldn't origin
always be [0,0,0]
?
python coordinate-transformation astropy
add a comment
|
I have a FITS image with a header containing information about the coordinates along each axis
NAXIS = 3
NAXIS1 = 259
NAXIS2 = 272
NAXIS3 = 100
CDELT1 = -0.08333333330000001
CDELT2 = 0.08333333330000001
CDELT3 = 0.1
CRPIX1 = 130.5
CRPIX2 = 132.1906015909634
CRPIX3 = 0
CRVAL1 = 255.0
CRVAL2 = 60.0
CRVAL3 = 15.45
Is there an easy way (e.g. and Astropy function) to get the actual (physical) coordinates from the pixel coordinates?
Conversely, is there a built-in function in Astropy to get the coordinates of the closest pixel from actual coordinates?
Edit: I found the WCS.all_pix2world
function, but I don't understand how to use it and I didn't find any examples of use.
From the documentation:
There are two accepted forms for the positional arguments:
- 2 arguments: An N x naxis array of coordinates, and an origin.
- more than 2 arguments: An array for each axis, followed by an origin. These arrays must be broadcastable to one another.
In the first case, what is N
? Wouldn't origin
always be [0,0,0]
?
python coordinate-transformation astropy
add a comment
|
I have a FITS image with a header containing information about the coordinates along each axis
NAXIS = 3
NAXIS1 = 259
NAXIS2 = 272
NAXIS3 = 100
CDELT1 = -0.08333333330000001
CDELT2 = 0.08333333330000001
CDELT3 = 0.1
CRPIX1 = 130.5
CRPIX2 = 132.1906015909634
CRPIX3 = 0
CRVAL1 = 255.0
CRVAL2 = 60.0
CRVAL3 = 15.45
Is there an easy way (e.g. and Astropy function) to get the actual (physical) coordinates from the pixel coordinates?
Conversely, is there a built-in function in Astropy to get the coordinates of the closest pixel from actual coordinates?
Edit: I found the WCS.all_pix2world
function, but I don't understand how to use it and I didn't find any examples of use.
From the documentation:
There are two accepted forms for the positional arguments:
- 2 arguments: An N x naxis array of coordinates, and an origin.
- more than 2 arguments: An array for each axis, followed by an origin. These arrays must be broadcastable to one another.
In the first case, what is N
? Wouldn't origin
always be [0,0,0]
?
python coordinate-transformation astropy
I have a FITS image with a header containing information about the coordinates along each axis
NAXIS = 3
NAXIS1 = 259
NAXIS2 = 272
NAXIS3 = 100
CDELT1 = -0.08333333330000001
CDELT2 = 0.08333333330000001
CDELT3 = 0.1
CRPIX1 = 130.5
CRPIX2 = 132.1906015909634
CRPIX3 = 0
CRVAL1 = 255.0
CRVAL2 = 60.0
CRVAL3 = 15.45
Is there an easy way (e.g. and Astropy function) to get the actual (physical) coordinates from the pixel coordinates?
Conversely, is there a built-in function in Astropy to get the coordinates of the closest pixel from actual coordinates?
Edit: I found the WCS.all_pix2world
function, but I don't understand how to use it and I didn't find any examples of use.
From the documentation:
There are two accepted forms for the positional arguments:
- 2 arguments: An N x naxis array of coordinates, and an origin.
- more than 2 arguments: An array for each axis, followed by an origin. These arrays must be broadcastable to one another.
In the first case, what is N
? Wouldn't origin
always be [0,0,0]
?
python coordinate-transformation astropy
python coordinate-transformation astropy
edited Mar 28 at 17:32
usernumber
asked Mar 28 at 9:46
usernumberusernumber
3411 gold badge3 silver badges20 bronze badges
3411 gold badge3 silver badges20 bronze badges
add a comment
|
add a comment
|
1 Answer
1
active
oldest
votes
N
is the number of points for which you want to do the conversion, i.e. you can compute the pixel or world coordinates for an array of N points.origin
is just of matter of convention, about the coordinate of the upper left corner. With Python arrays use 0 based indexing, so it is 0. See example below:
In [1]: from astropy.wcs import WCS
In [2]: from astropy.io import fits
In [3]: hdr = fits.Header.fromstring("""
...: NAXIS = 3
...: NAXIS1 = 259
...: NAXIS2 = 272
...: NAXIS3 = 100
...: CDELT1 = -0.08333333330000001
...: CDELT2 = 0.08333333330000001
...: CDELT3 = 0.1
...: CRPIX1 = 130.5
...: CRPIX2 = 132.1906015909634
...: CRPIX3 = 0
...: CRVAL1 = 255.0
...: CRVAL2 = 60.0
...: CRVAL3 = 15.45
...: """, sep='n')
In [4]: wcs = WCS(hdr)
In [5]: wcs
Out[5]:
WCS Keywords
Number of WCS axes: 3
CTYPE : '' '' ''
CRVAL : 255.0 60.0 15.45
CRPIX : 130.5 132.1906015909634 0.0
PC1_1 PC1_2 PC1_3 : 1.0 0.0 0.0
PC2_1 PC2_2 PC2_3 : 0.0 1.0 0.0
PC3_1 PC3_2 PC3_3 : 0.0 0.0 1.0
CDELT : -0.0833333333 0.0833333333 0.1
NAXIS : 259 272 100
Now you can compute the world coordinate of the upper left corner:
In [6]: wcs.all_pix2world([[0, 0, 0]], 0)
Out[6]: array([[265.79166666, 49.06744987, 15.55 ]])
Here you could use an array of Nx3 indices.
So if you have pixel indices and want to convert them to sky coordinates, you need to use origin=0, and the same for the opposite, to convert sky coordinates to pixel indices with wcs.all_world2pix
.
Using origin=1 may sometimes be useful if you have pixel indices stored in a catalog using the FITS/Fortran convention.
So I'd expectwcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return(CRVAL1, CRVAL2, CRVAL3)
, for instance?
– usernumber
Apr 8 at 9:25
By settingorigin=0
, I get the wrong values. However, withorigin=1
(the arrays in my FITS file start at1
), I seem to be getting the expected values.
– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55394500%2fswitch-between-coordinates-of-pixel-and-physical-coordinates-in-n-dimensional-fi%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
N
is the number of points for which you want to do the conversion, i.e. you can compute the pixel or world coordinates for an array of N points.origin
is just of matter of convention, about the coordinate of the upper left corner. With Python arrays use 0 based indexing, so it is 0. See example below:
In [1]: from astropy.wcs import WCS
In [2]: from astropy.io import fits
In [3]: hdr = fits.Header.fromstring("""
...: NAXIS = 3
...: NAXIS1 = 259
...: NAXIS2 = 272
...: NAXIS3 = 100
...: CDELT1 = -0.08333333330000001
...: CDELT2 = 0.08333333330000001
...: CDELT3 = 0.1
...: CRPIX1 = 130.5
...: CRPIX2 = 132.1906015909634
...: CRPIX3 = 0
...: CRVAL1 = 255.0
...: CRVAL2 = 60.0
...: CRVAL3 = 15.45
...: """, sep='n')
In [4]: wcs = WCS(hdr)
In [5]: wcs
Out[5]:
WCS Keywords
Number of WCS axes: 3
CTYPE : '' '' ''
CRVAL : 255.0 60.0 15.45
CRPIX : 130.5 132.1906015909634 0.0
PC1_1 PC1_2 PC1_3 : 1.0 0.0 0.0
PC2_1 PC2_2 PC2_3 : 0.0 1.0 0.0
PC3_1 PC3_2 PC3_3 : 0.0 0.0 1.0
CDELT : -0.0833333333 0.0833333333 0.1
NAXIS : 259 272 100
Now you can compute the world coordinate of the upper left corner:
In [6]: wcs.all_pix2world([[0, 0, 0]], 0)
Out[6]: array([[265.79166666, 49.06744987, 15.55 ]])
Here you could use an array of Nx3 indices.
So if you have pixel indices and want to convert them to sky coordinates, you need to use origin=0, and the same for the opposite, to convert sky coordinates to pixel indices with wcs.all_world2pix
.
Using origin=1 may sometimes be useful if you have pixel indices stored in a catalog using the FITS/Fortran convention.
So I'd expectwcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return(CRVAL1, CRVAL2, CRVAL3)
, for instance?
– usernumber
Apr 8 at 9:25
By settingorigin=0
, I get the wrong values. However, withorigin=1
(the arrays in my FITS file start at1
), I seem to be getting the expected values.
– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
add a comment
|
N
is the number of points for which you want to do the conversion, i.e. you can compute the pixel or world coordinates for an array of N points.origin
is just of matter of convention, about the coordinate of the upper left corner. With Python arrays use 0 based indexing, so it is 0. See example below:
In [1]: from astropy.wcs import WCS
In [2]: from astropy.io import fits
In [3]: hdr = fits.Header.fromstring("""
...: NAXIS = 3
...: NAXIS1 = 259
...: NAXIS2 = 272
...: NAXIS3 = 100
...: CDELT1 = -0.08333333330000001
...: CDELT2 = 0.08333333330000001
...: CDELT3 = 0.1
...: CRPIX1 = 130.5
...: CRPIX2 = 132.1906015909634
...: CRPIX3 = 0
...: CRVAL1 = 255.0
...: CRVAL2 = 60.0
...: CRVAL3 = 15.45
...: """, sep='n')
In [4]: wcs = WCS(hdr)
In [5]: wcs
Out[5]:
WCS Keywords
Number of WCS axes: 3
CTYPE : '' '' ''
CRVAL : 255.0 60.0 15.45
CRPIX : 130.5 132.1906015909634 0.0
PC1_1 PC1_2 PC1_3 : 1.0 0.0 0.0
PC2_1 PC2_2 PC2_3 : 0.0 1.0 0.0
PC3_1 PC3_2 PC3_3 : 0.0 0.0 1.0
CDELT : -0.0833333333 0.0833333333 0.1
NAXIS : 259 272 100
Now you can compute the world coordinate of the upper left corner:
In [6]: wcs.all_pix2world([[0, 0, 0]], 0)
Out[6]: array([[265.79166666, 49.06744987, 15.55 ]])
Here you could use an array of Nx3 indices.
So if you have pixel indices and want to convert them to sky coordinates, you need to use origin=0, and the same for the opposite, to convert sky coordinates to pixel indices with wcs.all_world2pix
.
Using origin=1 may sometimes be useful if you have pixel indices stored in a catalog using the FITS/Fortran convention.
So I'd expectwcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return(CRVAL1, CRVAL2, CRVAL3)
, for instance?
– usernumber
Apr 8 at 9:25
By settingorigin=0
, I get the wrong values. However, withorigin=1
(the arrays in my FITS file start at1
), I seem to be getting the expected values.
– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
add a comment
|
N
is the number of points for which you want to do the conversion, i.e. you can compute the pixel or world coordinates for an array of N points.origin
is just of matter of convention, about the coordinate of the upper left corner. With Python arrays use 0 based indexing, so it is 0. See example below:
In [1]: from astropy.wcs import WCS
In [2]: from astropy.io import fits
In [3]: hdr = fits.Header.fromstring("""
...: NAXIS = 3
...: NAXIS1 = 259
...: NAXIS2 = 272
...: NAXIS3 = 100
...: CDELT1 = -0.08333333330000001
...: CDELT2 = 0.08333333330000001
...: CDELT3 = 0.1
...: CRPIX1 = 130.5
...: CRPIX2 = 132.1906015909634
...: CRPIX3 = 0
...: CRVAL1 = 255.0
...: CRVAL2 = 60.0
...: CRVAL3 = 15.45
...: """, sep='n')
In [4]: wcs = WCS(hdr)
In [5]: wcs
Out[5]:
WCS Keywords
Number of WCS axes: 3
CTYPE : '' '' ''
CRVAL : 255.0 60.0 15.45
CRPIX : 130.5 132.1906015909634 0.0
PC1_1 PC1_2 PC1_3 : 1.0 0.0 0.0
PC2_1 PC2_2 PC2_3 : 0.0 1.0 0.0
PC3_1 PC3_2 PC3_3 : 0.0 0.0 1.0
CDELT : -0.0833333333 0.0833333333 0.1
NAXIS : 259 272 100
Now you can compute the world coordinate of the upper left corner:
In [6]: wcs.all_pix2world([[0, 0, 0]], 0)
Out[6]: array([[265.79166666, 49.06744987, 15.55 ]])
Here you could use an array of Nx3 indices.
So if you have pixel indices and want to convert them to sky coordinates, you need to use origin=0, and the same for the opposite, to convert sky coordinates to pixel indices with wcs.all_world2pix
.
Using origin=1 may sometimes be useful if you have pixel indices stored in a catalog using the FITS/Fortran convention.
N
is the number of points for which you want to do the conversion, i.e. you can compute the pixel or world coordinates for an array of N points.origin
is just of matter of convention, about the coordinate of the upper left corner. With Python arrays use 0 based indexing, so it is 0. See example below:
In [1]: from astropy.wcs import WCS
In [2]: from astropy.io import fits
In [3]: hdr = fits.Header.fromstring("""
...: NAXIS = 3
...: NAXIS1 = 259
...: NAXIS2 = 272
...: NAXIS3 = 100
...: CDELT1 = -0.08333333330000001
...: CDELT2 = 0.08333333330000001
...: CDELT3 = 0.1
...: CRPIX1 = 130.5
...: CRPIX2 = 132.1906015909634
...: CRPIX3 = 0
...: CRVAL1 = 255.0
...: CRVAL2 = 60.0
...: CRVAL3 = 15.45
...: """, sep='n')
In [4]: wcs = WCS(hdr)
In [5]: wcs
Out[5]:
WCS Keywords
Number of WCS axes: 3
CTYPE : '' '' ''
CRVAL : 255.0 60.0 15.45
CRPIX : 130.5 132.1906015909634 0.0
PC1_1 PC1_2 PC1_3 : 1.0 0.0 0.0
PC2_1 PC2_2 PC2_3 : 0.0 1.0 0.0
PC3_1 PC3_2 PC3_3 : 0.0 0.0 1.0
CDELT : -0.0833333333 0.0833333333 0.1
NAXIS : 259 272 100
Now you can compute the world coordinate of the upper left corner:
In [6]: wcs.all_pix2world([[0, 0, 0]], 0)
Out[6]: array([[265.79166666, 49.06744987, 15.55 ]])
Here you could use an array of Nx3 indices.
So if you have pixel indices and want to convert them to sky coordinates, you need to use origin=0, and the same for the opposite, to convert sky coordinates to pixel indices with wcs.all_world2pix
.
Using origin=1 may sometimes be useful if you have pixel indices stored in a catalog using the FITS/Fortran convention.
answered Mar 29 at 8:36
saimnsaimn
1936 bronze badges
1936 bronze badges
So I'd expectwcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return(CRVAL1, CRVAL2, CRVAL3)
, for instance?
– usernumber
Apr 8 at 9:25
By settingorigin=0
, I get the wrong values. However, withorigin=1
(the arrays in my FITS file start at1
), I seem to be getting the expected values.
– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
add a comment
|
So I'd expectwcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return(CRVAL1, CRVAL2, CRVAL3)
, for instance?
– usernumber
Apr 8 at 9:25
By settingorigin=0
, I get the wrong values. However, withorigin=1
(the arrays in my FITS file start at1
), I seem to be getting the expected values.
– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
So I'd expect
wcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return (CRVAL1, CRVAL2, CRVAL3)
, for instance?– usernumber
Apr 8 at 9:25
So I'd expect
wcs.all_pix2world([[CRPIX1, CRPIX2, CRPIX2]])
to return (CRVAL1, CRVAL2, CRVAL3)
, for instance?– usernumber
Apr 8 at 9:25
By setting
origin=0
, I get the wrong values. However, with origin=1
(the arrays in my FITS file start at 1
), I seem to be getting the expected values.– usernumber
Apr 8 at 9:37
By setting
origin=0
, I get the wrong values. However, with origin=1
(the arrays in my FITS file start at 1
), I seem to be getting the expected values.– usernumber
Apr 8 at 9:37
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
If you are converting pixel coordinates, it depends with which conventions the pixels coordinates are stored in the file.
– saimn
Apr 11 at 10:57
add a comment
|
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55394500%2fswitch-between-coordinates-of-pixel-and-physical-coordinates-in-n-dimensional-fi%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown