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 "GaudiKernel/ToolFactory.h"
002 #include "GaudiKernel/SmartDataPtr.h"
003 #include "GaudiKernel/IDataProviderSvc.h"
004 
005 //----------------------------------------------------------------//
006 #include "CLHEP/Matrix/SymMatrix.h"
007 
008 #include "TrkMeasurementBase/MeasurementBase.h"
009 #include "TrkParameters/MeasuredPerigee.h"
010 #include "Identifier/Identifier.h"
011 
012 #include "TrkTrack/TrackInfo.h"
013 
014 //----------------------------------------------------------------//
015 #include "TrkTrack/Track.h"
016 #include "TrkParameters/Perigee.h"
017 #include "TrkEventPrimitives/FitQuality.h"
018 
019 //////////////////////////////////////
020 #include "STACOTools/StacoToTrackTool.h"
021 
022 
023 Trk::StacoToTrackTool::StacoToTrackTool(const std::string& t, 
024                                        const std::string& n,
025                                        const IInterface*  p ):AthAlgTool(t,n,p)
026 {
027   declareInterface<IStacoToTrackTool>(this);
028 
029   declareProperty("AddIDRots"         , m_AddIDRots         = 1 ) ;
030   declareProperty("AddMuonSystemRots" , m_AddMuonSystemRots = 1 ) ;
031   declareProperty("AddRotsMethods"    , m_AddRotsMethods    = 1 ) ;
032    
033 }
034 
035 Trk::StacoToTrackTool::~StacoToTrackTool(){}
036 
037 // Initialize
038 StatusCode Trk::StacoToTrackTool::initialize()
039 {
040     
041 
042   StatusCode sc ;
043 
044   sc = AthAlgTool::initialize(); 
045   if ( sc.isFailure() ) {
046     msg(MSG::FATAL) << " AthAlgTool::initialize() failed" << endreq;
047     return( StatusCode::FAILURE );
048   }
049 
050 
051 
052   msg(MSG::INFO) << "================================" << endreq;
053   msg(MSG::INFO) << "=Proprieties are     " << endreq;
054   msg(MSG::INFO) << "= AddIDRots                    " << m_AddIDRots << endreq;
055   msg(MSG::INFO) << "= AddMuonSystemRots            " << m_AddMuonSystemRots << endreq;
056   msg(MSG::INFO) << "= AddRotsMethods               " << m_AddRotsMethods << endreq;
057   msg(MSG::INFO) << "================================" << endreq;
058 
059   return StatusCode::SUCCESS;
060 
061 }
062 
063 StatusCode Trk::StacoToTrackTool::finalize(){return StatusCode::SUCCESS;}
064 
065 //----------------------------------------------------------------
066 // Staco track to standard track conversion
067 //----------------------------------------------------------------
068 Trk::Track* Trk::StacoToTrackTool::convert(StacoObject&  aStacoObject){
069   
070   DataVector<const Trk::TrackStateOnSurface>* trackStateOnSurfaces = convertStateOnSurface( aStacoObject);
071 
072   const Trk::FitQuality* fitQuality = convertFitQuality(  aStacoObject );
073 
074   TrackInfo aTrackInfo(Trk::TrackInfo::Unknown, Trk::muon) ;
075   aTrackInfo.setPatternRecognitionInfo( Trk::TrackInfo::STACO );
076 
077   if ( (((aStacoObject.MuSpectro())->originalTrack())->info()).patternRecoInfo(Trk::TrackInfo::ReverseOrderedTrack) ){
078     aTrackInfo.setPatternRecognitionInfo( Trk::TrackInfo::ReverseOrderedTrack);
079   }
080   if ( (((aStacoObject.MuSpectro())->originalTrack())->info()).patternRecoInfo(Trk::TrackInfo::MuonNotHittingTileVolume) ){
081     aTrackInfo.setPatternRecognitionInfo( Trk::TrackInfo::MuonNotHittingTileVolume);
082   }
083 
084   return new Trk::Track(aTrackInfo, trackStateOnSurfaces, fitQuality);
085 
086 }
087 
088 DataVector<const Trk::TrackStateOnSurface>* 
089 Trk::StacoToTrackTool::convertStateOnSurface(StacoObject& aStacoObject){
090 
091   DataVector<const Trk::TrackStateOnSurface>* trackStateOnSurfaces = new DataVector<const Trk::TrackStateOnSurface>;
092 
093   const Trk::Perigee* perigee = convertPerigee(aStacoObject);
094   
095   std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> pattern(0);
096   pattern.set(Trk::TrackStateOnSurface::Perigee);
097   const Trk::TrackStateOnSurface* trackStateOnSurface = new TrackStateOnSurface(0 , perigee, 0,  0, pattern );
098 
099   trackStateOnSurfaces->push_back( trackStateOnSurface );
100 
101   AddRotToss(trackStateOnSurfaces,aStacoObject);
102   
103   return trackStateOnSurfaces;
104 
105 }
106 void  
107 Trk::StacoToTrackTool::AddRotToss(
108  DataVector<const Trk::TrackStateOnSurface>* pTrackStateOnSurfaceS,
109  StacoObject& aStacoObject){
110 
111   if ( m_AddIDRots == 1){
112     const Rec::TrackParticle* pTP_MuIdet = aStacoObject.MuIdet();
113     if ( pTP_MuIdet != 0 ) AddRotToss( pTrackStateOnSurfaceS , pTP_MuIdet->originalTrack() );
114   }
115 
116   if ( m_AddMuonSystemRots == 1){
117 //  const Rec::TrackParticle* pTP_MuSpectroMSOnly = aStacoObject.MuSpectroMSOnly();
118     const Rec::TrackParticle* pTP_MuSpectroMSOnly = aStacoObject.MuSpectro();
119     if ( pTP_MuSpectroMSOnly != 0 ) AddRotToss( pTrackStateOnSurfaceS , pTP_MuSpectroMSOnly->originalTrack() );
120   }
121 
122 }
123 void  
124 Trk::StacoToTrackTool::AddRotToss(
125  DataVector<const Trk::TrackStateOnSurface>* pTrackStateOnSurfaceS,
126  const Trk::Track* pTrkTrack){
127    
128  if (pTrkTrack != 0){
129     if (m_AddRotsMethods == 0 ) AddRotTossMeasurementBase( pTrackStateOnSurfaceS , pTrkTrack );
130     if (m_AddRotsMethods == 1 ) AddRotTossClonedTSOS( pTrackStateOnSurfaceS , pTrkTrack );
131   }
132 
133 }
134 void  
135 Trk::StacoToTrackTool::AddRotTossMeasurementBase(
136  DataVector<const Trk::TrackStateOnSurface>* pTrackStateOnSurfaceS,
137  const Trk::Track* pTrkTrack){
138 
139   if (pTrkTrack != 0){
140     if (pTrkTrack->trackStateOnSurfaces() != 0){
141       DataVector<const Trk::TrackStateOnSurface>::const_iterator TrackStateOnSurfaceCurrent    = pTrkTrack->trackStateOnSurfaces()->begin(); 
142       DataVector<const Trk::TrackStateOnSurface>::const_iterator TrackStateOnSurfaceCurrentEnd = pTrkTrack->trackStateOnSurfaces()->end(); 
143       for ( ; TrackStateOnSurfaceCurrent!=TrackStateOnSurfaceCurrentEnd; ++TrackStateOnSurfaceCurrent){
144         if ( (*TrackStateOnSurfaceCurrent) != 0 ){
145 //Measurement
146           if ( (*TrackStateOnSurfaceCurrent)->type(Trk::TrackStateOnSurface::Measurement) ) {
147             const Trk::MeasurementBase* pMeasurementBase = (*TrackStateOnSurfaceCurrent)->measurementOnTrack();
148             if (pMeasurementBase!=0) {      
149               const Trk::MeasurementBase*       pMeasurementBaseClone      = ((*TrackStateOnSurfaceCurrent)->measurementOnTrack())->clone();
150               const TrackParameters*            pTrackParameters           = 0 ;
151               const FitQualityOnSurface*        pFitQualityOnSurface       = 0 ;
152 //            const ScatteringAngleOnSurface*   pScatteringAngleOnSurface  = 0 ;
153               const Trk::TrackStateOnSurface*   pTrackStateOnSurface       = 0 ;
154               TrackStateOnSurface::TrackStateOnSurfaceType aTrackStateOnSurfaceType = TrackStateOnSurface::Measurement;
155 //            pTrackStateOnSurface = new TrackStateOnSurface(pMeasurementBaseClone, pTrackParameters, pFitQualityOnSurface,  pScatteringAngleOnSurface, aTrackStateOnSurfaceType);
156               pTrackStateOnSurface = new TrackStateOnSurface(pMeasurementBaseClone, pTrackParameters, pFitQualityOnSurface,  0                        , aTrackStateOnSurfaceType);
157               pTrackStateOnSurfaceS->push_back( pTrackStateOnSurface );
158             }
159           }
160         }
161       }
162     }
163   }
164 
165 }
166 void  
167 Trk::StacoToTrackTool::AddRotTossClonedTSOS(
168  DataVector<const Trk::TrackStateOnSurface>* pTrackStateOnSurfaceS,
169  const Trk::Track* pTrkTrack){
170 
171   if (pTrkTrack != 0){
172     if (pTrkTrack->trackStateOnSurfaces() != 0){
173       DataVector<const Trk::TrackStateOnSurface>::const_iterator TrackStateOnSurfaceCurrent    = pTrkTrack->trackStateOnSurfaces()->begin(); 
174       DataVector<const Trk::TrackStateOnSurface>::const_iterator TrackStateOnSurfaceCurrentEnd = pTrkTrack->trackStateOnSurfaces()->end(); 
175       for ( ; TrackStateOnSurfaceCurrent!=TrackStateOnSurfaceCurrentEnd; ++TrackStateOnSurfaceCurrent){
176         if ( (*TrackStateOnSurfaceCurrent) != 0 ){
177 //Measurement
178           if ( (*TrackStateOnSurfaceCurrent)->type(Trk::TrackStateOnSurface::Measurement) ) { 
179             const Trk::MeasurementBase* pMeasurementBase = (*TrackStateOnSurfaceCurrent)->measurementOnTrack();
180             if (pMeasurementBase!=0) { 
181               const Trk::MeasuredTrackParameters* pMeasuredTrackParameters = dynamic_cast<const Trk::MeasuredTrackParameters*>((*TrackStateOnSurfaceCurrent)->trackParameters());
182               if (pMeasuredTrackParameters){
183                 const Trk::MeasurementBase*       pMeasurementBaseClone      = ((*TrackStateOnSurfaceCurrent)->measurementOnTrack())->clone();
184                 const TrackParameters*            pTrackParameters           = 0 ;
185                 const FitQualityOnSurface*        pFitQualityOnSurface       = 0 ;
186 //              const ScatteringAngleOnSurface*   pScatteringAngleOnSurface  = 0 ;
187                 const Trk::TrackStateOnSurface*   pTrackStateOnSurface       = 0 ;
188                 TrackStateOnSurface::TrackStateOnSurfaceType aTrackStateOnSurfaceType = TrackStateOnSurface::Measurement;
189 //              pTrackStateOnSurface = new TrackStateOnSurface(pMeasurementBaseClone, pTrackParameters, pFitQualityOnSurface,  pScatteringAngleOnSurface, aTrackStateOnSurfaceType);
190                 pTrackStateOnSurface = new TrackStateOnSurface(pMeasurementBaseClone, pTrackParameters, pFitQualityOnSurface,  0                        , aTrackStateOnSurfaceType);
191                 pTrackStateOnSurfaceS->push_back( pTrackStateOnSurface );
192               }else{
193                 pTrackStateOnSurfaceS->push_back( (*TrackStateOnSurfaceCurrent)->clone() );
194               }
195             }
196           }
197 //Hole
198           if ( (*TrackStateOnSurfaceCurrent)->type(Trk::TrackStateOnSurface::Hole) ) { 
199             pTrackStateOnSurfaceS->push_back( (*TrackStateOnSurfaceCurrent)->clone() );
200           }
201 //Scater
202           if ( (*TrackStateOnSurfaceCurrent)->type(Trk::TrackStateOnSurface::Scatterer) ) { 
203             pTrackStateOnSurfaceS->push_back( (*TrackStateOnSurfaceCurrent)->clone() );
204           }
205         }
206       }
207     }
208   }
209 
210 }
211 //----------------------------------------------------------------
212 // Staco parameters to standard track paramerters conversion
213 //----------------------------------------------------------------
214 
215 const Trk::Perigee* 
216 Trk::StacoToTrackTool::convertPerigee(StacoObject& aStacoObject) {
217 
218  double parcomb[5];
219 
220  parcomb[0]=aStacoObject.Param1();
221  parcomb[1]=aStacoObject.Param2();
222  parcomb[2]=aStacoObject.Param3();
223  parcomb[3]=aStacoObject.Param4();
224  parcomb[4]=aStacoObject.Param5();
225 
226 // Covariance matrix production
227 
228  Trk::CovarianceMatrix *StacoCovMat = new Trk::CovarianceMatrix(5);
229  
230  StacoCovMat->fast(1,1) = aStacoObject.Cov11();
231  StacoCovMat->fast(2,1) = aStacoObject.Cov21();
232  StacoCovMat->fast(2,2) = aStacoObject.Cov22();
233  StacoCovMat->fast(3,1) = aStacoObject.Cov31();
234  StacoCovMat->fast(3,2) = aStacoObject.Cov32();
235  StacoCovMat->fast(3,3) = aStacoObject.Cov33();
236  StacoCovMat->fast(4,1) = aStacoObject.Cov41();
237  StacoCovMat->fast(4,2) = aStacoObject.Cov42();
238  StacoCovMat->fast(4,3) = aStacoObject.Cov43();
239  StacoCovMat->fast(4,4) = aStacoObject.Cov44();
240  StacoCovMat->fast(5,1) = aStacoObject.Cov51();
241  StacoCovMat->fast(5,2) = aStacoObject.Cov52();
242  StacoCovMat->fast(5,3) = aStacoObject.Cov53();
243  StacoCovMat->fast(5,4) = aStacoObject.Cov54();
244  StacoCovMat->fast(5,5) = aStacoObject.Cov55();
245 
246  const Trk::MeasuredPerigee* perigee = new Trk::MeasuredPerigee(parcomb[0],
247                                                                 parcomb[1],
248                                                                 parcomb[2],
249                                                                 parcomb[3],
250                                                                 parcomb[4],
251                                                                 aStacoObject.GetPerigeeSurface(), 
252                                                                 new Trk::ErrorMatrix(StacoCovMat));
253  
254 
255   return perigee;
256 
257 }
258 
259 
260 const Trk::FitQuality*                     
261 Trk::StacoToTrackTool::convertFitQuality(StacoObject& aStacoObject){
262 
263   int    NberOfDOF  = aStacoObject.Ndof(); 
264   double chiSquared = aStacoObject.Chi2();  
265        
266   return  new Trk::FitQuality(chiSquared,NberOfDOF);
267 
268 }

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!