Closed paulgessinger closed 2 years ago
I can look into this next week
I should be able to supply an input file if you don't want to run Pythia locally.
I lately made the effort of compiling it so I would like to try running it as long as my CPU does not throttle :smile:
FATRAS: 16:54:01 FatrasSimula ERROR event 571 particle id=(82|134|591|0|0)|pdg=0|q=-1|m=0|p=11.5181 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps. This could be a navigation problem where the particle leaves the detector, or potentially a looper that isn't cought by the looper protection.
looking at the log output the particle seems to be invalid
pdg=0
means invalid https://github.com/acts-project/acts/blob/main/Core/include/Acts/Utilities/PdgParticle.hpp#L17q=-1
but also m=0
I wonder if this is a bug in the pythia8 conversion or a bug in fatras
@paulgessinger
16:51:54 TrackFinding ERROR Propapation failed: EigenStepperError:3 Step size adjustment exceeds maximum trials with the initial parameters 33554 :
the "good" news is that all of them seem to have the same origin. the step size goes to zero and we run into the iteration maximum. as far as I know the step size would only get smaller and smaller if we cannot reach the desired accuracy in the runge-kutta integration. I will investigate further why this happens
after running fatras again I see particles without pdg != 0
. actually didn't spot any with 0
11:51:27 FatrasSimula ERROR event 2 particle id=(80|0|14|0|0)|pdg=pi-|q=-1|m=0.13957|p=15.0429 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:46 FatrasSimula ERROR event 22 particle id=(86|0|143|0|0)|pdg=pi+|q=1|m=0.13957|p=27.0124 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:49 FatrasSimula ERROR event 25 particle id=(151|0|189|0|0)|pdg=pi-|q=-1|m=0.13957|p=107.717 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:53 FatrasSimula ERROR event 30 particle id=(120|0|53|0|0)|pdg=pi+|q=1|m=0.13957|p=13.1252 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:54 FatrasSimula ERROR event 31 particle id=(109|0|49|0|0)|pdg=pi+|q=1|m=0.13957|p=17.5328 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:56 FatrasSimula ERROR event 33 particle id=(140|0|25|0|0)|pdg=pi+|q=1|m=0.13957|p=32.6771 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:57 FatrasSimula ERROR event 34 particle id=(156|0|273|0|0)|pdg=pi+|q=1|m=0.13957|p=16.2876 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:51:59 FatrasSimula ERROR event 35 particle id=(93|0|9|0|0)|pdg=pi+|q=1|m=0.13957|p=15.9507 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:00 FatrasSimula ERROR event 36 particle id=(110|0|123|0|0)|pdg=pi-|q=-1|m=0.13957|p=66.8142 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:01 FatrasSimula ERROR event 37 particle id=(56|0|509|0|0)|pdg=pi-|q=-1|m=0.13957|p=33.7821 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:01 FatrasSimula ERROR event 37 particle id=(85|0|60|0|0)|pdg=pi+|q=1|m=0.13957|p=52.9919 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:16 FatrasSimula ERROR event 53 particle id=(2|0|37|0|0)|pdg=pi+|q=1|m=0.13957|p=44.1941 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:20 FatrasSimula ERROR event 56 particle id=(114|0|36|0|0)|pdg=p~|q=-1|m=0.93827|p=8.63212 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:23 FatrasSimula ERROR event 59 particle id=(7|0|34|0|0)|pdg=pi-|q=-1|m=0.13957|p=31.2168 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:27 FatrasSimula ERROR event 63 particle id=(109|0|88|0|0)|pdg=pi-|q=-1|m=0.13957|p=67.0792 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:29 FatrasSimula ERROR event 65 particle id=(162|0|78|0|0)|pdg=pi-|q=-1|m=0.13957|p=19.8754 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:30 FatrasSimula ERROR event 66 particle id=(139|0|16|0|0)|pdg=pi+|q=1|m=0.13957|p=64.3 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:32 FatrasSimula ERROR event 68 particle id=(78|0|4|0|0)|pdg=K+|q=1|m=0.49368|p=41.052 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:40 FatrasSimula ERROR event 75 particle id=(168|0|115|0|0)|pdg=pi-|q=-1|m=0.13957|p=4.04962 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:42 FatrasSimula ERROR event 77 particle id=(85|0|55|0|0)|pdg=pi+|q=1|m=0.13957|p=32.207 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:45 FatrasSimula ERROR event 80 particle id=(30|0|98|0|0)|pdg=pi-|q=-1|m=0.13957|p=59.8709 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:45 FatrasSimula ERROR event 80 particle id=(116|134|478|0|0)|pdg=K-|q=-1|m=0.49368|p=21.4687 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:50 FatrasSimula ERROR event 85 particle id=(83|0|112|0|0)|pdg=pi-|q=-1|m=0.13957|p=5.79287 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:50 FatrasSimula ERROR event 85 particle id=(134|70|244|0|0)|pdg=pi+|q=1|m=0.13957|p=23.0101 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
11:52:59 FatrasSimula ERROR event 94 particle id=(137|0|11|0|0)|pdg=pi-|q=-1|m=0.13957|p=17.9685 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
the propagation in fatras is flip-flopping between +/- some small value
EigenStepper: updateStepSize
corresponds to https://github.com/acts-project/acts/blob/main/Core/include/Acts/Propagator/EigenStepper.hpp#L262
EigenStepper: step
corresponds to https://github.com/acts-project/acts/blob/main/Core/include/Acts/Propagator/EigenStepper.ipp#L117
EigenStepper: updateStepSize -0.0289624
EigenStepper: step (748.218, -0.0289624, 76816.8, +∞)
EigenStepper: updateStepSize 0.0289624
EigenStepper: step (748.218, 0.0289624, 76816.8, +∞)
EigenStepper: updateStepSize -0.0289624
EigenStepper: step (748.218, -0.0289624, 76816.8, +∞)
EigenStepper: updateStepSize 0.0289624
EigenStepper: step (748.218, 0.0289624, 76816.8, +∞)
EigenStepper: updateStepSize -0.0289624
EigenStepper: step (748.218, -0.0289624, 76816.8, +∞)
to make this easier to reproduce: this is one of the particles that will fail fatras in the ODD
particle_id,particle_type,process,vx,vy,vz,vt,px,py,pz,m,q
360287970424520704,-211,0,0,0,0,0,0.20463942,0.0932567492,-15.041235,0.139569998,-1
all the failed particles in 100 events
particle_id,particle_type,process,vx,vy,vz,vt,px,py,pz,m,q
360287970424520704,-211,0,0,0,0,0,0.20463942,0.0932567492,-15.041235,0.139569998,-1
387309570353004544,211,0,0,0,0,0,-0.0336664878,0.402350187,27.0093441,0.139569998,1
680043546903838720,-211,0,0,0,0,0,-1.22771633,-1.10539758,107.704742,0.139569998,-1
540431956173651968,211,0,0,0,0,0,0.189463511,0.0681857541,-13.1236868,0.139569998,1
490892360205467648,211,0,0,0,0,0,0.0608617477,0.166004553,17.5319443,0.139569998,1
630503948251299840,211,0,0,0,0,0,0.196608573,-0.460996509,32.6732216,0.139569998,1
702561546449977344,211,0,0,0,0,0,-0.0961737335,0.128603414,16.2868423,0.139569998,1
418834765496451072,211,0,0,0,0,0,-0.177656621,0.159051478,15.9489403,0.139569998,1
495395961074352128,-211,0,0,0,0,0,-0.00978880469,0.673449039,66.8108521,0.139569998,-1
252201587672350720,-211,0,0,0,0,0,-0.127471477,-0.488562971,33.7782784,0.139569998,-1
382805969333125120,211,0,0,0,0,0,-0.457007766,-0.276580334,-52.9892273,0.139569998,1
9007199875497984,211,0,0,0,0,0,-0.274833918,-0.350640118,-44.1918106,0.139569998,1
513410358124216320,-2212,0,0,0,0,0,0.128905028,-0.00736087142,8.63115692,0.938269973,-1
31525197962018816,-211,0,0,0,0,0,0.446970522,-0.13388215,-31.2132721,0.139569998,-1
490892360859779072,-211,0,0,0,0,0,-0.0914542228,0.669969797,-67.0758286,0.139569998,-1
729583140942643200,-211,0,0,0,0,0,0.192513958,0.226287067,-19.8732033,0.139569998,-1
626000348472934400,211,0,0,0,0,0,-0.585558176,0.762062788,-64.2928619,0.139569998,1
351280771002007552,321,0,0,0,0,0,-0.625899851,0.0681778342,-41.0471954,0.49368,1
756604739327623168,-211,0,0,0,0,0,-0.0528257377,-0.0299943779,4.04915953,0.139569998,-1
382805969249239040,211,0,0,0,0,0,-0.291572392,-0.142850697,32.2053375,0.139569998,1
135107990465282048,-211,0,0,0,0,0,0.869374216,0.295557469,59.8638687,0.139569998,-1
522564899352608768,-321,0,-0.187151968,-0.0855760351,-50.9075203,0.16982156,-0.325308949,-0.0342989713,-21.4662094,0.49368,-1
373798770950799360,-211,0,0,0,0,0,-0.0598790199,0.0627501607,-5.79222488,0.139569998,-1
603559319975231488,211,0,-0.189030707,6.96873808,-605.281372,2.01945424,-0.0372227877,0.390802145,-23.0067978,0.139569998,1
616993149134307328,-211,0,0,0,0,0,-0.259147942,0.0706318393,-17.9664593,0.139569998,-1
225179981855064064,211,0,0,0,0,0,-0.189642221,0.21128577,-28.8046551,0.139569998,1
looks like we bounce between two geometries back and forth
update happens here https://github.com/acts-project/acts/blob/main/Core/include/Acts/Propagator/Navigator.hpp#L963
EigenStepper: step (1833.005505, -0.086267, 228591.005006, +∞)
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
EigenStepper: step (1833.005505, 0.086267, 228591.005006, +∞)
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
11:27:44 Simulation ERROR Propagation reached the step count limit of 1000 (did 1000 steps)
I faintly remember @FabianKlimpel implemented boundary surface checking by using all boundary surfaces and then ordering them in the most likely sequence, in order to be able to try all boundary surfaces one after the other, even if they don't seem compatible in the very beginning.
Maybe this runs into an edge case here?
I faintly remember @FabianKlimpel implemented boundary surface checking by using all boundary surfaces and then ordering them in the most likely sequence, in order to be able to try all boundary surfaces one after the other, even if they don't seem compatible in the very beginning.
Maybe this runs into an edge case here?
Yes, I implemented the ordering to cover an edge case when there was just a single boundary surface stored that was unreachable due to the particles curvature. I also utilised the boundary surface of volumes within a volume and treated them the same way. Though, I think that I observed that it could be possible to run in some strange scenarios if such a subvolume is not entirely within the other. After having a brief look at the numbers (sorry, I'm not that familiar with the output anymore), it looks to me as if the cylinder is way longer in z-direction than the position of the disc surface. Is the disc the boundary surface of the cylinder volume?
thank you for your response @FabianKlimpel !
I was also unsure about the geometry because of the gap. in other cases it looked like it matched. I will try to understand the gap.
the issue I am facing right now is that because of the ordering the navigation will decide to step backwards even tho we are in forward propagation and there is another boundary in the forward direction. because of the back step we end up looping between two points
thank you for your response @FabianKlimpel !
I was also unsure about the geometry because of the gap. in other cases it looked like it matched. I will try to understand the gap.
We had the possibilty to visualise the geometry, this may help. Maybe ask @paulgessinger about it. I could guess that the ordering will pick up the cylinder surface behind the disc as it "reachable" in terms of "there is an intersection from a straight line".
the issue I am facing right now is that because of the ordering the navigation will decide to step backwards even tho we are in forward propagation and there is another boundary in the forward direction. because of the back step we end up looping between two points
A step backwards in forward propagation sounds to me like the overstepping protection for low-momentum charged particles from @asalzburger. Is there a curvature? Could you tell at which position you are at the moment the looping starts? Is it on the disc?
from the log output I see like 10-100 GeV pions which all seem to have the same problem. I thought the curvature should be fairly small for them
the updateStepSize
here will override the forward propagation in order step back to the boundary
this is how the loop begins
EigenStepper: step (1833.005505, 0.035662, 228591.126935, +∞)
from -18.930319 -23.175027 -2968.440577
direction -0.006533 -0.007677 -0.999949
16:20:56 Simulation VERBOSE Step with size = 0.0356616 performed
16:20:56 Simulation VERBOSE BeamPipe::Barrel | Entering navigator::status.
16:20:56 Simulation VERBOSE Update single surface status for surface: vol=32|bnd=4
16:20:56 Simulation VERBOSE Intersection: state is ON SURFACE
16:20:56 Simulation VERBOSE BeamPipe::Barrel | Status Surface successfully hit, storing it.
16:20:56 Simulation VERBOSE BeamPipe::Barrel | Current surface set to surface vol=32|bnd=4
16:20:56 Simulation VERBOSE BeamPipe::Barrel | Status: in boundary handling.
16:20:56 Simulation VERBOSE BeamPipe::Barrel | On boundary: update volume information.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Volume updated.
16:20:56 Simulation VERBOSE Target: 0 | Target stepSize (path limit) updated to (1833.01, +∞, 228591, +∞)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Entering navigator::target.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No surfaces present, target at layer first.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No layers present, resolve volume first.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Searching for compatible layers.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No compatible layer candidates found.
16:20:56 Simulation VERBOSE Last layer done, target volume boundary.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Try to find boundaries, we are at: -18.9306 -23.1753 -2968.48, dir: -0.00653322 -0.00767727 -0.999949
16:20:56 Simulation VERBOSE Finding compatibleBoundaries
16:20:56 Simulation VERBOSE Volume reports 4 boundary surfaces
16:20:56 Simulation VERBOSE Processing boundaries
16:20:56 Simulation VERBOSE Consider boundary surface vol=23|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=23|bnd=1
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, 0.0862673
16:20:56 Simulation VERBOSE Intersection is WITHIN limit
16:20:56 Simulation VERBOSE - Proceed with surface
16:20:56 Simulation VERBOSE Consider boundary surface vol=20|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2002.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 206.0000000, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE - Surface intersecion invalid
16:20:56 Simulation VERBOSE Consider boundary surface vol=25|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (206.0000000, 2968.5625000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE - Surface intersecion invalid
16:20:56 Simulation VERBOSE Consider boundary surface vol=32|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE - Surface is excluded surface
16:20:56 Simulation VERBOSE Volume reports 0 confined dense volumes
16:20:56 Simulation VERBOSE 1 boundary candidates found at path(s): 0.0862673
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Navigation stepSize updated to (1833.01, 0.0862673, 228591, +∞)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Target set to next boundary.
EigenStepper: step (1833.005505, 0.086267, 228591.091273, +∞)
from -18.930552 -23.175301 -2968.476237
direction -0.006533 -0.007677 -0.999949
16:20:56 Simulation VERBOSE Step with size = 0.0862673 performed
16:20:56 Simulation VERBOSE ShortStrips::fGap | Entering navigator::status.
16:20:56 Simulation VERBOSE Update single surface status for surface: vol=23|bnd=1
16:20:56 Simulation VERBOSE Intersection: state is ON SURFACE
16:20:56 Simulation VERBOSE ShortStrips::fGap | Status Surface successfully hit, storing it.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Current surface set to surface vol=23|bnd=1
16:20:56 Simulation VERBOSE ShortStrips::fGap | Status: in boundary handling.
16:20:56 Simulation VERBOSE ShortStrips::fGap | On boundary: update volume information.
16:20:56 Simulation VERBOSE LongStrips::fGap | Volume updated.
16:20:56 Simulation VERBOSE Target: 0 | Target stepSize (path limit) updated to (1833.01, +∞, 228591, +∞)
16:20:56 Simulation VERBOSE LongStrips::fGap | Entering navigator::target.
16:20:56 Simulation VERBOSE LongStrips::fGap | No surfaces present, target at layer first.
16:20:56 Simulation VERBOSE LongStrips::fGap | No layers present, resolve volume first.
16:20:56 Simulation VERBOSE LongStrips::fGap | Searching for compatible layers.
16:20:56 Simulation VERBOSE LongStrips::fGap | No compatible layer candidates found.
16:20:56 Simulation VERBOSE Last layer done, target volume boundary.
16:20:56 Simulation VERBOSE LongStrips::fGap | Try to find boundaries, we are at: -18.9311 -23.176 -2968.56, dir: -0.00653323 -0.00767726 -0.999949
16:20:56 Simulation VERBOSE Finding compatibleBoundaries
16:20:56 Simulation VERBOSE Volume reports 4 boundary surfaces
16:20:56 Simulation VERBOSE Processing boundaries
16:20:56 Simulation VERBOSE Consider boundary surface vol=31|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -3036.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 1202.0000000, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=31|bnd=1
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, 68.0035
16:20:56 Simulation VERBOSE Intersection is WITHIN limit
16:20:56 Simulation VERBOSE - Proceed with surface
16:20:56 Simulation VERBOSE Consider boundary surface vol=23|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE - Surface is excluded surface
16:20:56 Simulation VERBOSE Consider boundary surface vol=30|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (713.2684387, 3036.5625000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE - Surface intersecion invalid
16:20:56 Simulation VERBOSE Consider boundary surface vol=32|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=32|bnd=4
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, -0.0862673
16:20:56 Simulation VERBOSE Intersection is WITHIN limit
16:20:56 Simulation VERBOSE - Proceed with surface
16:20:56 Simulation VERBOSE Volume reports 0 confined dense volumes
16:20:56 Simulation VERBOSE 2 boundary candidates found at path(s): -0.0862673 68.0035
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE LongStrips::fGap | Navigation stepSize updated to (1833.01, -0.0862673, 228591, +∞)
16:20:56 Simulation VERBOSE LongStrips::fGap | Target set to next boundary.
EigenStepper: step (1833.005505, -0.086267, 228591.005006, +∞)
from -18.931115 -23.175963 -2968.562500
direction -0.006533 -0.007677 -0.999949
16:20:56 Simulation VERBOSE Step with size = -0.0862673 performed
16:20:56 Simulation VERBOSE LongStrips::fGap | Entering navigator::status.
16:20:56 Simulation VERBOSE Update single surface status for surface: vol=32|bnd=4
16:20:56 Simulation VERBOSE Intersection: state is ON SURFACE
16:20:56 Simulation VERBOSE LongStrips::fGap | Status Surface successfully hit, storing it.
16:20:56 Simulation VERBOSE LongStrips::fGap | Current surface set to surface vol=32|bnd=4
16:20:56 Simulation VERBOSE LongStrips::fGap | Status: in boundary handling.
16:20:56 Simulation VERBOSE LongStrips::fGap | On boundary: update volume information.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Volume updated.
16:20:56 Simulation VERBOSE Target: 0 | Target stepSize (path limit) updated to (1833.01, +∞, 228591, +∞)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Entering navigator::target.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No surfaces present, target at layer first.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No layers present, resolve volume first.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Searching for compatible layers.
16:20:56 Simulation VERBOSE ShortStrips::fGap | No compatible layer candidates found.
16:20:56 Simulation VERBOSE Last layer done, target volume boundary.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Try to find boundaries, we are at: -18.9306 -23.1753 -2968.48, dir: -0.00653322 -0.00767727 -0.999949
16:20:56 Simulation VERBOSE Finding compatibleBoundaries
16:20:56 Simulation VERBOSE Volume reports 4 boundary surfaces
16:20:56 Simulation VERBOSE Processing boundaries
16:20:56 Simulation VERBOSE Consider boundary surface vol=23|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=23|bnd=1
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, 0.0862673
16:20:56 Simulation VERBOSE Intersection is WITHIN limit
16:20:56 Simulation VERBOSE - Proceed with surface
16:20:56 Simulation VERBOSE Consider boundary surface vol=20|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2002.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 206.0000000, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE - Surface intersecion invalid
16:20:56 Simulation VERBOSE Consider boundary surface vol=25|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (206.0000000, 2968.5625000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE - Surface intersecion invalid
16:20:56 Simulation VERBOSE Consider boundary surface vol=32|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE - Surface is excluded surface
16:20:56 Simulation VERBOSE Volume reports 0 confined dense volumes
16:20:56 Simulation VERBOSE 1 boundary candidates found at path(s): 0.0862673
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Navigation stepSize updated to (1833.01, 0.0862673, 228591, +∞)
16:20:56 Simulation VERBOSE ShortStrips::fGap | Target set to next boundary.
EigenStepper: step (1833.005505, 0.086267, 228591.005006, +∞)
from -18.930552 -23.175301 -2968.476237
direction -0.006533 -0.007677 -0.999949
16:20:56 Simulation VERBOSE Step with size = 0.0862673 performed
It's hard to imagine the detector geometry just from the numbers. Could you please post a picture of the geometry? Just from the numbers, it looks like the particle stays at the same position all the time. However, it reaches the short and long strips somehow.
What condition leads to Simulation VERBOSE - Surface intersecion invalid
? If a surface is unreachable, I moved an iterator to the next surface. So, at least one surface should be reachable at any step.
Storing all boundary surfaces in a vector should not lead to backward stepping. So my first guesses would be an undetected mistake in the geometry or something odd in the overstepping protection. Maybe try to print more variables/parameters that have an impact upon the extrapolation direction. If you want to, then we could have a chat about the issue.
Looking at the log, it seems the propagation does in fact reach the target boundary surface that it was trying to get to:
16:20:56 Simulation VERBOSE Consider boundary surface vol=23|bnd=1 :
Acts::DiscSurface
Center position (x, y, z) = (0.0000, 0.0000, -2968.5625)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::RadialBounds: (innerRadius, outerRadius, hPhiSector, averagePhi) = (29.9242436, 713.2684387, 3.1415927, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=23|bnd=1
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, 0.0862673
16:20:56 Simulation VERBOSE Check intersection with surface vol=23|bnd=1
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, 0.0862673
16:20:56 Simulation VERBOSE Step with size = 0.0862673 performed
16:20:56 Simulation VERBOSE Update single surface status for surface: vol=23|bnd=1
16:20:56 Simulation VERBOSE Intersection: state is ON SURFACE
16:20:56 Simulation VERBOSE ShortStrips::fGap | Status Surface successfully hit, storing it.
16:20:56 Simulation VERBOSE ShortStrips::fGap | Current surface set to surface vol=23|bnd=1
then we indeed switch from short strips to long strips forward gap:
16:20:56 Simulation VERBOSE LongStrips::fGap | Volume updated.
There are no layers here, so it tries to go to LongStrips::fGap
's boundary surfaces.
And then for, whatever reason it believes it can hit the outer cylinder envelop boundary surface:
16:20:56 Simulation VERBOSE Consider boundary surface vol=32|bnd=4 :
Acts::CylinderSurface
Center position (x, y, z) = (0.0000, 0.0000, 0.0000)
Rotation: colX = (1.000000, 0.000000, 0.000000)
colY = (0.000000, 1.000000, 0.000000)
colZ = (0.000000, 0.000000, 1.000000)
Bounds : Acts::CylinderBounds: (radius, halfLengthZ, halfPhiSector, averagePhi, bevelMinZ, bevelMaxZ) = (29.9242436, 4002.0000000, 3.1415927, 0.0000000, 0.0000000, 0.0000000)
16:20:56 Simulation VERBOSE Check intersection with surface vol=32|bnd=4
16:20:56 Simulation VERBOSE -> pLimit, oLimit, cLimit: 228591, -0.1, -0.0862673
16:20:56 Simulation VERBOSE Intersection is WITHIN limit
16:20:56 Simulation VERBOSE - Proceed with surface
16:20:56 Simulation VERBOSE 2 boundary candidates found at path(s): -0.0862673 68.0035
16:20:56 Simulation VERBOSE Step with size = -0.0862673 performed
16:20:56 Simulation VERBOSE LongStrips::fGap | Status Surface successfully hit, storing it.
16:20:56 Simulation VERBOSE LongStrips::fGap | Current surface set to surface vol=32|bnd=4
and switched back into ShortStrips::fGap
. So there's two things we need to understand:
ShortStrips::fGap
at +0.086
and then finding an intersection with the outer cylinder surface of LongStrips::fGap
at -0.086
? It seems suspicious that it's the same absolute path length.68.0035
first?the fatras errors seem to be gone after #1433 - 100 pythia events with 200 pileup without error
I will look into the other propagation failure next
The track finding propagation error is due to high energy losses in thick material slabs. E.g. there are pions with ~1 GeV which get completely stopped in ~3 m material. Because the propagation does not stop some quantities blow up because of division by zero.
How does the CKF actually assume the particle identity?
In order to fix this we should stop the propagation when the particle is stopped, I guess? Should this be part of the Propagator
?
@paulgessinger @andiwand
@asalzburger suggests to check if this happens during truth tracking as well, or only combinatorial finding of real seeds.
with truth seeding and filtering the problem seems to disappear but at the same time while lowering ptMin
the problem re-appears.
addSeeding(
s,
trackingGeometry,
field,
geoSelectionConfigFile=oddSeedingSel,
truthSeedRanges=TruthSeedRanges(pt=(500.0 * u.MeV, None), nHits=(9, None)),
seedingAlgorithm=SeedingAlgorithm.TruthEstimated,
outputDirRoot=outputDir,
)
I think it makes sense to have a more general solution for p=0
in the propagator as this might creep up in the future
with #1454 the stopped particle propagation failures seem to disappear but some of them will now result in
17:05:32 TrackFinding ERROR CombinatorialKalmanFilter failed: CombinatorialKalmanFilterError:5 No track is found with the initial parameters 12760 :
-4.34102
32.8367
-2.08792
2.17054
-2.1418
0.301926
which makes sense but I am not sure how to continue from here. any suggestions @paulgessinger @asalzburger ?
there seems to be one more propagation failure which is not caused by stopped particles
17:05:35 TrackFinding ERROR Propapation failed: PropagatorError:3 Propagation reached the configured maximum number of steps with the initial parameters 24986 :
-7.65096
-31.2718
-1.38305
2.18772
-1.99442
-14.7634
This issue/PR has been automatically marked as stale because it has not had recent activity. The stale label will be removed if any interaction occurs.
https://github.com/acts-project/acts/pull/1454 fixes the problem but will lead to
14:40:46 TrackFinding ERROR CombinatorialKalmanFilter failed: CombinatorialKalmanFilterError:5 No track is found with the initial parameters 44539 :
for stopped particles.
closing as this should be fixed with https://github.com/acts-project/acts/pull/1454
I've observed two more cases of propagation failures when running over Pythia8 HardQCD + SoftQCD events at mu200.
16:54:01 FatrasSimula ERROR event 571 particle id=(82|134|591|0|0)|pdg=0|q=-1|m=0|p=11.5181 failed to simulate with error PropagatorError:3: Propagation reached the configured maximum number of steps
. This could be a navigation problem where the particle leaves the detector, or potentially a looper that isn't cought by the looper protection./cc @andiwand @asalzburger