DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj
, '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

DM-44319: Refactor deblending in DetectAndMeasureTask - #316

Merged
fred3m merged 1 commit into
mainfrom
tickets/DM-44319
May 20, 2024
Merged

DM-44319: Refactor deblending in DetectAndMeasureTask#316
fred3m merged 1 commit into
mainfrom
tickets/DM-44319

Conversation

@fred3m

Copy link
Copy Markdown
Contributor

The previous deblending algorith was not properly deblending, as it was attempting to use meas_deblender for use cases that were not algorithmically suitable.

This commit only runs the deblender on blends that have all positive peaks, the regime that it is designed for.

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch 2 times, most recently from e481cd7 to 8af121fCompareMay 17, 2024 15:26

@parejkojparejkoj 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.

One concern is that downstream processing will have to filter on something to remove the "multiple parent copies". I don't know if we should also do that on this ticket, but we maybe should. I think that would be in FilterDiaSourceCatalogTask in ap_assocation. I don't know if we need to do it elsewhere, too; having both parents and children in the diaSource catalogs is something we're not fully familiar with yet.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
merged_footprints.makeSources(sources)

# Sky sources must be added before deblending, otherwise the
# sources with parent == 0 will be out of order and SFM cannot run.

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.

We're not really running "SFM" here; maybe this instead sources with parent == 0 will be out of order and measurement will fail.?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I'll change to "measurement tasks." The point is that measurement plugins require all of the children with the same parent ID to be contiguous, but the old version of this task added the sky sources after deblending, so if deblending had worked as expected then measurement would fail.

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 am a bit surprised by that, because I think that deblending was working on "isolated" positive blends before (it was just messing up other things), and we didn't see failures.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yeah, it's actually because before it wasn't doing any deblending, so all of the sources had parent==0. The measurement framework has a call to SourceCatalog.getChildren(0), where the argument is the parent ID. This is done to run all of the measurements on the parents, but in the new catalog if the sky objects were appended to it then the records with parent == 0 was discontinuous.

Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated
Comment threadpython/lsst/ip/diffim/detectAndMeasure.py Outdated

# Update the deblended parents and add their children
# to the sources catalog.
sources.extend(temp_cat[first_child_index:], deep=False)

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 you want to do a deep copy here to ensure the catalog is contiguous, but maybe that's not necessary for the measurement tasks that are run in after this? And then the catalog is written to disk. I guess we can see if we get failures when running on larger data?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

No, we actually don't want a deep copy (see Jim's comments in slack). The temporary catalog actually created a view to the original records, that way the source IDs stay in order and the original records are updated in place.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I checked and verified that using this procedure the sources are always contiguous.

Comment on lines +466 to +470
# Set detection and primary flags
for sid in skipped_ids:
src = sources.find(sid)
self.deblend.skipParent(src, difference.mask)
self.setPrimaryFlags.run(sources)

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 understand what setPrimaryFlags is doing here, but I'm not familiar with skipParent. Could you please expand the comment above, since I don't think we're setting any "flags" here, but rather the "not deblended" mask plane (I think?)?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Sure. The basic idea is that the deblender already has a method to set all of the appropriate flags for a parent source when deblending is skipped, so we just call that method to set those flags here.

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 calling it "detection" as the comment does isn't quite correct, though, since we've already done detection. Maybe Set blending-related mask planes and flags on the non-deblended parents. would be more clear?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yes, see my latest commit. But for the setPrimary section I still use this comment because technically all of the flags set by isPrimary are detect_<flagName>, since they are about detection.

@parejkoj

Copy link
Copy Markdown
Contributor

Couple more comments about comments, otherwise this looks good, thank you

@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from 3c211c0 to c1145ecCompareMay 17, 2024 23:40
The previous deblending algorith was not properly deblending,
as it was attempting to use meas_deblender for use cases
that were not algorithmically suitable.
This commit only runs the deblender on blends that have
all positive peaks, the regime that it is designed for.
@fred3m
fred3mforce-pushed the tickets/DM-44319 branch from c1145ec to 145f463CompareMay 20, 2024 13:53
@fred3m
fred3m merged commit 9621bc4 into mainMay 20, 2024
@fred3m
fred3m deleted the tickets/DM-44319 branch May 20, 2024 16:09
fred3m added a commit that referenced this pull request May 21, 2024
This reverts commit 9621bc4, reversing
changes made to db0af17.
fred3m added a commit that referenced this pull request May 21, 2024
Revert "Merge pull request #316 from lsst/tickets/DM-44319"
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

@fred3m@parejkoj