//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Reclustring // // // Environment: // Software developed for the FOPI-TPC Detector at GSI. // // Author List: // Martin Berger TUM (original author) // //----------------------------------------------------------- #ifndef TPCRECLTASK_HH #define TPCRECLTASK_HH //Base class #include "FairTask.h" #include "TClonesArray.h" #include "TString.h" #include "TStopwatch.h" #include "TpcCluster.h" #include "TH1D.h" #include "TpcDevmapCyl.h" #include "TpcRiemannTrack.h" #include "GFTrack.h" #include "TpcClusterCorrector.h" #include #include #include // Collaborating Class Declarations -------------------------- class TClonesArray; class TpcSPHit; class TpcCluster; class TpcPrelimCluster; class TpcDigiPar; class TpcPadPlane; class TH2D; class TpcGas; class TpcReClusterizerTask : public FairTask { public: //Constructor ---------------------------------------------- TpcReClusterizerTask(); virtual ~TpcReClusterizerTask(); virtual InitStatus Init(); virtual void Exec(Option_t* opt); virtual void SetParContainers(); //Setters void SetVerbose(Bool_t opt=kTRUE){fVerbose=opt;} void SetTimeInfo(Bool_t opt=kTRUE){fTimeinfo=opt;} void SetPersistence(Bool_t opt=kTRUE) {fPersistence=opt;} void SetOnDigi(Bool_t opt=kTRUE){fOnDigi=opt;}; void SetUseFirstDigiPos(Bool_t opt=kTRUE){fUseFirstDigiPos=opt;} void SetUseChamberEdge(Bool_t opt=kTRUE){fUseChamberEdge=opt;} void SetUseCosmics(Bool_t opt=kTRUE){fUseCosmics=opt;} void SetUseAllDigis(Bool_t opt=kTRUE){fUseAllDigis=opt;} void SetMinClusterSize(Int_t mcl){fMinClusterSize=mcl;} void SetVarStep(Bool_t opt=kTRUE){fVarStep=opt;} void SetVarStepSqrt(Bool_t opt=kTRUE){fVarStepSqrt=opt;} void SetStepOff(Double_t var){fStepOff=var;} void SetStepSlope(Double_t var){fStepSlope=var;} void SetStepOff_sqrt(Double_t var){fStepOff_sqrt=var;} void SetStepSlope_sqrt(Double_t var){fStepSlope_sqrt=var;} void SetStepOff_0_sqrt(Double_t var){fStepOff_0_sqrt=var;} void SetFac(Double_t var){fFac=var;} void SetZoff(Double_t var){fZoff=var;} void SetAlign(Bool_t opt=kTRUE){fAlign=opt;} void SetTrAlign(Bool_t opt=kTRUE){fTrAlign=opt;} //void SetGeane(Bool_t opt=kTRUE){fGeane=opt;} void SetAllRecoHitPersistence(Bool_t opt=kTRUE) {fArhpersistence=opt;} void SetTrackInit(Bool_t opt=kTRUE){fTrackInit=opt;} void SetSkipUnFitted(Bool_t opt=kTRUE){fSkipUnFitted=opt;} void SetErrorPars(Double_t var1, Double_t var2){fG=var1;fC=var2;} void SetUseFullCov(Bool_t opt=kTRUE){fuseFullCov=opt;} void SetWeightedPlaneConstruction(Bool_t opt=kTRUE){fweightedPlaneConstruction=opt;} void SetCutCov(Bool_t opt=kTRUE){fcutCov=opt;} void SetUseOnPlaneCov(Bool_t opt=kTRUE){fuseOnPlaneCov=opt;} void SetRecalcDigiPos(Bool_t opt=kTRUE){frecalcDigiPos=opt;} void SetOnlyStep(Bool_t opt=kTRUE){fOnlyStep=opt;} void SetDigiSharing(Bool_t opt=kTRUE){fDigiSharing=opt;} void SetUsePRF(Bool_t opt=kTRUE){fUsePRF=opt;} void SetUseSPHitParam(Bool_t opt=kTRUE){fUseSPHitParam=opt;} void SetDoPRF(Bool_t opt=kTRUE){fDoPRF=opt;} void SetDigiBranchName(TString dbn) {fDigiBranchName=dbn;} void SetClusterBranchName(TString cln) {fClusterBranchName=cln;} void SetRecoHitBranchName(TString rhb) {fSPHitBranchName=rhb;} void SetReClusterBranchName(TString rcln) {fReClusterBranchName=rcln;} void SetTrackBranchName(TString tn) {fTrackBranchName=tn;} void SetStepSize(Double_t stp){fstepsize=stp;} void SetRDigiCutoff(Double_t cut){fRDigiCutoff=cut;} void SetVarMinClusterSize(Bool_t opt=kTRUE){fVarMinClusterSize=opt;} void SetVarMinClusterParam(double offset, double slope, double zoffset){fMCS1=offset; fMCS2=slope; fMCS3=zoffset;} void SetClusterCorr(TString name="",Bool_t opt=kTRUE){fDevMapName=name; fClusterCorr=opt;} void SetCorrFactor(double var){fcorrFactor=var;} void SetSmallClusterCorr(Bool_t opt=kTRUE){fSmallClusterCorr=opt;} void SetCorrParameterXY(double* corrpar){fcorrector->SetParameterXY(corrpar);} void SetCorrParameterT(double* corrpar) {fcorrector->SetParameterT(corrpar); } void SetCorrParameterXY2(double* corrpar){fcorrector->SetParameterXY2(corrpar);} void SetCorrParameterT2(double* corrpar) {fcorrector->SetParameterT2(corrpar); } //void SetOutBranchName(TString tn) {fOutBranchName=tn;} private: Bool_t fPersistence; Bool_t fTimeinfo; Bool_t fOnDigi; Bool_t fIgnoreEdgeDigis; Bool_t fUseFirstDigiPos; Bool_t fUseChamberEdge; Bool_t fHistogramm; Bool_t fUseCosmics; Bool_t fUseAllDigis; Bool_t fVarStep; Bool_t fVarStepSqrt; Bool_t fAlign; Bool_t fTrAlign; Bool_t fVarMinClusterSize; //Bool_t fGeane; Bool_t fArhpersistence; Bool_t fTrackInit; Bool_t fClusterCorr; Bool_t fSmallClusterCorr; Bool_t fSkipUnFitted; Bool_t fuseFullCov; Bool_t fweightedPlaneConstruction; Bool_t fcutCov; Bool_t first; Bool_t fuseOnPlaneCov; Bool_t frecalcDigiPos; Bool_t fOnlyStep; Bool_t fDigiSharing; Bool_t fUsePRF; Bool_t fUseSPHitParam; Bool_t fDoPRF; TString fDigiBranchName; TString fClusterBranchName; TString fReClusterBranchName; TString fSPHitBranchName; TString fTrackBranchName; TString fRecoHitBranchName; TString fOutTrackBranchName; TString fDevMapName; //String fOutBranchName; TClonesArray* fDigiArray; TClonesArray* fClusterArray; TClonesArray* fReClusterArray; TClonesArray* fSPHitArray; TClonesArray* fTrackArray; TClonesArray* fRecoHitArray; TClonesArray* fOutTrackArray; //TClonesArray* fReTrackarray; TH2D* fhTrack; Bool_t RiemannReCluster(TpcRiemannTrack* ftrack); Bool_t GenfitReCluster(GFTrack* ftrack); Bool_t GenfitStepThrough(GFTrack* trk); Int_t fCounter; Int_t fHitBranchID; Int_t fSPHitID; Int_t fClBrID; Int_t fGlobCounter; Int_t fMinClusterSize; Int_t fPrelimClusterCounter; Double_t fstepsize; Double_t fStepOff; Double_t fStepSlope; Double_t fStepOff_sqrt; Double_t fStepSlope_sqrt; Double_t fStepOff_0_sqrt; Double_t fFac; Double_t fZoff; Double_t fRCutoff1; Double_t fRCutoff2; Double_t fRMin; Double_t fRMax; Double_t fZMax; Double_t fZMin; Double_t fRDigiCutoff; Double_t fMCS1,fMCS2,fMCS3; Double_t fDriftVel; Double_t fC; Double_t fG; Double_t fzJitter; Double_t fcorrFactor; double CalcIntersect(TVector3 p, TVector3 dir, bool neg=false); TpcCluster* MergeCluster(std::vector ftomerge); void PrintTime(TStopwatch watch, TString text); void InitTracks(std::vector _prelimClusters,GFTrack* _trk); void ClusterCorr(TpcCluster* cl); TpcDigiPar* fPar; TpcPadPlane* fPlane; const TpcGas* fGas; TpcDevmapCyl* fDevMap; TpcClusterCorrector* fcorrector; std::map fRecoHitMap; std::set fToWrite; public: ClassDef(TpcReClusterizerTask,1) }; #endif