3 #ifndef VertexSelector_h
4 #define VertexSelector_h 1
11 using namespace lcfiplus;
37 rejectdist(false), minpos(0.), maxpos(1e+300),
38 rejectdistnegative(false), rejectdistor(false),
39 rejectk0(false), k0width(0.), k0dirdot(0.),
40 rejectl0(false), l0width(0.), l0dirdot(0.),
41 rejectconv(false), convmass(0.), convdist(0.), convdirdot(0.) {
80 vector<const Vertex*> ret;
82 for (
unsigned int i=0; i<vertices.size(); i++) {
83 if (vertices[i]->isPrimary()) {
88 if (passesCut(vertices[i], config)) {
89 ret.push_back(vertices[i]);
92 for (
TrackVecIte itt = vertices[i]->getTracks().begin(); itt != vertices[i]->getTracks().end(); itt++) {
93 vector<const Track*>::iterator itt2 = remove_if(residualTracks.begin(), residualTracks.end(), bind2nd(equal_to<const Track*>(), *itt));
94 residualTracks.erase(itt2, residualTracks.end());
97 }
else if (addTracks) {
98 residualTracks.insert(residualTracks.end(),vertices[i]->getTracks().begin(), vertices[i]->getTracks().end());
105 vector<Vertex*> operator () (
const vector<Vertex*>& vertices,
VertexSelectorConfig& config, vector<const Track*>& residualTracks,
bool addTracks) {
108 for (
unsigned int i=0; i<vertices.size(); i++) {
109 if (passesCut(vertices[i], config)) {
110 ret.push_back(vertices[i]);
113 for (
TrackVecIte itt = vertices[i]->getTracks().begin(); itt != vertices[i]->getTracks().end(); itt++) {
114 vector<const Track*>::iterator itt2 = remove_if(residualTracks.begin(), residualTracks.end(), bind2nd(equal_to<const Track*>(), *itt));
115 residualTracks.erase(itt2, residualTracks.end());
118 }
else if (addTracks) {
119 residualTracks.insert(residualTracks.end(),vertices[i]->getTracks().begin(), vertices[i]->getTracks().end());
127 vector<const Vertex*> ret;
129 for (
unsigned int i=0; i<vertices.size(); i++) {
130 if (passesCut(vertices[i], config)) {
131 ret.push_back(vertices[i]);
140 for (vector<Vertex*>::iterator it = vertices.begin(); it!=vertices.end();) {
141 if (!passesCut(*it, config)) {
142 it = vertices.erase(it);
160 TVector3 mom1 = vtx->
getTracks()[0]->momentumAtVertex(vtx);
161 TVector3 mom2 = vtx->
getTracks()[1]->momentumAtVertex(vtx);
165 if (primary) posip = primary->
getPos();
166 double v0dirdot = (mom1+mom2).Unit().Dot( (vtx->
getPos()-posip).Unit() );
170 TLorentzVector lvec1;
171 TLorentzVector lvec2;
172 lvec1.SetVectM( mom1, 0.1396 );
173 lvec2.SetVectM( mom2, 0.1396 );
174 double mass = (lvec1+lvec2).M();
175 double k0mass = .498;
183 TLorentzVector protonForLambda;
184 TLorentzVector pionForLambda;
185 if (mom1.Mag() > mom2.Mag()) {
186 protonForLambda.SetVectM( mom1, 0.9383 );
187 pionForLambda.SetVectM( mom2, 0.1396 );
189 protonForLambda.SetVectM( mom2, 0.9383 );
190 pionForLambda.SetVectM( mom1, 0.1396 );
193 double lambdaMass = (protonForLambda+pionForLambda).M();
194 if (v0dirdot > cfg.
l0dirdot && fabs(lambdaMass - 1.1157) < cfg.
l0width)
200 double ang1 = atan( vtx->
getTracks()[0]->getTanLambda());
201 double ang2 = atan( vtx->
getTracks()[1]->getTanLambda());
202 double convmassCorr = sqrt( vtx->
getTracks()[0]->Vect().Mag()*vtx->
getTracks()[1]->Vect().Mag()*(1-cos(ang1-ang2)) );
224 if (isV0(vtx,cfg,primary))
return false;
237 #endif //TrackSelector_h
vector< const Track * >::const_iterator TrackVecIte
Definition: lcfiplus.h:83
double minpos
Definition: VertexSelector.h:18
double convmass
Definition: VertexSelector.h:32
Definition: lcfiplus.h:771
void setV0Loose()
Definition: VertexSelector.h:56
bool rejectdistnegative
Definition: VertexSelector.h:20
bool isV0(const Vertex *vtx, const VertexSelectorConfig &cfg, const Vertex *primary)
Definition: VertexSelector.h:150
void setNoV0Cut()
Definition: VertexSelector.h:68
double l0width
Definition: VertexSelector.h:28
bool passesCut(const Vertex *vtx, const VertexSelectorConfig &cfg, const Vertex *primary=0)
Definition: VertexSelector.h:211
VertexSelectorConfig()
Definition: VertexSelector.h:36
double maxpos
Definition: VertexSelector.h:19
TVector3 getPos() const
Definition: lcfiplus.h:817
~VertexSelector()
Definition: VertexSelector.h:233
bool rejectk0
Definition: VertexSelector.h:23
Definition: VertexSelector.h:76
Definition: VertexSelector.h:15
double convdirdot
Definition: VertexSelector.h:34
VertexSelector()
Definition: VertexSelector.h:232
bool rejectl0
Definition: VertexSelector.h:27
bool rejectdist
Definition: VertexSelector.h:17
void setV0Tight()
Definition: VertexSelector.h:44
double l0dirdot
Definition: VertexSelector.h:29
bool rejectconv
Definition: VertexSelector.h:31
double k0width
Definition: VertexSelector.h:24
double k0dirdot
Definition: VertexSelector.h:25
bool rejectdistor
Definition: VertexSelector.h:21
const vector< const Track * > & getTracks() const
Definition: lcfiplus.h:823
double convdist
Definition: VertexSelector.h:33
const vector< const Vertex * > VertexVec
Definition: lcfiplus.h:79