|
ATLAS Offline Software
|
#include <TRT_ToT_dEdx.h>
|
| TRT_ToT_dEdx (const std::string &, const std::string &, const IInterface *) |
| AlgTool like constructor. More...
|
|
virtual | ~TRT_ToT_dEdx () |
| Virtual destructor. More...
|
|
virtual StatusCode | initialize () override |
| AlgTool initailize method. More...
|
|
virtual double | dEdx (const EventContext &ctx, const Trk::Track *track, bool useHThits, std::optional< float > localOccupancy=std::nullopt) const override final |
| function to calculate sum ToT normalised to number of used hits More...
|
|
virtual double | usedHits (const EventContext &ctx, const Trk::Track *track, bool useHThits=true) const override final |
| function to calculate number of used hits More...
|
|
virtual double | getTest (const EventContext &ctx, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const override final |
| function to calculate likelihood ratio test More...
|
|
void | setDefaultConfiguration () |
|
void | setStatusCorrection (bool value) |
|
bool | getStatusCorrection () const |
|
void | setCorrectionType (EOccupancyCorrection value) |
|
bool | getCorrectionType () const |
|
void | setMinRtrack (float minRtrack) |
|
float | getMinRtrack () const |
|
void | setMaxRtrack (float maxRtrack) |
|
float | getMaxRtrack () const |
|
void | setStatusUseZeroRHitCut (bool value) |
|
bool | getStatusUseZeroRHitCut () const |
|
void | setGasTypeFordEdXCalculation (EGasType gasType) |
|
int | getGasTypeFordEdXCalculation () const |
|
void | setAlgorithm (EstCalc alg) |
|
int | getAlgorithm () const |
|
virtual double | dEdx (const EventContext &ctx, const Trk::Track *track, bool useHitsHT, std::optional< float > localOccupancy=std::nullopt) const=0 |
| function to calculate sum ToT normalised to number of used hits More...
|
|
virtual double | dEdx (const Trk::Track *track, bool useHitsHT, std::optional< float > localOccupancy=std::nullopt) const |
| function to calculate sum ToT normalised to number of used hits More...
|
|
virtual double | usedHits (const EventContext &ctx, const Trk::Track *track, bool useHitsHT=true) const=0 |
| function to calculate number of used hits More...
|
|
virtual double | usedHits (const Trk::Track *track, bool useHitsHT=true) const |
|
virtual double | getTest (const EventContext &ctx, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const=0 |
| function to calculate likelihood ratio test More...
|
|
virtual double | getTest (const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const |
|
virtual double | dEdx (const Trk::Track *track, bool useHitsHT, std::optional< float > localOccupancy=std::nullopt) const |
|
virtual double | usedHits (const Trk::Track *track, bool useHitsHT=true) const |
|
virtual double | getTest (const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
bool | isGoodHit (const EventContext &ctx, const Trk::TrackStateOnSurface *trackState, bool useHitsHT, double &length) const |
| function to define what is a good hit to be used for dEdx calculation cuts on track level can be made latekAlgStandardr by the user. More...
|
|
double | correctNormalization (const EventContext &ctx, double nVtx=-1) const |
| correct overall dEdx normalization on track level More...
|
|
double | getProb (const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, int nUsedHits) const |
| function to calculate likelihood from prediction and resolution More...
|
|
double | getProb (const EventContext &ctx, EGasType gasType, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, int nUsedHits) const |
|
double | predictdEdx (const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double pTrk, Trk::ParticleHypothesis hypothesis) const |
| function to calculate expectation value for dEdx using BB fit More...
|
|
double | predictdEdx (const EventContext &ctx, EGasType gasType, const double pTrk, Trk::ParticleHypothesis hypothesis) const |
|
double | mass (const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double pTrk, double dEdx) const |
| function to extract most likely mass in bg [0,3] More...
|
|
double | correctToT_corrRZ (const EventContext &ctx, const Trk::TrackStateOnSurface *itr, double length) const |
| main function to correct ToT values on hit level as a function of track radius and z-position More...
|
|
EGasType | gasTypeInStraw (const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const |
| return gas type for that hit More...
|
|
EGasType | gasTypeInStraw (const EventContext &ctx, const InDet::TRT_DriftCircleOnTrack *driftcircle) const |
|
void | renounceArray (SG::VarHandleKeyArray &handlesArray) |
| remove all handles from I/O resolution More...
|
|
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > | renounce (T &h) |
|
void | extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps) |
| Add StoreName to extra input/output deps as needed. More...
|
|
|
double | fitFuncEndcap_corrRZ (const EventContext &ctx, EGasType gas, double driftRadius, double rPosition, int Layer, int sign) const |
| function to compute correction factor in endcap region More...
|
|
double | fitFuncBarrel_corrRZ (const EventContext &ctx, EGasType gas, double driftRadius, double zPosition, int Layer, int StrawLayer) const |
| function to compute correction factor in barrel region More...
|
|
double | fitFuncBarrelLong_corrRZ (const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int Layer, int StrawLayer) const |
| function called by fitFuncBarrel_corrRZ for long straws More...
|
|
double | fitFuncBarrelShort_corrRZ (const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int StrawLayer) const |
| function called by fitFuncBarrel_corrRZ for short straws More...
|
|
double | fitFuncPol_corrRZ (const EventContext &ctx, EGasType gasType, int parameter, double driftRadius, int Layer, int Strawlayer, int sign, int set) const |
| function called by fitFuncBarrel_corrRZ and fitFuncEndcap_corrRZ More...
|
|
double | fitFuncEndcap_corrRZL (const EventContext &ctx, EGasType gasType, double driftRadius, double radialPosition, int Layer, int sign) const |
| function to compute correction factor in endcap region More...
|
|
double | fitFuncBarrel_corrRZL (const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int Layer, int StrawLayer) const |
| function to compute correction factor in barrel region
More...
|
|
double | hitOccupancyCorrection (const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const |
|
double | trackOccupancyCorrection (const EventContext &ctx, const Trk::Track *track, bool useHThits, std::optional< float > localOccupancy) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
Definition at line 49 of file TRT_ToT_dEdx.h.
◆ StoreGateSvc_t
◆ EDataBaseType
◆ EGasType
Enumerator |
---|
kXenon | |
kArgon | |
kKrypton | |
kUnset | |
Definition at line 61 of file TRT_ToT_dEdx.h.
◆ EOccupancyCorrection
Enumerator |
---|
kRSOnly | |
kHitBased | |
kTrackBased | |
kGlobal | |
Definition at line 60 of file TRT_ToT_dEdx.h.
◆ EstCalc
Enumerator |
---|
kAlgStandard | |
kAlgReweight | |
kAlgReweightTrunkOne | |
Definition at line 59 of file TRT_ToT_dEdx.h.
◆ TRT_ToT_dEdx()
TRT_ToT_dEdx::TRT_ToT_dEdx |
( |
const std::string & |
t, |
|
|
const std::string & |
n, |
|
|
const IInterface * |
p |
|
) |
| |
AlgTool like constructor.
Definition at line 36 of file TRT_ToT_dEdx.cxx.
41 declareInterface<ITRT_ToT_dEdx>(
this);
◆ ~TRT_ToT_dEdx()
TRT_ToT_dEdx::~TRT_ToT_dEdx |
( |
| ) |
|
|
virtualdefault |
◆ calculateTrackLengthInStraw()
Definition at line 1208 of file TRT_ToT_dEdx.cxx.
1232 if(trkP==
nullptr)
return 0.;
1234 double Trt_Rtrack = std::abs(trkP->parameters()[
Trk::locR]);
1235 double Trt_HitTheta = trkP->parameters()[
Trk::theta];
1236 double Trt_HitPhi = trkP->parameters()[
Trk::phi];
1238 int HitPart = std::abs(
identifier->barrel_ec(DCId));
1240 double strawphi = element->
center(DCId).phi();
1243 if (Trt_Rtrack >= 2.0) {
1249 length = 2*std::sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./std::abs(
std::sin(Trt_HitTheta));
1250 }
else if (HitPart == 2) {
1254 throw std::runtime_error(
"Unknown barrel/endcap identifier: " +
std::to_string(HitPart) +
". Must be 1(Barrel) or 2(Endcap)");
◆ correctNormalization()
double TRT_ToT_dEdx::correctNormalization |
( |
const EventContext & |
ctx, |
|
|
double |
nVtx = -1 |
|
) |
| const |
|
protected |
correct overall dEdx normalization on track level
- Parameters
-
number | of primary vertices per event |
- Returns
- scaling variable
Definition at line 707 of file TRT_ToT_dEdx.cxx.
711 if(dEdxCorrection==
nullptr) {
712 ATH_MSG_ERROR(
" correctNormalization: Could not find any dEdxCorrection in CondStore. Return zero.");
718 if (nVtx<=0) nVtx=dEdxCorrection->normNzero[gasType];
719 double slope = dEdxCorrection->normSlopeTot[gasType];
720 double offset = dEdxCorrection->normOffsetTot[gasType];
722 slope = dEdxCorrection->normSlopeTotDivideByLength[gasType];
723 offset = dEdxCorrection->normOffsetTotDivideByLength[gasType];
725 double shift = dEdxCorrection->normOffsetData[gasType];
727 return (slope*dEdxCorrection->normNzero[gasType]+
offset)/(slope*nVtx+
offset+shift);
◆ correctToT_corrRZ()
main function to correct ToT values on hit level as a function of track radius and z-position
- Parameters
-
track | on surface object |
bool | variable to specify whether ToT or ToT/L correction |
bool | variable to specify whether data or MC correction |
bool | variable whether correction should actually be applied |
bool | variable whether mimic ToT to other gas hits shoule be used |
- Returns
- corrected value for ToT
- Todo:
- implement possiblity to set the scaling factor run-by-run from database, should probably be done later on track- level
Definition at line 731 of file TRT_ToT_dEdx.cxx.
765 double hitRtrack = std::abs(trkP->parameters()[
Trk::locR]);
768 ATH_MSG_ERROR(
"correctToT_corrRZ(const Trk::TrackStateOnSurface *itr):: Gas type in straw is kUnset! Return ToT = 0");
779 double hitPosR = std::sqrt(trackx*trackx+tracky*tracky);
796 if (std::isinf(valToT))
return 0.;
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ dEdx() [1/4]
virtual double ITRT_ToT_dEdx::dEdx |
function to calculate sum ToT normalised to number of used hits
- Parameters
-
track | pointer to track |
useHitsHT | decide if HT hits should be used in the estimate |
- Returns
- dEdx value
◆ dEdx() [2/4]
double TRT_ToT_dEdx::dEdx |
( |
const EventContext & |
ctx, |
|
|
const Trk::Track * |
track, |
|
|
bool |
useHitsHT, |
|
|
std::optional< float > |
localOccupancy = std::nullopt |
|
) |
| const |
|
finaloverridevirtual |
function to calculate sum ToT normalised to number of used hits
- Parameters
-
Event | context ctx |
track | pointer to track |
useHitsHT | decide if HT hits should be used in the estimate |
- Returns
- dEdx value
Implements ITRT_ToT_dEdx.
Definition at line 156 of file TRT_ToT_dEdx.cxx.
166 if(!eventInfoDecor.isPresent()) {
173 double mu = eventInfoDecor(0);
175 nVtx = 1.3129 + 0.716194*
mu + (-0.00475074)*
mu*
mu;
178 nVtx = 1.0897 + 0.748287*
mu + (-0.00421788)*
mu*
mu;
192 size_t vtos_size = vtsos->
size();
193 double correctionFactor = 1.;
196 std::vector<double> vecToT;
197 vecToT.reserve(vtos_size);
200 for ( ; itr!=itre ; ++itr) {
206 ToT_correct*=correctionFactor;
208 vecToT.push_back(ToT_correct);
212 sort(vecToT.begin(), vecToT.end());
213 size_t nhits = vecToT.size();
220 if (nhits<1)
return 0.0;
228 ToTsum*=correctionFactor;
233 std::vector<double> vecToT_Xe;
234 vecToT_Xe.reserve(vtos_size/2);
235 std::vector<double> vecToT_Ar;
236 vecToT_Ar.reserve(vtos_size/2);
237 std::vector<double> vecToT_Kr;
241 "dEdX_Estimator():: Using m_toolScenario="
242 <<
m_toolScenario <<
" scenario m_useTrackPartWithGasType is set to"
244 <<
", but kUnset is requiered. Check you tool configuration.");
247 for ( ; itr!=itre ; ++itr) {
255 ToT_correct*=correctionFactor;
257 vecToT_Xe.push_back(ToT_correct);
258 }
else if (gasType==
kArgon) {
259 vecToT_Ar.push_back(ToT_correct);
261 vecToT_Kr.push_back(ToT_correct);
263 ATH_MSG_ERROR(
"dEdX_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
268 sort(vecToT_Xe.begin(), vecToT_Xe.end());
269 sort(vecToT_Ar.begin(), vecToT_Ar.end());
270 sort(vecToT_Kr.begin(), vecToT_Kr.end());
272 size_t nhitsXe = vecToT_Xe.size();
273 size_t nhitsAr = vecToT_Ar.size();
274 size_t nhitsKr = vecToT_Kr.size();
284 if (nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) {
286 maxToT = vecToT_Xe.at(nhitsXe-1);
288 if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT){
290 maxToT = vecToT_Ar.at(nhitsAr-1);
292 if (nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) {
298 }
else if (trunkGas==
kArgon) {
306 size_t nhits = nhitsXe + nhitsAr + nhitsKr;
307 if(nhits<1)
return 0.0;
312 for (
size_t i = 0;
i < nhitsXe;
i++) {
313 ToTsumXe+=vecToT_Xe[
i];
315 for (
size_t i = 0;
i < nhitsAr;
i++) {
316 ToTsumAr+=vecToT_Ar[
i];
318 for (
size_t i = 0;
i < nhitsKr;
i++) {
319 ToTsumKr+=vecToT_Kr[
i];
322 ToTsumXe = (nhitsXe>0) ? ToTsumXe/nhitsXe : 0;
323 ToTsumAr = (nhitsAr>0) ? ToTsumAr/nhitsAr : 0;
324 ToTsumKr = (nhitsKr>0) ? ToTsumKr/nhitsKr : 0;
325 double ToTsum = ToTsumXe*nhitsXe + ToTsumAr*nhitsAr + ToTsumKr*nhitsKr;
333 ToTsum *= correctionFactor;
◆ dEdx() [3/4]
double ITRT_ToT_dEdx::dEdx |
( |
const Trk::Track * |
track, |
|
|
bool |
useHitsHT, |
|
|
std::optional< float > |
localOccupancy = std::nullopt |
|
) |
| const |
|
inlinevirtualinherited |
◆ dEdx() [4/4]
double ITRT_ToT_dEdx::dEdx |
|
inline |
function to calculate sum ToT normalised to number of used hits
- Parameters
-
track | pointer to track |
useHitsHT | decide if HT hits should be used in the estimate |
- Returns
- dEdx value
Definition at line 45 of file ITRT_ToT_dEdx.h.
95 return dEdx(Gaudi::Hive::currentContext(),
track, useHitsHT, localOccupancy);
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ fitFuncBarrel_corrRZ()
double TRT_ToT_dEdx::fitFuncBarrel_corrRZ |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gas, |
|
|
double |
driftRadius, |
|
|
double |
zPosition, |
|
|
int |
Layer, |
|
|
int |
StrawLayer |
|
) |
| const |
|
private |
function to compute correction factor in barrel region
- Parameters
-
driftradius | |
z | position |
layer | index |
straw | layer index |
bool | variable to specify whether data or MC correction |
- Returns
- correction
Definition at line 802 of file TRT_ToT_dEdx.cxx.
809 if (
Layer == 0 && StrawLayer < 9) {
◆ fitFuncBarrel_corrRZL()
double TRT_ToT_dEdx::fitFuncBarrel_corrRZL |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gasType, |
|
|
double |
driftRadius, |
|
|
double |
zPosition, |
|
|
int |
Layer, |
|
|
int |
StrawLayer |
|
) |
| const |
|
private |
function to compute correction factor in barrel region
- Parameters
-
driftradius | |
z | position |
layer | index
|
straw | layer index
|
desired | version of ToT definition |
bool | variable to specify whether data or MC correction
|
- Returns
- correction
Definition at line 1013 of file TRT_ToT_dEdx.cxx.
1025 if(dEdxCorrection==
nullptr) {
1026 ATH_MSG_ERROR(
" fitFuncBarrel_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
1031 if (
Layer==0 && Strawlayer<9) {
1033 a = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(0)*9+Strawlayer];
1034 b = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(1)*9+Strawlayer];
1035 c = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(2)*9+Strawlayer];
1036 d = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(3)*9+Strawlayer];
1037 e = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(4)*9+Strawlayer];
1038 f = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(5)*9+Strawlayer];
1039 g = dEdxCorrection->paraShortCorrRZDivideByLengthDATA[gasType][(6)*9+Strawlayer];
1041 a = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(0)*9+Strawlayer];
1042 b = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(1)*9+Strawlayer];
1043 c = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(2)*9+Strawlayer];
1044 d = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(3)*9+Strawlayer];
1045 e = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(4)*9+Strawlayer];
1046 f = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(5)*9+Strawlayer];
1047 g = dEdxCorrection->paraShortCorrRZDivideByLengthMC[gasType][(6)*9+Strawlayer];
1051 a = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(0)*30*3+
Layer*30+Strawlayer];
1052 b = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(1)*30*3+
Layer*30+Strawlayer];
1053 c = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(2)*30*3+
Layer*30+Strawlayer];
1054 d = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(3)*30*3+
Layer*30+Strawlayer];
1055 e = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(4)*30*3+
Layer*30+Strawlayer];
1056 f = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(5)*30*3+
Layer*30+Strawlayer];
1057 g = dEdxCorrection->paraLongCorrRZDivideByLengthDATA[gasType][(6)*30*3+
Layer*30+Strawlayer];
1059 a = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(0)*30*3+
Layer*30+Strawlayer];
1060 b = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(1)*30*3+
Layer*30+Strawlayer];
1061 c = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(2)*30*3+
Layer*30+Strawlayer];
1062 d = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(3)*30*3+
Layer*30+Strawlayer];
1063 e = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(4)*30*3+
Layer*30+Strawlayer];
1064 f = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(5)*30*3+
Layer*30+Strawlayer];
1065 g = dEdxCorrection->paraLongCorrRZDivideByLengthMC[gasType][(6)*30*3+
Layer*30+Strawlayer];
1068 double z = std::abs(zPosition);
1076 if (zPosition>0)
result = T0pos+T1+slope*
z;
◆ fitFuncBarrelLong_corrRZ()
double TRT_ToT_dEdx::fitFuncBarrelLong_corrRZ |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gasType, |
|
|
double |
driftRadius, |
|
|
double |
zPosition, |
|
|
int |
Layer, |
|
|
int |
StrawLayer |
|
) |
| const |
|
private |
function called by fitFuncBarrel_corrRZ for long straws
|z| /|z| - l \
T(r,z) = T0(r) + — exp|-------—| v(r) \ s(r) /
Definition at line 832 of file TRT_ToT_dEdx.cxx.
844 double z = std::abs(zPosition);
846 if(zPosition<0)
sign=-1;
854 const double expArg=(
z-
l)/
s;
855 if (not
inRange(expArg, -600.0,600.0)){
856 return expArg>0 ? std::numeric_limits<double>::infinity():0.;
◆ fitFuncBarrelShort_corrRZ()
double TRT_ToT_dEdx::fitFuncBarrelShort_corrRZ |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gasType, |
|
|
double |
driftRadius, |
|
|
double |
zPosition, |
|
|
int |
StrawLayer |
|
) |
| const |
|
private |
function called by fitFuncBarrel_corrRZ for short straws
T(r,z) = T0(r)+ b(r)*|z|
Definition at line 862 of file TRT_ToT_dEdx.cxx.
871 double z = std::abs(zPosition);
873 if(zPosition<0)
sign=-1;
◆ fitFuncEndcap_corrRZ()
double TRT_ToT_dEdx::fitFuncEndcap_corrRZ |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gas, |
|
|
double |
driftRadius, |
|
|
double |
rPosition, |
|
|
int |
Layer, |
|
|
int |
sign |
|
) |
| const |
|
private |
function to compute correction factor in endcap region
- Parameters
-
driftradius | |
radial | position |
straw | layer index |
sign | for positive or negative side |
bool | variable to specify whether data or MC correction |
- Returns
- correction
T(r,R) = T0(r)+ a(r)*R
Definition at line 816 of file TRT_ToT_dEdx.cxx.
828 return T0+
a*radialPosition;
◆ fitFuncEndcap_corrRZL()
double TRT_ToT_dEdx::fitFuncEndcap_corrRZL |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gasType, |
|
|
double |
driftRadius, |
|
|
double |
radialPosition, |
|
|
int |
Layer, |
|
|
int |
sign |
|
) |
| const |
|
private |
function to compute correction factor in endcap region
- Parameters
-
driftradius | |
radial | position |
straw | layer index |
sign | for positive or negative side |
bool | variable to specify whether data or MC correction |
- Returns
- correction
Definition at line 962 of file TRT_ToT_dEdx.cxx.
975 if(dEdxCorrection==
nullptr) {
976 ATH_MSG_ERROR(
" fitFuncEndcap_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
984 a = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(0)*28+
Layer];
985 b = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(1)*28+
Layer];
986 c = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(2)*28+
Layer];
987 d = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(3)*28+
Layer];
988 e = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(4)*28+
Layer];
989 f = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(5)*28+
Layer];
990 g = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(6)*28+
Layer];
991 h = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(7)*28+
Layer];
992 i = dEdxCorrection->paraEndCorrRZDivideByLengthDATA[gasType][(8)*28+
Layer];
994 a = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(0)*28+
Layer];
995 b = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(1)*28+
Layer];
996 c = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(2)*28+
Layer];
997 d = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(3)*28+
Layer];
998 e = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(4)*28+
Layer];
999 f = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(5)*28+
Layer];
1000 g = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(6)*28+
Layer];
1001 h = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(7)*28+
Layer];
1002 i = dEdxCorrection->paraEndCorrRZDivideByLengthMC[gasType][(8)*28+
Layer];
1006 double slope =
g+
h*
r+
i*
r*
r;
1009 return T0+T1+slope*radialPosition;
◆ fitFuncPol_corrRZ()
double TRT_ToT_dEdx::fitFuncPol_corrRZ |
( |
const EventContext & |
ctx, |
|
|
EGasType |
gasType, |
|
|
int |
parameter, |
|
|
double |
driftRadius, |
|
|
int |
Layer, |
|
|
int |
Strawlayer, |
|
|
int |
sign, |
|
|
int |
set |
|
) |
| const |
|
private |
function called by fitFuncBarrel_corrRZ and fitFuncEndcap_corrRZ
Definition at line 880 of file TRT_ToT_dEdx.cxx.
891 if(dEdxCorrection==
nullptr)
893 ATH_MSG_ERROR(
" fitFuncPol_corrRZ: Could not find any dEdxCorrection in CondStore. Return zero.");
907 a = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+0)*30*3+
Layer*30+Strawlayer+
offset];
908 b = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+1)*30*3+
Layer*30+Strawlayer+
offset];
909 c = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+2)*30*3+
Layer*30+Strawlayer+
offset];
910 d = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+3)*30*3+
Layer*30+Strawlayer+
offset];
911 e = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+4)*30*3+
Layer*30+Strawlayer+
offset];
912 f = dEdxCorrection->paraLongCorrRZ[gasType][(6*parameter+5)*30*3+
Layer*30+Strawlayer+
offset];
916 a = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+0)*9+
Layer+
offset];
917 b = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+1)*9+
Layer+
offset];
918 c = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+2)*9+
Layer+
offset];
919 d = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+3)*9+
Layer+
offset];
920 e = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+4)*9+
Layer+
offset];
921 f = dEdxCorrection->paraShortCorrRZ[gasType][(6*parameter+5)*9+
Layer+
offset];
924 a = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+0)*28+
Layer];
925 b = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+1)*28+
Layer];
926 c = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+2)*28+
Layer];
927 d = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+3)*28+
Layer];
928 e = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+4)*28+
Layer];
929 f = dEdxCorrection->paraEndCorrRZ[gasType][(6*parameter+5)*28+
Layer];
934 a = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+0)*30*3+
Layer*30+Strawlayer+
offset];
935 b = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+1)*30*3+
Layer*30+Strawlayer+
offset];
936 c = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+2)*30*3+
Layer*30+Strawlayer+
offset];
937 d = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+3)*30*3+
Layer*30+Strawlayer+
offset];
938 e = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+4)*30*3+
Layer*30+Strawlayer+
offset];
939 f = dEdxCorrection->paraLongCorrRZMC[gasType][(6*parameter+5)*30*3+
Layer*30+Strawlayer+
offset];
942 a = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+0)*9+
Layer+
offset];
943 b = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+1)*9+
Layer+
offset];
944 c = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+2)*9+
Layer+
offset];
945 d = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+3)*9+
Layer+
offset];
946 e = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+4)*9+
Layer+
offset];
947 f = dEdxCorrection->paraShortCorrRZMC[gasType][(6*parameter+5)*9+
Layer+
offset];
950 a = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+0)*28+
Layer];
951 b = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+1)*28+
Layer];
952 c = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+2)*28+
Layer];
953 d = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+3)*28+
Layer];
954 e = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+4)*28+
Layer];
955 f = dEdxCorrection->paraEndCorrRZMC[gasType][(6*parameter+5)*28+
Layer];
◆ gasTypeInStraw() [1/2]
Definition at line 672 of file TRT_ToT_dEdx.cxx.
693 <<
", must be 'Good(2)||Xenon(3)' or 'Dead(1)||Argon(4)' or "
694 "'Krypton(5)' or 'EmulatedArgon(6)' or 'EmulatedKr(7)'!");
◆ gasTypeInStraw() [2/2]
return gas type for that hit
- Parameters
-
- Returns
- gasType
Definition at line 645 of file TRT_ToT_dEdx.cxx.
◆ getAlgorithm()
int TRT_ToT_dEdx::getAlgorithm |
( |
| ) |
const |
|
inline |
◆ getCorrectionType()
bool TRT_ToT_dEdx::getCorrectionType |
( |
| ) |
const |
|
inline |
◆ getGasTypeFordEdXCalculation()
int TRT_ToT_dEdx::getGasTypeFordEdXCalculation |
( |
| ) |
const |
|
inline |
◆ getMaxRtrack()
float TRT_ToT_dEdx::getMaxRtrack |
( |
| ) |
const |
|
inline |
◆ getMinRtrack()
float TRT_ToT_dEdx::getMinRtrack |
( |
| ) |
const |
|
inline |
◆ getProb() [1/2]
function to calculate likelihood from prediction and resolution
- Parameters
-
observed | dEdx |
track | parameter |
particle | hypothesis |
number | of used hits |
- Returns
- brobability value between 0 and 1
Definition at line 422 of file TRT_ToT_dEdx.cxx.
430 return getProb(ctx,gasType, dEdx_obs, pTrk, hypothesis, nUsedHits);
◆ getProb() [2/2]
Definition at line 434 of file TRT_ToT_dEdx.cxx.
445 if (dEdxCorrection==
nullptr) {
446 ATH_MSG_ERROR(
" getProb: Could not find any dEdxCorrection in CondStore. Return zero.");
451 ATH_MSG_DEBUG(
"getProb():: gasTypeInStraw set kUnset that is not allowed! Use gasTypeInStraw(*itr) to get gas type info for that hit first!");
452 ATH_MSG_DEBUG(
"getProb():: Now gasTypeInStraw sets to kXenon.");
456 double dEdx_pred =
predictdEdx(ctx,gasType, pTrk, hypothesis);
457 if (dEdx_pred==0)
return 0.0;
461 double correct = 1+factor*(0.045*log10(pTrk)+0.885-1);
462 dEdx_pred= dEdx_pred/correct;
466 dEdxCorrection->resolution[gasType][0] +
467 dEdxCorrection->resolution[gasType][1] * (nUsedHits + 0.5) +
468 dEdxCorrection->resolution[gasType][2] * (nUsedHits + 0.5) *
470 dEdxCorrection->resolution[gasType][3] * (nUsedHits + 0.5) *
471 (nUsedHits + 0.5) * (nUsedHits + 0.5);
474 dEdxCorrection->resolutionElectron[gasType][0] +
475 dEdxCorrection->resolutionElectron[gasType][1] * (nUsedHits + 0.5) +
476 dEdxCorrection->resolutionElectron[gasType][2] * (nUsedHits + 0.5) *
478 dEdxCorrection->resolutionElectron[gasType][3] * (nUsedHits + 0.5) *
479 (nUsedHits + 0.5) * (nUsedHits + 0.5);
482 double prob =
std::exp( -0.5 * ( ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) *
483 ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) )) ;
◆ getStatusCorrection()
bool TRT_ToT_dEdx::getStatusCorrection |
( |
| ) |
const |
|
inline |
◆ getStatusUseZeroRHitCut()
bool TRT_ToT_dEdx::getStatusUseZeroRHitCut |
( |
| ) |
const |
|
inline |
◆ getTest() [1/4]
◆ getTest() [2/4]
double ITRT_ToT_dEdx::getTest |
|
inline |
◆ getTest() [3/4]
function to calculate likelihood ratio test
- Parameters
-
observed | dEdx |
track | parameter |
particle | hypothesis |
antihypothesis | |
number | of used hits |
- Returns
- test value between 0 and 1
Implements ITRT_ToT_dEdx.
Definition at line 490 of file TRT_ToT_dEdx.cxx.
500 if ( dEdx_obs<=0. || pTrk<=0. || nUsedHits<=0 )
return 0.5;
502 double Pone =
getProb(ctx,gasType, dEdx_obs,pTrk,hypothesis,nUsedHits);
503 double Ptwo =
getProb(ctx,gasType, dEdx_obs,pTrk,antihypothesis,nUsedHits);
504 if ((Pone+Ptwo) != 0) {
506 return Pone/(Pone+Ptwo);
◆ getTest() [4/4]
virtual double ITRT_ToT_dEdx::getTest |
function to calculate likelihood ratio test
- Parameters
-
Event | context ctx |
observed | dEdx |
track | parameter |
particle | hypothesis |
antihypothesis | |
number | of used hits |
- Returns
- test value between 0 and 1
◆ hitOccupancyCorrection()
Definition at line 1082 of file TRT_ToT_dEdx.cxx.
1121 double Trt_HitTheta = trkP->parameters()[
Trk::theta];
1128 double p0=0., p1=0., p2=0., p0_flat=0.;
1133 int nBarrelLayers = 3, nEndcapLayers = 14;
1135 int nParametersPerLayer = 3;
1137 int nHTConfigurations = 2;
1139 int nSharedConfigurations = 2;
1141 layer * nParametersPerLayer +
1142 isHT * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
1143 nParametersPerLayer +
1144 nBarrelLayers * nParametersPerLayer) +
1145 isShared * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
1146 nParametersPerLayer * nHTConfigurations +
1147 nBarrelLayers * nParametersPerLayer * nHTConfigurations) +
1148 (abs(HitPart) - 1) * nParametersPerLayer * nBarrelLayers *
1149 nHTConfigurations * nSharedConfigurations;
1151 int num_flat =
layer * 3 +
1152 isHT * ((abs(HitPart) - 1) * (nEndcapLayers - nBarrelLayers) *
1153 nParametersPerLayer +
1154 nBarrelLayers * nParametersPerLayer) +
1155 (abs(HitPart) - 1) * nParametersPerLayer * nBarrelLayers *
1156 nHTConfigurations * nSharedConfigurations;
1158 p0 = dEdxCorrection->hitOccPar[
num];
1159 p1 = dEdxCorrection->hitOccPar[
num+1];
1160 p2 = dEdxCorrection->hitOccPar[
num+2];
1161 p0_flat = dEdxCorrection->hitOccPar[num_flat];
1166 valToT = p0_flat/(p0+p1*localOccupancy+p2*localOccupancy*localOccupancy);
1168 return ToTmip*valToT;
◆ initialize()
StatusCode TRT_ToT_dEdx::initialize |
( |
| ) |
|
|
overridevirtual |
AlgTool initailize method.
Definition at line 70 of file TRT_ToT_dEdx.cxx.
80 return StatusCode::FAILURE;
92 ATH_MSG_ERROR(
"Property TRT_dEdx_useTrackPartWithGasType has an invalid "
94 return StatusCode::FAILURE;
97 return StatusCode::SUCCESS;
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ interfaceID()
static const InterfaceID& ITRT_ToT_dEdx::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
AlgTool interface methods.
Definition at line 30 of file ITRT_ToT_dEdx.h.
30 {
return IID_ITRT_ToT_dEdx; };
◆ isGoodHit()
function to define what is a good hit to be used for dEdx calculation cuts on track level can be made latekAlgStandardr by the user.
Also returns the length in the straw.
- Parameters
-
trackState | measurement on track |
useHitsHT | decide if HT hits should be used in the estimate |
length | length in straw |
- Returns
- decision
Definition at line 101 of file TRT_ToT_dEdx.cxx.
127 if(trkP==
nullptr)
return false;
129 double Trt_Rtrack = std::abs(trkP->parameters()[
Trk::locR]);
143 if (TrtHl==1)
return false;
◆ mass()
function to extract most likely mass in bg [0,3]
- Parameters
-
track | momentum |
measured | dEdx |
- Returns
- mass
- Todo:
- make failsafe
Definition at line 593 of file TRT_ToT_dEdx.cxx.
604 if(dEdxCorrection==
nullptr)
606 ATH_MSG_ERROR(
" mass: Could not find any dEdxCorrection in CondStore. Return zero.");
612 ATH_MSG_WARNING(
"mass():: gasTypeInStraw set kUnset that is not allowed! Use gasTypeInStraw(*itr) to get gas type info for that hit first!");
620 static const double bg_min = 0.001;
621 static const double bg_max = 3;
623 static const std::string blumRolandiFunction =
624 "( [0]/sqrt( (x*x/([5]*[5]))/(1.+(x*x/([5]*[5]))) )^[3] ) * ([1] - sqrt( "
625 "(x*x/([5]*[5]))/(1.+(x*x/([5]*[5]))) )^[3] - log([2]+1./((x/[5])^[4]) ) )";
627 TF1 blumRolandi(
"BR", blumRolandiFunction.c_str(), 0.7, 100000);
629 blumRolandi.SetParameters(dEdxCorrection->paraDedxP1[gasType],
630 dEdxCorrection->paraDedxP2[gasType],
631 dEdxCorrection->paraDedxP3[gasType],
632 dEdxCorrection->paraDedxP4[gasType],
633 dEdxCorrection->paraDedxP5[gasType],
636 double betaGamma = blumRolandi.GetX(
dEdx, bg_min, bg_max);
640 return pTrk/betaGamma;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ predictdEdx() [1/2]
function to calculate expectation value for dEdx using BB fit
- Parameters
-
- Returns
- dEdx_pred
Definition at line 513 of file TRT_ToT_dEdx.cxx.
◆ predictdEdx() [2/2]
- Todo:
- why is it possible that a 20 MeV particle reaches this point? (see Savannah bug 94644)
Definition at line 523 of file TRT_ToT_dEdx.cxx.
528 ATH_MSG_DEBUG(
"predictdEdx(): gasTypeInStraw = " << gasType <<
"");
532 if (dEdxCorrection ==
nullptr) {
533 ATH_MSG_ERROR(
" predictdEdx: Could not find any dEdxCorrection in "
534 "CondStore. Return zero.");
540 "predictdEdx():: gasTypeInStraw set kUnset that is not allowed! Use "
541 "gasTypeInStraw(*itr) to get gas type info for that hit first!");
542 ATH_MSG_DEBUG(
"predictdEdx():: Now gasTypeInStraw sets to kXenon.");
548 double betaGamma = pTrk/
mass;
556 if (dEdxCorrection->paraDivideByLengthDedxP3[gasType] +
558 dEdxCorrection->paraDivideByLengthDedxP5[gasType])) <=
561 return dEdxCorrection->paraDivideByLengthDedxP1[gasType] /
562 std::pow(std::sqrt((betaGamma * betaGamma) /
563 (1. + (betaGamma * betaGamma))),
564 dEdxCorrection->paraDivideByLengthDedxP4[gasType]) *
565 (dEdxCorrection->paraDivideByLengthDedxP2[gasType] -
566 std::pow(std::sqrt((betaGamma * betaGamma) /
567 (1. + (betaGamma * betaGamma))),
568 dEdxCorrection->paraDivideByLengthDedxP4[gasType]) -
569 log(dEdxCorrection->paraDivideByLengthDedxP3[gasType] +
572 dEdxCorrection->paraDivideByLengthDedxP5[gasType]))));
574 if (dEdxCorrection->paraDedxP3[gasType] +
575 1. / (
std::pow(betaGamma, dEdxCorrection->paraDedxP5[gasType])) <=
578 return dEdxCorrection->paraDedxP1[gasType] /
580 std::sqrt((betaGamma * betaGamma) / (1. + (betaGamma * betaGamma))),
581 dEdxCorrection->paraDedxP4[gasType]) *
582 (dEdxCorrection->paraDedxP2[gasType] -
584 std::sqrt((betaGamma * betaGamma) / (1. + (betaGamma * betaGamma))),
585 dEdxCorrection->paraDedxP4[gasType]) -
586 log(dEdxCorrection->paraDedxP3[gasType] +
587 1. / (
std::pow(betaGamma, dEdxCorrection->paraDedxP5[gasType]))));
◆ renounce()
◆ renounceArray()
◆ setAlgorithm()
void TRT_ToT_dEdx::setAlgorithm |
( |
EstCalc |
alg | ) |
|
|
inline |
◆ setCorrectionType()
◆ setDefaultConfiguration()
void TRT_ToT_dEdx::setDefaultConfiguration |
( |
| ) |
|
◆ setGasTypeFordEdXCalculation()
void TRT_ToT_dEdx::setGasTypeFordEdXCalculation |
( |
EGasType |
gasType | ) |
|
|
inline |
◆ setMaxRtrack()
void TRT_ToT_dEdx::setMaxRtrack |
( |
float |
maxRtrack | ) |
|
|
inline |
◆ setMinRtrack()
void TRT_ToT_dEdx::setMinRtrack |
( |
float |
minRtrack | ) |
|
|
inline |
◆ setStatusCorrection()
void TRT_ToT_dEdx::setStatusCorrection |
( |
bool |
value | ) |
|
|
inline |
◆ setStatusUseZeroRHitCut()
void TRT_ToT_dEdx::setStatusUseZeroRHitCut |
( |
bool |
value | ) |
|
|
inline |
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ trackOccupancyCorrection()
double TRT_ToT_dEdx::trackOccupancyCorrection |
( |
const EventContext & |
ctx, |
|
|
const Trk::Track * |
track, |
|
|
bool |
useHThits, |
|
|
std::optional< float > |
localOccupancy |
|
) |
| const |
|
private |
Definition at line 1172 of file TRT_ToT_dEdx.cxx.
1182 double trackOcc = localOccupancy != std::nullopt
1197 corr=dEdxCorrection->trackOccPar0[
index]+dEdxCorrection->trackOccPar1[
index]*trackOcc+dEdxCorrection->trackOccPar2[
index]*
pow(trackOcc,2);
1199 corr=dEdxCorrection->trackOccPar0NoHt[
index]+dEdxCorrection->trackOccPar1NoHt[
index]*trackOcc+dEdxCorrection->trackOccPar2NoHt[
index]*
pow(trackOcc,2);
◆ updateVHKA()
◆ usedHits() [1/4]
virtual double ITRT_ToT_dEdx::usedHits |
function to calculate number of used hits
- Parameters
-
Event | context ctx |
track | pointer |
useHitsHT | decide if HT hits should be used in the estimate |
- Returns
- nHits
◆ usedHits() [2/4]
double TRT_ToT_dEdx::usedHits |
( |
const EventContext & |
ctx, |
|
|
const Trk::Track * |
track, |
|
|
bool |
useHThits = true |
|
) |
| const |
|
finaloverridevirtual |
function to calculate number of used hits
- Parameters
-
track | pointer |
useHitsHT | decide if HT hits should be used in the estimate |
- Returns
- nHits
Implements ITRT_ToT_dEdx.
Definition at line 343 of file TRT_ToT_dEdx.cxx.
364 for ( ; itr!=itre ; ++itr) {
380 "usedHits_Estimator():: Using m_toolScenario="
381 <<
m_toolScenario <<
" scenario m_useTrackPartWithGasType is set to "
383 <<
", but kUnset is required. Check you tool configuration.");
386 for ( ; itr!=itre ; ++itr) {
392 }
else if (gasType==
kArgon) {
397 ATH_MSG_ERROR(
"usedHits_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
408 if(nhitsXe>0 || nhitsAr>0 || nhitsKr>0)
413 nhits = nhitsXe + nhitsAr + nhitsKr;
◆ usedHits() [3/4]
double ITRT_ToT_dEdx::usedHits |
( |
const Trk::Track * |
track, |
|
|
bool |
useHitsHT = true |
|
) |
| const |
|
inlinevirtualinherited |
◆ usedHits() [4/4]
double ITRT_ToT_dEdx::usedHits |
|
inline |
◆ m_assoTool
◆ m_corrected
bool TRT_ToT_dEdx::m_corrected {} |
|
private |
◆ m_correctionType
int TRT_ToT_dEdx::m_correctionType {} |
|
private |
◆ m_detStore
◆ m_divideByL
bool TRT_ToT_dEdx::m_divideByL {} |
|
private |
◆ m_evtStore
◆ m_isData
bool TRT_ToT_dEdx::m_isData {} |
|
private |
◆ m_localOccTool
◆ m_nTrunkateHits
unsigned int TRT_ToT_dEdx::m_nTrunkateHits = 1 |
|
private |
◆ m_rdhkEvtInfo
Initial value:{this
, "averageInteractionsPerCrossingKey"
, "EventInfo.averageInteractionsPerCrossing"
, "Decoration for Average Interaction Per Crossing"}
Definition at line 64 of file TRT_ToT_dEdx.h.
◆ m_ReadKey
◆ m_toolScenario
int TRT_ToT_dEdx::m_toolScenario {} |
|
private |
◆ m_trackConfig_maxRtrack
float TRT_ToT_dEdx::m_trackConfig_maxRtrack {} |
|
private |
◆ m_trackConfig_minRtrack
float TRT_ToT_dEdx::m_trackConfig_minRtrack {} |
|
private |
◆ m_trtId
◆ m_TRTStrawSummaryTool
◆ m_useTrackPartWithGasType
int TRT_ToT_dEdx::m_useTrackPartWithGasType {} |
|
private |
◆ m_useZeroRHitCut
bool TRT_ToT_dEdx::m_useZeroRHitCut {} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
ToolHandle< ITRT_StrawStatusSummaryTool > m_TRTStrawSummaryTool
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
virtual double usedHits(const EventContext &ctx, const Trk::Track *track, bool useHThits=true) const override final
function to calculate number of used hits
bool isGoodHit(const EventContext &ctx, const Trk::TrackStateOnSurface *trackState, bool useHitsHT, double &length) const
function to define what is a good hit to be used for dEdx calculation cuts on track level can be made...
Const iterator class for DataVector/DataList.
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
double getProb(const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, int nUsedHits) const
function to calculate likelihood from prediction and resolution
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
double fitFuncBarrelShort_corrRZ(const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int StrawLayer) const
function called by fitFuncBarrel_corrRZ for short straws
double timeOverThreshold() const
returns Time over threshold in ns
int m_useTrackPartWithGasType
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Scalar theta() const
theta method
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
virtual double getTest(const EventContext &ctx, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const override final
function to calculate likelihood ratio test
virtual double dEdx(const EventContext &ctx, const Trk::Track *track, bool useHThits, std::optional< float > localOccupancy=std::nullopt) const override final
function to calculate sum ToT normalised to number of used hits
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
virtual bool rioType(RIO_OnTrackType::Type type) const =0
Method checking the Rio On Track type.
virtual double usedHits(const EventContext &ctx, const Trk::Track *track, bool useHitsHT=true) const =0
function to calculate number of used hits
bool inRange(const NumericType &val, const std::pair< NumericType, NumericType > &range)
Function to check whether a number is in the inclusive range, given as a pair.
bool highLevel() const
returns true if the high level threshold was passed
virtual double dEdx(const EventContext &ctx, const Trk::Track *track, bool useHitsHT, std::optional< float > localOccupancy=std::nullopt) const =0
function to calculate sum ToT normalised to number of used hits
double trackOccupancyCorrection(const EventContext &ctx, const Trk::Track *track, bool useHThits, std::optional< float > localOccupancy) const
virtual const InDetDD::TRT_BaseElement * detectorElement() const override final
returns the detector element, assoicated with the PRD of this class
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
double fitFuncBarrelLong_corrRZ(const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int Layer, int StrawLayer) const
function called by fitFuncBarrel_corrRZ for long straws
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual void setOwner(IDataHandleHolder *o)=0
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
double correctToT_corrRZ(const EventContext &ctx, const Trk::TrackStateOnSurface *itr, double length) const
main function to correct ToT values on hit level as a function of track radius and z-position
double fitFuncBarrel_corrRZL(const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int Layer, int StrawLayer) const
function to compute correction factor in barrel region
bool type(const TrackStateOnSurfaceType type) const
Use this method to find out if the TSoS is of a certain type: i.e.
double fitFuncBarrel_corrRZ(const EventContext &ctx, EGasType gas, double driftRadius, double zPosition, int Layer, int StrawLayer) const
function to compute correction factor in barrel region
Handle class for reading a decoration on an object.
ToolHandle< Trk::IPRD_AssociationTool > m_assoTool
msgSvc
Provide convenience handles for various services.
::StatusCode StatusCode
StatusCode definition for legacy code.
virtual double getTest(const EventContext &ctx, const double dEdx_obs, const double pTrk, Trk::ParticleHypothesis hypothesis, Trk::ParticleHypothesis antihypothesis, int nUsedHits) const =0
function to calculate likelihood ratio test
float m_trackConfig_minRtrack
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
double mass(const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double pTrk, double dEdx) const
function to extract most likely mass in bg [0,3]
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
int straw_layer(const Identifier &id) const
int layer_or_wheel(const Identifier &id) const
SG::ReadDecorHandleKey< xAOD::EventInfo > m_rdhkEvtInfo
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
SG::ReadCondHandleKey< TRTDedxcorrection > m_ReadKey
double fitFuncEndcap_corrRZ(const EventContext &ctx, EGasType gas, double driftRadius, double rPosition, int Layer, int sign) const
function to compute correction factor in endcap region
double predictdEdx(const EventContext &ctx, const Trk::TrackStateOnSurface *itr, const double pTrk, Trk::ParticleHypothesis hypothesis) const
function to calculate expectation value for dEdx using BB fit
double correctNormalization(const EventContext &ctx, double nVtx=-1) const
correct overall dEdx normalization on track level
float m_trackConfig_maxRtrack
std::string to_string(const DetectorType &type)
void setDefaultConfiguration()
StatusCode initialize(bool used=true)
int phi_module(const Identifier &id) const
static double calculateTrackLengthInStraw(const Trk::TrackStateOnSurface *trackState, const TRT_ID *identifier)
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
ToolHandle< InDet::ITRT_LocalOccupancy > m_localOccTool
#define REPORT_MESSAGE(LVL)
Report a message.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
double fitFuncPol_corrRZ(const EventContext &ctx, EGasType gasType, int parameter, double driftRadius, int Layer, int Strawlayer, int sign, int set) const
function called by fitFuncBarrel_corrRZ and fitFuncEndcap_corrRZ
double fitFuncEndcap_corrRZL(const EventContext &ctx, EGasType gasType, double driftRadius, double radialPosition, int Layer, int sign) const
function to compute correction factor in endcap region
#define ATH_MSG_WARNING(x)
double hitOccupancyCorrection(const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const
virtual const Amg::Vector3D & center() const override final
Element Surface: center of a straw layer.
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
double timeOverThreshold(unsigned int m_word)
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
EGasType gasTypeInStraw(const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const
return gas type for that hit
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
unsigned int m_nTrunkateHits