ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::SiZvertexMaker_xk Class Referencefinal

Class for primary vertices z-coordinates generation (xKalman algorithm) More...

#include <SiZvertexMaker_xk.h>

Inheritance diagram for InDet::SiZvertexMaker_xk:
Collaboration diagram for InDet::SiZvertexMaker_xk:

Public Member Functions

Standard tool methods
 SiZvertexMaker_xk (const std::string &, const std::string &, const IInterface *)
virtual ~SiZvertexMaker_xk ()=default
virtual StatusCode initialize () override
virtual StatusCode finalize () override
Methods to initialize tool for new event or region
virtual std::list< Trk::VertexnewEvent (const EventContext &ctx, SiSpacePointsSeedMakerEventData &data) const override
virtual std::list< Trk::VertexnewRegion (const EventContext &ctx, SiSpacePointsSeedMakerEventData &data, const std::vector< IdentifierHash > &, const std::vector< IdentifierHash > &) const override
virtual std::list< Trk::VertexnewRegion (const EventContext &ctx, SiSpacePointsSeedMakerEventData &data, const std::vector< IdentifierHash > &, const std::vector< IdentifierHash > &, const IRoiDescriptor &) const override
Print internal tool parameters and status
virtual MsgStream & dump (MsgStream &out) const override

Protected Attributes

Tool handles
ToolHandle< InDet::ISiSpacePointsSeedMakerm_seedsgenerator {this, "SeedMakerTool", "InDet::SiSpacePointsSeedMaker_ATLxk"}

Properties

IntegerProperty m_nspoint {this, "SeedSize", 2}
IntegerProperty m_histsize {this, "HistSize", 500}
IntegerProperty m_mincontent {this, "minContent", 20}
DoubleProperty m_zmin {this, "Zmin", -250.}
DoubleProperty m_zmax {this, "Zmax", +250.}
DoubleProperty m_ratio {this, "minRatio", 0.25}
std::list< Trk::Vertexproduction (const EventContext &ctx, SiSpacePointsSeedMakerEventData &data) const
MsgStream & dumpConditions (MsgStream &out) const

Detailed Description

Class for primary vertices z-coordinates generation (xKalman algorithm)

In AthenaMT, event dependent cache inside SiZvertexMaker_xk is not preferred. SiSpacePointsSeedMakerEventData class holds event dependent data for SiZvertexMaker_xk and ISiSpacePointsSeedMaker. Its object is instantiated in SiSPSeededTrackFinder::execute.

Definition at line 49 of file SiZvertexMaker_xk.h.

Constructor & Destructor Documentation

◆ SiZvertexMaker_xk()

InDet::SiZvertexMaker_xk::SiZvertexMaker_xk ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 27 of file SiZvertexMaker_xk.cxx.

29 : base_class(t, n, p)
30{
31}

◆ ~SiZvertexMaker_xk()

virtual InDet::SiZvertexMaker_xk::~SiZvertexMaker_xk ( )
virtualdefault

Member Function Documentation

◆ dump()

MsgStream & InDet::SiZvertexMaker_xk::dump ( MsgStream & out) const
overridevirtual

Definition at line 220 of file SiZvertexMaker_xk.cxx.

221{
222 out << std::endl;
223 return dumpConditions(out);
224}
MsgStream & dumpConditions(MsgStream &out) const

◆ dumpConditions()

MsgStream & InDet::SiZvertexMaker_xk::dumpConditions ( MsgStream & out) const
protected

Definition at line 230 of file SiZvertexMaker_xk.cxx.

231{
232 int n = 62-m_seedsgenerator.type().size();
233 std::string s1;
234 for (int i=0; i<n; ++i) s1.append(" ");
235 s1.append("|");
236
237 out<<"|----------------------------------------------------------------------"
238 <<"-------------------|"
239 <<std::endl;
240 out<<"| SP seeds maker tool | "
241 <<m_seedsgenerator.type()<<s1<<std::endl;
242 out<<"| Histogram size | "
243 <<std::setw(12)<<m_histsize
244 <<" |"<<std::endl;
245 out<<"| SP seed length (2 or 3) | "
246 <<std::setw(12)<<m_nspoint
247 <<" |"<<std::endl;
248 out<<"| min content of hist.bin | "
249 <<std::setw(12)<<m_mincontent
250 <<" |"<<std::endl;
251 out<<"| min vertex Z-coordinate | "
252 <<std::setw(12)<<std::setprecision(4)<<m_zmin
253 <<" |"<<std::endl;
254 out<<"| max vertex Z-coordinate | "
255 <<std::setw(12)<<std::setprecision(4)<<m_zmax
256 <<" |"<<std::endl;
257 out<<"| min. ratio to max bin | "
258 <<std::setw(12)<<std::setprecision(4)<<m_ratio
259 <<" |"<<std::endl;
260 out<<"|----------------------------------------------------------------------"
261 <<"-------------------|"
262 <<std::endl;
263
264 return out;
265}
ToolHandle< InDet::ISiSpacePointsSeedMaker > m_seedsgenerator

◆ finalize()

StatusCode InDet::SiZvertexMaker_xk::finalize ( )
overridevirtual

Definition at line 52 of file SiZvertexMaker_xk.cxx.

53{
54 return AlgTool::finalize();
55}

◆ initialize()

StatusCode InDet::SiZvertexMaker_xk::initialize ( )
overridevirtual

Definition at line 37 of file SiZvertexMaker_xk.cxx.

38{
39 // Get tool for seed generator
40 //
41 ATH_CHECK(m_seedsgenerator.retrieve());
42
43 dump(msg(MSG::DEBUG));
44
45 return StatusCode::SUCCESS;
46}
#define ATH_CHECK
Evaluate an expression and check for errors.
virtual MsgStream & dump(MsgStream &out) const override
MsgStream & msg
Definition testRead.cxx:32

◆ newEvent()

std::list< Trk::Vertex > InDet::SiZvertexMaker_xk::newEvent ( const EventContext & ctx,
SiSpacePointsSeedMakerEventData & data ) const
overridevirtual

Definition at line 61 of file SiZvertexMaker_xk.cxx.

62{
63 m_seedsgenerator->newEvent(ctx, data);
64 return production(ctx, data);
65}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
std::list< Trk::Vertex > production(const EventContext &ctx, SiSpacePointsSeedMakerEventData &data) const

◆ newRegion() [1/2]

std::list< Trk::Vertex > InDet::SiZvertexMaker_xk::newRegion ( const EventContext & ctx,
SiSpacePointsSeedMakerEventData & data,
const std::vector< IdentifierHash > & vPixel,
const std::vector< IdentifierHash > & vSCT ) const
overridevirtual

Definition at line 71 of file SiZvertexMaker_xk.cxx.

74{
75 m_seedsgenerator->newRegion(ctx, data, vPixel, vSCT);
76 return production(ctx, data);
77}

◆ newRegion() [2/2]

std::list< Trk::Vertex > InDet::SiZvertexMaker_xk::newRegion ( const EventContext & ctx,
SiSpacePointsSeedMakerEventData & data,
const std::vector< IdentifierHash > & vPixel,
const std::vector< IdentifierHash > & vSCT,
const IRoiDescriptor & PhEt ) const
overridevirtual

Definition at line 83 of file SiZvertexMaker_xk.cxx.

87{
88 m_seedsgenerator->newRegion(ctx, data, vPixel, vSCT, PhEt);
89 return production(ctx, data);
90}

◆ production()

std::list< Trk::Vertex > InDet::SiZvertexMaker_xk::production ( const EventContext & ctx,
SiSpacePointsSeedMakerEventData & data ) const
protected

Definition at line 96 of file SiZvertexMaker_xk.cxx.

98{
99 std::list<Trk::Vertex> vertices;
100
101 std::vector<int> histogram(m_histsize+1, 0);
102 std::vector<double> z_histogram(m_histsize+1, 0.);
103
104 double sZ = static_cast<double>(m_histsize)/(m_zmax-m_zmin);
105
106 std::list<int> NMAX;
107 std::list<double> ZMAX;
108 const Trk::SpacePoint* p0 = nullptr;
109
110 std::list<Trk::Vertex> lv;
111
112 if (m_nspoint==2) m_seedsgenerator->find2Sp(data, lv);
113 else if (m_nspoint==3) m_seedsgenerator->find3Sp(ctx, data, lv);
114 else m_seedsgenerator->findVSp(ctx, data, lv);
115
116 const InDet::SiSpacePointsSeed* seed = nullptr;
117 std::multimap<int,double> ver;
118
119 int nmax = 0 ;
120 int Hmax = 0 ;
121 double zmax = 0.;
122
123 while ((seed = m_seedsgenerator->next(ctx, data))) {
124
125 std::vector<const Trk::SpacePoint*>::const_iterator
126 s = seed->spacePoints().begin();
127 ++s;
128 if ((*s)!=p0) {
129 if (Hmax!=0) {
130 NMAX.push_back(nmax);
131 ZMAX.push_back(zmax);
132 }
133 Hmax = nmax = 0;
134 p0=(*s);
135 }
136 int n = static_cast<int>((seed->zVertex()-m_zmin)*sZ);
137 if (n>=0 && n<=m_histsize) {
138 if (++histogram[n]>Hmax) {
139 Hmax = histogram[n];
140 nmax = n;
141 zmax = seed->zVertex();
142 }
143 }
144 }
145
146 // Clear histogram
147 //
148 for (int i=0; i<=m_histsize; ++i) histogram[i] = 0;
149
150 // Fill histogram again using NMAX information
151 //
152 std::list<int> ::iterator m, me = NMAX.end();
153 std::list<double>::iterator z = ZMAX.begin();
154 for (m=NMAX.begin(); m!=me; ++m) {
155 ++histogram[(*m)];
156 z_histogram[(*m)] += (*z++);
157 }
158
159 // Max. content seach and output bank Z coordinates of vertices production
160 //
161 int HiZm = 0;
162 int im = 0;
163 int i = 1;
164 while (true) {
165
166 if (histogram[i]>=histogram[i-1] && histogram[i]>=histogram[i+1]) {
167 int H3 = histogram[i-1]+histogram[i]+histogram[i+1];
168 if (H3>HiZm) {
169 HiZm=H3;
170 im=i;
171 }
172 if (++i==m_histsize) break;
173 }
174 if (++i==m_histsize) break;
175 }
176
177 if (im==0 || HiZm < m_mincontent) {
178
179 return vertices;
180 }
181 double zv = (z_histogram[im]+z_histogram[im-1]+z_histogram[im+1])/static_cast<double>(HiZm);
182 ver.insert(std::make_pair(-HiZm, zv));
183
184 // Z-vertex coordinates
185 //
186 HiZm = static_cast<int>(m_ratio*static_cast<double>(HiZm));
187 if (HiZm<m_mincontent) HiZm = m_mincontent;
188 i = 1;
189 while (true) {
190 if (histogram[i]>=histogram[i-1] && histogram[i]>=histogram[i+1] && i!=im) {
191 int H3 = histogram[i-1]+histogram[i]+histogram[i+1];
192 if (H3>=HiZm) {
193 zv = (z_histogram[i]+z_histogram[i-1]+z_histogram[i+1])/static_cast<double>(H3);
194 ver.insert(std::make_pair(-H3, zv));
195 }
196 if (++i==m_histsize) break;
197 }
198 if (++i==m_histsize) break;
199 }
200
201 if (!ver.empty()) {
202 std::multimap<int, double>::iterator v = ver.begin(), ve = ver.end();
203 for (; v!=ve; ++v) {
204 Amg::Vector3D Vp(0., 0., (*v).second);
205 Trk::Vertex Ver(Vp);
206 vertices.push_back(Ver);
207 }
208 }
209
210 dump(msg(MSG::DEBUG));
211
212 return vertices;
213}
const int NMAX
const int nmax(200)
#define z
std::string histogram
Definition chains.cxx:52
Eigen::Matrix< double, 3, 1 > Vector3D

Member Data Documentation

◆ m_histsize

IntegerProperty InDet::SiZvertexMaker_xk::m_histsize {this, "HistSize", 500}
protected

Definition at line 105 of file SiZvertexMaker_xk.h.

105{this, "HistSize", 500};

◆ m_mincontent

IntegerProperty InDet::SiZvertexMaker_xk::m_mincontent {this, "minContent", 20}
protected

Definition at line 106 of file SiZvertexMaker_xk.h.

106{this, "minContent", 20};

◆ m_nspoint

IntegerProperty InDet::SiZvertexMaker_xk::m_nspoint {this, "SeedSize", 2}
protected

Definition at line 104 of file SiZvertexMaker_xk.h.

104{this, "SeedSize", 2};

◆ m_ratio

DoubleProperty InDet::SiZvertexMaker_xk::m_ratio {this, "minRatio", 0.25}
protected

Definition at line 109 of file SiZvertexMaker_xk.h.

109{this, "minRatio", 0.25};

◆ m_seedsgenerator

ToolHandle<InDet::ISiSpacePointsSeedMaker> InDet::SiZvertexMaker_xk::m_seedsgenerator {this, "SeedMakerTool", "InDet::SiSpacePointsSeedMaker_ATLxk"}
protected

Definition at line 98 of file SiZvertexMaker_xk.h.

99{this, "SeedMakerTool", "InDet::SiSpacePointsSeedMaker_ATLxk"};

◆ m_zmax

DoubleProperty InDet::SiZvertexMaker_xk::m_zmax {this, "Zmax", +250.}
protected

Definition at line 108 of file SiZvertexMaker_xk.h.

108{this, "Zmax", +250.};

◆ m_zmin

DoubleProperty InDet::SiZvertexMaker_xk::m_zmin {this, "Zmin", -250.}
protected

Definition at line 107 of file SiZvertexMaker_xk.h.

107{this, "Zmin", -250.};

The documentation for this class was generated from the following files: