ATLAS Offline Software
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TRT_ToT_dEdx Class Referencefinal

#include <TRT_ToT_dEdx.h>

Inheritance diagram for TRT_ToT_dEdx:
Collaboration diagram for TRT_ToT_dEdx:

Public Types

enum  EDataBaseType { kOldDB, kNewDB }
 
enum  EstCalc { kAlgStandard, kAlgReweight, kAlgReweightTrunkOne }
 
enum  EOccupancyCorrection { kRSOnly, kHitBased, kTrackBased, kGlobal }
 
enum  EGasType { kXenon, kArgon, kKrypton, kUnset }
 

Public Member Functions

 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
 

Static Public Member Functions

static double calculateTrackLengthInStraw (const Trk::TrackStateOnSurface *trackState, const TRT_ID *identifier)
 
static const InterfaceID & interfaceID ()
 AlgTool interface methods. More...
 

Public Attributes

ToolHandle< ITRT_StrawStatusSummaryToolm_TRTStrawSummaryTool
 

Protected Member Functions

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...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

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...
 

Private Attributes

SG::ReadDecorHandleKey< xAOD::EventInfom_rdhkEvtInfo
 
const TRT_IDm_trtId
 
ToolHandle< Trk::IPRD_AssociationToolm_assoTool {this, "AssociationTool","InDet::InDetPRD_AssociationToolGangedPixels","PRD_AssociationTool"}
 
ToolHandle< InDet::ITRT_LocalOccupancym_localOccTool {this, "TRT_LocalOccupancyTool","", "Local occupancy tool"}
 
bool m_corrected {}
 
bool m_divideByL {}
 
int m_useTrackPartWithGasType {}
 
int m_toolScenario {}
 
int m_correctionType {}
 
bool m_isData {}
 
float m_trackConfig_maxRtrack {}
 
float m_trackConfig_minRtrack {}
 
bool m_useZeroRHitCut {}
 
unsigned int m_nTrunkateHits = 1
 
SG::ReadCondHandleKey< TRTDedxcorrectionm_ReadKey {this,"Dedxcorrection","Dedxcorrection","Dedx constants in-key"}
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 49 of file TRT_ToT_dEdx.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ EDataBaseType

Enumerator
kOldDB 
kNewDB 

Definition at line 58 of file TRT_ToT_dEdx.h.

58 {kOldDB,kNewDB};

◆ 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.

Constructor & Destructor Documentation

◆ 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.

37  :
38  AthAlgTool(t,n,p),
39  m_TRTStrawSummaryTool("TRT_StrawStatusSummaryTool",this)
40 {
41  declareInterface<ITRT_ToT_dEdx>(this);
42  declareProperty("TRTStrawSummaryTool", m_TRTStrawSummaryTool);
43 
45 
46  m_trtId = nullptr;
47 }

◆ ~TRT_ToT_dEdx()

TRT_ToT_dEdx::~TRT_ToT_dEdx ( )
virtualdefault

Virtual destructor.

Member Function Documentation

◆ calculateTrackLengthInStraw()

double TRT_ToT_dEdx::calculateTrackLengthInStraw ( const Trk::TrackStateOnSurface trackState,
const TRT_ID identifier 
)
static

Definition at line 1208 of file TRT_ToT_dEdx.cxx.

1208  {
1209  if (trackState->type(Trk::TrackStateOnSurface::Outlier)) return 0.; //Outliers
1210 
1211  const Trk::MeasurementBase* trkM = trackState->measurementOnTrack();
1212  if (!trkM) {
1213  return 0.;
1214  }
1215 
1216  // Check if this is RIO on track
1217  // and if yes check if is TRT Drift Circle
1218  // then set the ptr
1219  const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
1221  const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(trkM);
1223  driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
1224  }
1225  }
1226 
1227  if (!driftcircle) {
1228  return 0.;
1229  }
1230 
1231  const Trk::TrackParameters* trkP = trackState->trackParameters();
1232  if(trkP==nullptr) return 0.;
1233 
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];
1237  Identifier DCId = driftcircle->identify();
1238  int HitPart = std::abs(identifier->barrel_ec(DCId));
1239  const InDetDD::TRT_BaseElement* element = driftcircle->detectorElement();
1240  double strawphi = element->center(DCId).phi();
1241 
1242  // check if track is an outlier
1243  if (Trt_Rtrack >= 2.0) {
1244  return 0.;
1245  }
1246 
1247  double length=0;
1248  if (HitPart == 1) { //Barrel
1249  length = 2*std::sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./std::abs(std::sin(Trt_HitTheta));
1250  } else if (HitPart == 2) { //EndCap
1251  length = 2*std::sqrt(4-Trt_Rtrack*Trt_Rtrack)*1./std::sqrt(1-std::sin(Trt_HitTheta)*std::sin(Trt_HitTheta)*std::cos(Trt_HitPhi-strawphi)*std::cos(Trt_HitPhi-strawphi));
1252  } else {
1253  // This should never happen
1254  throw std::runtime_error("Unknown barrel/endcap identifier: " + std::to_string(HitPart) + ". Must be 1(Barrel) or 2(Endcap)");
1255  }
1256 
1257  return length;
1258 }

◆ correctNormalization()

double TRT_ToT_dEdx::correctNormalization ( const EventContext &  ctx,
double  nVtx = -1 
) const
protected

correct overall dEdx normalization on track level

Parameters
numberof primary vertices per event
Returns
scaling variable

Definition at line 707 of file TRT_ToT_dEdx.cxx.

708 {
710  const TRTDedxcorrection* dEdxCorrection{*readHandle};
711  if(dEdxCorrection==nullptr) {
712  ATH_MSG_ERROR(" correctNormalization: Could not find any dEdxCorrection in CondStore. Return zero.");
713  return 0;
714  }
715 
716  EGasType gasType = static_cast<EGasType> (m_useTrackPartWithGasType);
718  if (nVtx<=0) nVtx=dEdxCorrection->normNzero[gasType];
719  double slope = dEdxCorrection->normSlopeTot[gasType];
720  double offset = dEdxCorrection->normOffsetTot[gasType];
721  if (m_divideByL){
722  slope = dEdxCorrection->normSlopeTotDivideByLength[gasType];
723  offset = dEdxCorrection->normOffsetTotDivideByLength[gasType];
724  }
725  double shift = dEdxCorrection->normOffsetData[gasType];
726  if(!m_isData)shift = 0;
727  return (slope*dEdxCorrection->normNzero[gasType]+offset)/(slope*nVtx+offset+shift);
728 }

◆ correctToT_corrRZ()

double TRT_ToT_dEdx::correctToT_corrRZ ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr,
double  length 
) const
protected

main function to correct ToT values on hit level as a function of track radius and z-position

Parameters
trackon surface object
boolvariable to specify whether ToT or ToT/L correction
boolvariable to specify whether data or MC correction
boolvariable whether correction should actually be applied
boolvariable 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.

734 {
735  const Trk::MeasurementBase* trkM = itr->measurementOnTrack();
736  const Trk::TrackParameters* trkP = itr->trackParameters();
737 
738  // Check if this is RIO on track
739  // annd if yes check if is TRT Drift Circle
740  // then set the ptr
741  const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
742  if (trkM && trkM->type(Trk::MeasurementBaseType::RIO_OnTrack)) {
743  const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(trkM);
745  driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
746  }
747  }
748 
749  if (!driftcircle) {
750  return 0;
751  }
752  if (driftcircle->prepRawData()==nullptr) {
753  return 0;
754  }
755 
756  Identifier DCId = driftcircle->identify();
757  double timeOverThreshold = driftcircle->prepRawData()->timeOverThreshold();
758  if(timeOverThreshold==0) {
759  ATH_MSG_WARNING("correctToT_corrRZ(const Trk::TrackStateOnSurface *itr):: ToT="<<timeOverThreshold<<". We must cut that hit in isGoodHit() !");
760  return 0;
761  }
762  int hitPart = m_trtId->barrel_ec(DCId);
763  int StrawLayer = m_trtId->straw_layer(DCId);
764  int Layer = m_trtId->layer_or_wheel(DCId);
765  double hitRtrack = std::abs(trkP->parameters()[Trk::locR]);
766  EGasType gasType = gasTypeInStraw(ctx,itr);
767  if(gasType==kUnset) {
768  ATH_MSG_ERROR("correctToT_corrRZ(const Trk::TrackStateOnSurface *itr):: Gas type in straw is kUnset! Return ToT = 0");
769  return 0;
770  }
771 
773  if(!m_corrected) return timeOverThreshold;
774  /* else correct */
775 
776  double hitZ = driftcircle->globalPosition().z();
777  double trackx = driftcircle->globalPosition().x();
778  double tracky = driftcircle->globalPosition().y();
779  double hitPosR = std::sqrt(trackx*trackx+tracky*tracky);
780 
783  double ToTmip = 1;
784  double valToT = 0;
785  if(m_divideByL){
786  if (abs(hitPart)==1) // Barrel
787  valToT = fitFuncBarrel_corrRZL(ctx,gasType, hitRtrack, hitZ, Layer, StrawLayer);
788  else // End-cap
789  valToT = fitFuncEndcap_corrRZL(ctx,gasType, hitRtrack, hitPosR, Layer, hitZ>0?1:(hitZ<0?-1:0));
790  }else{
791  if (abs(hitPart)==1) // Barrel
792  valToT = fitFuncBarrel_corrRZ(ctx,gasType, hitRtrack, hitZ, Layer, StrawLayer);
793  else // End-cap
794  valToT = fitFuncEndcap_corrRZ(ctx,gasType, hitRtrack, hitPosR, Layer, hitZ>0?1:(hitZ<0?-1:0));
795  }
796  if (std::isinf(valToT)) return 0.;
797  if (valToT!=0) return ToTmip*timeOverThreshold/valToT;
798  return 0.;
799 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation 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.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation 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.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ dEdx() [1/4]

virtual double ITRT_ToT_dEdx::dEdx

function to calculate sum ToT normalised to number of used hits

Parameters
trackpointer to track
useHitsHTdecide 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
Eventcontext ctx
trackpointer to track
useHitsHTdecide 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.

160 {
161  ATH_MSG_DEBUG("dEdx()");
162 
163  double nVtx=-1.;
164  // Event information
166  if(!eventInfoDecor.isPresent()) {
167  REPORT_MESSAGE(MSG::FATAL) << "EventInfo decoration not available!";
168  return 0;
169  }
170 
171  // Average interactions per crossing for the current BCID
172  // TODO: we should really not hard-code a mu to nVtx conversion
173  double mu = eventInfoDecor(0);
174  if(m_isData) {
175  nVtx = 1.3129 + 0.716194*mu + (-0.00475074)*mu*mu;
176  }
177  else {
178  nVtx = 1.0897 + 0.748287*mu + (-0.00421788)*mu*mu;
179  }
180 
181  if (!track) {
182  return 0;
183  }
184  const Trk::TrackStates* vtsos = track->trackStateOnSurfaces();
185  if (!vtsos) {
186  return 0;
187  }
188 
189  EGasType gasType;
191  Trk::TrackStates::const_iterator itre = vtsos->end();
192  size_t vtos_size = vtsos->size();
193  double correctionFactor = 1.;
194 
196  std::vector<double> vecToT;
197  vecToT.reserve(vtos_size);
198  double ToTsum = 0;
199 
200  for ( ; itr!=itre ; ++itr) {
201  double length = 0;
202  if ( isGoodHit(ctx,(*itr), useHitsHT, length)) {
203  double ToT_correct = correctToT_corrRZ(ctx,*itr, length);
204  if (m_correctionType == kHitBased){
205  correctionFactor = hitOccupancyCorrection(ctx,*itr);
206  ToT_correct*=correctionFactor;
207  }
208  vecToT.push_back(ToT_correct);
209  }
210  }
211 
212  sort(vecToT.begin(), vecToT.end());
213  size_t nhits = vecToT.size();
214 
215  if (m_divideByL) {
216  nhits-=m_nTrunkateHits;
217  }
218 
219  // Boost speed
220  if (nhits<1) return 0.0;
221 
222  ToTsum = std::accumulate(vecToT.begin(), vecToT.end(), 0);
223  if (m_correctionType == kTrackBased) {
224  correctionFactor=trackOccupancyCorrection(ctx,track, useHitsHT,localOccupancy);
225  } else {
226  correctionFactor=correctNormalization(ctx,nVtx);
227  }
228  ToTsum*=correctionFactor;
229  return ToTsum/nhits;
230  }
231 
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;
238 
241  "dEdX_Estimator():: Using m_toolScenario="
242  << m_toolScenario << " scenario m_useTrackPartWithGasType is set to"
244  << ", but kUnset is requiered. Check you tool configuration.");
245  }
246 
247  for ( ; itr!=itre ; ++itr) {
248  double length=0;
249  if (isGoodHit(ctx,(*itr), useHitsHT, length)) {
250  gasType=gasTypeInStraw(ctx,*itr);
251  double ToT_correct = correctToT_corrRZ(ctx,*itr, length);
252  if (m_correctionType == kHitBased) {
253  correctionFactor = hitOccupancyCorrection(ctx,*itr);
254  }
255  ToT_correct*=correctionFactor;
256  if(gasType==kXenon) {
257  vecToT_Xe.push_back(ToT_correct);
258  } else if (gasType==kArgon) {
259  vecToT_Ar.push_back(ToT_correct);
260  } else if (gasType==kKrypton) {
261  vecToT_Kr.push_back(ToT_correct);
262  } else {
263  ATH_MSG_ERROR("dEdX_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
264  }
265  }
266  }
267 
268  sort(vecToT_Xe.begin(), vecToT_Xe.end());
269  sort(vecToT_Ar.begin(), vecToT_Ar.end());
270  sort(vecToT_Kr.begin(), vecToT_Kr.end());
271 
272  size_t nhitsXe = vecToT_Xe.size();
273  size_t nhitsAr = vecToT_Ar.size();
274  size_t nhitsKr = vecToT_Kr.size();
275 
276  if (m_divideByL) {
278  if (nhitsXe>=m_nTrunkateHits) nhitsXe-=m_nTrunkateHits;
279  if (nhitsAr>=m_nTrunkateHits) nhitsAr-=m_nTrunkateHits;
280  if (nhitsKr>=m_nTrunkateHits) nhitsKr-=m_nTrunkateHits;
281  } else {// kAlgReweightTrunkOne
282  int trunkGas = kUnset;
283  double maxToT = 0.;
284  if (nhitsXe>0 && vecToT_Xe.at(nhitsXe-1)>maxToT) {
285  trunkGas = kXenon;
286  maxToT = vecToT_Xe.at(nhitsXe-1);
287  }
288  if(nhitsAr>0 && vecToT_Ar.at(nhitsAr-1)>maxToT){
289  trunkGas = kArgon;
290  maxToT = vecToT_Ar.at(nhitsAr-1);
291  }
292  if (nhitsKr>0 && vecToT_Kr.at(nhitsKr-1)>maxToT) {
293  trunkGas = kKrypton;
294  }
295 
296  if (trunkGas==kXenon) {
297  nhitsXe-=m_nTrunkateHits;
298  } else if (trunkGas==kArgon) {
299  nhitsAr-=m_nTrunkateHits;
300  } else if (trunkGas==kKrypton) {
301  nhitsKr-=m_nTrunkateHits;
302  }
303  }
304  }
305 
306  size_t nhits = nhitsXe + nhitsAr + nhitsKr;
307  if(nhits<1) return 0.0;
308 
309  double ToTsumXe = 0;
310  double ToTsumAr = 0;
311  double ToTsumKr = 0;
312  for (size_t i = 0; i < nhitsXe;i++) {
313  ToTsumXe+=vecToT_Xe[i];
314  }
315  for (size_t i = 0; i < nhitsAr;i++) {
316  ToTsumAr+=vecToT_Ar[i];
317  }
318  for (size_t i = 0; i < nhitsKr;i++) {
319  ToTsumKr+=vecToT_Kr[i];
320  }
321 
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;
326 
327  if (m_correctionType == kTrackBased) {
328  correctionFactor =
329  trackOccupancyCorrection(ctx, track, true, localOccupancy);
330  } else {
331  correctionFactor = correctNormalization(ctx, nVtx);
332  }
333  ToTsum *= correctionFactor;
334 
335  return ToTsum/nhits;
336  }
337 
338  ATH_MSG_ERROR("dEdX_Estimator():: m_toolScenario has wrong value "<<m_toolScenario<<"");
339  return 0.;
340 }

◆ dEdx() [3/4]

double ITRT_ToT_dEdx::dEdx ( const Trk::Track track,
bool  useHitsHT,
std::optional< float >  localOccupancy = std::nullopt 
) const
inlinevirtualinherited

Definition at line 91 of file ITRT_ToT_dEdx.h.

94 {
95  return dEdx(Gaudi::Hive::currentContext(), track, useHitsHT, localOccupancy);
96 }

◆ dEdx() [4/4]

double ITRT_ToT_dEdx::dEdx
inline

function to calculate sum ToT normalised to number of used hits

Parameters
trackpointer to track
useHitsHTdecide if HT hits should be used in the estimate
Returns
dEdx value

Definition at line 45 of file ITRT_ToT_dEdx.h.

94 {
95  return dEdx(Gaudi::Hive::currentContext(), track, useHitsHT, localOccupancy);
96 }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

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
zposition
layerindex
strawlayer index
boolvariable to specify whether data or MC correction
Returns
correction

Definition at line 802 of file TRT_ToT_dEdx.cxx.

808 {
809  if (Layer == 0 && StrawLayer < 9) {
810  return fitFuncBarrelShort_corrRZ(ctx,gasType, driftRadius, zPosition, StrawLayer);
811  }
812  return fitFuncBarrelLong_corrRZ(ctx,gasType, driftRadius, zPosition, Layer, StrawLayer);
813 }

◆ 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
zposition
layerindex
strawlayer index
desiredversion of ToT definition
boolvariable to specify whether data or MC correction
Returns
correction

Definition at line 1013 of file TRT_ToT_dEdx.cxx.

1019 {
1020  /*
1021  * T(r,z) = T0(r)+ b(r)*z*z
1022  */
1024  const TRTDedxcorrection* dEdxCorrection{*readHandle};
1025  if(dEdxCorrection==nullptr) {
1026  ATH_MSG_ERROR(" fitFuncBarrel_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
1027  return 0;
1028  }
1029 
1030  double a,b,c,d,e,f,g;
1031  if (Layer==0 && Strawlayer<9) { // short straws
1032  if (m_isData){
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];
1040  } else {
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];
1048  }
1049  } else {
1050  if (m_isData) {
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];
1058  } else {
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];
1066  }
1067  }
1068  double z = std::abs(zPosition);
1069  double r = std::abs(driftRadius);
1070  double T0neg=a;
1071  double T0pos=b;
1072  double T1 = std::exp(-c*r*r)+d*r;
1073  double slope = e*r+f*r*r+g*r*r*r;
1074  double result;
1075  result = T0neg+T1+slope*z;
1076  if (zPosition>0) result = T0pos+T1+slope*z;
1077 
1078  return result;
1079 }

◆ 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.

838 {
844  double z = std::abs(zPosition);
845  int sign=1;
846  if(zPosition<0)sign=-1;
847  double l = 704.6;
848  // define set of parameters for negative and positive z positions
849  double T0 = fitFuncPol_corrRZ(ctx,gasType, 0,driftRadius,Layer,StrawLayer,sign,0);
850  double v = fitFuncPol_corrRZ(ctx,gasType, 1,driftRadius,Layer,StrawLayer,sign,0);
851  double s = fitFuncPol_corrRZ(ctx,gasType, 2,driftRadius,Layer,StrawLayer,sign,0);
852  //_in theory_ For IEEE-compatible type double, argument causes exp to overflow if outside [-708.4, 709.8]
853  //however, overflow still seen when argument is 702; so I restrict these to -600, 600
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.;
857  }
858  return T0+(z/v)*std::exp(expArg);
859 }

◆ 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.

867 {
871  double z = std::abs(zPosition);
872  int sign=1;
873  if(zPosition<0)sign=-1;
874  double T0 = fitFuncPol_corrRZ(ctx,gasType, 0,driftRadius,0,StrawLayer,sign,1);
875  double b = fitFuncPol_corrRZ(ctx,gasType, 1,driftRadius,0,StrawLayer,sign,1);
876  return T0+b*z;
877 }

◆ 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
radialposition
strawlayer index
signfor positive or negative side
boolvariable 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.

822 {
826  double T0 = fitFuncPol_corrRZ(ctx,gasType, 0,driftRadius,Layer,0,sign,2);
827  double a = fitFuncPol_corrRZ(ctx,gasType, 1,driftRadius,Layer,0,sign,2);
828  return T0+a*radialPosition;
829 }

◆ 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
radialposition
strawlayer index
signfor positive or negative side
boolvariable to specify whether data or MC correction
Returns
correction

Definition at line 962 of file TRT_ToT_dEdx.cxx.

968 {
969  /*
970  * T(r,R) = T0(r)+ a(r)*R
971  */
972 
974  const TRTDedxcorrection* dEdxCorrection{*readHandle};
975  if(dEdxCorrection==nullptr) {
976  ATH_MSG_ERROR(" fitFuncEndcap_corrRZL: Could not find any dEdxCorrection in CondStore. Return zero.");
977  return 0;
978  }
979 
980  double r = std::abs(driftRadius);
981  double a,b,c,d,e,f,g,h,i;
982  if(sign >0) Layer+=14;
983  if(m_isData){
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];
993  }else{
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];
1003  }
1004 
1005  double T1 = b*r+c*r*r+d*r*r*r+e*r*r*r*r+f*r*r*r*r*r;
1006  double slope = g+h*r+i*r*r;
1007  double T0 = a;
1008 
1009  return T0+T1+slope*radialPosition;
1010 }

◆ 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.

888 {
890  const TRTDedxcorrection* dEdxCorrection{*readHandle};
891  if(dEdxCorrection==nullptr)
892  {
893  ATH_MSG_ERROR(" fitFuncPol_corrRZ: Could not find any dEdxCorrection in CondStore. Return zero.");
894  return 0;
895  }
896 
897  double a = 0;
898  double b = 0;
899  double c = 0;
900  double d = 0;
901  double e = 0;
902  double f = 0;
903  double r = driftRadius;
904  int offset = 0;
905  if(m_isData){
906  if(set==0){ // long straws in barrel
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];
913 
914  }else if (set ==1) { // short straws in barrel
915  if(sign > 0) offset+=108;
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];
922  }else{ // straws in endcap
923  if(sign >0) Layer+=14;
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];
930  }
931  }else{
932  if(set==0){ // long straws in barrel
933  if(sign > 0) offset=1620;
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];
940  }else if (set ==1) { // short straws in barrel
941  if(sign > 0) offset+=108;
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];
948  }else{ // straws in endcap
949  if(sign >0) Layer+=14;
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];
956  }
957  }
958  return a+b*r+c*r*r+d*r*r*r+e*r*r*r*r+f*r*r*r*r*r;
959 }

◆ gasTypeInStraw() [1/2]

TRT_ToT_dEdx::EGasType TRT_ToT_dEdx::gasTypeInStraw ( const EventContext &  ctx,
const InDet::TRT_DriftCircleOnTrack driftcircle 
) const
protected

Definition at line 672 of file TRT_ToT_dEdx.cxx.

675 {
676  Identifier DCid = driftcircle->identify();
677 
678  // getStatusHT returns enum {Undefined, Dead, Good, Xenon, Argon, Krypton, EmulatedArgon, EmulatedKrypton}.
679  // Our representation of 'GasType' is 0:Xenon, 1:Argon, 2:Krypton
680  EGasType GasType=kUnset; // kUnset is default
681  if (!m_TRTStrawSummaryTool.empty()) {
682  int stat = m_TRTStrawSummaryTool->getStatusHT(DCid,ctx);
683  if ( stat==2 || stat==3 ) { GasType = kXenon; } // Xe
684  else if ( stat==1 || stat==4 ) { GasType = kArgon; } // Ar
685  else if ( stat==5 ) { GasType = kKrypton; } // Kr
686  else if ( stat==6 ) { GasType = kArgon; } // Emulated Ar
687  else if ( stat==7 ) { GasType = kKrypton;
688  } // Emulated Kr
689  else {
691  "getStatusHT = "
692  << stat
693  << ", must be 'Good(2)||Xenon(3)' or 'Dead(1)||Argon(4)' or "
694  "'Krypton(5)' or 'EmulatedArgon(6)' or 'EmulatedKr(7)'!");
695  throw std::exception();
696  }
697  }
698 
699  return GasType;
700 }

◆ gasTypeInStraw() [2/2]

TRT_ToT_dEdx::EGasType TRT_ToT_dEdx::gasTypeInStraw ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr 
) const
protected

return gas type for that hit

Parameters
trackon surface object
Returns
gasType

Definition at line 645 of file TRT_ToT_dEdx.cxx.

647 {
648  const Trk::MeasurementBase* trkM = itr->measurementOnTrack();
649  if (!trkM) {
650  return kUnset;
651  }
652 
653  // Check if this is RIO on track
654  //annd if yes check if is TRT Drift Circle
655  //then set the ptr
656  const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
658  const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(trkM);
660  driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
661  }
662  }
663 
664  if (!driftcircle) {
665  return kUnset;
666  }
667 
668  return gasTypeInStraw(ctx,driftcircle);
669 }

◆ getAlgorithm()

int TRT_ToT_dEdx::getAlgorithm ( ) const
inline

Definition at line 374 of file TRT_ToT_dEdx.h.

374 { return m_toolScenario; }

◆ getCorrectionType()

bool TRT_ToT_dEdx::getCorrectionType ( ) const
inline

Definition at line 359 of file TRT_ToT_dEdx.h.

359 { return m_correctionType; }

◆ getGasTypeFordEdXCalculation()

int TRT_ToT_dEdx::getGasTypeFordEdXCalculation ( ) const
inline

Definition at line 371 of file TRT_ToT_dEdx.h.

371 { return m_useTrackPartWithGasType; }

◆ getMaxRtrack()

float TRT_ToT_dEdx::getMaxRtrack ( ) const
inline

Definition at line 365 of file TRT_ToT_dEdx.h.

365 { return m_trackConfig_maxRtrack; }

◆ getMinRtrack()

float TRT_ToT_dEdx::getMinRtrack ( ) const
inline

Definition at line 362 of file TRT_ToT_dEdx.h.

362 { return m_trackConfig_minRtrack; }

◆ getProb() [1/2]

double TRT_ToT_dEdx::getProb ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr,
const double  dEdx_obs,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis,
int  nUsedHits 
) const
protected

function to calculate likelihood from prediction and resolution

Parameters
observeddEdx
trackparameter
particlehypothesis
numberof used hits
Returns
brobability value between 0 and 1

Definition at line 422 of file TRT_ToT_dEdx.cxx.

428 {
429  EGasType gasType = gasTypeInStraw(ctx, itr);
430  return getProb(ctx,gasType, dEdx_obs, pTrk, hypothesis, nUsedHits);
431 }

◆ getProb() [2/2]

double TRT_ToT_dEdx::getProb ( const EventContext &  ctx,
EGasType  gasType,
const double  dEdx_obs,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis,
int  nUsedHits 
) const
protected

Definition at line 434 of file TRT_ToT_dEdx.cxx.

440 {
441  ATH_MSG_DEBUG("getProb():: gasTypeInStraw = "<<gasType<<"");
442 
444  const TRTDedxcorrection* dEdxCorrection{*readHandle};
445  if (dEdxCorrection==nullptr) {
446  ATH_MSG_ERROR(" getProb: Could not find any dEdxCorrection in CondStore. Return zero.");
447  return 0;
448  }
449 
450  if(gasType==kUnset) {
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.");
453  gasType = kXenon;
454  }
455 
456  double dEdx_pred = predictdEdx(ctx,gasType, pTrk, hypothesis);
457  if (dEdx_pred==0) return 0.0;
458  if (hypothesis==Trk::electron) {
459  // correction for pTrk in [MeV]
460  double factor = 1;
461  double correct = 1+factor*(0.045*log10(pTrk)+0.885-1);
462  dEdx_pred= dEdx_pred/correct;
463  }
464 
465  double Resolution =
466  dEdxCorrection->resolution[gasType][0] +
467  dEdxCorrection->resolution[gasType][1] * (nUsedHits + 0.5) +
468  dEdxCorrection->resolution[gasType][2] * (nUsedHits + 0.5) *
469  (nUsedHits + 0.5) +
470  dEdxCorrection->resolution[gasType][3] * (nUsedHits + 0.5) *
471  (nUsedHits + 0.5) * (nUsedHits + 0.5);
472  if (hypothesis == Trk::electron) {
473  Resolution =
474  dEdxCorrection->resolutionElectron[gasType][0] +
475  dEdxCorrection->resolutionElectron[gasType][1] * (nUsedHits + 0.5) +
476  dEdxCorrection->resolutionElectron[gasType][2] * (nUsedHits + 0.5) *
477  (nUsedHits + 0.5) +
478  dEdxCorrection->resolutionElectron[gasType][3] * (nUsedHits + 0.5) *
479  (nUsedHits + 0.5) * (nUsedHits + 0.5);
480  }
481 
482  double prob = std::exp( -0.5 * ( ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) *
483  ( ( dEdx_obs - dEdx_pred ) / (Resolution*dEdx_pred) ) )) ;
484 
485  ATH_MSG_DEBUG("getProb():: return "<<prob<<"");
486  return prob;
487 }

◆ getStatusCorrection()

bool TRT_ToT_dEdx::getStatusCorrection ( ) const
inline

Definition at line 356 of file TRT_ToT_dEdx.h.

356 { return m_corrected; }

◆ getStatusUseZeroRHitCut()

bool TRT_ToT_dEdx::getStatusUseZeroRHitCut ( ) const
inline

Definition at line 368 of file TRT_ToT_dEdx.h.

368 { return m_useZeroRHitCut; }

◆ getTest() [1/4]

double ITRT_ToT_dEdx::getTest ( const double  dEdx_obs,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis,
Trk::ParticleHypothesis  antihypothesis,
int  nUsedHits 
) const
inlinevirtualinherited

Definition at line 105 of file ITRT_ToT_dEdx.h.

110 {
111  return getTest(Gaudi::Hive::currentContext(),
112  dEdx_obs,
113  pTrk,
114  hypothesis,
115  antihypothesis,
116  nUsedHits);
117 }

◆ getTest() [2/4]

double ITRT_ToT_dEdx::getTest
inline

Definition at line 81 of file ITRT_ToT_dEdx.h.

110 {
111  return getTest(Gaudi::Hive::currentContext(),
112  dEdx_obs,
113  pTrk,
114  hypothesis,
115  antihypothesis,
116  nUsedHits);
117 }

◆ getTest() [3/4]

double TRT_ToT_dEdx::getTest ( const EventContext &  ctx,
const double  dEdx_obs,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis,
Trk::ParticleHypothesis  antihypothesis,
int  nUsedHits 
) const
finaloverridevirtual

function to calculate likelihood ratio test

Parameters
observeddEdx
trackparameter
particlehypothesis
antihypothesis
numberof used hits
Returns
test value between 0 and 1

Implements ITRT_ToT_dEdx.

Definition at line 490 of file TRT_ToT_dEdx.cxx.

496 {
497  ATH_MSG_DEBUG("getTest()");
498 
499  EGasType gasType = kUnset;
500  if ( dEdx_obs<=0. || pTrk<=0. || nUsedHits<=0 ) return 0.5;
501 
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) {
505  ATH_MSG_DEBUG("getTest():: return "<<Pone/(Pone+Ptwo)<<"");
506  return Pone/(Pone+Ptwo);
507  } else {
508  return 0.5;
509  }
510 }

◆ getTest() [4/4]

virtual double ITRT_ToT_dEdx::getTest

function to calculate likelihood ratio test

Parameters
Eventcontext ctx
observeddEdx
trackparameter
particlehypothesis
antihypothesis
numberof used hits
Returns
test value between 0 and 1

◆ hitOccupancyCorrection()

double TRT_ToT_dEdx::hitOccupancyCorrection ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr 
) const
private

Definition at line 1082 of file TRT_ToT_dEdx.cxx.

1084 {
1086  const TRTDedxcorrection* dEdxCorrection{*readHandle};
1087 
1088  const Trk::MeasurementBase* trkM = itr->measurementOnTrack();
1089 
1090  // Check if this is RIO on track
1091  // and if yes check if is TRT Drift Circle
1092  // then set the ptr
1093  const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
1094  if (trkM && trkM->type(Trk::MeasurementBaseType::RIO_OnTrack)) {
1095  const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(trkM);
1097  driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
1098  }
1099  }
1100 
1101  if (!driftcircle) {
1102  return 0.;
1103  }
1104 
1105  const Trk::TrackParameters* trkP = itr->trackParameters();
1106  Identifier DCId = driftcircle->identify();
1107  int isHT = driftcircle->highLevel();
1108  int isShared=0;
1109 
1110  const Trk::RIO_OnTrack* hit_trt = nullptr;
1111  if (trkM && trkM->type(Trk::MeasurementBaseType::RIO_OnTrack)) {
1112  hit_trt = static_cast<const Trk::RIO_OnTrack*>(trkM);
1113  }
1114 
1115  if (hit_trt) {
1116  if ( m_assoTool->isShared(*(hit_trt->prepRawData())) ) isShared=1;
1117  }
1118  int layer = m_trtId->layer_or_wheel(DCId);
1119  int phimodule = m_trtId->phi_module(DCId);
1120  int HitPart = m_trtId->barrel_ec(DCId);
1121  double Trt_HitTheta = trkP->parameters()[Trk::theta];
1122  double trackEta = -log(tan(Trt_HitTheta/2.0));
1123 
1124  double localOccupancy = m_localOccTool->LocalOccupancy(ctx, trackEta, phimodule);
1125  double ToTmip = 1;
1126  double valToT = 1.;
1127 
1128  double p0=0., p1=0., p2=0., p0_flat=0.;
1129 
1130  //the calibration array is structured as follows (hence the non intuitive numbers)
1131  //the first 36 parameters are for barrel, the last 168 for the endcap
1132  //each of these subarrays is divided into smaller subarrays of length 12 (barrel has 3 and endcap 14 layers)
1133  int nBarrelLayers = 3, nEndcapLayers = 14;
1134  //each layer has 3 parameters (function 2nd order), so a subarray for each layer has 3 parameters
1135  int nParametersPerLayer = 3;
1136  //this subarray for every layer exits for HT/LT hits, so 6 parameters
1137  int nHTConfigurations = 2;
1138  //this subarray exists for shared/non-shared hits, so 12 parameters
1139  int nSharedConfigurations = 2;
1140  int num =
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;
1150  //number for that given hit for non-shared conditions
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;
1157 
1158  p0 = dEdxCorrection->hitOccPar[num];
1159  p1 = dEdxCorrection->hitOccPar[num+1];
1160  p2 = dEdxCorrection->hitOccPar[num+2];
1161  p0_flat = dEdxCorrection->hitOccPar[num_flat];
1162 
1163  //fitting function is a polynomial 2nd order f(x)=a+b*x+x^2
1164  //Hence the tot value is divided by the value of the function
1165  //multiplied to the non-shared intercept
1166  valToT = p0_flat/(p0+p1*localOccupancy+p2*localOccupancy*localOccupancy);
1167 
1168  return ToTmip*valToT;
1169 }

◆ initialize()

StatusCode TRT_ToT_dEdx::initialize ( )
overridevirtual

AlgTool initailize method.

Definition at line 70 of file TRT_ToT_dEdx.cxx.

71 {
72 
73  MsgStream log(msgSvc(), name());
74 
75  // retrieve TRT-ID helper
76 
77  StatusCode sc = detStore()->retrieve(m_trtId, "TRT_ID");
78  if (sc.isFailure()){
79  ATH_MSG_ERROR ( "Could not get TRT_ID helper !" );
80  return StatusCode::FAILURE;
81  }
82 
83  // Initialize ReadHandleKey and ReadCondHandleKey
84  ATH_CHECK(m_rdhkEvtInfo.initialize());
86  ATH_CHECK(m_assoTool.retrieve());
87  ATH_CHECK( m_localOccTool.retrieve() );
88  ATH_CHECK(m_TRTStrawSummaryTool.retrieve());
89 
90  if (m_useTrackPartWithGasType > EGasType::kUnset ||
91  m_useTrackPartWithGasType < EGasType::kXenon) {
92  ATH_MSG_ERROR("Property TRT_dEdx_useTrackPartWithGasType has an invalid "
93  << "value: " << m_useTrackPartWithGasType);
94  return StatusCode::FAILURE;
95  }
96 
97  return StatusCode::SUCCESS;
98 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

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()

bool TRT_ToT_dEdx::isGoodHit ( const EventContext &  ctx,
const Trk::TrackStateOnSurface trackState,
bool  useHitsHT,
double &  length 
) const
protected

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
trackStatemeasurement on track
useHitsHTdecide if HT hits should be used in the estimate
lengthlength in straw
Returns
decision

Definition at line 101 of file TRT_ToT_dEdx.cxx.

105 {
106  const Trk::MeasurementBase* trkM = trackState->measurementOnTrack();
107  if (!trkM) {
108  return false;
109  }
110 
111  // Check if this is RIO on track
112  // and if yes check if is TRT Drift Circle
113  // then set the ptr
114  const InDet::TRT_DriftCircleOnTrack* driftcircle = nullptr;
116  const Trk::RIO_OnTrack* tmpRio = static_cast<const Trk::RIO_OnTrack*>(trkM);
118  driftcircle = static_cast<const InDet::TRT_DriftCircleOnTrack*>(tmpRio);
119  }
120  }
121 
122  if (!driftcircle) {
123  return false;
124  }
125 
126  const Trk::TrackParameters* trkP = trackState->trackParameters();
127  if(trkP==nullptr)return false;
128 
129  double Trt_Rtrack = std::abs(trkP->parameters()[Trk::locR]);
130  double Trt_RHit = std::abs(driftcircle->localParameters()[Trk::driftRadius]);
131  double error = std::sqrt(driftcircle->localCovariance()(Trk::driftRadius,Trk::driftRadius));
132 
133  if (trackState->type(Trk::TrackStateOnSurface::Outlier)) return false; //Outliers
134  if (m_useZeroRHitCut && Trt_RHit==0 && error>1.) return false; //Select precision hits only
135  if ((Trt_Rtrack >= m_trackConfig_maxRtrack) || (Trt_Rtrack <= m_trackConfig_minRtrack)) return false; // drift radius close to wire or wall
136 
138 
139  if (m_divideByL and length < 1.7) return false; // Length in the straw
140 
141  if (!useHitsHT) {
142  int TrtHl = driftcircle->highLevel();
143  if (TrtHl==1) return false;
144  }
145 
146  if (m_useTrackPartWithGasType != kUnset) { // don't preselect hits
147  if(m_useTrackPartWithGasType != gasTypeInStraw(ctx,trackState)) return false;
148  }
149 
150  if (driftcircle->prepRawData()->timeOverThreshold()==0.) return false; // If ToT for this hit equal 0, skip it.
151 
152  return true;
153 }

◆ mass()

double TRT_ToT_dEdx::mass ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr,
const double  pTrk,
double  dEdx 
) const
protected

function to extract most likely mass in bg [0,3]

Parameters
trackmomentum
measureddEdx
Returns
mass
Todo:
make failsafe

Definition at line 593 of file TRT_ToT_dEdx.cxx.

597 {
598  EGasType gasType = gasTypeInStraw(ctx,itr);
599 
600  ATH_MSG_DEBUG("mass(): gasTypeInStraw = "<<gasType<<"");
601 
603  const TRTDedxcorrection* dEdxCorrection{*readHandle};
604  if(dEdxCorrection==nullptr)
605  {
606  ATH_MSG_ERROR(" mass: Could not find any dEdxCorrection in CondStore. Return zero.");
607  return 0;
608  }
609 
610  if(gasType==kUnset)
611  {
612  ATH_MSG_WARNING("mass():: gasTypeInStraw set kUnset that is not allowed! Use gasTypeInStraw(*itr) to get gas type info for that hit first!");
613  ATH_MSG_WARNING("mass():: Now gasTypeInStraw sets to kXenon.");
614  gasType = kXenon;
615  }
616  // only for testing purposes!!!!
617  // note that dE/dx has to be corrected on track level first before value can be transferred to mass
618  // this has to be tuned on user level
620  static const double bg_min = 0.001;
621  static const double bg_max = 3; // maximal allowed bg
622 
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]) ) )";
626 
627  TF1 blumRolandi( "BR", blumRolandiFunction.c_str(), 0.7, 100000);
628 
629  blumRolandi.SetParameters(dEdxCorrection->paraDedxP1[gasType],
630  dEdxCorrection->paraDedxP2[gasType],
631  dEdxCorrection->paraDedxP3[gasType],
632  dEdxCorrection->paraDedxP4[gasType],
633  dEdxCorrection->paraDedxP5[gasType],
634  1.);
635  //blumRolandi.SetParameters(&dEdxCorrection->para_dEdx_BB);
636  double betaGamma = blumRolandi.GetX(dEdx, bg_min, bg_max);
637 
638  ATH_MSG_DEBUG("mass():: return "<<pTrk/betaGamma<<"");
639 
640  return pTrk/betaGamma;
641 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

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]

double TRT_ToT_dEdx::predictdEdx ( const EventContext &  ctx,
const Trk::TrackStateOnSurface itr,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis 
) const
protected

function to calculate expectation value for dEdx using BB fit

Parameters
trackmomentum
hypothesis
Returns
dEdx_pred

Definition at line 513 of file TRT_ToT_dEdx.cxx.

517 {
518  EGasType gasType = gasTypeInStraw(ctx, itr);
519  return predictdEdx(ctx,gasType, pTrk, hypothesis);
520 }

◆ predictdEdx() [2/2]

double TRT_ToT_dEdx::predictdEdx ( const EventContext &  ctx,
EGasType  gasType,
const double  pTrk,
Trk::ParticleHypothesis  hypothesis 
) const
protected
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.

527 {
528  ATH_MSG_DEBUG("predictdEdx(): gasTypeInStraw = " << gasType << "");
529 
531  const TRTDedxcorrection* dEdxCorrection{ *readHandle };
532  if (dEdxCorrection == nullptr) {
533  ATH_MSG_ERROR(" predictdEdx: Could not find any dEdxCorrection in "
534  "CondStore. Return zero.");
535  return 0;
536  }
537 
538  if (gasType == kUnset) {
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.");
543  gasType = kXenon;
544  }
545 
546  double mass = Trk::ParticleMasses::mass[hypothesis];
547 
548  double betaGamma = pTrk/mass;
550  // low momentum particle can create floating point error
551  // do we need the check in the log parameter in addition? will create CPU increase
552  // do we want to throw an assertion here?
553  if (pTrk < 100)
554  return 0;
555  if (m_divideByL) {
556  if (dEdxCorrection->paraDivideByLengthDedxP3[gasType] +
557  1. / (std::pow(betaGamma,
558  dEdxCorrection->paraDivideByLengthDedxP5[gasType])) <=
559  0)
560  return 0;
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] +
570  1. / (std::pow(
571  betaGamma,
572  dEdxCorrection->paraDivideByLengthDedxP5[gasType]))));
573  }
574  if (dEdxCorrection->paraDedxP3[gasType] +
575  1. / (std::pow(betaGamma, dEdxCorrection->paraDedxP5[gasType])) <=
576  0)
577  return 0;
578  return dEdxCorrection->paraDedxP1[gasType] /
579  std::pow(
580  std::sqrt((betaGamma * betaGamma) / (1. + (betaGamma * betaGamma))),
581  dEdxCorrection->paraDedxP4[gasType]) *
582  (dEdxCorrection->paraDedxP2[gasType] -
583  std::pow(
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]))));
588 
589  //return 0;
590 }

◆ renounce()

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> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ setAlgorithm()

void TRT_ToT_dEdx::setAlgorithm ( EstCalc  alg)
inline

Definition at line 373 of file TRT_ToT_dEdx.h.

373 { m_toolScenario=alg; }

◆ setCorrectionType()

void TRT_ToT_dEdx::setCorrectionType ( EOccupancyCorrection  value)
inline

Definition at line 358 of file TRT_ToT_dEdx.h.

358 { m_correctionType = value; }

◆ setDefaultConfiguration()

void TRT_ToT_dEdx::setDefaultConfiguration ( )

Definition at line 51 of file TRT_ToT_dEdx.cxx.

52 {
53  declareProperty("TRT_dEdx_divideByL",m_divideByL=true);
54  declareProperty("TRT_dEdx_corrected",m_corrected=true);
55  declareProperty("TRT_dEdx_correctionType",m_correctionType=kTrackBased);
56  declareProperty("TRT_dEdx_useTrackPartWithGasType",m_useTrackPartWithGasType=kUnset);
57  declareProperty("TRT_dEdx_toolScenario",m_toolScenario=kAlgReweightTrunkOne);
58  declareProperty("TRT_dEdx_trackConfig_maxRtrack",m_trackConfig_maxRtrack=1.85);
59  declareProperty("TRT_dEdx_trackConfig_minRtrack",m_trackConfig_minRtrack=0.15);
60  declareProperty("TRT_dEdx_useZeroRHitCut",m_useZeroRHitCut=true);
61  declareProperty("TRT_dEdx_isData",m_isData=true);
62 }

◆ setGasTypeFordEdXCalculation()

void TRT_ToT_dEdx::setGasTypeFordEdXCalculation ( EGasType  gasType)
inline

Definition at line 370 of file TRT_ToT_dEdx.h.

370 { m_useTrackPartWithGasType = gasType; }

◆ setMaxRtrack()

void TRT_ToT_dEdx::setMaxRtrack ( float  maxRtrack)
inline

Definition at line 364 of file TRT_ToT_dEdx.h.

364 { m_trackConfig_maxRtrack=maxRtrack;}

◆ setMinRtrack()

void TRT_ToT_dEdx::setMinRtrack ( float  minRtrack)
inline

Definition at line 361 of file TRT_ToT_dEdx.h.

361 { m_trackConfig_minRtrack=minRtrack;}

◆ setStatusCorrection()

void TRT_ToT_dEdx::setStatusCorrection ( bool  value)
inline

Definition at line 355 of file TRT_ToT_dEdx.h.

355 { m_corrected = value; }

◆ setStatusUseZeroRHitCut()

void TRT_ToT_dEdx::setStatusUseZeroRHitCut ( bool  value)
inline

Definition at line 367 of file TRT_ToT_dEdx.h.

367 { m_useZeroRHitCut = value; }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

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.

1176 {
1178  const TRTDedxcorrection* dEdxCorrection{*readHandle};
1179 
1180  double corr=-999.;
1181 
1182  double trackOcc = localOccupancy != std::nullopt
1183  ? *localOccupancy
1184  : m_localOccTool->LocalOccupancy(ctx, *track);
1185  const Trk::TrackParameters* perigee = track->perigeeParameters();
1186  const AmgVector(Trk::TrackParameters::dim)& parameterVector = perigee->parameters();
1187  double theta = parameterVector[Trk::theta];
1188  double trackEta = -log(tan(theta/2.0));
1189 
1190  // the correction constants were determined in 100 bins of 0.04 in the eta range between -2 and 2
1191  int index = int(25*(trackEta+2.)); // determine the bin of the corrections
1192  if (index < 0) index = 0; // lower bound corresponding to eta = -2
1193  else if (index > 99) index = 99; // upper bound corresponding to eta = +2
1194 
1195  //Function of the from f(x)=a+b*x+c*x^2 was used as a fitting function, separately for tracks with and without excluding HT hits
1196  if (useHitsHT) {
1197  corr=dEdxCorrection->trackOccPar0[index]+dEdxCorrection->trackOccPar1[index]*trackOcc+dEdxCorrection->trackOccPar2[index]*pow(trackOcc,2);
1198  } else {
1199  corr=dEdxCorrection->trackOccPar0NoHt[index]+dEdxCorrection->trackOccPar1NoHt[index]*trackOcc+dEdxCorrection->trackOccPar2NoHt[index]*pow(trackOcc,2);
1200  }
1201 
1202  if (corr != 0) {
1203  return 1./corr;
1204  }
1205  return 0.;
1206 }

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

◆ usedHits() [1/4]

virtual double ITRT_ToT_dEdx::usedHits

function to calculate number of used hits

Parameters
Eventcontext ctx
trackpointer
useHitsHTdecide 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
trackpointer
useHitsHTdecide 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.

346 {
347  ATH_MSG_DEBUG("usedHits()");
348  EGasType gasType = kUnset;
349 
350  if (!track) {
351  return 0;
352  }
353  const Trk::TrackStates* vtsos = track->trackStateOnSurfaces();
354  if (!vtsos) {
355  return 0;
356  }
357 
359  Trk::TrackStates::const_iterator itre = vtsos->end();
360 
362  int nhits =0;
363 
364  for ( ; itr!=itre ; ++itr) {
365  double length=0;
366  if (isGoodHit(ctx,(*itr), useHitsHT, length)) {
367  nhits++;
368  }
369  }
370  if (m_divideByL) nhits -= m_nTrunkateHits;
371  return nhits;
373  int nhits = 0;
374  int nhitsXe = 0;
375  int nhitsAr = 0;
376  int nhitsKr = 0;
377 
380  "usedHits_Estimator():: Using m_toolScenario="
381  << m_toolScenario << " scenario m_useTrackPartWithGasType is set to "
383  << ", but kUnset is required. Check you tool configuration.");
384  }
385 
386  for ( ; itr!=itre ; ++itr) {
387  double length=0;
388  if ( isGoodHit(ctx,(*itr), useHitsHT, length)) {
389  gasType=gasTypeInStraw(ctx,*itr);
390  if (gasType==kXenon) {
391  nhitsXe++;
392  } else if (gasType==kArgon) {
393  nhitsAr++;
394  } else if (gasType==kKrypton) {
395  nhitsKr++;
396  } else {
397  ATH_MSG_ERROR("usedHits_Estimator():: During scenario kAlgReweight variable gasTypeInStraw got value kUnset.");
398  }
399  }
400  }
401 
402  if (m_divideByL) {
404  if(nhitsXe>0) nhitsXe -= m_nTrunkateHits;
405  if(nhitsAr>0) nhitsAr -= m_nTrunkateHits;
406  if(nhitsKr>0) nhitsKr -= m_nTrunkateHits;
407  } else { // kAlgReweightTrunkOne
408  if(nhitsXe>0 || nhitsAr>0 || nhitsKr>0)
409  nhitsXe -= m_nTrunkateHits;
410  }
411  }
412 
413  nhits = nhitsXe + nhitsAr + nhitsKr;
414  return nhits;
415  }
416 
417  ATH_MSG_ERROR("usedHits_Estimator():: m_toolScenario has wrong value "<<m_toolScenario<<"");
418  return 0;
419 }

◆ usedHits() [3/4]

double ITRT_ToT_dEdx::usedHits ( const Trk::Track track,
bool  useHitsHT = true 
) const
inlinevirtualinherited

Definition at line 99 of file ITRT_ToT_dEdx.h.

100 {
101  return usedHits(Gaudi::Hive::currentContext(), track, useHitsHT);
102 }

◆ usedHits() [4/4]

double ITRT_ToT_dEdx::usedHits
inline

Definition at line 60 of file ITRT_ToT_dEdx.h.

100 {
101  return usedHits(Gaudi::Hive::currentContext(), track, useHitsHT);
102 }

Member Data Documentation

◆ m_assoTool

ToolHandle< Trk::IPRD_AssociationTool > TRT_ToT_dEdx::m_assoTool {this, "AssociationTool","InDet::InDetPRD_AssociationToolGangedPixels","PRD_AssociationTool"}
private

Definition at line 70 of file TRT_ToT_dEdx.h.

◆ m_corrected

bool TRT_ToT_dEdx::m_corrected {}
private

Definition at line 75 of file TRT_ToT_dEdx.h.

◆ m_correctionType

int TRT_ToT_dEdx::m_correctionType {}
private

Definition at line 80 of file TRT_ToT_dEdx.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_divideByL

bool TRT_ToT_dEdx::m_divideByL {}
private

Definition at line 76 of file TRT_ToT_dEdx.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_isData

bool TRT_ToT_dEdx::m_isData {}
private

Definition at line 91 of file TRT_ToT_dEdx.h.

◆ m_localOccTool

ToolHandle< InDet::ITRT_LocalOccupancy > TRT_ToT_dEdx::m_localOccTool {this, "TRT_LocalOccupancyTool","", "Local occupancy tool"}
private

Definition at line 71 of file TRT_ToT_dEdx.h.

◆ m_nTrunkateHits

unsigned int TRT_ToT_dEdx::m_nTrunkateHits = 1
private

Definition at line 99 of file TRT_ToT_dEdx.h.

◆ m_rdhkEvtInfo

SG::ReadDecorHandleKey<xAOD::EventInfo> TRT_ToT_dEdx::m_rdhkEvtInfo
private
Initial value:
{this
, "averageInteractionsPerCrossingKey"
, "EventInfo.averageInteractionsPerCrossing"
, "Decoration for Average Interaction Per Crossing"}

Definition at line 64 of file TRT_ToT_dEdx.h.

◆ m_ReadKey

SG::ReadCondHandleKey<TRTDedxcorrection> TRT_ToT_dEdx::m_ReadKey {this,"Dedxcorrection","Dedxcorrection","Dedx constants in-key"}
private

Definition at line 245 of file TRT_ToT_dEdx.h.

◆ m_toolScenario

int TRT_ToT_dEdx::m_toolScenario {}
private

Definition at line 79 of file TRT_ToT_dEdx.h.

◆ m_trackConfig_maxRtrack

float TRT_ToT_dEdx::m_trackConfig_maxRtrack {}
private

Definition at line 94 of file TRT_ToT_dEdx.h.

◆ m_trackConfig_minRtrack

float TRT_ToT_dEdx::m_trackConfig_minRtrack {}
private

Definition at line 95 of file TRT_ToT_dEdx.h.

◆ m_trtId

const TRT_ID* TRT_ToT_dEdx::m_trtId
private

Definition at line 68 of file TRT_ToT_dEdx.h.

◆ m_TRTStrawSummaryTool

ToolHandle<ITRT_StrawStatusSummaryTool> TRT_ToT_dEdx::m_TRTStrawSummaryTool

Definition at line 52 of file TRT_ToT_dEdx.h.

◆ m_useTrackPartWithGasType

int TRT_ToT_dEdx::m_useTrackPartWithGasType {}
private

Definition at line 78 of file TRT_ToT_dEdx.h.

◆ m_useZeroRHitCut

bool TRT_ToT_dEdx::m_useZeroRHitCut {}
private

Definition at line 97 of file TRT_ToT_dEdx.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
TRT_ToT_dEdx::m_isData
bool m_isData
Definition: TRT_ToT_dEdx.h:91
TRT_ToT_dEdx::m_TRTStrawSummaryTool
ToolHandle< ITRT_StrawStatusSummaryTool > m_TRTStrawSummaryTool
Definition: TRT_ToT_dEdx.h:52
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
TRT_ToT_dEdx::m_useZeroRHitCut
bool m_useZeroRHitCut
Definition: TRT_ToT_dEdx.h:97
TRT_ToT_dEdx::usedHits
virtual double usedHits(const EventContext &ctx, const Trk::Track *track, bool useHThits=true) const override final
function to calculate number of used hits
Definition: TRT_ToT_dEdx.cxx:343
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TRT_ToT_dEdx::isGoodHit
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...
Definition: TRT_ToT_dEdx.cxx:101
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDet::TRT_DriftCircleOnTrack::prepRawData
virtual const TRT_DriftCircle * prepRawData() const override final
returns the PrepRawData - is a TRT_DriftCircle in this scope
Definition: TRT_DriftCircleOnTrack.h:202
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
beamspotPlotBcids.k
k
Definition: beamspotPlotBcids.py:524
TRT_ToT_dEdx::kTrackBased
@ kTrackBased
Definition: TRT_ToT_dEdx.h:60
SGout2dot.alg
alg
Definition: SGout2dot.py:243
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TRT_ToT_dEdx::getProb
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
Definition: TRT_ToT_dEdx.cxx:422
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
TRT_ToT_dEdx::m_divideByL
bool m_divideByL
Definition: TRT_ToT_dEdx.h:76
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
TRT_ToT_dEdx::EGasType
EGasType
Definition: TRT_ToT_dEdx.h:61
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
TRT_ToT_dEdx::fitFuncBarrelShort_corrRZ
double fitFuncBarrelShort_corrRZ(const EventContext &ctx, EGasType gasType, double driftRadius, double zPosition, int StrawLayer) const
function called by fitFuncBarrel_corrRZ for short straws
Definition: TRT_ToT_dEdx.cxx:862
InDet::TRT_DriftCircle::timeOverThreshold
double timeOverThreshold() const
returns Time over threshold in ns
TRT_ToT_dEdx::kKrypton
@ kKrypton
Definition: TRT_ToT_dEdx.h:61
TRT_ToT_dEdx::m_useTrackPartWithGasType
int m_useTrackPartWithGasType
Definition: TRT_ToT_dEdx.h:78
accumulate
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Definition: FPGATrackSimMatrixAccumulator.cxx:22
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
TRT_ToT_dEdx::getTest
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
Definition: TRT_ToT_dEdx.cxx:490
TRT_ToT_dEdx::dEdx
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
Definition: TRT_ToT_dEdx.cxx:156
Trk::TrackStateOnSurface::measurementOnTrack
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
athena.value
value
Definition: athena.py:122
Trk::RIO_OnTrack::rioType
virtual bool rioType(RIO_OnTrackType::Type type) const =0
Method checking the Rio On Track type.
ITRT_ToT_dEdx::usedHits
virtual double usedHits(const EventContext &ctx, const Trk::Track *track, bool useHitsHT=true) const =0
function to calculate number of used hits
IOVDbNamespace::inRange
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.
Definition: IOVDbCoolFunctions.h:42
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
InDet::TRT_DriftCircleOnTrack::highLevel
bool highLevel() const
returns true if the high level threshold was passed
Definition: TRT_DriftCircleOnTrack.h:234
ITRT_ToT_dEdx::dEdx
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
Trk::locR
@ locR
Definition: ParamDefs.h:50
TRT_ToT_dEdx::trackOccupancyCorrection
double trackOccupancyCorrection(const EventContext &ctx, const Trk::Track *track, bool useHThits, std::optional< float > localOccupancy) const
Definition: TRT_ToT_dEdx.cxx:1172
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
xAOD::identifier
identifier
Definition: UncalibratedMeasurement_v1.cxx:15
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
covarianceTool.prob
prob
Definition: covarianceTool.py:678
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
InDet::TRT_DriftCircleOnTrack::detectorElement
virtual const InDetDD::TRT_BaseElement * detectorElement() const override final
returns the detector element, assoicated with the PRD of this class
Definition: TRT_DriftCircleOnTrack.h:224
Trk::ParametersCommon::dim
static constexpr int dim
Definition: ParametersCommon.h:50
std::sort
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:554
TRT_ToT_dEdx::kNewDB
@ kNewDB
Definition: TRT_ToT_dEdx.h:58
python.RingerConstants.Layer
Layer
Definition: RingerConstants.py:42
TRT_ToT_dEdx::fitFuncBarrelLong_corrRZ
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
Definition: TRT_ToT_dEdx.cxx:832
TRT_ToT_dEdx::kRSOnly
@ kRSOnly
Definition: TRT_ToT_dEdx.h:60
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
TRT_ToT_dEdx::correctToT_corrRZ
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
Definition: TRT_ToT_dEdx.cxx:731
TRT_ToT_dEdx::fitFuncBarrel_corrRZL
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
Definition: TRT_ToT_dEdx.cxx:1013
Trk::TrackStateOnSurface::type
bool type(const TrackStateOnSurfaceType type) const
Use this method to find out if the TSoS is of a certain type: i.e.
TRT_ToT_dEdx::kArgon
@ kArgon
Definition: TRT_ToT_dEdx.h:61
TRT_ToT_dEdx::kUnset
@ kUnset
Definition: TRT_ToT_dEdx.h:61
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TRT_ToT_dEdx::fitFuncBarrel_corrRZ
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
Definition: TRT_ToT_dEdx.cxx:802
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
TRT_ToT_dEdx::m_assoTool
ToolHandle< Trk::IPRD_AssociationTool > m_assoTool
Definition: TRT_ToT_dEdx.h:70
StdJOSetup.msgSvc
msgSvc
Provide convenience handles for various services.
Definition: StdJOSetup.py:36
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
beamspotman.n
n
Definition: beamspotman.py:731
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::electron
@ electron
Definition: ParticleHypothesis.h:27
extractSporadic.h
list h
Definition: extractSporadic.py:97
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
TRT_ToT_dEdx::m_correctionType
int m_correctionType
Definition: TRT_ToT_dEdx.h:80
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Trk::driftRadius
@ driftRadius
trt, straws
Definition: ParamDefs.h:59
TRT_ToT_dEdx::kHitBased
@ kHitBased
Definition: TRT_ToT_dEdx.h:60
calibdata.exception
exception
Definition: calibdata.py:496
ITRT_ToT_dEdx::getTest
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
TRT_ToT_dEdx::m_toolScenario
int m_toolScenario
Definition: TRT_ToT_dEdx.h:79
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:127
TRT_ToT_dEdx::m_trackConfig_minRtrack
float m_trackConfig_minRtrack
Definition: TRT_ToT_dEdx.h:95
TRTDedxcorrection
Definition: TRTDedxcorrection.h:9
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::MeasurementBase::type
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::ParametersBase
Definition: ParametersBase.h:55
TRT_ToT_dEdx::mass
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]
Definition: TRT_ToT_dEdx.cxx:593
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:866
TRT_ID::straw_layer
int straw_layer(const Identifier &id) const
Definition: TRT_ID.h:893
TRT_ToT_dEdx::kAlgStandard
@ kAlgStandard
Definition: TRT_ToT_dEdx.h:59
TRT_ToT_dEdx::kXenon
@ kXenon
Definition: TRT_ToT_dEdx.h:61
TRT_ToT_dEdx::kGlobal
@ kGlobal
Definition: TRT_ToT_dEdx.h:60
DataVector< const Trk::TrackStateOnSurface >
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:884
beamspotman.stat
stat
Definition: beamspotman.py:266
TRT_ToT_dEdx::m_rdhkEvtInfo
SG::ReadDecorHandleKey< xAOD::EventInfo > m_rdhkEvtInfo
Definition: TRT_ToT_dEdx.h:64
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
CxxUtils::set
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.
Definition: bitmask.h:224
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Trk::RIO_OnTrackType::TRT_DriftCircle
@ TRT_DriftCircle
Definition: RIO_OnTrack.h:59
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
TRT_ToT_dEdx::m_trtId
const TRT_ID * m_trtId
Definition: TRT_ToT_dEdx.h:68
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::ParticleMasses::mass
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:53
TRT_ToT_dEdx::m_ReadKey
SG::ReadCondHandleKey< TRTDedxcorrection > m_ReadKey
Definition: TRT_ToT_dEdx.h:245
TRT_ToT_dEdx::fitFuncEndcap_corrRZ
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
Definition: TRT_ToT_dEdx.cxx:816
TRT_ToT_dEdx::predictdEdx
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
Definition: TRT_ToT_dEdx.cxx:513
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
TRT_ToT_dEdx::kOldDB
@ kOldDB
Definition: TRT_ToT_dEdx.h:58
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TRT_ToT_dEdx::correctNormalization
double correctNormalization(const EventContext &ctx, double nVtx=-1) const
correct overall dEdx normalization on track level
Definition: TRT_ToT_dEdx.cxx:707
TRT_ToT_dEdx::m_trackConfig_maxRtrack
float m_trackConfig_maxRtrack
Definition: TRT_ToT_dEdx.h:94
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
TRT_ToT_dEdx::setDefaultConfiguration
void setDefaultConfiguration()
Definition: TRT_ToT_dEdx.cxx:51
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TRT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: TRT_ID.h:875
TRT_ToT_dEdx::calculateTrackLengthInStraw
static double calculateTrackLengthInStraw(const Trk::TrackStateOnSurface *trackState, const TRT_ID *identifier)
Definition: TRT_ToT_dEdx.cxx:1208
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
Trk::MeasurementBaseType::RIO_OnTrack
@ RIO_OnTrack
Definition: MeasurementBase.h:49
TRT_ToT_dEdx::m_localOccTool
ToolHandle< InDet::ITRT_LocalOccupancy > m_localOccTool
Definition: TRT_ToT_dEdx.h:71
REPORT_MESSAGE
#define REPORT_MESSAGE(LVL)
Report a message.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:365
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
beamspotCoolDiff.l
l
Definition: beamspotCoolDiff.py:354
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.PyAthena.v
v
Definition: PyAthena.py:157
TRT_ToT_dEdx::fitFuncPol_corrRZ
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
Definition: TRT_ToT_dEdx.cxx:880
DeMoScan.index
string index
Definition: DeMoScan.py:362
TRT_ToT_dEdx::fitFuncEndcap_corrRZL
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
Definition: TRT_ToT_dEdx.cxx:962
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRT_ToT_dEdx::m_corrected
bool m_corrected
Definition: TRT_ToT_dEdx.h:75
TRT_ToT_dEdx::hitOccupancyCorrection
double hitOccupancyCorrection(const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const
Definition: TRT_ToT_dEdx.cxx:1082
InDetDD::TRT_BaseElement::center
virtual const Amg::Vector3D & center() const override final
Element Surface: center of a straw layer.
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
TRT_ToT_dEdx::kAlgReweight
@ kAlgReweight
Definition: TRT_ToT_dEdx.h:59
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
timeOverThreshold
double timeOverThreshold(unsigned int m_word)
Definition: driftCircle.h:116
Trk::phi
@ phi
Definition: ParamDefs.h:81
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
InDet::TRT_DriftCircleOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
Definition: TRT_DriftCircleOnTrack.cxx:160
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
error
Definition: IImpactPoint3dEstimator.h:70
python.compressB64.c
def c
Definition: compressB64.py:93
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
TRT_ToT_dEdx::kAlgReweightTrunkOne
@ kAlgReweightTrunkOne
Definition: TRT_ToT_dEdx.h:59
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TRT_ToT_dEdx::gasTypeInStraw
EGasType gasTypeInStraw(const EventContext &ctx, const Trk::TrackStateOnSurface *itr) const
return gas type for that hit
Definition: TRT_ToT_dEdx.cxx:645
TauGNNUtils::Variables::Track::trackEta
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:475
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TRT_ToT_dEdx::m_nTrunkateHits
unsigned int m_nTrunkateHits
Definition: TRT_ToT_dEdx.h:99
InDetDD::TRT_BaseElement
Definition: TRT_BaseElement.h:57