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