Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
athena
Manage
Activity
Members
Labels
Plan
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
atlas
athena
Merge requests
!67896
propagateWithJacobianSwitch : use switch
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
propagateWithJacobianSwitch : use switch
ATLAS-EGamma/athena:RK_switch_use_switch
into
main
Overview
8
Commits
3
Pipelines
3
Changes
1
Merged
Christos Anastopoulos
requested to merge
ATLAS-EGamma/athena:RK_switch_use_switch
into
main
1 year ago
Overview
8
Commits
3
Pipelines
3
Changes
1
Expand
propagateWithJacobianSwitch : use switch
0
0
Merge request reports
Compare
main
version 2
6a2ff83d
1 year ago
version 1
3dfe4941
1 year ago
main (base)
and
latest version
latest version
7a2eb3b4
3 commits,
1 year ago
version 2
6a2ff83d
2 commits,
1 year ago
version 1
3dfe4941
1 commit,
1 year ago
1 file
+
50
−
65
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Tracking/TrkExtrapolation/TrkExRungeKuttaPropagator/src/RungeKuttaPropagator.cxx
+
50
−
65
Options
@@ -770,74 +770,59 @@ bool propagateWithJacobianSwitch(Cache& cache,
const
Amg
::
Transform3D
&
T
=
Su
.
transform
();
Trk
::
SurfaceType
ty
=
Su
.
type
();
if
(
ty
==
Trk
::
SurfaceType
::
Plane
)
{
// plane
double
s
[
4
];
const
double
d
=
T
(
0
,
3
)
*
T
(
0
,
2
)
+
T
(
1
,
3
)
*
T
(
1
,
2
)
+
T
(
2
,
3
)
*
T
(
2
,
2
);
if
(
d
>=
0.
)
{
s
[
0
]
=
T
(
0
,
2
);
s
[
1
]
=
T
(
1
,
2
);
s
[
2
]
=
T
(
2
,
2
);
s
[
3
]
=
d
;
}
else
{
s
[
0
]
=
-
T
(
0
,
2
);
s
[
1
]
=
-
T
(
1
,
2
);
s
[
2
]
=
-
T
(
2
,
2
);
s
[
3
]
=
-
d
;
switch
(
ty
)
{
case
Trk
::
SurfaceType
::
Line
:
case
Trk
::
SurfaceType
::
Perigee
:
{
double
s
[
6
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
)};
return
propagateWithJacobian
(
cache
,
useJac
,
0
,
s
,
P
,
Step
);
}
return
propagateWithJacobian
(
cache
,
useJac
,
1
,
s
,
P
,
Step
);
}
else
if
(
ty
==
Trk
::
SurfaceType
::
Line
)
{
// Line
double
s
[
6
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
)};
return
propagateWithJacobian
(
cache
,
useJac
,
0
,
s
,
P
,
Step
);
}
else
if
(
ty
==
Trk
::
SurfaceType
::
Disc
)
{
// disc
double
s
[
4
];
const
double
d
=
T
(
0
,
3
)
*
T
(
0
,
2
)
+
T
(
1
,
3
)
*
T
(
1
,
2
)
+
T
(
2
,
3
)
*
T
(
2
,
2
);
if
(
d
>=
0.
)
{
s
[
0
]
=
T
(
0
,
2
);
s
[
1
]
=
T
(
1
,
2
);
s
[
2
]
=
T
(
2
,
2
);
s
[
3
]
=
d
;
}
else
{
s
[
0
]
=
-
T
(
0
,
2
);
s
[
1
]
=
-
T
(
1
,
2
);
s
[
2
]
=
-
T
(
2
,
2
);
s
[
3
]
=
-
d
;
case
Trk
::
SurfaceType
::
Plane
:
case
Trk
::
SurfaceType
::
Disc
:
{
double
s
[
4
];
const
double
d
=
T
(
0
,
3
)
*
T
(
0
,
2
)
+
T
(
1
,
3
)
*
T
(
1
,
2
)
+
T
(
2
,
3
)
*
T
(
2
,
2
);
if
(
d
>=
0.
)
{
s
[
0
]
=
T
(
0
,
2
);
s
[
1
]
=
T
(
1
,
2
);
s
[
2
]
=
T
(
2
,
2
);
s
[
3
]
=
d
;
}
else
{
s
[
0
]
=
-
T
(
0
,
2
);
s
[
1
]
=
-
T
(
1
,
2
);
s
[
2
]
=
-
T
(
2
,
2
);
s
[
3
]
=
-
d
;
}
return
propagateWithJacobian
(
cache
,
useJac
,
1
,
s
,
P
,
Step
);
}
case
Trk
::
SurfaceType
::
Cylinder
:
{
const
Trk
::
CylinderSurface
*
cyl
=
static_cast
<
const
Trk
::
CylinderSurface
*>
(
&
Su
);
const
double
r0
[
3
]
=
{
P
[
0
],
P
[
1
],
P
[
2
]};
double
s
[
9
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
),
cyl
->
bounds
().
r
(),
cache
.
m_direction
,
0.
};
bool
status
=
propagateWithJacobian
(
cache
,
useJac
,
2
,
s
,
P
,
Step
);
// For cylinder we do test for next cross point
if
(
status
&&
cyl
->
bounds
().
halfPhiSector
()
<
3.1
&&
newCrossPoint
(
*
cyl
,
r0
,
P
))
{
s
[
8
]
=
0.
;
return
propagateWithJacobian
(
cache
,
useJac
,
2
,
s
,
P
,
Step
);
}
return
status
;
}
return
propagateWithJacobian
(
cache
,
useJac
,
1
,
s
,
P
,
Step
);
}
else
if
(
ty
==
Trk
::
SurfaceType
::
Cylinder
)
{
// cylinder
const
Trk
::
CylinderSurface
*
cyl
=
static_cast
<
const
Trk
::
CylinderSurface
*>
(
&
Su
);
const
double
r0
[
3
]
=
{
P
[
0
],
P
[
1
],
P
[
2
]};
double
s
[
9
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
),
cyl
->
bounds
().
r
(),
cache
.
m_direction
,
0.
};
bool
status
=
propagateWithJacobian
(
cache
,
useJac
,
2
,
s
,
P
,
Step
);
// For cylinder we do test for next cross point
if
(
status
&&
cyl
->
bounds
().
halfPhiSector
()
<
3.1
&&
newCrossPoint
(
*
cyl
,
r0
,
P
))
{
s
[
8
]
=
0.
;
return
propagateWithJacobian
(
cache
,
useJac
,
2
,
s
,
P
,
Step
);
case
Trk
::
SurfaceType
::
Cone
:
{
double
k
=
static_cast
<
const
Trk
::
ConeSurface
*>
(
&
Su
)
->
bounds
().
tanAlpha
();
k
=
k
*
k
+
1.
;
double
s
[
9
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
),
k
,
cache
.
m_direction
,
0.
};
return
propagateWithJacobian
(
cache
,
useJac
,
3
,
s
,
P
,
Step
);
}
default
:
{
return
false
;
}
return
status
;
}
else
if
(
ty
==
Trk
::
SurfaceType
::
Perigee
)
{
// Perigee
double
s
[
6
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
)};
return
propagateWithJacobian
(
cache
,
useJac
,
0
,
s
,
P
,
Step
);
}
else
if
(
ty
==
Trk
::
SurfaceType
::
Cone
)
{
// cone
double
k
=
static_cast
<
const
Trk
::
ConeSurface
*>
(
&
Su
)
->
bounds
().
tanAlpha
();
k
=
k
*
k
+
1.
;
double
s
[
9
]
=
{
T
(
0
,
3
),
T
(
1
,
3
),
T
(
2
,
3
),
T
(
0
,
2
),
T
(
1
,
2
),
T
(
2
,
2
),
k
,
cache
.
m_direction
,
0.
};
return
propagateWithJacobian
(
cache
,
useJac
,
3
,
s
,
P
,
Step
);
}
else
{
return
false
;
}
}
Loading