Skip to content

A modular silicon (vertex) digitizer, acting on pixel-level - #81

Draft
JonaDilg wants to merge 71 commits into
key4hep:mainfrom
JonaDilg:VTXdigi_Modular
Draft

A modular silicon (vertex) digitizer, acting on pixel-level#81
JonaDilg wants to merge 71 commits into
key4hep:mainfrom
JonaDilg:VTXdigi_Modular

Conversation

@JonaDilg

@JonaDilg JonaDilg commented May 7, 2026

Copy link
Copy Markdown

BEGINRELEASENOTES

  • Adding a modular vertex digitiser, based on sharing the charge deposited in the sensor across neighboring pixels
  • Includes an implementation of lookup table (LUT)-based charge sharing, where a LUT from sensor-R&D simulations encodes the charge sharing behaviour (see README)
    ENDRELEASENOTES

This PR is work in progress, things I am working on at the moment are:

  • finishing the readme, with the necessary changes to simulation steering, and an example digitisation steering file
  • including generic LUTs (for general use
  • creating a test case, with simulation, digitsation, tracking in the IDEA detector

Other notes:

  • We plan to make LUTs for TPSCo 65nm CIS sensors available (this is what was developed for ALICE 3). We are thinking about the best way to do this, politically.

…th the drifting approach by Jessy Daniel, and the lookup-table approach by Armin Ilg and Jona Dilg
…). Implementing class VTXdigi_tools::PixelChargeMatrix()
…o-charge-sharing ChargeCollector to test. Works as expected.
… std::vector<int> with an entry for every pixel. For small pixel occupancy O(0.001%) this is A LOT faster.
…el (harder than it looked at first...). Refactoring from std::array<int,2> to std::pair<int,int> for pixel indices etc.
…hich simTrackerHits contribute to a cluster. Implementing creation of digiHits for clusters. This break outputting all pixelHits as digiHits directly, remains todo.
…by using shared pointers. cleaning up event loop & moving helper functions ot VTXdigi_tools.
…sor. Verify output histograms agains VTXdigi_Allpix2 implementation
…vely slow, performance improvements probably from LUT (or from hitmap)
… and adding doxygen comments. Implementing a custom simHit truthPosition, to be defined by the ChargeCollection Algorithm
…s (cluster-size vs global z; residual vs global z). Implementing thresholding, and charge and time smearing. Time smearing is currently broken.
…ks exactly how I assumed it would, but you need to pass rndmEngine AND rndmGenSvc to the ApplicationMgr as ExtSvc. Also: remove unused SurfaceMap parameter from SimHitWrapper.
…Collector_LUT::DistributeSegmentCharge() and HitMap.FillCharge()
…nclusions and moving functions to classes they should be a member of)
…etion region depth, implementing checks on active vs total sensor volume
JonaDilg and others added 26 commits May 28, 2026 17:08
… neighbours were used). Add threshold dispersion as individual parameter (on top of electronic noise), same as Allpix Squared
…plementation, add seed pixel charge histogram
…ype (primary / secondary / delta). with a single particle, residual_highestEParticleOnSensor reproduces the central region of residual_fromPrimaries if collectSingleDeposits=False. Cleaned up histogram naming and removed more unused histograms"
…ompiles, but the function is funky. Not applying it yet, so no change to the digitisation no matter what the config param LookupTableExtractEtaFunction is set to.
…T, implemented applying it to the cluster CoG. Code runs slower than expected, quite likely something that can be improved easily
…o work. Not cleaned up all of the mess I made, yet.
…t. Fixing measured eta correction plot. Removed some dead code
… that corrected values of eta distrib. need to be monotonically rising. Added residual plots for different cluster sizes
…es = truth - reco). Adding verbose line in Collection matching.
…utside of the sensor because of floating point noise. I suspect it was the back-and-forth between float and double in the path computation, the errors didnt show up after moving the whole path computation to double. Added a less eager throw and clamping on top.
… truth pos. from sensor vertical centre (to make the plots useful when using singleDeposits=True in ddsim)
…ter for center of gravity to suppress noise in the charge of the central pixels
…rly spreading the charge along the path to individual interactions with randomly sampled charge per deposition. Use uniqueID-seeded TRandom3 (instead of RandomGenSvc).
Sign up for free to 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.

1 participant