001 #include "JetTagTools/SVForIPTool.h"
002
003
004 #include "TrkParticleBase/LinkToTrackParticleBase.h"
005 #include "TrkParticleBase/TrackParticleBase.h"
006
007 #include "JetTagEvent/ISvxAssociation.h"
008 #include "VxSecVertex/VxSecVertexInfo.h"
009 #include "VxSecVertex/VxSecVKalVertexInfo.h"
010 #include "VxVertex/VxTrackAtVertex.h"
011 #include "VxJetVertex/TwoTrackVerticesInJet.h"
012 #include "VxSecVertex/VxJetFitterVertexInfo.h"
013 #include "VxVertex/VxCandidate.h"
014 #include "VxJetVertex/VxJetCandidate.h"
015 #include "JetEvent/Jet.h"
016
017 #include "VxVertex/RecVertex.h"
018
019 namespace Analysis {
020
021
022 SVForIPTool::SVForIPTool(const std::string& name,
023 const std::string& n, const IInterface* p):
024 AthAlgTool(name, n,p)
025 {
026 declareInterface<SVForIPTool>(this);
027 }
028
029 SVForIPTool::~SVForIPTool() {}
030
031 StatusCode SVForIPTool::initialize() {
032
033 ATH_MSG_INFO(" Initialization of SVForIPTool succesfull");
034 return StatusCode::SUCCESS;
035 }
036
037 StatusCode SVForIPTool::finalize() {
038
039 ATH_MSG_INFO(" Finalization of SVForIPTool succesfull");
040 return StatusCode::SUCCESS;
041 }
042
043 void SVForIPTool::getDirectionFromSecondaryVertexInfo(Hep3Vector & SvxDirection,
044 bool & canUseSvxDirection,
045 const Jet & jetToTag,
046 const std::string & m_secVxFinderName,
047 const Trk::RecVertex & m_priVtx)
048 {
049
050 const ISvxAssociation* newSvxAssociation=jetToTag.getAssociation<ISvxAssociation>(m_secVxFinderName);
051
052 if (newSvxAssociation==0) {
053 ATH_MSG_DEBUG(" No secondary vertex found for getting the B flight direction (for the IP sign calculation)");
054 } else if (newSvxAssociation!=0) {
055 const Trk::VxSecVertexInfo* myVertexInfo=newSvxAssociation->vertexInfo();
056 if (myVertexInfo==0) {
057
058 }
059 else
060 {
061 const Trk::VxSecVKalVertexInfo* myVKalVertexInfo=dynamic_cast<const Trk::VxSecVKalVertexInfo*>(myVertexInfo);
062 if (myVKalVertexInfo!=0)
063 {
064 canUseSvxDirection=((long int)(myVKalVertexInfo->n2trackvertices())>=1)?true:false;
065 if (canUseSvxDirection) {
066 const std::vector<Trk::VxCandidate*> & myVertices=myVKalVertexInfo->vertices();
067 if (myVertices.size() > 0 && myVertices[0]!=0)
068 {
069 SvxDirection=myVertices[0]->recVertex().position()-m_priVtx.position();
070 ATH_MSG_VERBOSE(" Get direction from InDetVKalVertex: phi: " << SvxDirection.phi() <<
071 " theta: " << SvxDirection.theta() );
072 }
073 else
074 {
075 ATH_MSG_WARNING("SVX info seems usable, but no SVX available !!!");
076 }
077 }
078 }
079 else
080 {
081 const Trk::VxJetFitterVertexInfo* myJetFitterInfo=dynamic_cast<const Trk::VxJetFitterVertexInfo*>(myVertexInfo);
082 if (myJetFitterInfo!=0)
083 {
084
085 const std::vector<Trk::VxCandidate*> & myVertices=myVertexInfo->vertices();
086 if (myVertices.size() > 0) {
087 Trk::VxJetCandidate* myVxJetCandidate=dynamic_cast<Trk::VxJetCandidate*>(myVertices[0]);
088 if (myVxJetCandidate)
089 {
090 canUseSvxDirection=true;
091 const Trk::RecVertexPositions & recVertexPositions=myVxJetCandidate->getRecVertexPositions();
092 const HepVector & vertexPosition=recVertexPositions.position();
093 SvxDirection=Hep3Vector(1,1,1);
094 SvxDirection.setPhi(vertexPosition[Trk::jet_phi]);
095 SvxDirection.setTheta(vertexPosition[Trk::jet_theta]);
096
097 ATH_MSG_VERBOSE(" Get Jet direction from JetFitter: phi: " << vertexPosition[Trk::jet_phi] <<
098 " theta: " << vertexPosition[Trk::jet_theta]);
099 }
100 } else {
101 ATH_MSG_WARNING("SVX info seems usable, but no SVX available !!!");
102 }
103 }
104 }
105 }
106 }
107 }
108
109
110
111 void SVForIPTool::getTrkFromV0FromSecondaryVertexInfo(std::vector<const Trk::TrackParticleBase*> & TrkFromV0,
112 const Jet & jetToTag,
113 const std::string & m_secVxFinderName)
114 {
115
116 const ISvxAssociation* newSvxAssociation=jetToTag.getAssociation<ISvxAssociation>(m_secVxFinderName);
117
118 if (newSvxAssociation==0) {
119 ATH_MSG_DEBUG(" No secondary vertex found for getting the V0s from the secondary vertex finder info");
120 } else if (newSvxAssociation!=0) {
121 const Trk::VxSecVertexInfo* myVertexInfo=newSvxAssociation->vertexInfo();
122 if (myVertexInfo==0) {
123
124 }
125 else
126 {
127 const Trk::VxSecVKalVertexInfo* myVKalVertexInfo=dynamic_cast<const Trk::VxSecVKalVertexInfo*>(myVertexInfo);
128 if (myVKalVertexInfo!=0)
129 {
130 TrkFromV0=myVKalVertexInfo->badTracksTP();
131 }
132 else
133 {
134 const Trk::VxJetFitterVertexInfo* myJetFitterInfo=dynamic_cast<const Trk::VxJetFitterVertexInfo*>(myVertexInfo);
135 if (myJetFitterInfo!=0)
136 {
137 const Trk::TwoTrackVerticesInJet* twoTrackVerticesInJet=myJetFitterInfo->getTwoTrackVerticesInJet();
138
139 if (twoTrackVerticesInJet)
140 {
141 const std::vector<const Trk::TrackParticleBase*> & neutralTracksInJet=twoTrackVerticesInJet->getNeutralTrackOfVertices();
142
143 std::vector<const Trk::TrackParticleBase*>::const_iterator neutralBegin=neutralTracksInJet.begin();
144 std::vector<const Trk::TrackParticleBase*>::const_iterator neutralEnd=neutralTracksInJet.end();
145
146 for (std::vector<const Trk::TrackParticleBase*>::const_iterator neutralIter=neutralBegin;
147 neutralIter!=neutralEnd;++neutralIter)
148 {
149 const Trk::VxCandidate* v0candPtr=(*neutralIter)->reconstructedVertex();
150
151 if (!v0candPtr) {
152 ATH_MSG_WARNING(" V0 candidate from JetFitter is empy. ");
153 continue;
154 }
155
156 const Trk::VxTrackAtVertex* firstTrack((*(v0candPtr->vxTrackAtVertex()))[0]);
157 const Trk::VxTrackAtVertex* secondTrack((*(v0candPtr->vxTrackAtVertex()))[1]);
158
159 if ((!firstTrack)||(!secondTrack))
160 {
161 ATH_MSG_WARNING(" Empty track. ");
162 continue;
163 }
164
165
166 const Trk::ITrackLink* trackLink1=firstTrack->trackOrParticleLink();
167 const Trk::ITrackLink* trackLink2=secondTrack->trackOrParticleLink();
168
169 const Trk::LinkToTrackParticleBase * trkCastedLinkTPBase1=
170 dynamic_cast<const Trk::LinkToTrackParticleBase *>(trackLink1);
171
172 const Trk::LinkToTrackParticleBase * trkCastedLinkTPBase2=
173 dynamic_cast<const Trk::LinkToTrackParticleBase *>(trackLink2);
174
175 if ((!trkCastedLinkTPBase1)||(!trkCastedLinkTPBase2))
176 {
177 ATH_MSG_WARNING(" JetFitter has Tracks, not TrackParticles... Rejection of V0s impossible...");
178 continue;
179 }
180
181 TrkFromV0.push_back(**trkCastedLinkTPBase1);
182 TrkFromV0.push_back(**trkCastedLinkTPBase2);
183 }
184 }
185 }
186 }
187 }
188 }
189 }
190
191 }
192
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|