#ifndef TpcClusterErrorCalib_H #define TpcClusterErrorCalib_H #include #include #include #include "TObject.h" #include "TH1.h" #include "TH2D.h" #include "TH1D.h" #include "TCanvas.h" #include "TF1.h" #include "TpcCalibCluster.h" #include "TpcClusterCalibDataset.h" class TpcClusterErrorCalib : public TObject { public: TpcClusterErrorCalib(); void addCalibCluster(TpcCalibCluster clus); void execute(); //setters: void setUseBat(Bool_t opt=kTRUE){fUseBat=opt;} void setUseFake(Bool_t opt=kTRUE){fUseFake=opt;} void setUseChi2Mean(Bool_t opt=kTRUE){fUseChi2Mean=opt;} void setUseChi2Slope(Bool_t opt=kTRUE){fUseChi2Slope=opt;} void setUseChi2Gaus(Bool_t opt=kTRUE){fUseChi2Gaus=opt;} void setUseChi2RMS(Bool_t opt=kTRUE){fUseChi2RMS=opt;} void setUseLTest(Bool_t opt=kTRUE){fUseLTest=opt;} void setFixGausMean(Bool_t opt=kTRUE){fFixGausMean=opt;} void setFixDiffusion(double diffParam){fFixDiffusion=diffParam;} void setFixAmp(double ampParam){fFixAmp=ampParam;} void setFixOffsetXY(double offsetParam){fFixOffsetXY=offsetParam;} void setFixOffsetZ(double offsetParam){fFixOffsetZ=offsetParam;} void setFitGaus(Bool_t opt=kTRUE){fFitGaus=opt;} void setPdfName(TString str){fPdfName=str;} void setMCMCIterations(int preRun, int run){fMCMCPreRunMax=preRun; fMCMCRunMax=run;} void addFakePar(double par){fake_pars.push_back(par);} void setFakePar(int i, double par){fake_pars[i]=par;} void setUseThetaChi2(bool useThetaChi2=true) { fUseThetaChi2 = useThetaChi2; } void setUseZChi2(bool useZChi2=true) { fUseZChi2 = useZChi2; } void setUseZThetaChi2(bool useZThetaChi2=true) { fUseZThetaChi2=useZThetaChi2; if(fUseZThetaChi2) { fUseThetaChi2=false; fUseZChi2=false; } } //getters: TH1* getHist(TString ident=""){return fHists[ident];} double getChi2(std::vector const &pars); double getChi2Res(std::vector const &pars); double getChi2p(double offXY, double diffXY, double offZ, double diffZ, double amp); double getChi2p(bool fake=false); double getChi2p(double* pars); double* getChi2s(){return chi2s;} double* getObservables(){return fObservables;} double* getMeanRMS(); std::vector getBestParameter(); std::vector getBestParameterErrors(); //setters for debug options void setDrawGauss(Bool_t opt=kTRUE){fdrawGauss=opt;fcgauss=new TCanvas();fcgauss->Draw();} TH2D getCurrentPullSet1(){return fDataSetA.getHist(1);} TH2D getCurrentPullSet2(){return fDataSetA.getHist(2);} //hist operations void fillHPulls(Bool_t fit=kTRUE,Int_t opt=0); void fillAngleHists(Int_t opt=0); private: Bool_t fUseBat; Bool_t fUseFake; std::vector fCalibClusterArray; std::map fHists; //TH1D binData(std::vector); void getMyDataSet(std::vector const &pars); void getMyDataSetRes(); TpcClusterCalibDataset fDataSetA; //fitting options Bool_t fUseChi2Mean; Bool_t fUseChi2Slope; Bool_t fUseChi2Gaus; Bool_t fUseChi2RMS; Bool_t fUseLTest; Bool_t fFixGausMean; Bool_t fFitGaus; bool fUseThetaChi2; bool fUseZChi2; bool fUseZThetaChi2; Bool_t fVerbose; double fFixDiffusion; double fFixAmp; double fFixOffsetXY; double fFixOffsetZ; double chi2s[12]; double fMeanRMS[12]; double fObservables[18]; //double ftmp[7]; Bool_t fPenalty0, fPenalty1, fPenalty2; int fMCMCPreRunMax; int fMCMCRunMax; int fstartBin; int fstopBin; int fstartBinT; int fstopBinT; //debug options Bool_t fdrawGauss; TString fPdfName; double getChi2G(TH1D* pullBin); double getLLG(std::vector* v1, std::vector* v2, std::vector* v3); double getLLGTest(std::vector* v1, std::vector* v2, std::vector* v3, double mean, double rms); double getLLGTest(double sum_meanTest, double sum_meanTest0, double resSum, int n, std::vector &observables,int obs_off); double getChi2RMS(double rms, double rmsErr); double getChi2Slope(double mean1, double mean2, double mean1Err, double mean2Err); double getChi2BinOff(double mean, double meanErr); std::vector fbest_pars; std::vector fbest_errs; std::vector fake_pars; int getBinsAbove(TH1D* hist, double thr); double getGausExpected(double x, double height, double mean); TCanvas* fcgauss; void initHists(); float timedifference_usec(struct timeval t0, struct timeval t1); public: ClassDef(TpcClusterErrorCalib,1) }; #endif