// chi^2-Test: ist Wuerfel gezinkt? void wuerfel() { const int NBINS = 6; const int N = 100; // 100x wuerfeln const int NPE = 1000; const double p = 1./6.; double pi = N*p; TH1* h = new TH1F( "h", "Gezinkter Wuerfel?", 6, 0.5, 6.5 ); h->SetMinimum( 0 ); h->SetStats( kFALSE ); TH1* href = new TH1F( "href", "Referenzhistogramm", 6, 0.5, 6.5 ); for( int i = 1; i <= NBINS; ++i ) { href->SetBinContent( i, pi ); href->SetBinError( i, 0 ); } TH1* hpe = new TH1F( "hpe", "#chi^{2}-Pruefgroesse", 30, 0, 15 ); TH1* hprob = new TH1F( "hprob", "#chi^{2}-Wahrscheinlichkeit", 20, 0, 1 ); hprob->SetMinimum( 0 ); for( int ipe = 0; ipe < NPE; ++ipe ) { h->Reset(); for( int i = 0; i < N; ++i ) { // nicht gezinkt h->Fill( gRandom->Integer( NBINS ) + 1 ); // gezinkt: jedes 10x Mal eine 6 // if( ( i % 10 ) == 0 ) h->Fill( 6 ); // else h->Fill( gRandom->Integer( NBINS ) + 1 ); // gezinkt: 60% nicht zufaellig // switch( i % 10 ) { // case 1: h->Fill( 1 ); break; // case 2: h->Fill( 2 ); break; // case 3: h->Fill( 3 ); break; // case 4: h->Fill( 4 ); break; // case 5: h->Fill( 5 ); break; // case 6: h->Fill( 6 ); break; // default: h->Fill( gRandom->Integer( NBINS ) + 1 ); // } } if( ipe == 0 ) { h->Draw(); gPad->SaveAs( "wuerfel.pdf" ); } double chi2 = 0; for( int i = 1; i <= NBINS; ++i ) { chi2 += pow( h->GetBinContent( i ) - pi, 2) / pi; } cout << "chi2: " << chi2 << endl; cout << "TH1::Chi2Test: "; double prob = h->Chi2Test( href, "P" ); cout << endl; hpe->Fill( chi2 ); hprob->Fill( prob ); } hpe->Draw(); gPad->SaveAs( "wuerfel_chi2.pdf" ); hprob->Draw(); gPad->SaveAs( "wuerfel_chi2_prob.pdf" ); }