BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Event/BesDChain/include/BesDChain/Template/CDChargedVisible.cc
Go to the documentation of this file.
1#ifndef CLEODCHAIN_CDCHARGEDVISIBLE_CC
2#define CLEODCHAIN_CDCHARGEDVISIBLE_CC
3// -*- C++ -*-
4//
5// Package: CleoDChain
6// Module: CDChargedVisible
7//
8// Description: Implementation of candidate for visible charged particles
9//
10// Implimentation:
11// <Notes on implimentation>
12//
13// Author: Simon Patton
14// Created: Tue Mar 18 13:23:11 EST 1997
15// $Id: CDChargedVisible.cc,v 1.4 2009/10/28 08:23:22 petez Exp $
16//
17// Revision history
18//
19// $Log: CDChargedVisible.cc,v $
20// Revision 1.4 2009/10/28 08:23:22 petez
21// see ChangeLog for changes to KinematicData and CDChargedVisible
22//
23// Revision 1.3 2009/06/22 14:55:48 zoujh
24// See ChangeLog
25//
26// Revision 1.2 2009/03/09 20:00:43 chunlei
27// get charge and momentum from KalTrack helix information
28//
29// Revision 1.1.1.1 2009/03/03 06:05:56 maqm
30// first import of BesDChain
31//
32// Revision 1.3 2004/03/05 22:01:54 chengp
33// implemented Monte Carlo matching
34//
35// Revision 1.2 2001/04/25 12:52:17 ajm36
36// plugged memory leak in ctor for pi0's, k shorts, etas
37//
38// Revision 1.1 2001/04/11 13:19:35 urner
39// transition to files with CD prefix. Addition of new files
40//
41// Revision 1.3 2001/04/03 17:26:46 cdj
42// moved builtFromCDCharged to builtFromTrack
43//
44// Revision 1.2 2001/03/23 23:05:42 urner
45// added pi0 eta and CDKs decay lists
46//
47// Revision 1.1.1.1 2000/12/18 22:17:27 cdj
48// imported CleoDChain
49//
50// Revision 1.11 1998/05/01 20:30:21 sjp
51// Modified include path for new placement of CO classes
52//
53// Revision 1.10 1998/05/01 20:21:35 sjp
54// Added necessary string include
55//
56// Revision 1.9 1998/04/21 05:18:23 sjp
57// Modified to use CDMud
58//
59// Revision 1.8 1998/04/17 18:50:24 sjp
60// Modifed to use latest CLEO types
61//
62// Revision 1.7 1997/12/23 21:54:54 sjp
63// Modified package to be completely templated
64//
65// Revision 1.6 1997/09/03 14:58:47 sjp
66// Use new report.h and KTKinematicData
67//
68// Revision 1.5 1997/08/29 17:01:24 sjp
69// Modified to handle new Cairn Templated classes
70//
71// Revision 1.4 1997/08/19 20:41:47 sjp
72// Updated to use <package>/<file>.h include structure.
73// (Note: This version of the code has not been compiled)
74//
75// Revision 1.3 1997/01/31 20:10:24 sjp
76// Modified to use the new `bug' include files
77//
78// Revision 1.2 1997/01/21 20:30:30 sjp
79// Changed CPP flags and include because of library reorganization
80//
81// Revision 1.1 1996/11/04 17:15:04 sjp
82// Replacement for CHargedHypothesis Class
83//
84
85// system include files
86#include <string>
87
88// user include files
89#include "EvtRecEvent/EvtRecTrack.h"
90#include "MdcRecEvent/RecMdcKalTrack.h"
91#include "MdcRecEvent/RecMdcTrack.h"
92// zoujh: ...
93// #include "AnalEvent/BStableParticle.h"
94
95#include "BesDChain/CDMud.h"
96#include "BesDChain/util/KinematicData.h"
97
98#include "BesDChain/CDChargedVisible.h"
99
101
102//
103// constructors and destructor
104//
105
106template <DBCandidate::Hypo H>
108 : CDCandidate( CDMud<EvtRecTrack>::get( aVisible ) ), m_visibleEvidence( aVisible ) {}
109
110// zoujh: ...
111/*
112template < DBCandidate::Hypo H >
113CDChargedVisible<H>::CDChargedVisible( BPion* aPion ) :
114 CDCandidate( CDMud< EvtRecTrack >::get( aPion->pionTrk()->bTrack()->dstTrack() ) ),
115 m_visibleEvidence( aPion->pionTrk()->bTrack()->dstTrack() )
116{
117}
118
119template < DBCandidate::Hypo H >
120CDChargedVisible<H>::CDChargedVisible( BKaon* aKaon ) :
121 CDCandidate( CDMud< EvtRecTrack >::get( aKaon->kaonTrk()->bTrack()->dstTrack() ) ),
122 m_visibleEvidence( aKaon->kaonTrk()->bTrack()->dstTrack() )
123{
124}
125*/
126
127//------ Constructor -----
128// copy constructor
129//
130template <DBCandidate::Hypo H>
132 : CDCandidate( aOtherCDChargedHypo )
133 , m_visibleEvidence( aOtherCDChargedHypo.m_visibleEvidence ) {}
134
135//------ Destructor -----
136//
137
138template <DBCandidate::Hypo H> CDChargedVisible<H>::~CDChargedVisible() {}
139
140//
141// assignment operators
142//
143
144//
145// member functions
146//
147
148//
149// const member functions
150//
151
152template <DBCandidate::Hypo H> bool CDChargedVisible<H>::builtFromTrack() const {
153 return ( 0 != m_visibleEvidence );
154}
155
156template <DBCandidate::Hypo H> const EvtRecTrack* CDChargedVisible<H>::track() const {
157 return m_visibleEvidence;
158}
159
160//------ defaultKinematicData -----
161// create the kinematicData for this CDCandidate
162//
163
164template <DBCandidate::Hypo H>
166 KinematicData* tmp = new KinematicData();
167
168 double mass = DBCandidate::mass( static_cast<DBCandidate::Hypo>( H ) );
169
170 // original set, can be used again once kalTrack has charge and momentum available in memory
171 /*
172 if ( (const_cast<EvtRecTrack*>(m_visibleEvidence))->isMdcKalTrackValid() ) {
173 RecMdcKalTrack* mdcKalTrack =
174 (const_cast<EvtRecTrack*>(m_visibleEvidence))->mdcKalTrack();
175
176 mdcKalTrack->setPidType( static_cast<RecMdcKalTrack::PidType>
177 (static_cast<DBCandidate::Hypo>(H) - 1) );
178
179 tmp->setCharge( mdcKalTrack->charge() );
180 //tmp->setMass( DBCandidate::mass( static_cast<DBCandidate::Hypo>(H) ) );
181 tmp->setMomentum( Hep3Vector(mdcKalTrack->px(), mdcKalTrack->py(), mdcKalTrack->pz()) );
182 }
183 */
184 // get momentume and chage from helix information directly
185
186 if ( ( const_cast<EvtRecTrack*>( m_visibleEvidence ) )->isMdcKalTrackValid() )
187 {
188 RecMdcKalTrack* mdcKalTrack =
189 ( const_cast<EvtRecTrack*>( m_visibleEvidence ) )->mdcKalTrack();
190
191 mdcKalTrack->setPidType(
192 static_cast<RecMdcKalTrack::PidType>( static_cast<DBCandidate::Hypo>( H ) - 1 ) );
193
194 int pid = static_cast<DBCandidate::Hypo>( H ) - 1;
195
196 HepVector zhelix;
197 if ( pid == 0 ) zhelix = mdcKalTrack->getZHelixE();
198 else if ( pid == 1 ) zhelix = mdcKalTrack->getZHelixMu();
199 else if ( pid == 2 ) zhelix = mdcKalTrack->getZHelix();
200 else if ( pid == 3 ) zhelix = mdcKalTrack->getZHelixK();
201 else zhelix = mdcKalTrack->getZHelixP();
202
203 double dr( 0 ), phi0( 0 ), kappa( 0 ), dz( 0 ), tanl( 0 );
204 dr = zhelix[0];
205 phi0 = zhelix[1];
206 kappa = zhelix[2];
207 dz = zhelix[3];
208 tanl = zhelix[4];
209
210 int charge = 0;
211
212 if ( kappa > 0.0000000001 ) charge = 1;
213 else if ( kappa < -0.0000000001 ) charge = -1;
214
215 double pxy = 0;
216 if ( kappa != 0 ) pxy = 1.0 / fabs( kappa );
217
218 double px = pxy * ( -sin( phi0 ) );
219 double py = pxy * cos( phi0 );
220 double pz = pxy * tanl;
221
222 double e = sqrt( pxy * pxy + pz * pz + mass * mass );
223
224 tmp->setCharge( charge );
225 // tmp->setMass( DBCandidate::mass( static_cast<DBCandidate::Hypo>(H) ) );
226 tmp->setP4( HepLorentzVector( px, py, pz, e ) );
227 }
228
229 else
230 {
231 RecMdcTrack* mdcTrack = ( const_cast<EvtRecTrack*>( m_visibleEvidence ) )->mdcTrack();
232 tmp->setCharge( mdcTrack->charge() );
233 double e = sqrt( mass * mass + mdcTrack->p3().mag2() );
234 tmp->setP4( HepLorentzVector( mdcTrack->p3(), e ) );
235 }
236
237 return tmp;
238}
239
240#endif /* CLEODCHAIN_CDCHARGEDVISIBLE_CC */
CDCandidate(const CDCandidate &aOtherCDCandidate)
int charge() const
double mass() const
virtual DecayChain::KinematicData * defaultKinematicData() const
static double mass(DBCandidate::Hypo aHypo)
void setCharge(const int aCharge)
void setP4(const HepLorentzVector &aMomentum)
IMPLICIT REAL *A H
Definition myXsection.h:1