//* INITIALIZATION
//*
+ //* Set magnetic field for all particles
+
+ static void SetField( Double_t Bz );
+
//* Constructor (empty)
- AliKFParticle():AliKFParticleBase(), fBz(0) {}
+ AliKFParticle():AliKFParticleBase(){}
//* Destructor (empty)
~AliKFParticle(){}
+ //* Construction of mother particle by its 2-3-4 daughters
+
+ AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2 );
+
+ AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2,
+ const AliKFParticle &d3 );
+
+ AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2,
+ const AliKFParticle &d3, const AliKFParticle &d4 );
+
//* Initialisation from ALICE track, PID hypothesis can be provided
- AliKFParticle( const AliExternalTrackParam &track, Double_t bz, Int_t PID = 211 );
+ AliKFParticle( const AliExternalTrackParam &track, Int_t PID );
//* Initialisation from ESD vertex
- AliKFParticle( const AliESDVertex &vertex, Double_t bz );
-
- void SetBz(Double_t bz) {fBz=bz;}
- Double_t GetBz() const {return fBz;}
+ AliKFParticle( const AliESDVertex &vertex );
//* Copy vertex part to ESD vertex
//*
- //* Simple way to construct particles ex. D0 = Pion + Kaon;
-
- AliKFParticle operator +( const AliKFParticle &Daughter ) const;
+ //* Add daughter to the particle
- void operator +=( const AliKFParticle &Daughter );
+ void AddDaughter( const AliKFParticle &Daughter );
- //* Add daughter track to the particle
+ //* Add daughter via += operator: ex.{ D0; D0+=Pion; D0+= Kaon; }
- void AddDaughter( const AliKFParticle &Daughter );
+ void operator +=( const AliKFParticle &Daughter );
//* Set production vertex
void SubtractFromVertex( AliKFParticle &v ) const ;
void SubtractFromVertex( AliESDVertex &v ) const ;
-
protected:
//*
//* Method to access ALICE field
- Double_t GetFieldAlice() const ;
+ static Double_t GetFieldAlice();
//* Other methods required by the abstract AliKFParticleBase class
void GetFieldValue( const Double_t xyz[], Double_t B[] ) const ;
void GetDStoParticle( const AliKFParticleBase &p, Double_t &DS, Double_t &DSp )const ;
void Transport( Double_t dS, Double_t P[], Double_t C[] ) const ;
+ static void GetExternalTrackParam( const AliKFParticleBase &p, Double_t &X, Double_t &Alpha, Double_t P[5] ) ;
+ void GetDStoParticleALICE( const AliKFParticleBase &p, Double_t &DS, Double_t &DS1 ) const;
+
+ private:
-private:
- Double_t fBz; // Bz compoment of the magnetic field
+ static Double_t fgBz; //* Bz compoment of the magnetic field
- ClassDef( AliKFParticle, 2 );
+ ClassDef( AliKFParticle, 1 );
};
//---------------------------------------------------------------------
+inline void AliKFParticle::SetField( Double_t Bz )
+{
+ fgBz = -Bz;//!!!
+}
+
+
+inline AliKFParticle::AliKFParticle( const AliKFParticle &d1,
+ const AliKFParticle &d2 )
+{
+ AliKFParticle mother;
+ mother+= d1;
+ mother+= d2;
+ *this = mother;
+}
+
+inline AliKFParticle::AliKFParticle( const AliKFParticle &d1,
+ const AliKFParticle &d2,
+ const AliKFParticle &d3 )
+{
+ AliKFParticle mother;
+ mother+= d1;
+ mother+= d2;
+ mother+= d3;
+ *this = mother;
+}
+
+inline AliKFParticle::AliKFParticle( const AliKFParticle &d1,
+ const AliKFParticle &d2,
+ const AliKFParticle &d3,
+ const AliKFParticle &d4 )
+{
+ AliKFParticle mother;
+ mother+= d1;
+ mother+= d2;
+ mother+= d3;
+ mother+= d4;
+ *this = mother;
+}
+
inline void AliKFParticle::Initialize()
{
AliKFParticleBase::operator +=( Daughter );
}
-inline AliKFParticle AliKFParticle::operator +( const AliKFParticle &Daughter ) const
-{
- AliKFParticle tmp;
- const AliKFParticle *v[2] = {this, &Daughter };
- tmp.Construct( v,2);
- return tmp;
-}
+//inline AliKFParticle AliKFParticle::operator +( const AliKFParticle &Daughter ) const
+//{
+//AliKFParticle tmp;
+//tmp+= *this;
+//tmp+= Daughter;
+//return tmp;
+//}
inline void AliKFParticle::AddDaughter( const AliKFParticle &Daughter )
{
inline void AliKFParticle::TransportToVertex( const AliESDVertex &v )
{
- TransportToPoint( AliKFParticle(v,fBz).fP );
+ TransportToPoint( AliKFParticle(v).fP );
}
inline void AliKFParticle::TransportToParticle( const AliKFParticle &p )
{
return AliKFParticleBase::GetDStoPointBz( GetFieldAlice(), xyz );
}
+
inline void AliKFParticle::GetDStoParticle( const AliKFParticle &p,
- Double_t &DS, Double_t &DSp ) const
+ Double_t &DS, Double_t &DSp ) const
{
- return AliKFParticleBase::GetDStoParticleBz( GetFieldAlice(), p, DS,DSp);
+ GetDStoParticleALICE( p, DS, DSp );
+ //AliKFParticleBase::GetDStoParticleBz( GetFieldAlice(), p, DS,DSp);
}
inline Double_t AliKFParticle::GetDistanceFromVertex( const AliESDVertex &Vtx ) const
{
- return GetDistanceFromVertex( AliKFParticle(Vtx,fBz) );
+ return GetDistanceFromVertex( AliKFParticle(Vtx) );
}
inline Double_t AliKFParticle::GetDeviationFromVertex( const AliESDVertex &Vtx ) const
{
- return GetDeviationFromVertex( AliKFParticle(Vtx,fBz) );
+ return GetDeviationFromVertex( AliKFParticle(Vtx) );
}
inline Double_t AliKFParticle::GetDistanceFromParticle( const AliKFParticle &p ) const
{
- return AliKFParticleBase::GetDistanceFromParticleBz( GetFieldAlice(), p);
+ return AliKFParticleBase::GetDistanceFromParticle( p );
}
inline Double_t AliKFParticle::GetDeviationFromParticle( const AliKFParticle &p ) const
{
- return AliKFParticleBase::GetDeviationFromParticleBz( GetFieldAlice(),p);
+ return AliKFParticleBase::GetDeviationFromParticle( p );
}
inline void AliKFParticle::SubtractFromVertex( AliKFParticle &v ) const
inline void AliKFParticle::SubtractFromVertex( AliESDVertex &v ) const
{
- AliKFParticle vTmp(v,fBz);
+ AliKFParticle vTmp(v);
SubtractFromVertex( vTmp );
v = AliESDVertex( vTmp.fP, vTmp.fC, vTmp.fChi2, (vTmp.fNDF +3)/2, v.GetName() );
}
v = AliESDVertex( vTmp.fP, vTmp.fC, vTmp.fChi2, (vTmp.fNDF +3)/2 );
}
-inline Double_t AliKFParticle::GetFieldAlice() const
+inline Double_t AliKFParticle::GetFieldAlice()
{
- return fBz;
+ return fgBz;
}
inline void AliKFParticle::GetFieldValue( const Double_t * /*xyz*/, Double_t B[] ) const
}
inline void AliKFParticle::GetDStoParticle( const AliKFParticleBase &p,
- Double_t &DS, Double_t &DSp )const
+ Double_t &DS, Double_t &DSp )const
{
- return AliKFParticleBase::GetDStoParticleBz( GetFieldAlice(), p, DS,DSp);
+ GetDStoParticleALICE( p, DS, DSp );
+ //AliKFParticleBase::GetDStoParticleBz( GetFieldAlice(), p, DS,DSp);
}
inline void AliKFParticle::Transport( Double_t dS, Double_t P[], Double_t C[] ) const