15 #include "GaudiKernel/EventContext.h"
19 const std::string&
name,
23 declareInterface<ITrkToLeptonPV>(
this);
36 return StatusCode::FAILURE;
43 return StatusCode::SUCCESS;
49 return StatusCode::SUCCESS;
58 std::vector<const xAOD::TrackParticle *> tpv(1,trk);
59 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(tpv,(*PV)));
63 if( !eventINFO )
return {
nullptr};
64 std::unique_ptr< SG::AuxStoreInternal > pAux;
66 std::vector<const xAOD::TrackParticle*> wrkTrkC(1);
67 pAux = std::make_unique< SG::AuxStoreInternal >();
68 TPC.setStore( pAux.get() );
71 if(!TPC[0])
return {
nullptr};
72 const EventContext& ctx = Gaudi::Hive::currentContext();
73 const float mvx= (eventINFO) ? eventINFO->
beamPosX() : 0.;
74 const float mvy= (eventINFO) ? eventINFO->
beamPosY() : 0.;
77 TPC[0]->setParametersOrigin( mvx, mvy, mvz);
79 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(ctx,wrkTrkC,(*PV)));
89 std::vector<const xAOD::TrackParticle*> tmpp(
particles);
90 std::sort(tmpp.begin(),tmpp.end());
91 auto tst=std::unique(tmpp.begin(),tmpp.end());
92 if( tst != tmpp.end()) {
103 std::vector<float> defaultCovar {0.015f*0.015f,0.f,0.015f*0.015f,0.f,0.f,1.e6};
108 beamcov.setIdentity();
124 if(beamSpotHandle.isValid() && fullxAOD ){
126 BEAM.
setPosition(beamSpotHandle->beamVtx().position());
127 beamcov = beamSpotHandle->beamVtx().covariancePosition();
128 beamcov(2,2) *= 1.e6;
130 beamtiltX= beamSpotHandle->beamTilt(0);
131 beamtiltY= beamSpotHandle->beamTilt(1);
140 const EventContext& ctx = Gaudi::Hive::currentContext();
144 if( beamtiltX!=0. || beamtiltY!=0.) {
146 if(!iniVertex)
return {
nullptr};
147 BEAM.
setX(BEAM.
x()+beamtiltX*iniVertex->
z());
148 BEAM.
setY(BEAM.
y()+beamtiltY*iniVertex->
z());
157 std::unique_ptr< SG::AuxStoreInternal > pAux;
159 std::vector<const xAOD::TrackParticle*> wrkTrkC(NPRT);
160 pAux = std::make_unique< SG::AuxStoreInternal >();
161 TPC.setStore( pAux.get() );
164 for(
int i=0;
i<NPRT;
i++){
166 if(!TPC[
i])
return {
nullptr};
167 const float mvx= (eventINFO) ? eventINFO->
beamPosX() : 0.;
168 const float mvy= (eventINFO) ? eventINFO->
beamPosY() : 0.;
170 TPC[
i]->setParametersOrigin( mvx, mvy, mvz);
175 if( beamtiltX!=0. || beamtiltY!=0.) {
176 std::unique_ptr<xAOD::Vertex> iniVertex =
m_fitterSvc->fit(ctx,wrkTrkC,BEAM);
177 if(!iniVertex)
return {
nullptr};
178 BEAM.
setX(BEAM.
x()+beamtiltX*iniVertex->
z());
179 BEAM.
setY(BEAM.
y()+beamtiltY*iniVertex->
z());
181 return std::unique_ptr<xAOD::Vertex>(
m_fitterSvc->fit(ctx,wrkTrkC,BEAM));