/* * PndSttSkewStrawPzFinder.h * * Created on: Mar 17, 2016 * Author: walan603 */ #ifndef PNDSTTSKEWSTRAWPZFINDER_H_ #define PNDSTTSKEWSTRAWPZFINDER_H_ #include //Root includes #include //Pandaroot includes #include #include "PndSttStrawMap.h" #include class PndSttHit; class PndTrack; class PndTrackCand; class TH2D; using namespace std; class PndSttSkewStrawPzFinder { public: PndSttSkewStrawPzFinder(TClonesArray* sttTubeArray, TClonesArray* sttHitArray); virtual ~PndSttSkewStrawPzFinder() { } void AddPndRiemannTracks(vector AllRiemannTracks); void AddPndTracks(vector AllTracks); void AddPndTrackCands(vector AllTrackCands); void AddPndSttHits(vector > AllSkewedHits); void ExtractPz(); PndRiemannTrack GetRiemannTrack(int i) { return fResultPndRiemannTrack[i]; } ; PndTrack GetTrack(int i) { return fResultPndTrack[i]; } ; PndTrackCand GetTrackCand(int i) { return fResultPndTrackCand[i]; } ; PndSttSkewStrawPzFinderData GetPzData(int i) { return fResultPzData[i]; } ; vector GetSttHits(int i) { return fResultSkewedSttHits[i]; } ; int NumPndRiemannTracks() { return fResultPndRiemannTrack.size(); } ; int NumPndTracks() { return fResultPndTrack.size(); } ; int NumPndTrackCands() { return fResultPndTrackCand.size(); } ; int NumPndPzData() { return fResultPzData.size(); } ; int NumPndSttHits() { return fResultSkewedSttHits.size(); } ; TH2D* getHoughHisto() { return fHoughHisto; } void Reset(){ fHoughHisto->Reset(); fVectorPndRiemannTrack.clear(); fVectorPndTrack.clear(); fVectorPndTrackCand.clear(); fVectorSkewedSttHits.clear(); fResultPndRiemannTrack.clear(); fResultPndTrack.clear(); fResultPndTrackCand.clear(); fResultPzData.clear(); fResultSkewedSttHits.clear(); //ZPhiPairVector.clear(); //TrueZPhi.clear(); if (fVerbose > 0) { cout << "PndSttSkewStrawPzFinder::Reset()" << endl; } } private: int fVerbose; Double_t fSteps; Double_t LineCombiAngleThreshold; TClonesArray *fTubeArray; TClonesArray *fSTTHits; PndSttStrawMap* fStrawMap; // for getting more information about the tubes TH2D* fHoughHisto; //Line Hough histogram //Vectors of initial tracks and hits vector fVectorPndRiemannTrack; vector fVectorPndTrack; vector fVectorPndTrackCand; vector > fVectorSkewedSttHits; //Vectors of final tracks and hits that extracted Pz vector fResultPndRiemannTrack; vector fResultPndTrack; vector fResultPndTrackCand; vector > fResultSkewedSttHits; //Additional data produced by PzFinder vector fResultPzData; //Vectors used internally in the PzFinder //vector< vector > ZPhiPairVector; //vector TrueZPhi; void InitSkewed(); bool Clockwise(vector > ZPhiPairVector, TVector2 center);//TODO: implement check clockwise! Int_t ComputeSegmentCircleIntersection(TVector2 ex1, TVector2 ex2, double xc, double yc, double R, TVector2 &intersection1, TVector2 &intersection2); TVector2 ComputeTangentInPoint(double xc, double yc, TVector2 point); //TODO: Generalize output data structure to vector> vector LineCombiIsoFinder(vector > ZPhiPairVector); //TODO: refine Hough transform part //TODO: Generalize input data structure to vector> vector HoughTrueIsoFinder(vector > ZPhiPairVector, TH2D *HoughSpace, TVector2 &lineparams); vector HoughTrueIsoFinder2(vector > ZPhiPairVector, TH2D *HoughSpace, TVector2 &lineparams); vector > TranslateZPhi(vector > ZPhiPairVector); TVector2 TheilSen(vector > ZPhiPairVector); vector > MoveSkewedHitsToCircle(TVector2 circle, Double_t circlerad, vector skewhits); void NestedFor(vector ×, vector ¤t, pair,double> &best, double sum, vector,double> > > matrix, int depth); TVector2 PzLineFitExtract(vector< TVector2> ZPhi); TVector2 PzLineFitExtract2(vector > ZPhiPairVector); FairTrackParP GetTrackParam(FairTrackParP oldParam, PndRiemannTrack circle, TVector2 lineparams, Double_t pz); Double_t CalculateResidual(Double_t lineSlope, Double_t lineIntercept, TVector2 ZPhiPoint); ClassDef(PndSttSkewStrawPzFinder,1); }; #endif /* PNDSTTSKEWSTRAWPZFINDER_H_ */