77 {
78 MsgStream log(
msgSvc(), name() );
79 log << MSG::INFO << "in execute()" << endmsg;
80
81 StatusCode sc;
82
83
84
85
86 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
89 log << MSG::DEBUG << "run and event = " << eventHeader->runNumber() << " "
90 << eventHeader->eventNumber() << endmsg;
91 log << MSG::DEBUG << "ncharg, nneu, tottks = " << recEvent->totalCharged() << " , "
92 << recEvent->totalNeutral() << " , " << recEvent->totalTracks() << endmsg;
93 int evtNo = eventHeader->eventNumber();
94
95
96
97
98 SmartDataPtr<EvtRecVeeVertexCol> veeVertexCol( eventSvc(),
100 if ( !veeVertexCol )
101 {
103 sc = registerEvtRecVeeVertexCol( veeVertexCol, log );
104 if ( sc != StatusCode::SUCCESS ) { return sc; }
105 }
106
107
108
109
110 Vint ipip, ipim, iGood;
111 for ( unsigned int i = 0; i < recEvent->totalCharged(); i++ )
112 {
114
115 if ( !( *itTrk )->isMdcTrackValid() ) continue;
116 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
117 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
118 if ( fabs(
cos( mdcTrk->
theta() ) ) >= m_cosThetaCut )
continue;
119 if ( fabs( mdcTrk->
z() ) >= m_vzCut )
continue;
120 iGood.push_back( i );
121 if ( mdcTrk->
charge() > 0 ) ipip.push_back( i );
122 if ( mdcTrk->
charge() < 0 ) ipim.push_back( i );
123 }
124
125
126 if ( ipip.size() < 1 || ipim.size() < 1 ) return StatusCode::SUCCESS;
127
128
129
130
132 HepSymMatrix Evx( 3, 0 );
133 double bx = 1E+6;
134 double by = 1E+6;
135 double bz = 1E+6;
136 Evx[0][0] = bx * bx;
137 Evx[1][1] = by * by;
138 Evx[2][2] = bz * bz;
139
140
141
142 for ( unsigned int i1 = 0; i1 < ipip.size(); i1++ )
143 {
144 int ip1 = ipip[i1];
145 RecMdcKalTrack* pipKalTrk = ( *( recTrackCol->begin() + ip1 ) )->mdcKalTrack();
147 WTrackParameter wpiptrk(
mpi, pipKalTrk->
helix(), pipKalTrk->
err() );
148
149 for ( unsigned int i2 = 0; i2 < ipim.size(); i2++ )
150 {
151 int ip2 = ipim[i2];
152 RecMdcKalTrack* pimKalTrk = ( *( recTrackCol->begin() + ip2 ) )->mdcKalTrack();
154 WTrackParameter wpimtrk(
mpi, pimKalTrk->
helix(), pimKalTrk->
err() );
155
156 if ( m_useVFrefine )
157 {
158 VertexParameter vxpar;
161
164
165
169
170 bool fitok = vtxfit0->
Fit();
171 if ( !fitok ) continue;
172
173
174
175
176 if ( vtxfit0->
chisq( 0 ) > m_chisqCut )
continue;
178 std::pair<int, int> pair;
179 pair.first = 3;
180 pair.second = 3;
181
182 EvtRecTrack* track0 = *( recTrackCol->begin() + ip1 );
183 EvtRecTrack* track1 = *( recTrackCol->begin() + ip2 );
184
185 EvtRecVeeVertex* KsVertex = new EvtRecVeeVertex;
190 KsVertex->
setMass( wKshort.
p().m() );
191 KsVertex->
setW( wKshort.
w() );
192 KsVertex->
setEw( wKshort.
Ew() );
198 veeVertexCol->push_back( KsVertex );
199
200
201
202
203
204
205
206
207
208 }
209 else
210 {
211 VertexParameter vxpar;
214
220 if ( !( vtxfit0->
Fit( 0 ) ) )
continue;
222 if ( vtxfit0->
chisq( 0 ) > m_chisqCut )
continue;
224 std::pair<int, int> pair;
225 pair.first = 3;
226 pair.second = 3;
227
228 EvtRecTrack* track0 = *( recTrackCol->begin() + ip1 );
229 EvtRecTrack* track1 = *( recTrackCol->begin() + ip2 );
230
231 EvtRecVeeVertex* KsVertex = new EvtRecVeeVertex;
236 KsVertex->
setMass( wKshort.
p().m() );
237 KsVertex->
setW( wKshort.
w() );
238 KsVertex->
setEw( wKshort.
Ew() );
244 veeVertexCol->push_back( KsVertex );
245
246
247
248
249
250
251
252
253
254
255 }
256 }
257 }
258
259 return StatusCode::SUCCESS;
260}
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
ObjectVector< EvtRecVeeVertex > EvtRecVeeVertexCol
double cos(const BesAngle a)
const HepVector & helix() const
static void setPidType(PidType pidType)
const HepSymMatrix & err() const
const double theta() const
void setVertexType(int vtxType)
void setChi2(double chi2)
void addDaughter(const SmartRef< EvtRecTrack > &track, int i)
void setEw(const HepSymMatrix &Ew)
void setMass(double mass)
void setNTracks(int nTracks)
void setVertexId(int vtxId)
void setPair(const std::pair< int, int > &pair)
void setW(const HepVector &w)
void setNCharge(int nCharge)
void AddTrack(const int number, const double mass, const RecMdcTrack *trk)
WTrackParameter wVirtualTrack(int n) const
void AddTrack(const int index, RecMdcKalTrack *p, const RecMdcKalTrack::PidType pid)
static VertexFitRefine * instance()
void AddVertex(int number, VertexParameter vpar, std::vector< int > lis)
WTrackParameter wVirtualTrack(int n) const
void AddVertex(int number, VertexParameter vpar, std::vector< int > lis)
static VertexFit * instance()
void BuildVirtualParticle(int number)
void setEvx(const HepSymMatrix &eVx)
void setVx(const HepPoint3D &vx)
HepLorentzVector p() const
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecVeeVertexCol
_EXTERN_ std::string EvtRecTrackCol