39 int numRow(
int numVertex) {
45 bool signFlipTreatment) {
47 int numbRow=numRow(numVertex);
54 CxxUtils::sincos sc_theta (
theta);
55 CxxUtils::sincos sc_phi (
phi);
57 dist=myPosition[numbRow];
58 if (fabs(dist)*sc_theta.sn>300.) {
59 dist=dist/fabs(dist)*300./sc_theta.sn;
62 if (signFlipTreatment) {
70 yv+dist*sc_phi.sn*sc_theta.sn,
85 declareInterface< JetFitterInitializationHelper >(
this) ;
101 return StatusCode::FAILURE;
105 return StatusCode::SUCCESS;
127 std::vector<Trk::VxTrackAtVertex*>* setOfTracks=myJetCandidate->
vxTrackAtVertex();
129 std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkBegin=vectorOfLink.begin();
130 std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkEnd=vectorOfLink.end();
132 for (std::vector<const Trk::ITrackLink*>::const_iterator vectorOfLinkIter=vectorOfLinkBegin;
133 vectorOfLinkIter!=vectorOfLinkEnd;++vectorOfLinkIter)
135 std::vector<Trk::VxTrackAtVertex*> temp_vector_tracksAtVertex;
137 temp_vector_tracksAtVertex.push_back(newVxTrack);
138 setOfTracks->push_back(newVxTrack);
188 if (primaryVertex==
nullptr) {
189 std::cout <<
"ERROR. No valid primary vertex pointer provided to the JetFitterInitializationHelper." << std::endl;
190 throw std::runtime_error (
"No valid primary vertex pointer provided to the JetFitterInitializationHelper.");
197 if (jetdirection!=
nullptr) {
201 std::cout <<
"JetFitterInitializationHelper: Error! no starting jet direction provided. Using (0,0)" << std::endl;
222 AmgSymMatrix(3) primaryCovariance(primaryVertex->covariancePosition().block<3,3>(0,0));
223 AmgSymMatrix(5) startCovariance; startCovariance.setZero();
224 startCovariance.block<3,3>(0,0) = primaryCovariance;
226 std::pow(phiAndThetaError.second*sin(startPosition(
Trk::jet_theta)),2);
238 if (linearizationjetdirection!=
nullptr) {
241 linPosition[
Trk::jet_phi]=linearizationjetdirection->phi();
244 linVertexPositions=startRecVertexPositions;
255 if (primaryVertexJC==
nullptr) {
269 return myJetCandidate;
275 const std::vector<VxVertexOnJetAxis*> & associatedVertices=myJetCandidate->
getVerticesOnJetAxis();
277 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxBegin=associatedVertices.begin();
278 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxEnd=associatedVertices.end();
283 if (!associatedVertices.empty()) {
284 for (std::vector<VxVertexOnJetAxis*>::const_iterator VtxIter=VtxBegin;VtxIter!=VtxEnd;++VtxIter) {
286 if (myVertex!=
nullptr) {
290 std::cout <<
"Warning in JetFitterInitializationHelper.Inconsistency found. Pointer to VxVertexOnJetAxis should be different from zero. Skipping track..." << std::endl;
291 throw std::runtime_error (
"Warning in JetFitterInitializationHelper.Inconsistency found. Pointer to VxVertexOnJetAxis should be different from zero. Skipping track...");
298 if (numRow(numTrack)>sizeOfRecVertex) {
305 Amg::VectorX newPosition(numRow(numTrack)); newPosition.setZero();
306 newPosition.segment(0,myPosition.rows()) = myPosition;
307 Amg::MatrixX newCovariance(numRow(numTrack),numRow(numTrack));
308 newCovariance.setZero();
309 newCovariance.block(0,0,myCovariance.rows(),myCovariance.cols()) = myCovariance;
310 for (
int i=sizeOfRecVertex;i<numRow(numTrack);++i) {
311 newCovariance(i,i)=500.*500.;
321 Amg::VectorX newPositionLinearization(numRow(numTrack));
322 newPositionLinearization.setZero();
323 newPositionLinearization.segment(0,myPositionLinearization.rows()) = myPositionLinearization;
329 }
else if (numRow(numTrack)<sizeOfRecVertex) {
330 std::cout <<
"Strange: size of RecVertexPosition's position in JetFitterInitializationHelper is bigger than actual numTracks plus 5. CHECK..." << std::endl;
331 throw std::runtime_error (
"Strange: size of RecVertexPosition's position in JetFitterInitializationHelper is bigger than actual numTracks plus 5. CHECK...");
339 bool signFlipTreatment,
340 double maxdistance)
const {
346 const std::vector<VxTrackAtVertex*> & primaryVectorTracks=myPrimary->
getTracksAtVertex();
351 const std::vector<VxTrackAtVertex*>::const_iterator primaryVectorTracksBegin=primaryVectorTracks.begin();
352 const std::vector<VxTrackAtVertex*>::const_iterator primaryVectorTracksEnd=primaryVectorTracks.end();
354 for (std::vector<VxTrackAtVertex*>::const_iterator primaryVectorIter=primaryVectorTracksBegin;
355 primaryVectorIter!=primaryVectorTracksEnd;++primaryVectorIter) {
361 if (linTrack!=
nullptr) {
375 const std::vector<VxVertexOnJetAxis*> & associatedVertices=myJetCandidate->
getVerticesOnJetAxis();
377 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxBegin=associatedVertices.begin();
378 const std::vector<VxVertexOnJetAxis*>::const_iterator VtxEnd=associatedVertices.end();
380 for (std::vector<VxVertexOnJetAxis*>::const_iterator VtxIter=VtxBegin;VtxIter!=VtxEnd;++VtxIter) {
382 int numVertex=(*VtxIter)->getNumVertex();
383 Amg::Vector3D secondaryVertexPos(getSingleVtxPositionWithSignFlip(myPosition,numVertex,signFlipTreatment));
387 const std::vector<VxTrackAtVertex*> & tracksAtVertex=(*VtxIter)->getTracksAtVertex();
389 const std::vector<VxTrackAtVertex*>::const_iterator TracksBegin=tracksAtVertex.begin();
390 const std::vector<VxTrackAtVertex*>::const_iterator TracksEnd=tracksAtVertex.end();
392 for (std::vector<VxTrackAtVertex*>::const_iterator TrackVectorIter=TracksBegin;
393 TrackVectorIter!=TracksEnd;++TrackVectorIter) {
397 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.