⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

⚡ tweaking PSFmachine to play with the K2 implementation - #47

Open
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks
Open

⚡ tweaking PSFmachine to play with the K2 implementation#47
christinahedges wants to merge 2 commits into
masterfrom
christinatweaks

Conversation

@christinahedges

@christinahedgeschristinahedges commented Feb 3, 2022

Copy link
Copy Markdown
Contributor

I'm taking a look at PSFmachine for ruprecht, and making a few tweaks. I'm opening this issue to discuss these tweaks.

Here's a rough log of changes:

  1. Changed the _update_source_mask... function so that it more aggressively clips out the faint edges of the PSF
  2. Messed a little with some of the sane defaults for the masking function
  3. Added a slightly more robust error catch for the "breaks" in time binning,
  4. Get centroid takes a frame index so it will only calculate the centroid of the current frame unless "mean" is passed...(this might not be advisable)
  5. _get_source_mask now puts the centroid to the centroid of the frame_index, making sure that per cadence PSFs are always centered at zero.
  6. build_frame_shape_model recalculates the source mask at every step

The last point makes sure that the PSF is always centered at 0,0 when we fit it. This is important, as our model is only valid if the PSF it's modeling is centered.

However, the way it is currently set up, this becomes quite intractable for large datasets...!

@christinahedgeschristinahedges changed the title [WIP] ⚡ tweaking PSFmachine to play with the K2 implementation⚡ tweaking PSFmachine to play with the K2 implementationMar 18, 2022
Comment on lines +326 to +329
upper_radius_limit=36.0,
lower_radius_limit=4.5,
upper_flux_limit=2e5,
lower_flux_limit=100,
lower_flux_limit=40,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this makes the rough mask more generous, good when scene motion is considerable, and allows for fainter pixels

@jorgemarpajorgemarpa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the small tweaks you add to the API. Only a few of them change the default values, the rest only makes the API more robust. I don't think the first ones will make big changes for Kepler data.

We need to update the tutorials to reflect the new keyword arguments we are introducing here. I saw the tutorials in christinatweaks branch aren't updated to the last version in master.
Also, the change to superstamp.py will make the computing times in the SSMachine tutorials a bit longer.

I will run the Tutorials as a way to check things are consistent with the master branch, I'll report back when it's done.

# mask out non finite values and background pixels
k = (np.isfinite(wgts)) & (
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 100
self.uncontaminated_source_mask.multiply(self.flux[t]).data > 10

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree this value should be more generous.
Let's add a comment that this value works well for Kepler/K2 background-subtracted pixels.

lower_flux_limit=40,
correct_centroid_offset=True,
plot=False,
frame_index="mean",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add docstring for this argument.
Using main keeps the original behavior, right?


def build_shape_model(
self, plot=False, flux_cut_off=1, frame_index="mean", **kwargs
self, plot=False, flux_atol=1, flux_rtol=0.001, frame_index="mean", **kwargs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these new arguments are better than the ones we had before.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@christinahedges@jorgemarpa