38 int numRow(
int numVertex) {
44 bool signFlipTreatment) {
46 int numbRow=numRow(numVertex);
53 CxxUtils::sincos sc_theta (
theta);
54 CxxUtils::sincos sc_phi (
phi);
56 dist=myPosition[numbRow];
57 if (fabs(dist)*sc_theta.sn>300.) {
58 dist=dist/fabs(dist)*300./sc_theta.sn;
61 if (signFlipTreatment) {
69 yv+dist*sc_phi.sn*sc_theta.sn,
84 declareInterface< JetFitterInitializationHelper >(
this) ;
100 return StatusCode::FAILURE;
104 return StatusCode::SUCCESS;
126 std::vector<Trk::VxTrackAtVertex*>* setOfTracks=myJetCandidate->
vxTrackAtVertex();
128 std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkBegin=vectorOfLink.begin();
129 std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkEnd=vectorOfLink.end();
131 for (std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkIter=vectorOfLinkBegin;
132 vectorOfLinkIter!=vectorOfLinkEnd;++vectorOfLinkIter)
134 std::vector<Trk::VxTrackAtVertex*> temp_vector_tracksAtVertex;
136 temp_vector_tracksAtVertex.push_back(newVxTrack);
137 setOfTracks->push_back(newVxTrack);
187 if (primaryVertex==
nullptr) {
188 std::cout <<
"ERROR. No valid primary vertex pointer provided to the JetFitterInitializationHelper." << std::endl;
189 throw std::runtime_error (
"No valid primary vertex pointer provided to the JetFitterInitializationHelper.");
196 if (jetdirection!=
nullptr) {
200 std::cout <<
"JetFitterInitializationHelper: Error! no starting jet direction provided. Using (0,0)" << std::endl;
221 AmgSymMatrix(3) primaryCovariance(primaryVertex->covariancePosition().block<3,3>(0,0));
222 AmgSymMatrix(5) startCovariance; startCovariance.setZero();
223 startCovariance.block<3,3>(0,0) = primaryCovariance;
225 std::pow(phiAndThetaError.second*sin(startPosition(
Trk::jet_theta)),2);
237 if (linearizationjetdirection!=
nullptr) {
240 linPosition[
Trk::jet_phi]=linearizationjetdirection->phi();
243 linVertexPositions = std::move(startRecVertexPositions);
254 if (primaryVertexJC==
nullptr) {
268 return myJetCandidate;
274 const std::vector<VxVertexOnJetAxis*> & associatedVertices=myJetCandidate->
getVerticesOnJetAxis();
276 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxBegin=associatedVertices.begin();
277 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxEnd=associatedVertices.end();
282 if (!associatedVertices.empty()) {
283 for (std::vector<VxVertexOnJetAxis*>::const_iterator VtxIter=VtxBegin;VtxIter!=VtxEnd;++VtxIter) {
285 if (myVertex!=
nullptr) {
289 std::cout <<
"Warning in JetFitterInitializationHelper.Inconsistency found. Pointer to VxVertexOnJetAxis should be different from zero. Skipping track..." << std::endl;
290 throw std::runtime_error (
"Warning in JetFitterInitializationHelper.Inconsistency found. Pointer to VxVertexOnJetAxis should be different from zero. Skipping track...");
297 if (numRow(numTrack)>sizeOfRecVertex) {
304 Amg::VectorX newPosition(numRow(numTrack)); newPosition.setZero();
305 newPosition.segment(0,myPosition.rows()) = myPosition;
306 Amg::MatrixX newCovariance(numRow(numTrack),numRow(numTrack));
307 newCovariance.setZero();
308 newCovariance.block(0,0,myCovariance.rows(),myCovariance.cols()) = myCovariance;
309 for (
int i=sizeOfRecVertex;i<numRow(numTrack);++i) {
310 newCovariance(i,i)=500.*500.;
320 Amg::VectorX newPositionLinearization(numRow(numTrack));
321 newPositionLinearization.setZero();
322 newPositionLinearization.segment(0,myPositionLinearization.rows()) = myPositionLinearization;
328 }
else if (numRow(numTrack)<sizeOfRecVertex) {
329 std::cout <<
"Strange: size of RecVertexPosition's position in JetFitterInitializationHelper is bigger than actual numTracks plus 5. CHECK..." << std::endl;
330 throw std::runtime_error (
"Strange: size of RecVertexPosition's position in JetFitterInitializationHelper is bigger than actual numTracks plus 5. CHECK...");
338 bool signFlipTreatment,
339 double maxdistance)
const {
345 const std::vector<VxTrackAtVertex*> & primaryVectorTracks=myPrimary->
getTracksAtVertex();
350 const std::vector<VxTrackAtVertex*>::const_iterator primaryVectorTracksBegin=primaryVectorTracks.begin();
351 const std::vector<VxTrackAtVertex*>::const_iterator primaryVectorTracksEnd=primaryVectorTracks.end();
353 for (std::vector<VxTrackAtVertex*>::const_iterator primaryVectorIter=primaryVectorTracksBegin;
354 primaryVectorIter!=primaryVectorTracksEnd;++primaryVectorIter) {
360 if (linTrack!=
nullptr) {
374 const std::vector<VxVertexOnJetAxis*> & associatedVertices=myJetCandidate->
getVerticesOnJetAxis();
376 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxBegin=associatedVertices.begin();
377 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxEnd=associatedVertices.end();
379 for (std::vector<VxVertexOnJetAxis*>::const_iterator VtxIter=VtxBegin;VtxIter!=VtxEnd;++VtxIter) {
381 int numVertex=(*VtxIter)->getNumVertex();
382 Amg::Vector3D secondaryVertexPos(getSingleVtxPositionWithSignFlip(myPosition,numVertex,signFlipTreatment));
386 const std::vector<VxTrackAtVertex*> & tracksAtVertex=(*VtxIter)->getTracksAtVertex();
388 const std::vector<VxTrackAtVertex*>::const_iterator TracksBegin=tracksAtVertex.begin();
389 const std::vector<VxTrackAtVertex*>::const_iterator TracksEnd=tracksAtVertex.end();
391 for (std::vector<VxTrackAtVertex*>::const_iterator TrackVectorIter=TracksBegin;
392 TrackVectorIter!=TracksEnd;++TrackVectorIter) {
396 if (linTrack!=
nullptr) {
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define AmgSymMatrix(dim)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
double chiSquared() const
returns the of the overall track fit
ToolHandle< IVertexLinearizedTrackFactory > m_linearizedFactory
float m_erretaJetAxis
Error on eta on the flight direction you want to initialize the fit with (set erretaJetAxis by JobOpt...
virtual StatusCode initialize() override
~JetFitterInitializationHelper()
Destructor.
VxJetCandidate * initializeJetCandidate(const std::vector< const Trk::ITrackLink * > &vectorOfLink, const RecVertex *primaryVertex, const Amg::Vector3D *jetdirection=0, const Amg::Vector3D *linearizationjetdirection=0) const
Initialize the JetCandidate using a vector of Trk::ITrackLink* - needed for example if you run on ESD...
void linearizeAllTracks(VxJetCandidate *, bool signfliptreatment=false, double maxdistance=1.) const
Calls the linearization of all the tracks (adds the Linearized Track data member to every VxTrackAtVe...
static void updateTrackNumbering(VxJetCandidate *)
Does the update of the ordering of the vertices along the jetaxis.
VxJetCandidate * initializeJetClusters(VxJetCandidate *myJetCandidate, const RecVertex *primaryVertex, const Amg::Vector3D *jetdirection=0, const Amg::Vector3D *linearizationjetdirection=0) const
Internal method to initialized a VxJetCandidate.
float m_errphiJetAxis
Error on phi on the flight direction you want to initialize the fit with (set errphiJetAxis by JobOpt...
JetFitterInitializationHelper(const std::string &t, const std::string &n, const IInterface *p)
Constructor.
const Amg::Vector3D & linearizationPoint() const
An access to an actual linearization point.
Amg::MatrixX const & covariancePosition() const
return the covDeltaV matrix of the vertex fit
const Trk::FitQuality & fitQuality() const
Fit quality access method.
Trk::RecVertex inherits from Trk::Vertex.
VertexPositions class to represent and store a vertex.
const Amg::VectorX & position() const
return position of vertex
const Amg::Vector3D & position() const
return position of vertex
std::vector< Trk::VxTrackAtVertex * > * vxTrackAtVertex(void)
Unconst pointer to the vector of tracks Required by some of the vertex fitters.
void setLinearizationVertexPositions(const Trk::VertexPositions &)
const Trk::VertexPositions & getLinearizationVertexPositions() const
void setVerticesOnJetAxis(const std::vector< VxVertexOnJetAxis * > &)
const std::vector< VxVertexOnJetAxis * > & getVerticesOnJetAxis(void) const
const Trk::RecVertexPositions & getConstraintVertexPositions() const
void setPrimaryVertex(const VxVertexOnJetAxis *)
const VxVertexOnJetAxis * getPrimaryVertex(void) const
void setConstraintVertexPositions(const Trk::RecVertexPositions &)
const Trk::RecVertexPositions & getRecVertexPositions() const
void setRecVertexPositions(const Trk::RecVertexPositions &)
The VxTrackAtVertex is a common class for all present TrkVertexFitters The VxTrackAtVertex is designe...
VxVertexOnJetAxis inherits from Vertex.
void setNumVertex(int numVertex)
Set Method for NumVertex.
const std::vector< VxTrackAtVertex * > & getTracksAtVertex(void) const
get Tracks At Vertex Method
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Ensure that the ATLAS eigen extensions are properly loaded.
@ jet_zv
position x,y,z of primary vertex
Helper to simultaneously calculate sin and cos of the same angle.