1 #include <algo/inc/twotrackpid.h>
6 #include <inc/trackstate.h>
7 #include <zvtop/include/interactionpoint.h>
8 #include <zvtop/include/vertexfitterlsm.h>
9 #include <util/inc/string.h>
10 #include <util/inc/memorymanager.h>
13 using namespace vertex_lcfi::util;
17 using namespace ZVTOP;
19 TwoTrackPid::TwoTrackPid()
27 _ParameterNames.push_back(
"MaxGammaMass");
28 _ParameterNames.push_back(
"MinKsMass");
29 _ParameterNames.push_back(
"MaxKsMass");
30 _ParameterNames.push_back(
"Chi2Cut");
31 _ParameterNames.push_back(
"RPhiCut");
32 _ParameterNames.push_back(
"SignificanceCut");
43 return _ParameterNames;
48 _ParameterValues.clear();
49 _ParameterValues.push_back(makeString(_MaxGammaMass));
50 _ParameterValues.push_back(makeString(_MinKsMass));
51 _ParameterValues.push_back(makeString(_MaxKsMass));
52 _ParameterValues.push_back(makeString(_Chi2Cut));
53 _ParameterValues.push_back(makeString(_RPhiCut));
54 _ParameterValues.push_back(makeString(_SignificanceCut));
55 return _ParameterValues;
60 this->badParameter(Parameter);
65 if (Parameter ==
"MaxGammaMass")
67 _MaxGammaMass = Value;
70 if (Parameter ==
"MinKsMass")
75 if (Parameter ==
"MaxKsMass")
80 if (Parameter ==
"Chi2Cut")
85 if (Parameter ==
"RPhiCut")
90 if (Parameter ==
"SignificanceCut")
92 _SignificanceCut = Value;
95 this->badParameter(Parameter);
100 this->badParameter(Parameter);
110 double RPhiProjection;
112 double momentummagnitude;
113 std::vector< TrackState* > AllTrackStates;
115 double eeCalculatedM = 0;
116 double pipiCalculatedM = 0;
117 double electronmass2 = 0.00051*0.00051;
118 double pionmass2 = 0.1396*0.1396;
120 double MaxGammaMass = _MaxGammaMass;
121 double MinKsMass = _MinKsMass;
122 double MaxKsMass = _MaxKsMass;
123 double Chi2Cut = _Chi2Cut;
124 double RPhiCut = _RPhiCut;
125 double significancecut = _SignificanceCut;
128 std::vector<Track*> Dummy;
129 std::map<PidCutType,std::vector<Track*> > ResultMap;
131 ResultMap[Gamma] = Dummy;
132 ResultMap[KShort] = Dummy;
137 if( MyJet->
tracks().size()>0)
139 for(std::vector<Track*>::const_iterator iTrack= (MyJet->
tracks().begin()); iTrack != --(MyJet->
tracks().end()) ;++iTrack)
142 for(std::vector<Track*>::const_iterator iTrack2 = iTrack+1 ; iTrack2 != (MyJet->
tracks().end()) ;++iTrack2)
146 if( (*iTrack)->significance(RPhi) > significancecut )
149 AllTrackStates.push_back( (**iTrack).makeState() );
152 if( (*iTrack2)->significance(RPhi) > significancecut )
156 if (((*iTrack)->charge() + (*iTrack2)->charge()) == 0)
159 AllTrackStates.push_back( (**iTrack2).makeState() );
161 Fitter.fitVertex( AllTrackStates, IP, Position, chi2 );
164 RPhiProjection = Position.mag(RPhi);
167 if( RPhiProjection < RPhiCut && chi2< Chi2Cut )
170 Totalmomentum = Totalmomentum.add((**iTrack2).momentum());
171 Totalmomentum = Totalmomentum.add((**iTrack).momentum());
172 momentummagnitude = Totalmomentum.mag2();
177 eeCalculatedM = pow(sqrt((**iTrack2).momentum().mag2()+electronmass2)+
178 sqrt((**iTrack).momentum().mag2()+electronmass2),2)- momentummagnitude;
179 if (eeCalculatedM >0)
181 eeCalculatedM = sqrt(eeCalculatedM);
191 pipiCalculatedM = pow(sqrt((**iTrack2).momentum().mag2()+pionmass2)+
192 sqrt((**iTrack).momentum().mag2()+pionmass2),2)- momentummagnitude;
193 if (pipiCalculatedM >0)
195 pipiCalculatedM = sqrt(pipiCalculatedM);
205 if(eeCalculatedM < MaxGammaMass)
209 std::vector<Track*>::const_iterator iTrack3 = find(ResultMap[Gamma].begin(),ResultMap[Gamma].end(), (*iTrack));
210 if(iTrack3 == ResultMap[Gamma].end() )
212 ResultMap[Gamma].push_back(*iTrack);
216 std::vector<Track*>::const_iterator iTrack4 = find(ResultMap[Gamma].begin(),ResultMap[Gamma].end(), (*iTrack2));
217 if(iTrack4 == ResultMap[Gamma].end() )
219 ResultMap[Gamma].push_back(*iTrack2);
222 else if( MinKsMass < pipiCalculatedM && pipiCalculatedM < MaxKsMass )
224 std::vector<Track*>::const_iterator iTrack3 = find(ResultMap[KShort].begin(),ResultMap[KShort].end(), (*iTrack));
225 if(iTrack3 == ResultMap[KShort].end() )
227 ResultMap[KShort].push_back(*iTrack);
230 std::vector<Track*>::const_iterator iTrack4 = find(ResultMap[KShort].begin(),ResultMap[KShort].end(), (*iTrack2));
231 if(iTrack4 == ResultMap[KShort].end() )
233 ResultMap[KShort].push_back(*iTrack2);
243 AllTrackStates.clear();
void setDoubleParameter(const string &Parameter, const double Value)
Set Double Parameter.
const std::vector< Track * > & tracks() const
Tracks.
Interaction Point representation.
void setStringParameter(const string &Parameter, const string &Value)
Set String Parameter.
std::map< PidCutType, std::vector< Track * > > calculateFor(Jet *MyJet) const
Run the algorithm on a Jet.
void setPointerParameter(const string &Parameter, void *Value)
Set Pointer Parameter.
string name() const
Name.
std::vector< string > parameterValues() const
Parameter Values.
std::vector< string > parameterNames() const
Parameter Names.