-
Notifications
You must be signed in to change notification settings - Fork 34
MPGDTrackerDigi: Multi-SensitiveVolume solution for the 2D-strip read… #2177
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
This is a solution to the missing MPGD 2D-strip hits which was identified in April. The issue was discussed at the track&vertex meeting of July, see "https://indico.bnl.gov/event/29024/contributions/110567/attachments/63655/109264/Bedfer_EPIC0724.pdf", where several solutions were proposed. In this PR, I want to implement a solution based on a splitting of the sensitive volume, see comment in "https://github.com/eic/EICrecon/blob/MultiSensitiveMPGD/src/algorithms/digi/MPGDTrackerDigi.cc". It's the only solution, of all those proposed, that I have been able to implement. I would call it a ugly solution: very complicated. But it is has the advantage of being a working one, as evidenced by the following plot of the hit-to-track association efficiency obtained from (a modified version of) the macro of Barak: This result is obtained if and only if are used:
Given that the above-mentioned conditions are not met by default, the commit will not affect the standard execution of The roadmap for the full commit, that will enable the Multi-SensitiveVolume solution:
But in any case, I would like to have a feed-back from the ePIC software community on my solution: is it satisfying enough to be committed (at least temporarily)? What kind of checks, in addition to the association efficiency shown above, should I perform? More on the hit-to-track association: When one zooms on the efficiency histogram, some imperfections show up, viz.:
|
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
|
A question to c++ experts: I did modify the source code (I take a copy of the matrix, instead of a reference) to get rid of the warning. But I'm wondering whether the warning itself is legitimate:
What do you think? |
for more information, see https://pre-commit.ci
```
/home/runner/work/EICrecon/EICrecon/src/algorithms/digi/MPGDTrackerDigi.cc:156:21: error: lambda capture 'this' is not used [-Werror,-Wunused-lambda-capture]
156 | m_stripRank = [=, this](CellID vID) {
| ~~^~~~
1 error generated.
```
|
I think, the warning is a good one. In many ABIs your matrix is placed on stack and may get overwritten if you call something else before you use it. (Haven't looked at the PR yet, this needs to be compilable on CI first) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clang-Tidy found issue(s) with the introduced code (1/2)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clang-Tidy found issue(s) with the introduced code (2/2)
…… (fix: iwyu) (#2180) This PR applies the include-what-you-use fixes as suggested by https://github.com/eic/EICrecon/actions/runs/19181728533. Please merge this PR into the branch `MultiSensitiveMPGD` to resolve failures in PR #2177. Auto-generated by [create-pull-request][1] [1]: https://github.com/peter-evans/create-pull-request Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clang-Tidy found issue(s) with the introduced code (1/1)
for more information, see https://pre-commit.ci
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clang-Tidy found issue(s) with the introduced code (1/1)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
for more information, see https://pre-commit.ci
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clang-Tidy found issue(s) with the introduced code (1/1)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
for more information, see https://pre-commit.ci
No Clang-Tidy warnings found so I assume my comments were addressed
|
Hello, Which does not tell much... |
| static constexpr dd4hep::CellID m_volumeBits = 0xffffffff; // 32 least weight bits | ||
| static constexpr dd4hep::CellID m_stripBits = ((dd4hep::CellID)0xf) << 28; | ||
| static constexpr dd4hep::CellID m_stripMask = ~m_stripBits; | ||
| static constexpr dd4hep::CellID m_moduleBits = m_volumeBits & m_stripMask; | ||
| static constexpr dd4hep::CellID m_pStripBit = ((dd4hep::CellID)0x1) << 28; | ||
| static constexpr dd4hep::CellID m_nStripBit = ((dd4hep::CellID)0x2) << 28; | ||
| static constexpr dd4hep::CellID m_stripIDs[5] = {((dd4hep::CellID)0x3) << 28, m_pStripBit, 0, | ||
| m_nStripBit, ((dd4hep::CellID)0x4) << 28}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It makes no sense to hardcode these, just query a BitFieldElement from IDDescriptor, don't do your own bit operations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure I agree here.
The hard-coding has the definite purpose of simplifying the source code. It does so by restricting the freedom of the user: the lesser the number of allowed combinations, the easier it is to navigate through all these cellIDs, to my mind.
I have in store (not in this PR) a piece of code where I check that these hard-coded bit fields are indeed implemented in the XML specification of the IDDescriptor.
In order to get rid of the hard-coding, I would have to introduce in the IDDescriptor a field for the 'p' strip, the 'n' strip, etc... for all of my five sub-volumes. I don't think it will make the source easier to understand. Here, on the contrary, the whole bit manipulation scheme is encapsulated in a block of seven definitions. The user who has to write an XML for its detector can refer to this concise and easily understandable block.
|
Like you describe, this is very complicated, and I don't understand the approach. Also, the edge cases you describe don't help with putting confidence in this. And you are right, this will require some provisions for backwards-compatibility. At very least we need to have new EICrecon work with older geometries (e.g. it could detect that "old" style detector is loaded and switch away from strip digitization). Can you share which branch of epic this can work with? |
The approach is simple: split the sensitive volume so as to have one sub-volume for 'p' strips and one for 'n' strips.
Bottom line: it's complicated, but it is working. (If someone else come up with a simpler working solution, he is welcome.)
I am to have a PR for |
The branch is: "https://github.com/eic/epic/tree/Multi-SensitiveVolume-MPGD".
|
…out.
Briefly, what does this PR introduce?
A solution to the issue of MPGD hits missing in track fit raised by Barak Schmookler in "https://indico.bnl.gov/event/27589/contributions/105659/attachments/60986/104773/tracking1_040325.pdf".
What kind of change does this PR introduce?
Please check if this PR fulfills the following:
Does this PR introduce breaking changes? What changes might users need to make to their code?
Breaking changes if and only if special "-PMPGD:SiFactoryPattern" option is specified and set != 3.
Does this PR change default behavior?
No.