14 #include "GaudiKernel/EventContext.h"
18 const std::string&
name,
22 declareInterface<ITrkToLeptonPV>(
this);
35 return StatusCode::FAILURE;
42 return StatusCode::SUCCESS;
48 return StatusCode::SUCCESS;
56 std::vector<const xAOD::TrackParticle *> tpv(1,trk);
57 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(tpv,(*PV)));
61 if( !eventINFO )
return {
nullptr};
62 std::unique_ptr< SG::AuxStoreInternal > pAux;
64 std::vector<const xAOD::TrackParticle*> wrkTrkC(1);
65 pAux = std::make_unique< SG::AuxStoreInternal >();
66 TPC.setStore( pAux.get() );
69 if(!TPC[0])
return {
nullptr};
70 const EventContext& ctx = Gaudi::Hive::currentContext();
71 const float mvx= (eventINFO) ? eventINFO->
beamPosX() : 0.;
72 const float mvy= (eventINFO) ? eventINFO->
beamPosY() : 0.;
73 const float mvz= (trk->
isAvailable<
float>(
"vz")) ? trk->
vz() : 0.;
74 TPC[0]->setParametersOrigin( mvx, mvy, mvz);
76 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(ctx,wrkTrkC,(*PV)));
86 std::vector<const xAOD::TrackParticle*> tmpp(
particles);
87 std::sort(tmpp.begin(),tmpp.end());
88 auto tst=std::unique(tmpp.begin(),tmpp.end());
89 if( tst != tmpp.end()) {
94 bool fullxAOD=
false;
if(
particles[0]->isAvailable<float>(
"vy")) fullxAOD=
true;
99 std::vector<float> defaultCovar={0.015*0.015,0.,0.015*0.015,0.,0.,1.e6};
104 beamcov.setIdentity();
120 if(beamSpotHandle.isValid() && fullxAOD ){
122 BEAM.
setPosition(beamSpotHandle->beamVtx().position());
123 beamcov = beamSpotHandle->beamVtx().covariancePosition();
124 beamcov(2,2) *= 1.e6;
126 beamtiltX= beamSpotHandle->beamTilt(0);
127 beamtiltY= beamSpotHandle->beamTilt(1);
136 const EventContext& ctx = Gaudi::Hive::currentContext();
140 if( beamtiltX!=0. || beamtiltY!=0.) {
142 if(!iniVertex)
return {
nullptr};
143 BEAM.
setX(BEAM.
x()+beamtiltX*iniVertex->
z());
144 BEAM.
setY(BEAM.
y()+beamtiltY*iniVertex->
z());
153 std::unique_ptr< SG::AuxStoreInternal > pAux;
155 std::vector<const xAOD::TrackParticle*> wrkTrkC(NPRT);
156 pAux = std::make_unique< SG::AuxStoreInternal >();
157 TPC.setStore( pAux.get() );
159 for(
int i=0;
i<NPRT;
i++){
161 if(!TPC[
i])
return {
nullptr};
162 const float mvx= (eventINFO) ? eventINFO->
beamPosX() : 0.;
163 const float mvy= (eventINFO) ? eventINFO->
beamPosY() : 0.;
165 TPC[
i]->setParametersOrigin( mvx, mvy, mvz);
170 if( beamtiltX!=0. || beamtiltY!=0.) {
171 std::unique_ptr<xAOD::Vertex> iniVertex =
m_fitterSvc->fit(ctx,wrkTrkC,BEAM);
172 if(!iniVertex)
return {
nullptr};
173 BEAM.
setX(BEAM.
x()+beamtiltX*iniVertex->
z());
174 BEAM.
setY(BEAM.
y()+beamtiltY*iniVertex->
z());
176 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(ctx,wrkTrkC,BEAM));