/* * PndOnlineSTTTripletFinder.h * * Created on: Nov. 21, 2012 * Author: Sean Dobbs (s-dobbs@northwestern.edu) * & Marius Mertens (m.mertens@fz-juelich.de) * * */ #ifndef PNDONLINESTTTRIPLETFINDER_H_ #define PNDONLINESTTTRIPLETFINDER_H_ #include "PndOnlineAlgoTask.h" #include "PndOnlineManager.h" #include "PndOnlineSttTriplet.h" #include "PndSttStrawMap.h" #include #include using std::vector; using std::pair; class PndOnlineSttTripletFinder: public PndOnlineAlgoTask { public: PndOnlineSttTripletFinder(PndOnlineManager *the_manager, TClonesArray *stt_tubes) : online_manager(the_manager), tube_array(stt_tubes), fStrawMap(stt_tubes) {} virtual ~PndOnlineSttTripletFinder() {} virtual InitStatus Init(); virtual void Exec(Option_t* opt = ""); virtual void Finish(); private: PndOnlineSttTripletFinder() : online_manager(), tube_array() {} // make sure that we have pointers properly set PndOnlineManager *online_manager; TClonesArray *tube_array; PndSttStrawMap fStrawMap; map > fTubeNeighbors; vector > pivot_tube_ranges; vector > skew_tube_ranges; int verbosity; //0-quiet, 1-error(>0), 2-warn(>1), 3-info(>2), 4-whoa(>3) // methods TObjArray* FindTriplets(vector > hit_channel_map, Int_t starttube, Int_t stoptube); void ProcessPivotTubeHit(Int_t pivotID, vector > hit_channel_map, list::iterator pivotIter, TObjArray* tripletlist); Bool_t TripletGood(const PndOnlineSttTriplet* const mytriplet); void MakeTripletTracks(vector& tripletstorage); void MakeTripletTracks(vector& tripletstorage, int i, int j, std::vector >& tripletcands); void CombineLayers(TObjArray* innertriplets, TObjArray* outertriplets, double maxphi, std::vector >& tripletcands); void TrackPostProcessingHitProximity(std::vector >& tripletcands, vector > hit_channel_map, std::vector skewletstorage); TObjArray* FindSkewlets(vector< list > hit_channel_map, Int_t starttube, Int_t stoptube, Int_t starttubenext, Int_t stoptubenext); TObjArray* FindSkewlets2(vector< list > hit_channel_map, Int_t starttube, Int_t stoptube, Int_t starttubenext, Int_t stoptubenext); TObjArray* FindSkewletHalf(vector< list > hit_channel_map, Int_t starttube, Int_t stoptube); void ProcessSkewPivotTubeHit(Int_t pivotID, vector< list > hit_channel_map, list::iterator pivotIter, TObjArray* tripletlist); TObjArray* CombineSkewlets(TObjArray* innerlist, TObjArray* outerlist); //void ProcessSkewPivotTubeHit(Int_t pivotID, vector > hit_channel_map, list::iterator pivotIter, TObjArray* tripletlist); UInt_t FindSameSkewNeighborCMS3D(UInt_t leftID, vector< list > hit_channel_map, TObjArray* stttubes, TVector3& cmspoint, TVector2& zminmax); UInt_t FindSameSkewNeighborCMS3D2(UInt_t leftID, vector< list > hit_channel_map, list::iterator pivotIter, TObjArray* stttubes, TVector3& cmspoint, TVector2& zminmax); Double_t FindCrossing(const TVector3& p1, const TVector3& u1, const TVector3& p2, const TVector3& u2, TVector3& poca); Double_t GetTubeDist3D(Int_t leftID, Int_t rightID, TObjArray* stttubes); void CalculateCircle(const PndOnlineSttTriplet* const innertriplet, const PndOnlineSttTriplet* const outertriplet, Double_t& originx, Double_t& originy, Double_t& radius, Int_t& clockwise); Bool_t HitInRange(Double_t originx, Double_t originy, Double_t radius, Int_t clockwise, PndSttHit* stthit, Double_t maxdistance); Bool_t HitInRange(Double_t originx, Double_t originy, Double_t radius, Int_t clockwise, Int_t tubeID, Double_t maxdistance); Bool_t HitInRange(Double_t originx, Double_t originy, Double_t radius, Int_t clockwise, const TVector2& hitpos, Double_t maxdistance); Double_t CalculateCircleProximity(Double_t originx, Double_t originy, Double_t radius, Int_t clockwise, PndSttHit* stthit); Double_t GetTubeDist(Int_t leftID, Int_t rightID, TObjArray* stttubes); void ExtractMCLinkInfo(FairMultiLinkedData* myHit, Double_t& MCEventTime, Int_t& MCEventID, Int_t& MCTrackID, Int_t& MCSttPointID); ClassDef(PndOnlineSttTripletFinder,0) ; }; #endif