// ------------------------------------------------------------------------- // ----- CbmSttMinuitTrackFitter header file ----- // ----- Created 29/03/06 by R. Castelijns ----- // ------------------------------------------------------------------------- /** CbmSttTrackFitter *@author R.Castelijns ** ** Abstract base class for concrete STT track fitting algorithm. ** Each derived class must implement the method DoFit. This has ** to operate on an object of type CbmSttTrack and fill the ** parameters fPidHypo, fParamFirst, fParamLast, fFlag and fChi2. **/ #ifndef CBMSTTMINUITTRACKFITTER #define CBMSTTMINUITTRACKFITTER 1 #include "CbmSttTrack.h" #include "CbmSttHit.h" #include "CbmTrackParam.h" #include "CbmSttTrackFitter.h" #include "CbmSttHoughAccumulatorNew.h" #include "TMinuit.h" #include "TCanvas.h" #include "TClonesArray.h" #include #include using std::string; using std::stringstream; using std::map; class CbmSttTrackFitter; void fcnRadialCircular(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag); void fcnLongitudinal(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag); class CbmSttMinuitTrackFitter : public CbmSttTrackFitter { private: Bool_t fFirstHit; Double_t fRefAngle; Int_t fVerbose; Bool_t rootoutput; Int_t fEventCounter; CbmSttTrack* fTrack; TList fHitCollectionList; TCanvas *eventCanvas; void plotAllIsochrones(CbmSttTrack* pTrack); Double_t CalculateRadialHitCoordinatesCircular(Double_t xCenter, Double_t yCenter, Double_t radius); Bool_t GetCharge(Double_t dCenter, Double_t phiCenter, Double_t radius, Int_t &charge, Int_t type = 0); void OrderHitsByZ(map &hitMap); void OrderHitsByR(map &hitMap); Double_t GetHitAngle(Int_t hitNo, Double_t dCenter, Double_t phiCenter, Double_t radius); Double_t GetHitRadius(Int_t hitNo); void GetTrackletCircular(Double_t firstX, Double_t firstY, Double_t firstR, Double_t secondX, Double_t secondY, Double_t secondR, Double_t thirdX, Double_t thirdY, Double_t thirdR, Double_t *circleRadii, Double_t *circleCentersX, Double_t *circleCentersY) const; Int_t NumberOfLineCircleIntersections(Double_t xline1, Double_t yline1, Double_t xline2, Double_t yline2, Double_t xcircle, Double_t ycircle, Double_t rcircle) const; Bool_t putStraw(Double_t xpos, Double_t ypos, Double_t radius); void plotAllStraws(); public: void GetLinearSeed(Double_t &dist, Double_t &theta); void plotAllIsochronesZR(); virtual void AddHitCollection(TClonesArray* mHitArray) {fHitCollectionList.Add(mHitArray); } Double_t GetChiSquare(Double_t parx, Double_t pary, Double_t parr); Double_t GetChiSquareLongitudinal(Double_t dist, Double_t theta); CbmSttMinuitTrackFitter(); CbmSttMinuitTrackFitter(Int_t verbose); ~CbmSttMinuitTrackFitter(); void Init(); Int_t DoFit(CbmSttTrack* pTrack, Int_t pidHypo = 211); virtual void Extrapolate( CbmSttTrack* track, Double_t r, CbmTrackParam *param ); CbmSttTrack* GetTrack() const { return fTrack; }; CbmSttHit* GetHitFromCollections(Int_t hitCounter) const; Double_t refAngle; ClassDef(CbmSttMinuitTrackFitter,1); }; #endif