/************************************************************************************* * getKS: Searches through the histograms in the plotter output, adds the MC together * for each field, and compares the MC with the Data histogram using a KS test * input: the main() arguments array * output: writes to stdout the (human-readable) KS statistics of pairs of histograms * * Structure-wise: this is fine, can be implemented into class easily. ***********************************/ void getKS(const char* argv[]) { //open the input TFile TFile *f = new TFile(argv[2]); f->cd(); //get the filesystem information from the file TList *alokDirs = (TList*) f->GetListOfKeys(); //loop through the directories in the input file for(int idir=0; alokDirs->At(idir-1) != alokDirs->Last(); idir++) { TDirectory *cDir = (TDirectory*) f->Get(alokDirs->At(idir)->GetName()); TList *alokHistos = (TList*) cDir->GetListOfKeys(); // create the MC histogram and start collecting relevant MC histograms // from the current directory TList *aloh = new TList; // loop through keys (histograms) in current directory for(int ihisto=0; alokHistos->At(ihisto) != alokHistos->Last(); ihisto++) { if(TString(alokHistos->At(ihisto)->GetName()).Contains("MC8TeV")) { TH1F *cHisto = (TH1F*) cDir->Get(alokHistos->At(ihisto)->GetName()); aloh->Add(cHisto); } } //merge the data histograms into one histogram TH1F *MCHisto = (TH1F*) (aloh->Last())->Clone(TString(cDir->GetName()) + TString("MCHisto")); aloh->RemoveLast(); MCHisto->Merge(aloh); cout<<"-------------------- "<<cDir->GetName()<<" -----------------------"<<endl; //now create the data histogram and run the KS test TH1F *DataHisto = (TH1F*) cDir->Get(alokHistos->Last()->GetName()); cout<<" ---> KS Test: "<<cDir->GetName()<<" has probability "<<MCHisto->KolmogorovTest(DataHisto, "D")<<"\n"<<endl; } }
void TTree_UnfriendAll(TTree *tree) { TList *friends = tree->GetListOfFriends(); while(friends->GetSize() != 0) { friends->RemoveLast(); } }