Draft: Rich: Deterministic pixel addresses, introduce CbmRichAddress
Context:
For the RICH CFV we decided to mask channels in the digitization step providing a masking file,
since the cameras are out of acceptance and the extra material is negligible for downstream detectors.
For more details see #3471
As mentioned by @f.uhlig in #2898, the current version uses
a simple counter for channel addresses and pmt Ids.
This may not be deterministic across different fairsoft versions, operating systems, compilers, etc.
-> A channel masking file may fail here
This MR:
Now the channel addresses and pmt Ids are derived from node paths (only supports v22-v24 for now),
instead of an unsafe counter. This is deterministic and allows to safely use a channel masking file.
Changes
- Refactoring/cleanup of
CbmRichDigiMapManger
- Rename of
CbmRichDigiMapManger
->CbmRichGeoHandler
- Introduction of
CbmRichAddress
(similar to STS & FSD implementation) - In
CbmRichGeoHandler
mapping from RICH pmt pixel node paths to RichAddress (deterministic) - Remove obsolete class
CbmRichMCbmDigiMapManager
TODO's
-
More testing -
Add support for v25, as node structure changed -
Should older geometry versions (<v22) still be supported, as they have a different nodePath structure (address counter as fallback?)
-> Using for now old counter implementation for versions < v22
Merge request reports
Activity
added Geometry label
added 1 commit
- cd3be0d2 - fallback for channel address and pmt id using previous counter implementation...
Dear @f.uhlig, @v.friese, @p.-a.loizeau, @ma.beyer, @se.gorbunov,
you have been identified as code owner of at least one file which was changed with this merge request.
Please check the changes and approve them or request changes.
added CodeOwners label
- Resolved by Eoin Clerkin
- Resolved by Eoin Clerkin
- Resolved by Eoin Clerkin
assigned to @f.uhlig
- core/detectors/rich/CbmRichGeoHandler.cxx 0 → 100644
316 Int_t posBP = static_cast<Int_t>( 317 std::stoul(nodePath.substr(bpInd + 14, 318 pmtVolInd - bpInd - 14))); // cut away "/pmt_cont_vol_" ; position on BP 319 320 Int_t x = (posBP / 10) + ((((pmtPosBP - 1) / 3) + 1) % 2); 321 Int_t y = (posBP % 10) + (2 - ((pmtPosBP - 1) % 3)); 322 323 Int_t DiRICH_Add = ((7 & 0xF) << 12) + ((x & 0xF) << 8) + ((y & 0xF) << 4) + (posAtPmt & 0xF); 324 Int_t pixelUID = ((DiRICH_Add << 16) | (channel & 0x00FF)); 325 Int_t pmtUID = ((x & 0xF) << 4) + (y & 0xF); 326 327 channelAddr = pixelUID; 328 pmtId = pmtUID; 329 330 return 0; 331 } - Comment on lines +299 to +331
For the mRICH the software channel addresses are directly derived from the geometry paths (addresses are encoded there) and identical with the hardware addresses
(which follow some scheme, but definitely not the same asCbmRichAddress
).
CbmRichAddress
is not used/needed.@v.friese May I ask how it is done for mSTS?
- Do hardware addresses follow the
CbmStsAddress
scheme? - Do software addresses match hardware addresses? (or is there a mapping?)
Is there a common way how subsystems should do it, looking towards CBM?
- Do hardware addresses follow the
Since the RICH will use a masking file in the digitization step (not sure if only RICH does it this way),
it needs to be loaded somehow (manually or automatically).@v.friese Is there a decision yet how this is done,
e.g. if the CFV setup is used (lets saysis100_electron_cfv
), this is checked in the digitization step and masking files are automatically loaded.Users having to manually load the masking files might lead to oversights/confusion.
added 15 commits
-
cd3be0d2...3b849a44 - 12 commits from branch
computing:master
- 195150d2 - Implementation of CbmRichAddress, cleanup and rename of CbmRichDigiMapManager...
- 5d142b2f - fallback for channel address and pmt id using previous counter implementation...
- 718819b1 - write out institute in copyright header
Toggle commit list-
cd3be0d2...3b849a44 - 12 commits from branch
mentioned in merge request CbmSoft/cbmroot_parameter!212 (closed)