16 #include "CLHEP/Vector/LorentzVector.h"
28 static const InterfaceID IID_IConversionPostSelector(
"InDet::ConversionPostSelector", 1, 0);
31 const std::string&
name,
37 m_decorateVertices{
true},
40 m_massLambda{1115.683},
44 m_maxChi2.push_back(35.);
45 m_maxChi2.push_back(25.);
46 m_maxChi2.push_back(20.);
48 m_invMassCut.push_back(10000.);
49 m_invMassCut.push_back(10000.);
50 m_invMassCut.push_back(10000.);
52 m_fitMomentum.push_back(0.);
53 m_fitMomentum.push_back(0.);
54 m_fitMomentum.push_back(0.);
56 m_minRadius.push_back(-10000.);
57 m_minRadius.push_back(-10000.);
58 m_minRadius.push_back(-10000.);
60 declareInterface<ConversionPostSelector>(
this);
75 return IID_IConversionPostSelector;
79 return StatusCode::SUCCESS;
83 return StatusCode::SUCCESS;
87 std::vector<Amg::Vector3D>& trkL)
const{
91 double maxChi2 = 1000.;
92 double invMassCut = 1000.;
93 double fitMomentum = 0.;
116 if (
vertex->nTrackParticles() != 2) {
117 ATH_MSG_DEBUG(
"Incorrect number of tracks used in conversion fit.");
121 float reducedChi2 =
vertex->chiSquared()/
vertex->numberDoF();
122 if (reducedChi2 > maxChi2) pass =
false;
123 if (reducedChi2 > maxChi2) pass =
false;
126 double vtxR =
vertex->position().perp();
127 if(vtxR <
radius) pass =
false;
130 std::vector< Trk::VxTrackAtVertex >& trkAtVx =
vertex->vxTrackAtVertex();
131 if (trkAtVx.size() != 2 ||
132 !trkAtVx[0].perigeeAtVertex() ||
133 !trkAtVx[1].perigeeAtVertex())
135 ATH_MSG_DEBUG(
"VxTrackAtVertex or perigeeAtVertex not available");
145 double ee = std::sqrt(
m2 + perigee1.
momentum().mag2()) + std::sqrt(
m2 + perigee2.
momentum().mag2());
149 double pt1 = perigee1.
pT();
double pt2 = perigee2.
pT();
152 if (std::fabs(inv_mass) > invMassCut) pass =
false;
153 if (photonP < fitMomentum) pass =
false;
156 std::vector<Amg::Vector3D>::const_iterator ipb=trkL.begin();
157 std::vector<Amg::Vector3D>::const_iterator ipbe=trkL.end();
158 for(; ipb!=ipbe;++ipb){
159 double tmpfR = (*ipb).perp();
160 if(tmpfR<fR) fR = tmpfR;
164 double PhiVtxTrk =
vertex->position().phi() - perigee1.parameters()[
Trk::phi0];
165 if (PhiVtxTrk < -
M_PI) PhiVtxTrk +=
twopi;
166 if (PhiVtxTrk >
M_PI) PhiVtxTrk -=
twopi;
171 ATH_MSG_DEBUG(
"Decorating vertex with values used in post selector");
183 std::vector<Amg::Vector3D>& trkL,
188 bool isLambda =
false;
189 bool isLambdaBar =
false;
193 double maxChi2 = 1000.;
194 double fitMomentum = 0.;
215 if (
vertex->nTrackParticles() != 2) {
216 ATH_MSG_DEBUG(
"Incorrect number of tracks used in conversion fit.");
219 float reducedChi2 =
vertex->chiSquared()/
vertex->numberDoF();
220 if (reducedChi2 > maxChi2) pass =
false;
223 double vtxR =
vertex->position().perp();
224 if(vtxR <
radius) pass =
false;
227 std::vector< Trk::VxTrackAtVertex >& trkAtVx =
vertex->vxTrackAtVertex();
228 if (trkAtVx.size() != 2 ||
229 !trkAtVx[0].perigeeAtVertex() ||
230 !trkAtVx[1].perigeeAtVertex())
232 ATH_MSG_DEBUG(
"VxTrackAtVertex or perigeeAtVertex not available");
238 double pt1 = perigee1.
pT();
double pt2 = perigee2.
pT();
242 std::vector<Amg::Vector3D>::const_iterator ipb=trkL.begin();
243 std::vector<Amg::Vector3D>::const_iterator ipbe=trkL.end();
244 for(; ipb!=ipbe;++ipb){
245 double tmpfR = (*ipb).perp();
246 if(tmpfR<fR) fR = tmpfR;
251 CLHEP::HepLorentzVector momentumK0 =
fourP(perigee1,perigee2,
m_massK0,
false);
252 double inv_massK0 = momentumK0.m();
255 double inv_massL = momentumL.m();
258 double inv_massLb = momentumLb.m();
260 if (!isLambdaBar && !isLambda && !isK0) pass =
false;
262 if(isK0 && isLambda && !isLambdaBar) {
momentum = momentumK0; kind = 110;}
263 if(isK0 && isLambdaBar && !isLambda) {
momentum = momentumK0; kind = 101;}
264 if(isK0 && !isLambda && !isLambdaBar) {
momentum = momentumK0; kind = 100;}
265 if(!isK0 && isLambda && !isLambdaBar) {
momentum = momentumL; kind = 10;}
266 if(!isK0 && isLambdaBar && !isLambda) {
momentum = momentumLb; kind = 1;}
267 if(!isK0 && isLambda && isLambdaBar) {
momentum = momentumL; kind = 11;}
269 if (particleP < fitMomentum) pass =
false;
275 CLHEP::HepLorentzVector
283 double mp1 = 0.;
double mp2 = 0.;
306 double ee = std::sqrt(mp1 + per1.
momentum().mag2()) + std::sqrt(mp2 + per2.
momentum().mag2());
317 float deltaPhiVtxTrk)
320 accMass(
vertex) = inv_mass;
326 accMinRfirstHit(
vertex) = fR;
328 accDeltaPhiVtxTrk(
vertex) = deltaPhiVtxTrk;