Something went wrong on our end
-
Jan Schulze authored788be101
qaCheck.C 11.46 KiB
#include <vector>
#include <map>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <TFile>
#include <TH1F>
#include <TNtuple>
TH1F* dataCosThetaKKpipi;
TH1F* mcCosThetaKKpipi;
TH1F* dataPhiKKpipi;
TH1F* mcPhiKKpipi;
TH1F* dataCosThetaKpipi;
TH1F* mcCosThetaKpipi;
TH1F* dataPhiKpipi;
TH1F* mcPhiKpipi;
TH1F* dataCosThetaKpi;
TH1F* mcCosThetaKpi;
TH1F* dataPhiKpi;
TH1F* mcPhiKpi;
TH1F* dataCosThetapi;
TH1F* mcCosThetapi;
TH1F* dataPhipi;
TH1F* mcPhipi;
TH1F* datainvMassKpipi;
TH1F* mcinvMassKpipi;
TH1F* datainvMassKpi;
TH1F* mcinvMassKpi;
void qaCheck(TString fname="bin/gcc-4.1.2/debug/link-static/Psi2STo2K2PiGam.root"){
using namespace std;
gROOT->SetStyle("Plain");
gStyle->SetCanvasColor(0);
gStyle->SetStatBorderSize(0);
gStyle->SetPalette(1);
gStyle->SetOptStat(1111);
std::vector<TH1F*> histVectData;
std::vector<TH1F*> histVectMc;
std::vector<TH2F*> histVectData2d;
std::vector<TH2F*> histVectMc2d;
TFile* f1 = new TFile(fname,"READ");
TNtuple* ntdata = (TNtuple*)f1->Get("dataTuple");
TNtuple* ntmc = (TNtuple*)f1->Get("mcTuple");
Int_t evtNo = 0;
float datacosThetaKKpipi;
float dataphiKKpipi;
float datacosThetaK1pi1pi2;
float datacosThetaK2pi1pi2;
float dataphiK1pi1pi2;
float dataphiK2pi1pi2;
float datacosThetaK1pi1;
float datacosThetaK1pi2;
float datacosThetaK2pi1;
float datacosThetaK2pi2;
float dataphiK1pi1;
float dataphiK1pi2;
float dataphiK2pi1;
float dataphiK2pi2;
float datacosThetapi1;
float datacosThetapi2;
float dataphipi1;
float dataphipi2;
float datainvmassK1pi1pi2;
float datainvmassK2pi1pi2;
float datainvmassK1pi1;
float datainvmassK1pi2;
float datainvmassK2pi1;
float datainvmassK2pi2;
float dataweight;
float mccosThetaKKpipi;
float mcphiKKpipi;
float mccosThetaK1pi1pi2;
float mccosThetaK2pi1pi2;
float mcphiK1pi1pi2;
float mcphiK2pi1pi2;
float mccosThetaK1pi1;
float mccosThetaK1pi2;
float mccosThetaK2pi1;
float mccosThetaK2pi2;
float mcphiK1pi1;
float mcphiK1pi2;
float mcphiK2pi1;
float mcphiK2pi2;
float mccosThetapi1;
float mccosThetapi2;
float mcphipi1;
float mcphipi2;
float mcinvmassK1pi1pi2;
float mcinvmassK2pi1pi2;
float mcinvmassK1pi1;
float mcinvmassK1pi2;
float mcinvmassK2pi1;
float mcinvmassK2pi2;
float mcweight;
ntdata->SetBranchAddress("costhetaKKpipi", &datacosThetaKKpipi);
ntdata->SetBranchAddress("phiKKpipi", &dataphiKKpipi);
ntdata->SetBranchAddress("costhetaK1pi1pi2", &datacosThetaK1pi1pi2);
ntdata->SetBranchAddress("phiK1pi1pi2", &dataphiK1pi1pi2);
ntdata->SetBranchAddress("costhetaK2pi1pi2", &datacosThetaK2pi1pi2);
ntdata->SetBranchAddress("phiK2pi1pi2", &dataphiK2pi1pi2);
ntdata->SetBranchAddress("costhetaK1pi1", &datacosThetaK1pi1);
ntdata->SetBranchAddress("phiK1pi1", &dataphiK1pi1);
ntdata->SetBranchAddress("costhetaK1pi2", &datacosThetaK1pi2);
ntdata->SetBranchAddress("phiK1pi2", &dataphiK1pi2);
ntdata->SetBranchAddress("costhetaK2pi1", &datacosThetaK2pi1);
ntdata->SetBranchAddress("phiK2pi1", &dataphiK2pi1);
ntdata->SetBranchAddress("costhetaK2pi2", &datacosThetaK2pi2);
ntdata->SetBranchAddress("phiK2pi2", &dataphiK2pi2);
ntdata->SetBranchAddress("costhetapi1", &datacosThetapi1);
ntdata->SetBranchAddress("phipi1", &dataphipi1);
ntdata->SetBranchAddress("costhetapi2", &datacosThetapi2);
ntdata->SetBranchAddress("phipi2", &dataphipi2);
ntdata->SetBranchAddress("mk1pi1pi2", &datainvmassK1pi1pi2);
ntdata->SetBranchAddress("mk2pi1pi2", &datainvmassK2pi1pi2);
ntdata->SetBranchAddress("mk1pi1", &datainvmassK1pi1);
ntdata->SetBranchAddress("mk1pi2", &datainvmassK1pi2);
ntdata->SetBranchAddress("mk2pi1", &datainvmassK2pi1);
ntdata->SetBranchAddress("mk2pi2", &datainvmassK2pi2);
ntdata->SetBranchAddress("weight", &dataweight);
ntmc->SetBranchAddress("costhetaKKpipi", &mccosThetaKKpipi);
ntmc->SetBranchAddress("phiKKpipi", &mcphiKKpipi);
ntmc->SetBranchAddress("costhetaK1pi1pi2", &mccosThetaK1pi1pi2);
ntmc->SetBranchAddress("phiK1pi1pi2", &mcphiK1pi1pi2);
ntmc->SetBranchAddress("costhetaK2pi1pi2", &mccosThetaK2pi1pi2);
ntmc->SetBranchAddress("phiK2pi1pi2", &mcphiK2pi1pi2);
ntmc->SetBranchAddress("costhetaK1pi1", &mccosThetaK1pi1);
ntmc->SetBranchAddress("phiK1pi1", &mcphiK1pi1);
ntmc->SetBranchAddress("costhetaK1pi2", &mccosThetaK1pi2);
ntmc->SetBranchAddress("phiK1pi2", &mcphiK1pi2);
ntmc->SetBranchAddress("costhetaK2pi1", &mccosThetaK2pi1);
ntmc->SetBranchAddress("phiK2pi1", &mcphiK2pi1);
ntmc->SetBranchAddress("costhetaK2pi2", &mccosThetaK2pi2);
ntmc->SetBranchAddress("phiK2pi2", &mcphiK2pi2);
ntmc->SetBranchAddress("costhetapi1", &mccosThetapi1);
ntmc->SetBranchAddress("phipi1", &mcphipi1);
ntmc->SetBranchAddress("costhetapi2", &mccosThetapi2);
ntmc->SetBranchAddress("phipi2", &mcphipi2);
ntmc->SetBranchAddress("mk1pi1pi2", &mcinvmassK1pi1pi2);
ntmc->SetBranchAddress("mk2pi1pi2", &mcinvmassK2pi1pi2);
ntmc->SetBranchAddress("mk1pi1", &mcinvmassK1pi1);
ntmc->SetBranchAddress("mk1pi2", &mcinvmassK1pi2);
ntmc->SetBranchAddress("mk2pi1", &mcinvmassK2pi1);
ntmc->SetBranchAddress("mk2pi2", &mcinvmassK2pi2);
ntmc->SetBranchAddress("weight", &mcweight);
Int_t numOfEntriesData = ntdata->GetEntries();
Int_t numOfEntriesMc = ntmc->GetEntries();
dataCosThetaKKpipi = new TH1F("dataCosThetaKKpipi","dataCosThetaKKpipi",200,-1.,1.);
dataPhiKKpipi = new TH1F("dataPhiKKpipi","dataPhiKKpipi",200,-4.,4.);
dataCosThetaKpipi = new TH1F("dataCosThetaKpipi","dataCosThetaKpipi",200,-1.,1.);
dataPhiKpipi = new TH1F("dataPhiKpipi","dataPhiKpipi",200,-4.,4.);
dataCosThetaKpi = new TH1F("dataCosThetaKpi","dataCosThetaKpi",200,-1.,1.);
dataPhiKpi = new TH1F("dataPhiKpi","dataPhiKpi",200,-4.,4.);
dataCosThetapi = new TH1F("dataCosThetapi","dataCosThetapi",200,-1.,1.);
dataPhipi = new TH1F("dataPhipi","dataPhipi",200,-4.,4.);
datainvMassKpipi = new TH1F("datainvMassKpipi", "datainvMassKpipi", 176, 0.8, 3.0);
datainvMassKpi = new TH1F("datainvMassKpi", "datainvMassKpi", 276, 0.5, 2.8);
mcCosThetaKKpipi = new TH1F("mcCosThetaKKpipi","mcCosThetaKKpipi",200,-1.,1.);
mcPhiKKpipi = new TH1F("mcPhiKKpipi","mcPhiKKpipi",200,-4.,4.);
mcCosThetaKpipi = new TH1F("mcCosThetaKpipi","mcCosThetaKpipi",200,-1.,1.);
mcPhiKpipi = new TH1F("mcPhiKpipi","mcPhiKpipi",200,-4.,4.);
mcCosThetaKpi = new TH1F("mcCosThetaKpi","mcCosThetaKpi",200,-1.,1.);
mcPhiKpi = new TH1F("mcPhiKpi","mcPhiKpi",200,-4.,4.);
mcCosThetapi = new TH1F("mcCosThetapi","mcCosThetapi",200,-1.,1.);
mcPhipi = new TH1F("mcPhipi","mcPhipi",200,-4.,4.);
mcinvMassKpipi = new TH1F("mcinvMassKpipi", "mcinvMassKpipi", 176, 0.8, 3.0);
mcinvMassKpi = new TH1F("mcinvMassKpi", "mcinvMassKpi", 276, 0.5, 2.8);
histVectData.push_back(dataCosThetaKKpipi);
histVectData.push_back(dataPhiKKpipi);
histVectData.push_back(dataCosThetaKpipi);
histVectData.push_back(dataPhiKpipi);
histVectData.push_back(dataCosThetaKpi);
histVectData.push_back(dataPhiKpi);
histVectData.push_back(dataCosThetapi);
histVectData.push_back(dataPhipi);
histVectData.push_back(datainvMassKpipi);
histVectData.push_back(datainvMassKpi);
histVectMc.push_back(mcCosThetaKKpipi);
histVectMc.push_back(mcPhiKKpipi);
histVectMc.push_back(mcCosThetaKpipi);
histVectMc.push_back(mcPhiKpipi);
histVectMc.push_back(mcCosThetaKpi);
histVectMc.push_back(mcPhiKpi);
histVectMc.push_back(mcCosThetapi);
histVectMc.push_back(mcPhipi);
histVectMc.push_back(mcinvMassKpipi);
histVectMc.push_back(mcinvMassKpi);
Int_t maxEvtNo = 0;
for(Int_t i=0; i<max(numOfEntriesMc,numOfEntriesData); i++)
{
if(i<numOfEntriesData){
ntdata->GetEntry(i);
dataCosThetaKKpipi->Fill(datacosThetaKKpipi, dataweight);
dataPhiKKpipi->Fill(dataphiKKpipi, dataweight);
dataCosThetaKpipi->Fill(datacosThetaK1pi1pi2, dataweight);
dataPhiKpipi->Fill(dataphiK1pi1pi2, dataweight);
dataCosThetaKpi->Fill(datacosThetaK1pi1, dataweight);
dataCosThetaKpi->Fill(datacosThetaK1pi2, dataweight);
dataPhiKpi->Fill(dataphiK1pi1, dataweight);
dataPhiKpi->Fill(dataphiK1pi2, dataweight);
dataCosThetapi->Fill(datacosThetapi1, dataweight);
dataCosThetapi->Fill(datacosThetapi2, dataweight);
dataPhipi->Fill(dataphipi1, dataweight);
dataPhipi->Fill(dataphipi2, dataweight);
datainvMassKpipi->Fill(datainvmassK1pi1pi2, dataweight);
datainvMassKpi->Fill(datainvmassK1pi1, dataweight);
datainvMassKpi->Fill(datainvmassK1pi2, dataweight);
}
ntmc->GetEntry(i);
mcCosThetaKKpipi->Fill(mccosThetaKKpipi, mcweight);
mcPhiKKpipi->Fill(mcphiKKpipi, mcweight);
mcCosThetaKpipi->Fill(mccosThetaK1pi1pi2, mcweight);
mcPhiKpipi->Fill(mcphiK1pi1pi2, mcweight);
mcCosThetaKpi->Fill(mccosThetaK1pi1, mcweight);
mcCosThetaKpi->Fill(mccosThetaK1pi2, mcweight);
mcPhiKpi->Fill(mcphiK1pi1, mcweight);
mcPhiKpi->Fill(mcphiK1pi2, mcweight);
mcCosThetapi->Fill(mccosThetapi1, mcweight);
mcCosThetapi->Fill(mccosThetapi2, mcweight);
mcPhipi->Fill(mcphipi1, mcweight);
mcPhipi->Fill(mcphipi2, mcweight);
mcinvMassKpipi->Fill(mcinvmassK1pi1pi2, mcweight);
mcinvMassKpi->Fill(mcinvmassK1pi1, mcweight);
mcinvMassKpi->Fill(mcinvmassK1pi2, mcweight);
if(maxEvtNo<evtNo) maxEvtNo=evtNo;
}
double scalefactor = double(ntdata->GetEntries())/double(ntmc->GetEntries());
Int_t rebin = 4;
TCanvas* cmain = new TCanvas("cmain","cmain",1400,600);
cmain->Divide(5,2);
for(int i=0; i<histVectData.size(); i++) {
cmain->cd(i+1);
histVectData[i]->Rebin(rebin);
histVectData[i]->SetLineColor(2);
histVectData[i]->Draw("E");
histVectMc[i]->Rebin(rebin);
histVectMc[i]->Scale(scalefactor);
histVectMc[i]->Draw("same");
}
float chisq = 0;
float constraints = 98; // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7.root
// float constraints = 94; // 12-01-06_FitParamHyp8_base_K0K2_Hyp5/rerun_correctedampK0K2/Psi2STo2K2PiGamPWA_noK1_1680Hyp7_noK1_2300Hyp7.root
float ndf;
float conflevel = 0;
int numberofbins = 0;
for(int i=0; i<histVectData.size(); i++) {
int currentNoOfBins=0;
for (int j=0; j<(histVectData[i]->GetSize()); j++) {
float binContentData=histVectData[i]->GetBinContent(j);
if (binContentData>0.){
chisq += pow( binContentData - (histVectMc[i]->GetBinContent(j)),2)/binContentData;
currentNoOfBins++;
}
cout << "chi^2 after bin " << j << " of histogram " << histVectData[i]->GetName() << ": " << chisq << endl;
}
cout << "chi^2 after " << histVectData[i]->GetName() << ": " << chisq << endl;
numberofbins += currentNoOfBins;
}
ndf = numberofbins - constraints;
cout << "Total chi^2:\t" << chisq << endl;
cout << "Total number of bins:\t" << numberofbins << endl;
cout << "Number of constraints:\t" << constraints << endl;
cout << "Degrees of freedom:\t" << ndf << endl;
cout << "chi^2/ndf:\t" << chisq/ndf << endl;
cout << "CL:\t" << TMath::Prob(chisq, ndf) << endl;
cout << endl;
}