ATLAS Offline Software
Loading...
Searching...
No Matches
BremPositionNtupleHelper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
6// BremPositionNtupleHelper.cxx
7// Source file for class BremPositionNtupleHelper
9// (c) ATLAS Detector software
11// Sebastian.Fleischmann@cern.ch
13
14
15//Gaudi
16#include "GaudiKernel/SmartDataPtr.h"
17#include "GaudiKernel/ITHistSvc.h"
18
19#include "GaudiKernel/ISvcLocator.h"
20#include "TTree.h"
21
22// Trk
24
25// added SUE
27#include "TrkSurfaces/Surface.h"
32
33// constructor
35 const std::string& t,
36 const std::string& n,
37 const IInterface* p )
38 :
39 AthAlgTool(t,n,p),
40 //m_trkParametersWarning(false),
41 m_bremX(nullptr),
42 m_bremY(nullptr),
43 m_bremZ(nullptr),
44 m_trkQoverP(nullptr),
45 m_thicknessInX0(nullptr),
46 m_dna(nullptr),
47 m_dnaDirection(nullptr),
48 m_trackStateIndices(nullptr)
49
50 {
51 declareInterface<IValidationNtupleHelperTool>(this);
52 //declareProperty("IgnoreMissingTrackCovarianceForPulls", mjo_ignoreMissTrkCov = false);
53}
54
55// destructor
57
58
63
64 m_bremX = new std::vector<float>();
65 m_bremY = new std::vector<float>();
66 m_bremZ = new std::vector<float>();
67 m_trkQoverP = new std::vector<float>();
68 m_thicknessInX0 = new std::vector<float>();
69 m_dna = new std::vector<float>();
70 m_dnaDirection = new std::vector<int>();
71 m_trackStateIndices = new std::vector<int>();
72
73 ATH_MSG_INFO ("initialize() successful in " << name());
74 return StatusCode::SUCCESS;
75}
76
81
82 delete m_bremX;
83 delete m_bremY;
84 delete m_bremZ;
85 delete m_trkQoverP;
86 delete m_thicknessInX0;
87 delete m_dna;
88 delete m_dnaDirection;
90
91 ATH_MSG_INFO ("finalize() successful in " << name());
92 return StatusCode::SUCCESS;
93}
94
95
100 TTree* tree,
101 const int& ) {
102
103 // add items
104 tree->Branch("BremEffectsX", &m_bremX);
105 tree->Branch("BremEffectsY", &m_bremY);
106 tree->Branch("BremEffectsZ", &m_bremZ);
107 tree->Branch("BremCurrentQoverP", &m_trkQoverP);
108 tree->Branch("BremThicknessInX0", &m_thicknessInX0);
109 tree->Branch("BremDnaValue", &m_dna);
110 tree->Branch("BremDnaDirection",&m_dnaDirection);
111 tree->Branch("BremToTrackStateIndex",&m_trackStateIndices);
112
113 ATH_MSG_VERBOSE ("added items to ntuple.");
114 return StatusCode::SUCCESS;
115}
116
122 const Trk::TrackParameters* /*trkPar*/,
123 const int&,
124 const bool& /*isOutlier*/) {
125
126 return StatusCode::SUCCESS;
127}
128
130 const int& ) {
131 m_bremX->clear();
132 m_bremY->clear();
133 m_bremZ->clear();
134 m_trkQoverP->clear();
135 m_thicknessInX0->clear();
136 m_dna->clear();
137 m_dnaDirection->clear();
138 m_trackStateIndices->clear();
139 return StatusCode::SUCCESS;
140
141}
142
143
145 const Trk::TrackStateOnSurface& tsos,
146 const int& bremToTrackIndex ) { // FIXME this abuses the interface even more
147
148 // check if state has brem to analyse
149 const Trk::MaterialEffectsBase* mEffect = tsos.materialEffectsOnTrack();
150 const Trk::EstimatedBremOnTrack* ebrot = dynamic_cast<const Trk::EstimatedBremOnTrack*>(mEffect);
151 const Trk::TrackParameters* tParameter = (tsos).trackParameters();
152 if (ebrot == nullptr || tParameter == nullptr) {
153 ATH_MSG_DEBUG ("Insufficient data to analyse brem. &TP="
154 << tParameter << " and &EB=" << ebrot);
155 return StatusCode::SUCCESS;
156 }
157
158 const Amg::Vector3D& gmom = tParameter->momentum();
159 const Amg::Vector3D& gpos = tParameter->position();
160 m_bremX->push_back( float(gpos.x()) );
161 m_bremY->push_back( float(gpos.y()) );
162 m_bremZ->push_back( float(gpos.z()) );
163 m_trkQoverP->push_back( (float) tParameter->parameters()[Trk::qOverP]);
164 m_thicknessInX0->push_back((float) mEffect->thicknessInX0());
165 float dna = gmom.mag() * sqrt(ebrot->sigmaQoverPsquared());
166 m_dna->push_back(dna);
167 m_dnaDirection->push_back(static_cast<int>(ebrot->searchDirection()));
168 m_trackStateIndices->push_back(bremToTrackIndex);
169
170 return StatusCode::SUCCESS;
171}
172
173
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
BremPositionNtupleHelper(const std::string &, const std::string &, const IInterface *)
std::vector< float > * m_trkQoverP
curvature q/p of track at brem UNIT:1/MeV
std::vector< float > * m_bremZ
global position Z of track at estimated brem surface UNIT:mm
virtual StatusCode addNtupleItems(TTree *tree, const int &detectorType)
add items to the ntuple and configure the helper tool: should be called once (per detector type) by t...
virtual StatusCode fillMeasurementData(const Trk::MeasurementBase *, const Trk::TrackParameters *, const int &detectorType, const bool &isOutlier)
fill hit position data
std::vector< float > * m_bremX
global position X of track at estimated brem surface UNIT:mm
std::vector< float > * m_dna
DNA-value q*sigma2(q/p) as additional noise term UNIT:1.
std::vector< int > * m_dnaDirection
DNA-direction along momentum (1) opposite (-1) or both (0) UNIT:alongP:1.
virtual StatusCode resetVariables(const int &detectorType)
reset ntuple variables
std::vector< int > * m_trackStateIndices
index of track state in full nHits vector
std::vector< float > * m_thicknessInX0
thickness of material layer at brem UNIT:fraction of X0
virtual StatusCode fillHoleData(const Trk::TrackStateOnSurface &, const int &)
fill special data about holes on track (here: do nothing)
std::vector< float > * m_bremY
global position Y of track at estimated brem surface UNIT:mm
class holding information about momentum reduction and an additional noise term due to significant en...
double sigmaQoverPsquared() const
returns the additional noise term
SearchDirection searchDirection() const
returns if the brem was discovered with a particular search direction
base class to integrate material effects on Trk::Track in a flexible way.
double thicknessInX0() const
returns the actually traversed material .
This class is the pure abstract base class for all fittable tracking measurements.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
represents the track state (measurement, material, fit parameters and quality) at a surface.
const MaterialEffectsBase * materialEffectsOnTrack() const
return material effects const overload
Eigen::Matrix< double, 3, 1 > Vector3D
@ qOverP
perigee
Definition ParamDefs.h:67
ParametersBase< TrackParametersDim, Charged > TrackParameters
TChain * tree