//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of resCalc // Uses existing GFTracks as reference and calculates // residua in XY for TpcClusters. // Developped for Test Bench tracking systems using the // RK track representation // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer (original author) // Maxence Vandenbroucke (Application of TpcCdcFit2DResCalc to GFTracks) // Physik Department E18, TUM // //----------------------------------------------------------- #ifndef TPCREFGFTRKRES_ALIGN_HH #define TPCREFGFTRKRES_ALIGN_HH #include #include #include #include #include "AbsRefTrackResCalc.h" #include "TpcAlignmentManager.h" class GFRecoHitFactory; class TpcRefGFTrkResCalc_Alignment : public AbsRefTrackResCalc { public: TpcRefGFTrkResCalc_Alignment(); virtual ~TpcRefGFTrkResCalc_Alignment(); virtual int calc(); virtual bool init(); void setTpcSPHitBranchName(const TString& name) {fTpcSPHitBranchName=name;} void setGFTrackBranchName(const TString& name) {fGFTrackBranchName=name;} void setRefGFTrackBranchName(const TString& name) {fRefGFTrackBranchName=name;} void setTpcClusterBranchName(const TString& name) {fTpcClusterBranchName=name;} void setTrackRepId(const int id){fNRep=id;} void setRequireGoodFit(bool opt=true) {fRequireGoodFit = opt;} void setUseClusters(bool opt=true){fUseClusters=opt;} void writeHists(); void setOrigTransfName(TString opt){fOrigTransfName=opt;} void setRefMomCut(double mom){fRefTrackMomentumCut=mom;} void setTpcMomCut(double mom){fTpcTrackMomCut=mom;} //Select CDC tracks based on where in the sectors the lie, angle whise: // track.Phi() modulo 22.5 // minAngle and maxAngle has to be between 0 and 22.5 // void setSectorTrackSelection(double minAngle_,double maxAngle); static double phiDifference(double angle1,double angle2); private: TClonesArray* fRefGFTrackArray; TClonesArray* fTpcSPHitArray; TClonesArray* fGFTrackArray; TClonesArray* fTpcClusterArray; TString fRefGFTrackBranchName; TString fGFTrackBranchName; TString fTpcSPHitBranchName; TString fTpcClusterBranchName; TpcAlignmentManager* fAlMan; TString fOrigTransfName; int fNRep; //which rep to use int fDetID; bool fRequireGoodFit; bool fUseClusters; bool fAlignedMatching; double fTrackdPhiCut; double fRefTrackMomentumCut; double fRefTrackPosCut; double fTpcTrackMomCut; bool sectorTrackSelection; double minAngle; double maxAngle; TH1D* dPhiHist; TH2D* dPhiVsPhiHist; TH1D* dPhiPosHist; TH2D* dPhiVsPhiPosHist; TH1D* dPhiMinusHist; TH2D* dPhiMinusVsPhiHist; TH1D* dPhiMinusPosHist; TH2D* dPhiMinusVsPhiPosHist; TH1D* dPhiPlusHist; TH2D* dPhiPlusVsPhiHist; TH1D* dPhiPlusPosHist; TH2D* dPhiPlusVsPhiPosHist; TH1D* dPhiTpcTrkPosHist; TH1D* dPhiRefTrkPosHist; TH1D* rRefHist; TH2D* xyRefHist; TH1D* momRefHist; TH1D* phiRefHist; TH1D* rRefCutHist; TH2D* xyRefCutHist; TH1D* momRefCutHist; TH1D* phiRefCutHist; TH1D* dPhiRefCutTrkPosHist; TH1D* dPhiRefCutTrkPosHist2; TH1D* dTheta; TH2D* dThetaVTheta; TH1D* dThetaCut; TH2D* dThetaVThetaCut; TH1D* dThetaPos; TH2D* dThetaPosVThetaPos; TH1D* dThetaPosCut; TH2D* dThetaPosVThetaPosCut; TH1D* rHist; TH1D* momHist; TH1D* phiHist; TH1D* rHistCut; TH1D* momHistCut; TH1D* signedXYResidual; TH1D* signedXYResidualPlus; TH1D* signedXYResidualMinus; TH2D* signedXYResidualVsPhi; TH2D* signedXYResidualVsPhiPlus; TH2D* signedXYResidualVsPhiMinus; std::vector hists; std::map histMap; TString fQAFileName; //zSlicing double zStart; double zEnd; int zSlices; std::vector sliceNamesPlusPos; std::vector sliceNamesPlusMom; std::vector sliceNamesMinusPos; std::vector sliceNamesMinusMom; TFile* fHistoFile; public: ClassDef(TpcRefGFTrkResCalc_Alignment,3) }; #endif