/** * \file TrkLevel2.h * \author Elena Vannuccini */ #ifndef trklevel2_h #define trklevel2_h #include #include #include #include #include //#include #include #include // z-coordinate of track state-vector reference-plane #define ZINI 23.5 // upper and lower (mechanical) z-coordinate of the tracker //#define ZTRKUP 22.29 //#define ZTRKDW -22.22 // (mechanical) z-coordinate of the tracker planes #define ZTRK6 -22.23 #define ZTRK5 -13.32 #define ZTRK4 -4.42 #define ZTRK3 4.48 #define ZTRK2 13.38 #define ZTRK1 22.28 // (mechanical) x/y-coordinates of magnet cavity #define XTRKL -8.1 #define XTRKR 8.1 #define YTRKL -6.6 #define YTRKR 6.6 /** * \brief Class to describe, by points, a particle trajectory in the apparatus. * * The idea is to create it by integrating the equations of motion, given the * track state vector and the z coordinates where to evaluate track position. */ // ================================================================== class Trajectory : public TObject{ private: public: int npoint; ///< number of evaluated points along the trajectory float* x; ///< x coordinates float* y; ///< y coordinates float* z; ///< z coordinates float* thx; ///< x projected angle float* thy; ///< y projected angle float* tl; ///< track length Trajectory(); Trajectory(int n); Trajectory(int n, float* pz); ~Trajectory(){Delete();}; void Dump(); void Delete(); int DoTrack2(float* al); float GetLength(){float l=0; for(int i=0; iAt(ip)); return pt;}; TrkCluster *GetClusterY(int ip){TrkCluster *pt = (TrkCluster*)(cly->At(ip)); return pt;}; TrkTrack* GetTrkTrack(){return this;}; friend class TrkLevel2; ClassDef(TrkTrack,2); }; /** * \brief Class to describe single clusters ("singlets"). * * Single clusters are clusters not associated to any track. */ class TrkSinglet : public TObject { private: public: TRef cls; int plane; ///GetEntries();} ///< number of stored track int nclsx(){return SingletX->GetEntries();} ///< number of x singlets int nclsy(){return SingletY->GetEntries();} ///< number of y singlets void Dump(); void SetFromLevel2Struct(cTrkLevel2 *, TrkLevel1 *); void SetFromLevel2Struct(cTrkLevel2 *s2){ SetFromLevel2Struct(s2, NULL); }; void SetFromLevel2Struct(TrkLevel1 *l1) { SetFromLevel2Struct(&level2event_, l1); }; void SetFromLevel2Struct() { SetFromLevel2Struct(&level2event_); }; void GetLevel2Struct(cTrkLevel2 *) const; void LoadField(TString); float GetBX(float*); float GetBY(float*); float GetBZ(float*); Float_t GetZTrk(Int_t); Float_t GetXTrkLeft(){return XTRKL;}; Float_t GetXTrkRight(){return XTRKR;}; Float_t GetYTrkLeft(){return YTRKL;}; Float_t GetYTrkRight(){return YTRKR;}; TrkSinglet *GetSingletX(int); TrkSinglet *GetSingletY(int); TrkTrack *GetStoredTrack(int i); Int_t GetSeqNo(Int_t i) {return (((TrkTrack *)Track->At(i))->seqno);}; ///< Returns track sequential number // TClonesArray *GetTracks_Chi2Sorted(); // TClonesArray *GetTracks_NFitSorted(); // TClonesArray *GetTracks(); TRefArray *GetTracks_NFitSorted(); TRefArray *GetTracks(){return this->GetTracks_NFitSorted();}; // int GetNTracks(){return this->GetTracks()->GetEntries();} Int_t GetNTracks(); TrkTrack* GetTrack(int i); TrkTrack* GetTrackImage(int i); TrkLevel2* GetTrkLevel2(){return this;} TClonesArray* GetTrackArray(){return Track;};///< returns pointer to the track array ClassDef(TrkLevel2,2); }; #endif