Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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");
}
Exemple #4
0
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");
}
Exemple #5
0
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();
}
Exemple #6
0
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;
 }