void THSRooFit::PrepareForFarm(){ DefineSets(); MakeBins(); cout<<"THSRooFit::PrepareForFarm(); number of bins "<<fDataBins->GetN()<<endl; TDirectory *saveDir=gDirectory; THSBins* savedBins=new THSBins("HSDataBins",fOutDir+"DataEntries.root"); fTree->SetBranchStatus("*",0); for(Int_t i=0;i<fVariables.getSize();i++){//only copy variable branches for speed fTree->SetBranchStatus(fVariables[i].GetName(),1); } //but always need ID branch if(fTree->GetBranch(fIDBranchName)){ fTree->SetBranchStatus(fIDBranchName,1); } for(Int_t i=0;i<fDataBins->GetN();i++){ THSRooFit* rf=CreateSubFitBins(savedBins->GetBinnedTree(fTree,i),kFALSE); //Save workspace to file. This will fitted in a seperate job rf->GetWorkSpace()->writeToFile(fOutDir+TString("Farm")+fDataBins->GetBinName(i)+".root"); cout <<"void THSRooFit::PrepareForFarm() Saved Workspace with "<<rf->GetDataSet()->numEntries()<<" for " <<fDataBins->GetBinName(i)<<endl; rf->RemoveDataSet();//save memory delete rf; } delete savedBins; cout<<"THSRooFit::PrepareForFarm() Done all files "<<endl; }
void THSRooFit::FitWithBins(Int_t Nfits){ DefineSets(); MakeBins(); cout<<"THSRooFit::FitWithBins(); number of bins "<<fDataBins->GetN()<<endl; TDirectory *saveDir=gDirectory; THSBins* savedBins=new THSBins("HSDataBins",fOutDir+"DataEntries.root"); fTree->SetBranchStatus("*",0); for(Int_t i=0;i<fVariables.getSize();i++){//only copy variable branches for speed fTree->SetBranchStatus(fVariables[i].GetName(),1); } //but always need ID branch if(fTree->GetBranch(fIDBranchName)){ fTree->SetBranchStatus(fIDBranchName,1); } for(Int_t i=0;i<fDataBins->GetN();i++){ THSRooFit* rf=CreateSubFitBins(savedBins->GetBinnedTree(fTree,i),kFALSE); // rf->TotalPDF(); rf->FitMany(Nfits); rf->SavePlots(fOutDir+TString("Results")+fDataBins->GetBinName(i)+".root"); // delete rf; } cout<<"THSRooFit::FitWithBins() Done all Fits "<<endl; }
void THSSimFit::RunWithTrees(){ fWS->Print(); cout<<"THSRooFit::RunWithBins(); number of bins "<<fDataBins->GetN()<<endl; MakeTreeBins(); TFile* tfile=new TFile(fOutDir+"DataEntries.root"); TObjArray* oa=(TObjArray*)tfile->Get("DataBins"); for(Int_t i=0;i<fDataBins->GetN();i++){ TTree* DataTree=dynamic_cast<TTree*>(oa->At(i)); THSRooFit* rf=CreateSubFitBins(DataTree); //Make fit object for events in this bin //retrieve from saved entries file RooAbsPdf* pdf=0; // while(pdf=(RooAbsPdf*)itPdf->Next()){ TTree* MCTree=0; for(Int_t ip=0;ip<rf->GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; cout<<"THSRooFit::RunWithBins(); PDFs "<<pdf->GetName()<<endl; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){//Only applies to THSEventsPDF TFile* mfile=new TFile(fOutDir+TString("Bins")+mpdf->GetName()+".root"); TObjArray* oam=(TObjArray*)mfile->Get("MCModelBins"); cout<<mfile<<" "<<oam<<endl; //note the cloned entry list is deleted in THSEventsPDF MCTree=dynamic_cast<TTree*>(oam->At(i)->Clone()); MCTree->SetDirectory(0); //mpdf->SetEntryList(MCList); mpdf->SetTree(MCTree); mfile->Close(); delete oam; delete mfile; cout<<MCTree<<" "<<mpdf<<" "<<rf->GetAuxVars()<<endl; //COULD send it to the farm here mpdf->AddSmearedModel(0,rf->GetAuxVars()); // mpdf->SetVarRange(TString(fExpLimits[il].GetName()).Remove(0,2))->setRange(fWS->var(fExpLimits[il].GetName())->getMin(),fWS->var(fExpLimits[il].GetName())->getMax()); delete MCTree; } } rf->TotalPDF(); rf->Fit(); rf->PlotDataModel(); rf->sPlot(); rf->SavePlots(fOutDir+TString("Plots")+fDataBins->GetBinName(i)+".root"); AddWeightMap(rf->GetWeights()->GetMap()); rf->GetWeights()->PrintWeight(); rf->RemoveDataSet();//save memory delete rf; } tfile->Close(); delete oa; delete tfile; cout<<"THSRooFit::RunWithBins() Done all Fits "<<endl; //AddSubWeights(); GetWeights()->Print(); ExportWeightsToFile(fOutDir+TString("Weights")+".root"); }
void THSSimFit::RunWithBins(){ MakeBins(); cout<<"THSSimFit::RunWithBins(); number of bins "<<fDataBins->GetN()<<endl; TDirectory *saveDir=gDirectory; TFile* tfile=new TFile(fOutDir+"DataEntries.root"); saveDir->cd(); TObjArray* oa=(TObjArray*)tfile->Get("DataBins"); for(Int_t i=0;i<fDataBins->GetN();i++){ TEntryList* DataList=dynamic_cast<TEntryList*>(oa->At(i)); fTree->SetEntryList(DataList); // THSRooFit* rf=CreateSubFitBins(TNamed(fDataBins->GetBinName(i),TString(""))); THSRooFit* rf=CreateSubFitBins(fTree); rf->SetName(fDataBins->GetBinName(i)); //iterate over models and set their entry lists id THSEventsPdf RooAbsPdf* pdf=0; for(Int_t ip=0;ip<rf->GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; cout<<"THSSimFit::RunWithBins(); PDFs "<<pdf->GetName()<<endl; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){//Only applies to THSEventsPDF TFile* mfile=new TFile(fOutDir+TString("Bins")+mpdf->GetName()+".root"); TObjArray* oam=(TObjArray*)mfile->Get("MCModelBins"); //note the cloned entry list is deleted in THSEventsPDF mpdf->SetTree(dynamic_cast<THSEventsPDF*>(fPDFs.find(mpdf->GetName()))->GetTree()); TEntryList* MCList=dynamic_cast<TEntryList*>(oam->At(i)->Clone()); MCList->SetDirectory(0); mpdf->SetEntryList(MCList); mfile->Close(); delete oam; delete mfile; //COULD send it to the farm here mpdf->AddSmearedModel(0,rf->GetAuxVars()); } } if(!rf->GetModel()) rf->TotalPDF(); rf->Fit(); rf->PlotDataModel(); rf->sPlot(); rf->SavePlots(fOutDir+TString("Plots")+fDataBins->GetBinName(i)+".root"); AddWeightMap(rf->GetWeights()->GetMap()); rf->GetWeights()->PrintWeight(); rf->RemoveDataSet();//save memory delete rf; } tfile->Close(); delete oa; delete tfile; cout<<"THSRooFit::RunWithBins() Done all Fits "<<endl; // AddSubWeights(); GetWeights()->PrintWeight(); ExportWeightsToFile(fOutDir+TString("Weights")+".root"); }
void THSEventsFit::RunWeights(Int_t Nbins){ if(!fDataBins) {cout<<"Error : Need to define at least 1 bin for this class e.g. RF->LoadBinVars(\"Eg\",1,3,4);"<<endl; exit(0);} DefineSets(); MakeBins(); cout<<"THSEventsFit::RunWithBins(); number of bins "<<fDataBins->GetN()<<endl; TDirectory *saveDir=gDirectory; THSBins* savedBins=new THSBins("HSDataBins",fOutDir+"DataEntries.root"); fTree->SetBranchStatus("*",0); for(Int_t i=0;i<fVariables.getSize();i++){//only copy variable branches for speed fTree->SetBranchStatus(fVariables[i].GetName(),1); } //but always need ID branch if(fTree->GetBranch(fIDBranchName)){ fTree->SetBranchStatus(fIDBranchName,1); } for(Int_t i=0;i<fDataBins->GetN();i++){ Long64_t PdfN[GetPDFs().getSize()]; for(Int_t ipdf=0;ipdf<GetPDFs().getSize();ipdf++) PdfN[ipdf]=0; Long64_t TotalN=0; THSsPlot* rf=static_cast<THSsPlot*>(CreateSubFitBins(savedBins->GetBinnedTree(fTree,i),kFALSE)); //iterate over models and set their entry lists id THSEventsPdf RooAbsPdf* pdf=0; for(Int_t ip=0;ip<rf->GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; cout<<"THSEventsFit::RunWithBins(); PDFs "<<pdf->GetName()<<endl; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){//Only applies to THSEventsPDF THSBins* savedMCBins=new THSBins("MCModelBins",fOutDir+TString("Bins")+mpdf->GetName()+".root"); mpdf->SetTree(savedMCBins->GetBinnedTree(dynamic_cast<THSEventsPDF*>(fPDFs.find(mpdf->GetName()))->GetTree(),i)); delete savedMCBins; PdfN[ip]=mpdf->AddSmearedModel(0,rf->GetAuxVars()); cout<<"CHCK "<<PdfN[ip]<<" "<<TotalN<<endl; TotalN+=PdfN[ip]; cout<<"CHCK "<<PdfN[ip]<<" "<<TotalN<<endl; if(PdfN[ip]<10) { cout<<"THSEventsFitfrom::RunWithBins() no events found for "<<fDataBins->GetBinName(i)<<" MODEL: "<<pdf->GetName()<<" probably no events kinmatically allowed in this bin" <<endl; rf->GetPDFsp()->remove(rf->GetPDFs()[ip]); rf->GetYieldsp()->remove(*(rf->GetWorkSpace()->var(fYld+pdf->GetName()))); rf->GetWorkSpace()->removeSet("Yields"); rf->GetWorkSpace()->removeSet("PDFs"); rf->GetWorkSpace()->defineSet("Yields",rf->GetYields()); rf->GetWorkSpace()->defineSet("PDFs",rf->GetPDFs()); } } } for(Int_t ip=0;ip<GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){ if(Double_t(PdfN[ip])/TotalN<fAccFrac){ cout<<" THSEventsFit::InitialiseFit() "<<GetName()<<" MODEL: "<<GetPDFs()[ip].GetName()<<" N events below acceptance fraction so not considered significant enough background " <<PdfN[ip] <<" out of "<<TotalN<<" "<<fAccFrac<<endl; GetPDFsp()->remove(GetPDFs()[ip]); GetYieldsp()->remove(*(GetWorkSpace()->var(fYld+pdf->GetName()))); GetWorkSpace()->removeSet("Yields"); GetWorkSpace()->removeSet("PDFs"); GetWorkSpace()->defineSet("Yields",GetYields()); GetWorkSpace()->defineSet("PDFs",GetPDFs()); } } } if(rf->GetPDFs().getSize()) rf->TotalPDF(); else { cout<<"THSEventsFit::RunWithBins() no model found for "<<fDataBins->GetBinName(i)<<" probably no events kinmatically allowed in this bin" <<endl; rf->RemoveDataSet();//save memory delete rf; continue; } cout<<fData->numEntries()<<endl; if(rf->GetDataSet()->numEntries()<2) {delete rf;continue;} rf->FitMany(Nbins); rf->sPlot(); rf->SavePlots("");//save plots for each bin fit if(rf->GetWeights()){ rf->GetWeights()->PrintWeight(); AddWeightMap(rf->GetWeights()); rf->GetWeights()->Save(); } rf->RemoveDataSet();//save memory delete rf; } //tfile->Close(); delete savedBins; //delete tfile; fTree->SetBranchStatus("*",1); cout<<"THSRooFit::RunWithBins() Done all Fits "<<endl; // AddSubWeights(); if(fWeights)GetWeights()->PrintWeight(); if(fWeights) GetWeights()->SortWeights(); }
void THSEventsFit::PrepareForFarm(){ if(!fDataBins) {cout<<"Error : Need to define at least 1 bin for this class e.g. RF->LoadBinVars(\"Eg\",1,3,4);"<<endl; exit(0);} DefineSets(); MakeBins(); cout<<" THSEventsFit::PrepareForFarm(); number of bins "<<fDataBins->GetN()<<endl; TDirectory *saveDir=gDirectory; THSBins* savedBins=new THSBins("HSDataBins",fOutDir+"DataEntries.root"); fTree->SetBranchStatus("*",0); for(Int_t i=0;i<fVariables.getSize();i++){//only copy variable branches for speed fTree->SetBranchStatus(fVariables[i].GetName(),1); } //but always need ID branch if(fTree->GetBranch(fIDBranchName)){ fTree->SetBranchStatus(fIDBranchName,1); } for(Int_t i=0;i<fDataBins->GetN();i++){ Long64_t PdfN[GetPDFs().getSize()]; Long64_t TotalN=0; THSRooFit* rf=CreateSubFitBins(savedBins->GetBinnedTree(fTree,i),kFALSE); cout<<"THSEventsFit::PrepareForFarm() made data for "<<fDataBins->GetBinName(i)<<" with entries =" <<rf->GetDataSet()->numEntries()<<endl; //iterate over models and set their entry lists id THSEventsPdf RooAbsPdf* pdf=0; for(Int_t ip=0;ip<rf->GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; cout<<" THSEventsFit::PrepareForFarm(); PDFs "<<pdf->GetName()<<endl; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){//Only applies to THSEventsPDF THSBins* savedMCBins=new THSBins("MCModelBins",fOutDir+TString("Bins")+mpdf->GetName()+".root"); //Get tree for this bin mpdf->SetTree(savedMCBins->GetBinnedTree(dynamic_cast<THSEventsPDF*>(fPDFs.find(mpdf->GetName()))->GetTree(),i)); PdfN[ip]=mpdf->AddSmearedModel(0,rf->GetAuxVars()); TotalN+=PdfN[ip]; if(PdfN[ip]<10) { cout<<" THSEventsFit::InitialiseFit() no events found for "<<rf->GetName()<<" MODEL: "<<pdf->GetName()<<" probably no events kinmatically allowed in this bin" <<endl; rf->GetPDFsp()->remove(rf->GetPDFs()[ip]); rf->GetYieldsp()->remove(*(rf->GetWorkSpace()->var(fYld+pdf->GetName()))); rf->GetWorkSpace()->removeSet("Yields"); rf->GetWorkSpace()->removeSet("PDFs"); rf->GetWorkSpace()->defineSet("Yields",rf->GetYields()); rf->GetWorkSpace()->defineSet("PDFs",rf->GetPDFs()); } delete savedMCBins; } } for(Int_t ip=0;ip<GetPDFs().getSize();ip++){ pdf=(RooAbsPdf*)&(rf->GetPDFs()[ip]); THSEventsPDF* mpdf=0; if(mpdf=dynamic_cast<THSEventsPDF*>(pdf)){ if(Double_t(PdfN[ip])/TotalN<fAccFrac){ cout<<" THSEventsFit::InitialiseFit() "<<GetName()<<" MODEL: "<<GetPDFs()[ip].GetName()<<" N events below acceptance fraction so not considered significant enough background " <<PdfN[ip] <<" out of "<<TotalN<<" "<<fAccFrac<<endl; GetPDFsp()->remove(GetPDFs()[ip]); GetYieldsp()->remove(*(GetWorkSpace()->var(fYld+pdf->GetName()))); GetWorkSpace()->removeSet("Yields"); GetWorkSpace()->removeSet("PDFs"); GetWorkSpace()->defineSet("Yields",GetYields()); GetWorkSpace()->defineSet("PDFs",GetPDFs()); } } } //also need to import custom PDF class rf->GetWorkSpace()->Print(); //rf->GetWorkSpace()->importClassCode(THSEventsPDF::Class(),kTRUE); rf->GetWorkSpace()->writeToFile(fOutDir+TString("Farm")+fDataBins->GetBinName(i)+".root"); // cout <<" THSEventsFit::PrepareForFarm() Saved Workspace with "<<rf->GetDataSet()->numEntries()<<" for bin "<<fDataBins->GetBinName(i)<<endl; rf->RemoveDataSet();//save memory delete rf; } delete savedBins; cout<<"THSRooFit::PrepareForFarm() Done all files "<<endl; }