001 #include "GaudiKernel/ToolFactory.h"
002 #include "GaudiKernel/SmartDataPtr.h"
003 #include "GaudiKernel/IDataProviderSvc.h"
004
005
006 #include "TrkTrack/Track.h"
007
008
009 #include "Particle/TrackParticle.h"
010 #include "Particle/TrackParticleContainer.h"
011 #include "TrkParameters/MeasuredPerigee.h"
012
013
014 #include "STACOTools/DoStacoObjectTool.h"
015
016
017 #include "STACOEvent/StacoObject.h"
018 #include "STACOToolsInterfaces/IStacoCombineTool.h"
019 #include "STACOToolsInterfaces/IStacoEDMHelper.h"
020
021
022 DoStacoObjectTool::DoStacoObjectTool(const std::string& t,
023 const std::string& n,
024 const IInterface* p ):AthAlgTool(t,n,p),
025 p_OwnEDMHelper ( "StacoEDMHelper/ConfiguredStacoEDMHelper" )
026 {
027
028 declareInterface<IDoStacoObjectTool>(this);
029
030 declareProperty("StacoEDMHelper" , p_OwnEDMHelper ) ;
031
032 }
033
034 DoStacoObjectTool::~DoStacoObjectTool(){}
035
036
037 StatusCode DoStacoObjectTool::initialize() {
038
039 StatusCode sc = StatusCode::SUCCESS;
040
041 msg(MSG::INFO) << "Initialisation started " << endreq;
042
043 sc = AthAlgTool::initialize();
044 if ( sc.isFailure() ) {
045 msg(MSG::FATAL) << " AthAlgTool::initialize() failed" << endreq;
046 return( StatusCode::FAILURE );
047 }
048
049
050
051 if ( p_OwnEDMHelper.retrieve().isFailure() ) {
052 msg(MSG::FATAL) << "Failed to retrieve tool " << p_OwnEDMHelper << endreq;
053 return StatusCode::FAILURE;
054 }
055 msg(MSG::INFO) << "Retrieved tool " << p_OwnEDMHelper << endreq;
056
057
058 msg(MSG::INFO) << "Initialisation ended " << endreq;
059
060 return StatusCode::SUCCESS;
061
062 }
063
064 StacoObject* DoStacoObjectTool::DoStacoObject(
065 ToolHandle< IStacoCombineTool >& pIStacoCombineTool,
066 const Rec::TrackParticleContainer* pTrackParticleContainerID ,
067 const Rec::TrackParticleContainer* pTrackParticleContainerMS ,
068 const Rec::TrackParticleContainer* pTrackParticleContainerMSOnly ,
069 const Rec::TrackParticle* pTrackParticleID,
070 const Rec::TrackParticle* pTrackParticleMS,
071 const Rec::TrackParticle* pTrackParticleMSOnly,
072 const Trk::MeasuredPerigee* pMeasuredPerigeeMS,
073 const Trk::MeasuredPerigee* pMeasuredPerigeeID
074 ){
075 StatusCode sc = StatusCode::SUCCESS;
076
077
078 double Eloss = 3000.;
079
080
081
082
083
084 sc = p_OwnEDMHelper->BackTrackingEloss(
085 pTrackParticleMS->originalTrack() ,
086 Eloss
087 ) ;
088 if ( sc.isFailure() ){
089 std::cout<< " StacoBuilder::execute() Eloss PB " << std::setprecision(9)<< Eloss <<std::endl ;
090 }
091
092 if (pTrackParticleID == 0){
093
094 double chi2 = pTrackParticleMS->fitQuality()->chiSquared();
095 int NbreOfDoF = pTrackParticleMS->fitQuality()->numberDoF();
096
097
098 double Param[5],CovMat[15];
099 pIStacoCombineTool->GetPar_TrackParticle(pMeasuredPerigeeMS, Param ,CovMat);
100
101 StacoObject* pStacoObject = new StacoObject(
102 Param[0],Param[1],Param[2],Param[3],Param[4],
103 CovMat[0],CovMat[1],CovMat[2],CovMat[3],CovMat[4],
104 CovMat[5],CovMat[6],CovMat[7],CovMat[8],CovMat[9],
105 CovMat[10],CovMat[11],CovMat[12],CovMat[13],
106 CovMat[14],chi2,NbreOfDoF,Eloss
107 );
108
109 pStacoObject->setMuSpectro(pTrackParticleContainerMS, pTrackParticleMS);
110 pStacoObject->setMuSpectroMSOnly(pTrackParticleContainerMSOnly, pTrackParticleMSOnly);
111 pStacoObject->SetPerigeeSurface( *( pMeasuredPerigeeMS->associatedSurface()) );
112
113 return pStacoObject;
114
115 }else{
116
117 double Xi2 = 0. ;
118 double Xi2Mu = 0. ;
119 double Xi2ID = 0. ;
120 double ParCB[5],covCB[15];
121
122 bool TheBool = pIStacoCombineTool->TheCombIdMu(
123 pMeasuredPerigeeID, pMeasuredPerigeeMS,
124 Xi2, Xi2Mu, Xi2ID, ParCB, covCB
125 );
126 if (!TheBool) msg(MSG::INFO) << " pIStacoCombineTool->TheCombIdMu is False !? "<< endreq;
127
128
129 double chi2MS = pTrackParticleMS->fitQuality()->chiSquared();
130 double chi2ID = pTrackParticleID->fitQuality()->chiSquared();
131
132 double sumXi2 = Xi2*5 + chi2MS + chi2ID;
133 int NbreOfDoFcb = 5 ;
134 int sumNbreOfDoF = NbreOfDoFcb +
135 pTrackParticleMS->fitQuality()->numberDoF() +
136 pTrackParticleID->fitQuality()->numberDoF() ;
137
138 StacoObject* pStacoObject = new StacoObject(
139 ParCB[0],ParCB[1],ParCB[2],ParCB[3],ParCB[4],
140 covCB[0],covCB[1],covCB[2],covCB[3],covCB[4],
141 covCB[5],covCB[6],covCB[7],covCB[8],covCB[9],
142 covCB[10],covCB[11],covCB[12],covCB[13],
143 covCB[14],sumXi2,sumNbreOfDoF,Eloss
144 );
145
146 pStacoObject->setMuIdet(pTrackParticleContainerID, pTrackParticleID);
147 pStacoObject->setMuSpectro(pTrackParticleContainerMS, pTrackParticleMS);
148 pStacoObject->setMuSpectroMSOnly(pTrackParticleContainerMSOnly, pTrackParticleMSOnly);
149 pStacoObject->SetPerigeeSurface( *( pMeasuredPerigeeMS->associatedSurface()) );
150
151 return pStacoObject;
152
153 }
154
155 return 0;
156
157 }
158
159 StatusCode DoStacoObjectTool::finalize(){return StatusCode::SUCCESS;}
160
161
| 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.
|
|