62 #include "TLorentzVector.h"
88 const TLorentzVector& ip4Reson,
90 const double imSought,
91 const Bool_t izBoostApprox )
94 : mSought2 ( imSought* imSought )
95 , zBoostApprox ( izBoostApprox )
96 , p4ObsCache ( 0.0,0.0,0.0,-1.0 )
98 if ( imChild == 0.0 ) {
99 cerr <<
"RhoFindOmittedParticle constructed with mChild=0" << endl;
103 cerr <<
"RhoFindOmittedParticle constructed with mSought=0" << endl;
109 beta = -ip4Reson.BoostVector();
117 cerr <<
"RhoFindOmittedParticle: mChild too large for decay" << endl;
149 const TVector3& p3Seen )
197 TLorentzVector cmp4Obs ( p4Obs );
198 cmp4Obs.Boost (
beta );
201 const double cmpObs2 = TVector3 ( cmp4Obs.X(),cmp4Obs.Y(),cmp4Obs.Z() ).Mag2();
222 if ( cmpSought != 0 )
225 ( 2 *
sqrt ( cmpObs2 ) * cmpSought );
230 cmAxis = -TVector3 ( cmp4Obs.X(),cmp4Obs.Y(),cmp4Obs.Z() ).Unit() *
openCos * cmpSought;
251 return TLorentzVector ( 0.0,0.0,0.0,0.0 );
254 TLorentzVector cmp4Sought[2];
262 double cmCosPlaneAxis2;
276 cmY = TVector3 ( -p3Seen.Y(), p3Seen.X(), 0.0 ).Unit();
278 cmY =
beta.Cross ( p3Seen ).Unit();
281 const TVector3 unitAxis =
cmAxis.Unit();
286 const TVector3 unitProj = unitAxis - unitAxis.Dot ( cmY ) * cmY;
291 cmCosPlaneAxis2 = unitProj.Mag2();
295 return TLorentzVector ( 0.0,0.0,0.0,0.0 );
302 const TVector3 axisProj =
303 (
cmAxis.Mag() / ( cmCosPlaneAxis2 ) ) * unitProj;
312 const TVector3 difference =
314 unitProj.Cross ( cmY ).Unit();
316 cmp4Sought[0] = TLorentzVector ( axisProj + difference,
cmESought );
317 cmp4Sought[1] = TLorentzVector ( axisProj - difference,
cmESought );
324 cmp4Sought[0].Boost ( -
beta );
325 cmp4Sought[1].Boost ( -
beta );
327 if ( TVector3 ( cmp4Sought[0].
X(),cmp4Sought[0].
Y(),cmp4Sought[0].
Z() ).Unit().Dot ( p3Seen ) >
328 TVector3 ( cmp4Sought[1].
X(),cmp4Sought[1].
Y(),cmp4Sought[1].
Z() ).Unit().Dot ( p3Seen ) ) {
330 return cmp4Sought[0];
333 return cmp4Sought[1];
TVector3 beta
The other vector, stored.
friend F32vec4 sqrt(const F32vec4 &a)
double cmESought
cos of opening angle.
TLorentzVector p4ObsCache
energy, squared 3-momentum of Child.
TLorentzVector SecondVector() const
TVector3 cmAxis
From lab to CM (-beta CM to lab)
TLorentzVector FitToSeen(const TLorentzVector &p4Obs, const TVector3 &p3Seen)
double openCos
Axis of CM cone.
TLorentzVector secondChoice
RhoFindOmittedParticle(const TLorentzVector &ip4Reson, const double imChild, const double imSought, const Bool_t izBoostApprox=kTRUE)
friend F32vec4 fabs(const F32vec4 &a)
void MakeCone(const TLorentzVector &p4Obs)
float cmEChild
Flag: do we approximate boost in.
virtual ~RhoFindOmittedParticle()
Bool_t zBoostApprox
squared mass of Sought
double cmpSought2
CM energy of sought particle.
TLorentzVector ClosestFit(const TVector3 &p3Seen)