void ks_example() { TH1* h = new TH1F( "h", "Gaussian", 20, -5, 5 ); // h->FillRandom( "gaus", 100 ); // h->Draw(); TF1* f = new TF1( "f", "TMath::Freq(x)", -5, 5 ); const UInt_t N = 20; Double_t val[N]; Int_t idx[N]; for( UInt_t i = 0; i < N; ++i ) { val[i] = gRandom->Gaus(); h->Fill( val[i] ); } h->Draw(); gPad->SaveAs( "ks_gauss.pdf" ); TMath::Sort( N, val, idx, false ); Double_t dmax = 0; UInt_t imax = 0; Double_t bins[N+2]; Double_t binc[N+1]; bins[0] = -5; bins[N+1] = 5; binc[0] = 0; for( UInt_t i = 0; i < N; ++i ) { Double_t x = val[idx[i]]; Double_t F = f->Eval( x ); Double_t Fn = Double_t( i+1 ) / Double_t( N ); bins[ i+1 ] = x; binc[ i+1 ] = Fn; Double_t D = fabs( F - Fn ); if( D > dmax ) { dmax = D; imax = i; } cout << x << " " << F << " " << Fn << " " << D << " " << dmax << " " << imax << endl; } TH1* he = new TH1F( "he", "KS: CDFs", N+1, bins ); he->SetFillColor( 0 ); for( UInt_t i = 0; i < N+1; ++i ) { he->SetBinContent( i+1, binc[i] ); } he->SetStats( kFALSE ); he->Draw(); f->Draw( "same" ); gPad->SaveAs( "ks_compare.pdf" ); }