Exemple #1
0
std::pair<std::vector<float>, std::vector<float> > HelperFunctions::approxAntipole(const std::vector<std::vector<float> >& objects, const MatchingThumbnails& matching)
{
  std::vector<std::vector<float> > copied_objects;
  for(MatchingThumbnails::const_iterator it = matching.begin(); it != matching.end(); ++it)
  {
    copied_objects.push_back(objects[*it]);
  }
  std::vector<std::vector<float> >::iterator it = copied_objects.begin();

  while(copied_objects.size() > 2)
  {
    long start = it - copied_objects.begin();
    std::vector<std::vector<float> > new_tournament;
    for(int i = 0; i < tournament_size && i < static_cast<int>(copied_objects.size()); ++i)
    {
      new_tournament.push_back(*it);
      ++it;
      if(it == copied_objects.end())
      {
        it = copied_objects.begin();
      }
    }
    unsigned long result = (median1(new_tournament) + start) % copied_objects.size();
    unsigned long distance = it - copied_objects.begin();
    copied_objects.erase(copied_objects.begin() + result);
    if(result < distance)
    {
      it = copied_objects.begin() + distance - 1;
    }
    else if(result == distance)
    {
      if(distance == copied_objects.size())
      {
        it = copied_objects.begin();
      }
      else
      {
        it = copied_objects.begin() + distance;
      }
    }
  }
  return std::make_pair(*copied_objects.begin(), *(copied_objects.begin()+1));
}
Exemple #2
0
void testMM()
{
  //TFile *fout = new TFile("fout.root","recreate");
  TH1F *hx1 = new TH1F("hx1","hx1",100,0,1);
  TH1F *hx2 = new TH1F("hx2","hx2",100,0,1);
  TH1F *hx3 = new TH1F("hx3","hx3",100,0,1);
  TH1F *hchi2 = new TH1F("hchi2","hchi2",1000,0,2000);

  TH1F *mc1, *mc2, *mc3, *data, *tmp;

  mc1 = new TH1F("mc1","mc1",bins,x1,x2);
  mc2 = new TH1F("mc2","mc2",bins,x1,x2);
  mc3 = new TH1F("mc3","mc3",bins,x1,x2);

  TNtuple *d = new TNtuple("d","d","x:weight");

  TH1F *pred = new TH1F("pred","pred",bins,x1,x2);
  TH1F *truth = new TH1F("truth","truth",bins,x1,x2);

  data = new TH1F("data","data",bins,x1,x2);
  tmp = new TH1F("tmp","tmp",bins,x1,x2);

  mc1->Sumw2(); mc2->Sumw2(); mc3->Sumw2(); data->Sumw2();



  //GenerateData(mc1,mc2,mc3,data);
  GenerateDataUnbinned(mc1,mc2,mc3,d);

  d->Project("data","x","weight");
 
  TCanvas *cc = new TCanvas ("temp","temp",600,600);
  data->Draw();
  cc->SaveAs("data.pdf");
  cout<<"???"<<data->Integral()<<endl;



  double chi2 = Fit(mc1,mc2,mc3,d,hx1,hx2,hx3,hchi2);

  cout<<"Fit chi2 = "<<chi2<<endl;

  TH1F *mctmp1, *mctmp2, *mctmp3;
  mctmp1 = (TH1F *)mc1->Clone("mctmp1x");
  mctmp2 = (TH1F *)mc2->Clone("mctmp2x");
  mctmp3 = (TH1F *)mc3->Clone("mctmp3x");

  ShakeMC(mc1,mc2,mc3,mctmp1,mctmp2,mctmp3);
  
  TCanvas *c2 = new TCanvas("c2","c2",600,600);
  mc1->Draw();
  mctmp1->Draw("same");

  TCanvas *c3 = new TCanvas("c3","c3",600,600);
  hx1->Draw();
  hx2->Draw("same");
  hx3->Draw("same");
  double ymax = hx1->GetMaximum();
  TLine *l1 = new TLine(x1true,0,x1true,ymax); l1->SetLineWidth(2.0);l1->SetLineColor(kRed); l1->Draw();
  TLine *l2 = new TLine(x2true,0,x2true,ymax); l2->SetLineWidth(2.0);l2->SetLineColor(kRed); l2->Draw();
  TLine *l3 = new TLine(x3true,0,x3true,ymax); l3->SetLineWidth(2.0);l3->SetLineColor(kRed); l3->Draw();

  TCanvas *cchi2 = new TCanvas("cchi2","cchi2",600,600);
  hchi2->Draw();


  cout<<"x1 = "<<hx1->GetMean()<<"±"<<hx1->GetStdDev()<<endl;
  cout<<"x2 = "<<hx2->GetMean()<<"±"<<hx2->GetStdDev()<<endl;
  cout<<"x3 = "<<hx3->GetMean()<<"±"<<hx3->GetStdDev()<<endl;

  cout<<"Median 1 "<<median1(hx1)<<endl;
  cout<<"Median 2 "<<median1(hx2)<<endl;
  cout<<"Median 3 "<<median1(hx3)<<endl;

  double xx[]={x1true,x2true,x3true};
  //cout<<"Chi2 of truth = "<<Chi2(xx)<<endl;

  mc1->Scale(hx1->GetMean());
  mc2->Scale(hx2->GetMean());
  mc3->Scale(hx3->GetMean());

  pred->Add(mc1);  pred->Add(mc2);  pred->Add(mc3);
  pred->SetMarkerColor(kBlue);

  truth->Add(mc1,x1true/mc1->Integral());
  truth->Add(mc2,x2true/mc2->Integral());
  truth->Add(mc3,x3true/mc3->Integral());
  truth->SetMarkerColor(kBlack);


  data->Scale(1/data->Integral());
  data->SetMarkerColor(kRed);
  TCanvas *c1 = new TCanvas("c1","c1",600,600);
  data->Draw();
  mc1->Draw("same,hist");
  mc2->Draw("same,hist");
  mc3->Draw("same,hist");

  pred->Draw("same");
  data->Draw("same");
  truth->Draw("same");

  float legendx1 = 0.65, legendy1 = 0.65, legendx2 = 0.84, legendy2 = 0.84;
  TLegend *l = new TLegend(legendx1,legendy1,legendx2,legendy2);
  l->AddEntry(pred,"Fit","P");
  l->AddEntry(data,"Data","P");
  l->AddEntry(truth,"Truth","P");

  l->Draw();




}