Report problems to ATLAS LXR Team (with time and IP address indicated)

The LXR Cross Referencer

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Architecture: linux ]
Version: head ] [ nightly ] [ GaudiDev ]
  Links to LXR source navigation pages for stable releases [ 12.*.* ]   [ 13.*.* ]   [ 14.*.* ]   [ 15.*.* ] 

001 #include "JetTagTools/SVForIPTool.h"
002 
003 //get the bad track info...
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 //        ATH_MSG_WARNING(" Empty secondary vertex info in ISvxConstituent!. No Svx information available...");
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 //        ATH_MSG_WARNING(" Empty secondary vertex info in ISvxConstituent!. No Svx information available...");
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                 //going from Link To TrackParticleBase (quite involved...!)
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 }//end namespace
192 

source navigation ] diff markup ] identifier search ] general search ]

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. Valid HTML 4.01!