#ifndef CBMGEANEPRO_H #define CBMGEANEPRO_H 1 #include "TNamed.h" #include "TVector3.h" #include "TGeant3.h" //class TGeant3; class TDatabasePDG; class TArrayD; class CbmTrackPar; class CbmTrackParP; class CbmTrackParH; class CbmField; class CbmGeanePro : public TNamed { public: /** Default constructor **/ CbmGeanePro(); /** Destructor **/ ~CbmGeanePro(); /** Propagate particle *@param StartPos Starting position *@param StartPosErr Starting position error *@param StartMom Starting Momentum *@param StartMomErr Starting Momentum error *@param PDGCode PDG code of the particle **/ /** *@param TStart track parameter at starting (Helix) *@param TStart track parameter at end point (Helix) *@param PDG PDG code of particle (Hypothesis) */ Bool_t Propagate(CbmTrackParH *TStart, CbmTrackParH *TEnd, Int_t PDG); /** *@param TStart track parameter at starting (Parabola) *@param TStart track parameter at end point (Helix) *@param PDG PDG code of particle (Hypothesis) */ Bool_t Propagate(CbmTrackParP *TStart, CbmTrackParH *TEnd, Int_t PDG); /** *@param TStart track parameter at starting (Parabola) *@param TStart track parameter at end point (Parabola) *@param PDG PDG code of particle (Hypothesis) */ Bool_t Propagate(CbmTrackParP *TStart, CbmTrackParP *TEnd, Int_t PDG); /** *@param TStart track parameter at starting (Helix) *@param TStart track parameter at end point (Parabola) *@param PDG PDG code of particle (Hypothesis) */ Bool_t Propagate(CbmTrackParH *TStart, CbmTrackParP *TEnd, Int_t PDG); /** Tracking until plane reached *@param v0 vector to a point on the plane *@param v1 first unit vector on the plane *@param v2 second unit vector on the plane **/ Bool_t PropagateToPlane(TVector3 &v0, TVector3 &v1, TVector3 &v2); /** Tracking until plane reached *@param v1 vector to a point on the plane *@param v2 first unit vector on the plane **/ Bool_t PropagateFromPlane(TVector3 &v1, TVector3 &v2); /** Tracking until volume reached *@param VolName Volume name *@param CopyNo Copy number of the volume *@param option =1 prediction when entring in the volume =2 prediction when leaving the volume **/ Bool_t PropagateToVolume(TString VolName, Int_t CopyNo ,Int_t option); /** Tracking until prescribed length reached *@param VolName track length **/ Bool_t PropagateToLength(Float_t length); void Init(CbmTrackPar *TParam); void Propagate(Int_t PDG); // ------------------- aggiunta jun2007 ---------------------- void Track2ToLine(TVector3 x1, TVector3 x2, TVector3 w1, TVector3 w2, TVector3 &Pfinal, TVector3 &Pwire, Int_t &Iflag, Double_t &Dist, Double_t &Length); void Track2ToPoint(TVector3 x1, TVector3 x2, TVector3 w1, TVector3 &Pfinal, Double_t &Dist, Double_t &Length); void Track3ToLine(TVector3 x1, TVector3 x2, TVector3 x3, TVector3 w1, TVector3 w2, TVector3 &Pfinal, TVector3 &Wire, Int_t &Iflag, Double_t &Dist, Double_t &Length, Double_t &Radius); void Track3ToPoint(TVector3 x1, TVector3 x2, TVector3 x3, TVector3 w1, TVector3 &Pfinal, Int_t &Iflag, Double_t &Dist, Double_t &Length, Double_t &Radius); // closest Bool_t SetWire(TVector3 extremity1, TVector3 extremity2); Bool_t SetPoint(TVector3 pnt); Bool_t PropagateToPCA(Int_t pca); int FindPCA(Int_t pca, Int_t PDGCode, TVector3 point, TVector3 wire1, TVector3 wire2, Double_t maxdistance, Double_t &Rad, TVector3 &vpf, TVector3 &vwi, Double_t &Di, Float_t &trklength); TVector3 GetPCAOnWire() { return vwi; } TVector3 GetPCAOnTrack() { return vpf; } Float_t GetLengthAtPCA() { return trklength; } // ------------------- aggiunta jul2007 ---------------------- Bool_t PropagateToVirtualPlaneAtPCA(Int_t pca); // ------------------------------------------------------------- private: TGeant3 *gMC3; TString fPropOption; Float_t ein[15]; /** Input error matrix**/ Int_t nepred; /** Number of predictions**/ TDatabasePDG *fdbPDG; Float_t pli[6]; Float_t x2[3]; Float_t p2[3]; TVector3 Pos; TVector3 PosErr; TVector3 Mom; TArrayD *fErrorMat; Ertrio_t *afErtrio; Float_t x1[3]; Float_t p1[3]; Int_t GeantCode; CbmTrackParH *fTrkParH; CbmTrackParP *fTrkParP; CbmTrackPar *fTrkPar; Int_t ProMode; CbmField *fField; Float_t plo[12]; TString VName; Int_t VCopyNo; Bool_t VEnter; // aggiunta ---------------- TVector3 fpoint, fwire1, fwire2; Int_t fPCA; Double_t Rad, Di; TVector3 vpf, vwi; Float_t trklength; // da cancellare Int_t flag; //! ClassDef(CbmGeanePro,1); }; #endif