Project
Loading...
Searching...
No Matches
MaterialPhysics.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef ALICEO2_ITSMFT_TRACKING_MATERIALPHYSICS_H_
13#define ALICEO2_ITSMFT_TRACKING_MATERIALPHYSICS_H_
14
15#include <cstdint>
16
18
19// This header and its implementation are host-only; GPU compilation is not
20// supported.
21
23{
24
25// Material traversal direction relative to the particle momentum, independent
26// of any propagation or covariance sign convention in the caller.
27enum class MaterialTraversalDirection : uint8_t {
28 AlongMomentum = 0,
30};
31
32// Unsigned, path-integrated material budget. Both fields are non-negative;
33// direction is supplied separately.
38
39// Scalar material-physics kernel for charged particles.
40// pid supplies the mass; absCharge supplies |q| for energy-loss and
41// scattering scale factors. absCharge must be nonzero and need not equal
42// PID::getCharge().
43//
44// Validation precedence (first failure wins): invalid direction, negative
45// material, non-positive momentum, invalid PID, then a charged massless PID.
46// The PID range is checked before accessing its mass.
47//
48// For charged massive states, non-positive beta^2 is rejected before either
49// material-effect calculation.
50//
51// For charged massive states, momentumGeV is the caller-selected physical
52// momentum; no covariance projection is performed. Energy loss uses the same
53// capped-substep Bethe-Bloch algorithm as
54// o2::track::TrackParametrizationWithError::correctForMaterial(). The
55// requested substep count is
56// 1 + floor(|dE_full| / eKin * o2::track::ELoss2EKinThreshInv)
57// with a range-bounded float-to-int conversion, capped at
58// o2::track::MaxELossIter (50). All arealDensityGPerCm2 is processed; only the
59// granularity changes. Bethe-Bloch is recomputed from the current momentum
60// at each substep.
61// MaterialTraversalDirection::AlongMomentum subtracts energy per substep;
62// OppositeMomentum adds it. Reject particles stopped in material or ending
63// with momentum below 0.01 GeV/c.
64//
65// highlandTheta2Rad2 and relativeInverseMomentumVariance use the simplified
66// O2 Highland variance (no logarithmic correction) and pre-material momentum,
67// energy, and beta. Both scale with absCharge^2. highlandTheta2Rad2 > pi^2
68// is rejected.
69//
70// This kernel does not construct track states, detector geometry, or
71// ITS/MFT/topology/propagation objects.
72// Output values are committed only on success.
74 float momentumGeV,
76 uint8_t absCharge,
79 float& momentumAfterGeV,
80 float& highlandTheta2Rad2,
81 float& relativeInverseMomentumVariance) noexcept;
82
83} // namespace o2::itsmft::tracking::material
84
85#endif // ALICEO2_ITSMFT_TRACKING_MATERIALPHYSICS_H_
particle ids, masses, names class definition
bool calculateMaterialPhysics(float momentumGeV, o2::track::PID pid, uint8_t absCharge, MaterialTraversalDirection direction, IntegratedMaterialBudget material, float &momentumAfterGeV, float &highlandTheta2Rad2, float &relativeInverseMomentumVariance) noexcept
float arealDensityGPerCm2
crossed length*density, g/cm^2
float xOverX0
thickness in units of radiation length