int main (int argc, char *argv[]) { double frce; input(); inithydro(); equili(); initpop(); for (istep = 1; istep <= nsteps; istep++) { pbc(); mbc(); move(); hydrovar(); equili(); collis(); if (iforce) force(istep, &frce); if (iobst) obst(); if (istep % ndiag == 0) diag0D(); if (istep % nout == 0) profil(istep, frce); } return 0; }
void dtfit_sigmc(){ TChain* tree = new TChain("TEvent"); tree->Add("/home/vitaly/B0toDh0/Tuples/b2dh_sigmc_s1.root"); tree->Add("/home/vitaly/B0toDh0/Tuples/b2dh_sigmc_s2.root"); RooArgSet argset; RooRealVar mbc("mbc","mbc",mbc_min,mbc_max,"GeV"); argset.add(mbc); RooRealVar de("de","#DeltaE",-0.15,0.3,"GeV"); argset.add(de); de.setRange("signal",de_min,de_max); RooRealVar md("md","md",DMass-md_cut,DMass+md_cut,"GeV"); argset.add(md); RooRealVar mk("mk","mk",KMass-mk_cut,KMass+mk_cut,"GeV"); argset.add(mk); RooRealVar mpi0("mpi0","mpi0",Pi0Mass-mpi0_cut,Pi0Mass+mpi0_cut,"GeV"); argset.add(mpi0); RooRealVar bdtgs("bdtgs","bdtgs",0.98,1.); argset.add(bdtgs); RooRealVar atckpi_max("atckpi_max","atckpi_max",0.,atckpi_cut); argset.add(atckpi_max); RooDataSet ds("ds","ds",tree,argset); ds.Print(); }
int wc_count(Wc_t *wp, Sfio_t *fd, const char* file) { register char* type = wp->type; register unsigned char* cp; register Sfoff_t nbytes; register Sfoff_t nchars; register Sfoff_t nwords; register Sfoff_t nlines; register Sfoff_t eline = -1; register Sfoff_t longest = 0; register ssize_t c; register unsigned char* endbuff; register int lasttype = WC_SP; unsigned int lastchar; ssize_t n; ssize_t o; unsigned char* buff; wchar_t x; unsigned char side[32]; sfset(fd,SF_WRITE,1); nlines = nwords = nchars = nbytes = 0; wp->longest = 0; if (wp->mb < 0 && (wp->mode & (WC_MBYTE|WC_WORDS))) { cp = buff = endbuff = 0; for (;;) { if (cp >= endbuff || (n = mb2wc(x, cp, endbuff-cp)) < 0) { if ((o = endbuff-cp) < sizeof(side)) { if (buff) { if (o) memcpy(side, cp, o); mbinit(); } else o = 0; cp = side + o; if (!(buff = (unsigned char*)sfreserve(fd, SF_UNBOUND, 0)) || (n = sfvalue(fd)) <= 0) { if ((nchars - longest) > wp->longest) wp->longest = nchars - longest; break; } nbytes += n; if ((c = sizeof(side) - o) > n) c = n; if (c) memcpy(cp, buff, c); endbuff = buff + n; cp = side; x = mbchar(cp); if ((cp-side) < o) { cp = buff; nchars += (cp-side) - 1; } else cp = buff + (cp-side) - o; } else { cp++; x = -1; } if (x == -1 && eline != nlines && !(wp->mode & WC_QUIET)) eline = invalid(file, nlines); } else cp += n ? n : 1; if (x == '\n') { if ((nchars - longest) > wp->longest) wp->longest = nchars - longest; longest = nchars + 1; nlines++; lasttype = 1; } else if (iswspace(x)) lasttype = 1; else if (lasttype) { lasttype = 0; nwords++; } nchars++; } if (!(wp->mode & WC_MBYTE)) nchars = nbytes; } else if (!wp->mb && !(wp->mode & WC_LONGEST) || wp->mb > 0 && !(wp->mode & (WC_MBYTE|WC_WORDS|WC_LONGEST))) { if (!(wp->mode & (WC_MBYTE|WC_WORDS|WC_LONGEST))) { while ((cp = (unsigned char*)sfreserve(fd, SF_UNBOUND, 0)) && (c = sfvalue(fd)) > 0) { nchars += c; endbuff = cp + c; if (*--endbuff == '\n') nlines++; else *endbuff = '\n'; for (;;) if (*cp++ == '\n') { if (cp > endbuff) break; nlines++; } } } else { while ((cp = buff = (unsigned char*)sfreserve(fd, SF_UNBOUND, 0)) && (c = sfvalue(fd)) > 0) { nchars += c; /* check to see whether first character terminates word */ if (c==1) { if (eol(lasttype)) nlines++; if ((c = type[*cp]) && !lasttype) nwords++; lasttype = c; continue; } if (!lasttype && type[*cp]) nwords++; lastchar = cp[--c]; *(endbuff = cp+c) = '\n'; c = lasttype; /* process each buffer */ for (;;) { /* process spaces and new-lines */ do { if (eol(c)) for (;;) { /* check for end of buffer */ if (cp > endbuff) goto beob; nlines++; if (*cp != '\n') break; cp++; } } while (c = type[*cp++]); /* skip over word characters */ while (!(c = type[*cp++])); nwords++; } beob: if ((cp -= 2) >= buff) c = type[*cp]; else c = lasttype; lasttype = type[lastchar]; /* see if was in word */ if (!c && !lasttype) nwords--; } if (eol(lasttype)) nlines++; else if (!lasttype) nwords++; } } else { int lineoff=0; int skip=0; int adjust=0; int state=0; int oldc; int xspace; int wasspace = 1; unsigned char* start; lastchar = 0; start = (endbuff = side) + 1; xspace = iswspace(0xa0) || iswspace(0x85); while ((cp = buff = (unsigned char*)sfreserve(fd, SF_UNBOUND, 0)) && (c = sfvalue(fd)) > 0) { nbytes += c; nchars += c; start = cp-lineoff; /* check to see whether first character terminates word */ if(c==1) { if(eol(lasttype)) nlines++; if((c = type[*cp]) && !lasttype) nwords++; lasttype = c; endbuff = start; continue; } lastchar = cp[--c]; endbuff = cp+c; cp[c] = '\n'; if(mbc(lasttype)) { c = lasttype; goto mbyte; } if(!lasttype && spc(type[*cp])) nwords++; c = lasttype; /* process each buffer */ for (;;) { /* process spaces and new-lines */ spaces: do { if (eol(c)) { /* check for end of buffer */ if (cp > endbuff) goto eob; if(wp->mode&WC_LONGEST) { if((cp-start)-adjust > longest) longest = (cp-start)-adjust-1; start = cp; } nlines++; nchars -= adjust; adjust = 0; } } while (spc(c = type[*cp++])); wasspace=1; if(mbc(c)) { mbyte: do { if(c&WC_ERR) goto err; if(skip && (c&7)) break; if(!skip) { if(!(c&7)) { skip=1; break; } skip = (c&7); adjust += skip; state = 0; if(skip==2 && (cp[-1]&0xc)==0 && (state=(cp[-1]&0x3))) oldc = *cp; else if(xspace && cp[-1]==0xc2) { state = 8; oldc = *cp; } } else { skip--; if(state && (state=chkstate(state,oldc))) { if(state==10) { if(!wasspace) nwords++; wasspace = 1; state=0; goto spaces; } oldc = *cp; } } } while (mbc(c = type[*cp++])); wasspace = 0; if(skip) { if(eol(c) && (cp > endbuff)) goto eob; err: skip = 0; state = 0; if(eline!=nlines && !(wp->mode & WC_QUIET)) eline = invalid(file, nlines); while(mbc(c) && ((c|WC_ERR) || (c&7)==0)) c=type[*cp++]; if(eol(c) && (cp > endbuff)) { c = WC_MB|WC_ERR; goto eob; } if(mbc(c)) goto mbyte; else if(c&WC_SP) goto spaces; } if(spc(c)) { nwords++; continue; } } /* skip over word characters */ while(!(c = type[*cp++])); if(mbc(c)) goto mbyte; nwords++; } eob: lineoff = cp-start; if((cp -= 2) >= buff) c = type[*cp]; else c = lasttype; lasttype = type[lastchar]; /* see if was in word */ if(!c && !lasttype) nwords--; } if ((wp->mode&WC_LONGEST) && ((endbuff + 1 - start) - adjust - (lastchar == '\n')) > longest) longest = (endbuff + 1 - start) - adjust - (lastchar == '\n'); wp->longest = longest; if (eol(lasttype)) nlines++; else if (!lasttype) nwords++; if (wp->mode & WC_MBYTE) nchars -= adjust; else nchars = nbytes; } wp->chars = nchars; wp->words = nwords; wp->lines = nlines; return 0; }
void continuum_test2(const int type = 11) { TChain* gen_chain = new TChain("TEvent"); gen_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_mixed.root"); TChain* sig_chain = new TChain("TEvent"); TChain* bkg_chain = new TChain("TEvent"); int nsig; int m_mode,m_h0mode; double eff_min = 0.4; double eff_max = 0.95; double signif_min = 0; double signif_max = 15; double rej_min = 0.8; double rej_max = 1.0; // double mh0_min, mh0_max; double de_min, de_max; double mbc_min, mbc_max; string label; switch(type) { case 11: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcPi0_s7.root"); m_mode = 1; m_h0mode = 10; label = string("#pi^{0}"); signif_min = 13.; signif_max = 20; de_min =-0.1; de_max = 0.0921343; mbc_min = 5.27093; mbc_max = 5.28789; break; case 101: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root"); m_mode = 10; m_h0mode = 10; label = string("D^{*0}#pi^{0}"); signif_min = 5.5; signif_max = 7.2; de_min =-0.1; de_max = 0.0647985; mbc_min = 5.27146; mbc_max = 5.28769; break; case 12: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETA_s2.root"); m_mode = 2; m_h0mode = 10; label = string("#eta#rightarrow#gamma#gamma"); signif_min = 7.5; signif_max = 10; de_min =-0.0994528; de_max = 0.0758825; mbc_min = 5.27147; mbc_max = 5.28763; break; case 102: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root"); m_mode = 20; m_h0mode = 10; label = string("D^{*0}#eta(#rightarrow#gamma#gamma)"); signif_min = 4.; signif_max = 5.; de_min =-0.0853615; de_max = 0.0630641; mbc_min = 5.27182; mbc_max = 5.28746; break; case 13: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETA_s2.root"); m_mode = 2; m_h0mode = 20; label = string("#eta#rightarrow#pi^{+}#pi^{-}#pi^{0}"); signif_min = 4.5; signif_max = 6.2; de_min =-0.0534644; de_max = 0.0453713; mbc_min = 5.27205; mbc_max = 5.28735; break; case 103: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcDST0_s1.root"); m_mode = 20; m_h0mode = 20; label = string("D^{*0}#eta(#rightarrow#pi^{+}#pi^{-}#pi^{0})"); signif_min = 5; signif_max = 6.5; de_min =-0.0567598; de_max = 0.0459849; mbc_min = 5.27182; mbc_max = 5.28746; break; case 14: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcOMEGA_s5.root"); m_mode = 3; m_h0mode = 20; label = string("#omega"); signif_min = 11.5; signif_max = 15.0; de_min =-0.0565915; de_max = 0.0467748; mbc_min = 5.27198; mbc_max = 5.28743; break; case 15: sig_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_b2dh_sigmcETAP_s1.root"); m_mode = 5; m_h0mode = 10; label = string("#eta'(#rightarrow#gamma#gamma)"); signif_min = 3.; signif_max = 4; de_min =-0.0873898; de_max = 0.0642064; mbc_min = 5.27255; mbc_max = 5.28718; break; default: cout << "Wrong signal type " << type << endl; return; } bkg_chain->Add("/home/vitaly/B0toDh0/Tuples/Fil_cont.root"); // bkg_chain->Add("/home/vitaly/B0toDh0/TMVA/FIL1_b2dh_charm_2_12.root"); // bkg_chain->Add("/home/vitaly/B0toDh0/TMVA/FIL1_b2dh_uds_2_12.root"); RooArgSet argset; RooCategory mode("mode","mode"); mode.defineType("mode",m_mode); RooCategory h0mode("h0mode","h0mode"); h0mode.defineType("h0mode",m_h0mode); argset.add(mode); argset.add(h0mode); RooCategory good_icpv("good_icpv","good_icpv"); good_icpv.defineType("good_icpv",1); argset.add(good_icpv); RooRealVar mbc("mbc","mbc",mbc_min,mbc_max,"GeV"); argset.add(mbc); RooRealVar de("de","#DeltaE",de_min,de_max,"GeV"); argset.add(de); RooRealVar cos_thr("cos_thr","cos_thr",-1,1); argset.add(cos_thr); RooRealVar cos_hel("cos_hel","cos_hel",-1,1); if(type == 14) argset.add(cos_hel); // RooRealVar md("md_raw","md_raw",md_min,md_max,"GeV"); argset.add(md); // RooRealVar mk("mk","mk",KMass-mk_cut,KMass+mk_cut,"GeV"); argset.add(mk); // RooRealVar mh0("mh0","mh0",mh0_min,mh0_max,"GeV"); argset.add(mh0); // RooRealVar mpi0("mpi0","mpi0",mpi0_min,mpi0_max,"GeV"); if(type != 12) argset.add(mpi0); // RooRealVar chi2_mass_d0("chi2_mass_d0","chi2_mass_d0",0.,50.); argset.add(chi2_mass_d0); const bool bdt_flag = type<15; const bool bdtg_flag = false; const bool lh1_flag = false; const bool lh0_flag = type>=15; double bdt_best_cut = 0; double bdtg_best_cut = 0; double lh1_best_cut = 0; double lh0_best_cut = 0; double bdt_best_sig = 0; double bdtg_best_sig = 0; double lh1_best_sig = 0; double lh0_best_sig = 0; double bdt_best_eff = 0; double bdtg_best_eff = 0; double lh1_best_eff = 0; double lh0_best_eff = 0; double bdt_best_sup = 0; double bdtg_best_sup = 0; double lh1_best_sup = 0; double lh0_best_sup = 0; double bdt_best_pur = 0; double bdtg_best_pur = 0; double lh1_best_pur = 0; double lh0_best_pur = 0; if(bdt_flag) { RooRealVar bdt("bdt","bdt",-1.,1.); argset.add(bdt); } if(bdtg_flag) { RooRealVar bdtg("bdtg","bdtg",-1.,1.); argset.add(bdtg); } if(lh1_flag) { RooRealVar lh1("lh1","lh1",0.,1.); argset.add(lh1); } if(lh0_flag) { RooRealVar lh0("lh0","lh0",0.,1.); argset.add(lh0); } // RooRealVar atckpi_max("atckpi_max","atckpi_max",0.,atckpi_cut); argset.add(atckpi_max); // RooRealVar cos_thr("cos_thr","cos_thr",-1.,1.); argset.add(cos_thr); // RooArgSet argset_gen(argset); RooCategory b0f("b0f","b0f"); b0f.defineType("comb",-1); b0f.defineType("good",1); b0f.defineType("wrph",5); b0f.defineType("fsr",10); argset.add(b0f); RooDataSet ds_sig("ds_sig","ds_sig",sig_chain,argset,"b0f == 1 || b0f == 5 || b0f == 10"); RooDataSet ds_con("ds_con","ds_con",bkg_chain,argset,"b0f == -1"); RooDataSet ds_gen("ds_gen","ds_gen",gen_chain,argset,"b0f == 1 || b0f == 5 || b0f == 10"); nsig = ds_gen.sumEntries()*0.25; cout << "Nsig: " << nsig << endl; ds_sig.Print(); ds_con.Print(); double sig_eff_bdt[100]; double sig_eff_bdtg[100]; double sig_eff_lh1[100]; double sig_eff_lh0[100]; double back_reg_bdt[100]; double back_reg_bdtg[100]; double back_reg_lh1[100]; double back_reg_lh0[100]; double signif_bdt[100]; double signif_bdtg[100]; double signif_lh1[100]; double signif_lh0[100]; const double gen = ds_con.sumEntries()*0.25; const double sig = ds_sig.sumEntries(); stringstream out; double S,B; const int dots = 100; const double dbdt = 1./dots; cout << gen*4 << " " << sig << endl; for(int i=0; i<dots; i++) { if(bdt_flag) { out.str(""); out << "bdt>" << i*dbdt; S = ds_sig.sumEntries(out.str().c_str()); B = ds_con.sumEntries(out.str().c_str())*0.25; sig_eff_bdt[i] = S/sig; back_reg_bdt[i] = (gen-B)/gen; S = nsig/sig*S; // B = nback/gen*B; signif_bdt[i] = S/sqrt(S+B+0.0001); if(bdt_best_sig<(signif_bdt[i]-0.07)) { bdt_best_sig = signif_bdt[i]; bdt_best_cut = i*dbdt; bdt_best_pur = S/(S+B); bdt_best_eff = sig_eff_bdt[i]; bdt_best_sup = back_reg_bdt[i]; } } if(lh1_flag) { out.str(""); out << "lh1>sqrt(1-" << i*dbdt*i*dbdt << ") && abs(cos_thr)<1."; if(type == 14) out << " && abs(cos_hel)>0.3"; S = ds_sig.sumEntries(out.str().c_str()); B = ds_con.sumEntries(out.str().c_str())*0.25; sig_eff_lh1[i] = S/sig; back_reg_lh1[i] = (gen-B)/gen; S = nsig/sig*S; // B = nback/gen*B; signif_lh1[i] = S/sqrt(S+B+0.0001); if(lh1_best_sig<signif_lh1[i]) { lh1_best_sig = signif_lh1[i]; lh1_best_cut = sqrt(1-i*dbdt*i*dbdt); lh1_best_pur = S/(S+B); lh1_best_eff = sig_eff_lh1[i]; lh1_best_sup = back_reg_lh1[i]; } } if(lh0_flag) { out.str(""); out << "lh0>" << -1 +2*i*dbdt << " && abs(cos_thr)<1."; if(type == 14) out << " && abs(cos_hel)>0.3"; S = ds_sig.sumEntries(out.str().c_str()); B = ds_con.sumEntries(out.str().c_str())*0.25; sig_eff_lh0[i] = S/sig; back_reg_lh0[i] = (gen-B)/gen; S = nsig/sig*S; // B = nback/gen*B; signif_lh0[i] = S/sqrt(S+B+0.0001); if(lh0_best_sig<signif_lh0[i]) { lh0_best_sig = signif_lh0[i]; lh0_best_cut = sqrt(1-i*dbdt*i*dbdt); lh0_best_pur = S/(S+B); lh0_best_eff = sig_eff_lh0[i]; lh0_best_sup = back_reg_lh0[i]; } } if(bdtg_flag) { out.str(""); out << "bdtg>sqrt(1-" << i*dbdt*i*dbdt << ")"; S = ds_sig.sumEntries(out.str().c_str()); B = ds_con.sumEntries(out.str().c_str())/0.949; sig_eff_bdtg[i] = S/sig; back_reg_bdtg[i] = (gen-B)/gen; S = nsig/sig*S; // B = nback/gen*B; signif_bdtg[i] = S/sqrt(S+B+0.0001); if(bdtg_best_sig<signif_bdtg[i]) { bdtg_best_sig = signif_bdtg[i]; bdtg_best_cut = sqrt(1-i*dbdt*i*dbdt); bdtg_best_pur = S/(S+B); bdtg_best_eff = sig_eff_bdtg[i]; bdtg_best_sup = back_reg_bdtg[i]; } } } TCanvas* c1 = new TCanvas("c1","Signal Efficiency vs. Background Rejection",600,600); TH1F* h1 = c1->Draw(); c1->SetGrid(); TMultiGraph *mg = new TMultiGraph(); mg->SetTitle("Background Rejection"); TGraph* gr_bdt = new TGraph(dots,sig_eff_bdt,back_reg_bdt); gr_bdt->SetMarkerSize(1); gr_bdt->SetMarkerColor(kBlue); gr_bdt->SetMarkerStyle(21); gr_bdt->SetTitle("Background Rejection"); gr_bdt->GetXaxis()->SetRangeUser(eff_min,eff_max); gr_bdt->GetXaxis()->SetTitle("Signal Efficiency"); gr_bdt->GetXaxis()->SetTitleSize(0.06); gr_bdt->GetXaxis()->SetTitleOffset(0.75); gr_bdt->GetYaxis()->SetRangeUser(rej_min,rej_max); TGraph* gr_bdtg = new TGraph(dots,sig_eff_bdtg,back_reg_bdtg); gr_bdtg->SetMarkerSize(1); gr_bdtg->SetMarkerColor(kRed); gr_bdtg->SetMarkerStyle(21); TGraph* gr_ksfw1 = new TGraph(dots,sig_eff_lh1,back_reg_lh1); gr_ksfw1->SetMarkerSize(1); gr_ksfw1->SetMarkerColor(kRed); gr_ksfw1->SetMarkerStyle(22); TGraph* gr_ksfw0 = new TGraph(dots,sig_eff_lh0,back_reg_lh0); gr_ksfw0->SetMarkerSize(1.4); gr_ksfw0->SetMarkerColor(kBlue); gr_ksfw0->SetMarkerStyle(22); gr_ksfw0->SetTitle("Background Rejection"); gr_ksfw0->GetXaxis()->SetRangeUser(eff_min,eff_max); gr_ksfw0->GetXaxis()->SetTitle("Signal Efficiency"); gr_ksfw0->GetXaxis()->SetTitleSize(0.06); gr_ksfw0->GetXaxis()->SetTitleOffset(0.75); gr_ksfw0->GetYaxis()->SetRangeUser(rej_min,rej_max); if(bdt_flag)mg->Add(gr_bdt); if(bdtg_flag)mg->Add(gr_bdtg); if(lh1_flag)mg->Add(gr_ksfw1); if(lh0_flag)mg->Add(gr_ksfw0); if(bdt_flag && !bdtg_flag && !lh1_flag && !lh0_flag) { gr_bdt->Draw("AP"); } else if(lh0_flag && !bdtg_flag && !lh1_flag && !bdt_flag) { gr_ksfw0->Draw("AP"); } else { mg->Draw("AP"); } if(type<15) { TLine* cutline = new TLine(bdt_best_eff,rej_min,bdt_best_eff,rej_max); cutline->SetLineColor(kRed); cutline->SetLineWidth(2); cutline->Draw("AP"); } else { TLine* cutline = new TLine(lh0_best_eff,rej_min,lh0_best_eff,rej_max); cutline->SetLineColor(kRed); cutline->SetLineWidth(2); cutline->Draw("AP"); } TPaveText *pt = new TPaveText(0.7,0.75,0.98,0.9,"brNDC"); pt->SetFillColor(0); pt->SetTextAlign(12); pt->AddText(label.c_str()); out.str(""); out << "Input S = " << nsig; pt->AddText(out.str().c_str()); out.str(""); out << "Input B = " << (int)gen; pt->AddText(out.str().c_str()); pt->Draw(); TPaveText *pt2 = new TPaveText(0.3,0.25,0.6,0.5,"brNDC"); pt2->SetFillColor(0); pt2->SetTextAlign(12); pt2->AddText("Best cut:"); if(type<15) { out.str(""); out << setprecision(3); out << "Pur = " << bdt_best_pur*100; pt2->AddText(out.str().c_str()); out.str(""); out << "Eff = " << bdt_best_eff*100; pt2->AddText(out.str().c_str()); out.str(""); out << "Rej = " << bdt_best_sup*100; pt2->AddText(out.str().c_str()); pt2->Draw(); } else { out.str(""); out << setprecision(3); out << "Pur = " << lh0_best_pur*100; pt2->AddText(out.str().c_str()); out.str(""); out << "Eff = " << lh0_best_eff*100; pt2->AddText(out.str().c_str()); out.str(""); out << "Rej = " << lh0_best_sup*100; pt2->AddText(out.str().c_str()); pt2->Draw(); } c1->Update(); out.str(""); out << "../Note/pics/eff-rej-m" << type << ".root"; c1->Print(out.str().c_str()); out.str(""); out << "../Note/pics/eff-rej-m" << type << ".eps"; c1->Print(out.str().c_str()); TCanvas* c2 = new TCanvas("c2","Significance",600,600); c2->cd(); c2->SetGrid(); TMultiGraph *signif_mg = new TMultiGraph(); signif_mg->SetTitle("Signal Significance"); TGraph* signif_gr_bdt = new TGraph(dots,sig_eff_bdt,signif_bdt); signif_gr_bdt->SetMarkerSize(1); signif_gr_bdt->SetMarkerColor(kBlue); signif_gr_bdt->SetMarkerStyle(21); signif_gr_bdt->SetTitle("Signal Significance"); signif_gr_bdt->GetXaxis()->SetRangeUser(eff_min,eff_max); signif_gr_bdt->GetXaxis()->SetTitle("Signal Efficiency"); signif_gr_bdt->GetXaxis()->SetTitleSize(0.06); signif_gr_bdt->GetXaxis()->SetTitleOffset(0.75); signif_gr_bdt->GetYaxis()->SetRangeUser(signif_min,signif_max); TGraph* signif_gr_bdtg = new TGraph(dots,sig_eff_bdtg,signif_bdtg); signif_gr_bdtg->SetMarkerSize(1); signif_gr_bdtg->SetMarkerColor(kRed); signif_gr_bdtg->SetMarkerStyle(21); TGraph* signif_gr_ksfw1 = new TGraph(dots,sig_eff_lh1,signif_lh1); signif_gr_ksfw1->SetMarkerSize(1); signif_gr_ksfw1->SetMarkerColor(kRed); signif_gr_ksfw1->SetMarkerStyle(22); TGraph* signif_gr_ksfw0 = new TGraph(dots,sig_eff_lh0,signif_lh0); signif_gr_ksfw0->SetMarkerSize(1.4); signif_gr_ksfw0->SetMarkerColor(kBlue); signif_gr_ksfw0->SetMarkerStyle(22); signif_gr_ksfw0->SetTitle("Signal Significance"); signif_gr_ksfw0->GetXaxis()->SetRangeUser(eff_min,eff_max); signif_gr_ksfw0->GetXaxis()->SetTitle("Signal Efficiency"); signif_gr_ksfw0->GetXaxis()->SetTitleSize(0.06); signif_gr_ksfw0->GetXaxis()->SetTitleOffset(0.75); signif_gr_ksfw0->GetYaxis()->SetRangeUser(signif_min,signif_max); if(bdt_flag) signif_mg->Add(signif_gr_bdt); if(bdtg_flag) signif_mg->Add(signif_gr_bdtg); if(lh1_flag) signif_mg->Add(signif_gr_ksfw1); if(lh0_flag) signif_mg->Add(signif_gr_ksfw0); if(bdt_flag && !bdtg_flag && !lh1_flag && !lh0_flag) { signif_gr_bdt->Draw("AP"); } else if(!bdt_flag && !bdtg_flag && !lh1_flag && lh0_flag) { signif_gr_ksfw0->Draw("AP"); } else { signif_mg->Draw("AP"); } if(type<15) { TLine* cutline2 = new TLine(bdt_best_eff,signif_min,bdt_best_eff,signif_max); cutline2->SetLineColor(kRed); cutline2->SetLineWidth(2); cutline2->Draw("AP"); } else { TLine* cutline2 = new TLine(lh0_best_eff,signif_min,lh0_best_eff,signif_max); cutline2->SetLineColor(kRed); cutline2->SetLineWidth(2); cutline2->Draw("AP"); } pt->Draw(); pt2->Draw(); c2->Update(); out.str(""); out << "../Note/pics/eff-fom-m" << type << ".root"; c2->Print(out.str().c_str()); out.str(""); out << "../Note/pics/eff-fom-m" << type << ".eps"; c2->Print(out.str().c_str()); cout << "Summary:" << endl; if(bdtg_flag) { cout << "bdtg decision: "; cout << "sig: " << bdtg_best_sig; cout << ", cut: " << bdtg_best_cut; cout << ", pur: " << bdtg_best_pur; cout << ", eff: " << bdtg_best_eff; cout << ", sup: " << bdtg_best_sup << endl; } if(bdt_flag) { cout << "bdt decision: "; cout << "sig: " << bdt_best_sig; cout << ", cut: " << bdt_best_cut; cout << ", pur: " << bdt_best_pur; cout << ", eff: " << bdt_best_eff; cout << ", sup: " << bdt_best_sup << endl; } if(lh1_flag) { cout << "lh1 decision: "; cout << "sig: " << lh1_best_sig; cout << ", cut: " << lh1_best_cut; cout << ", pur: " << lh1_best_pur; cout << ", eff: " << lh1_best_eff; cout << ", sup: " << lh1_best_sup << endl; } if(lh0_flag) { cout << "lh0 decision: "; cout << "sig: " << lh0_best_sig; cout << ", cut: " << lh0_best_cut; cout << ", pur: " << lh0_best_pur; cout << ", eff: " << lh0_best_eff; cout << ", sup: " << lh0_best_sup << endl; } return; }
void SpringEstimator::initArms(const std::vector<rbd::MultiBody>& arms, const std::vector<JointTarget>& jointTarget) { arms_.clear(); jTargetData_.clear(); tasks_.clear(); projs_.clear(); int dof = 0; std::vector<int> armQDBegin; for(const rbd::MultiBody& mb: arms) { armQDBegin.push_back(dof); dof += mb.nrDof(); rbd::MultiBodyConfig mbc(mb); mbc.zero(mb); rbd::forwardKinematics(mb, mbc); rbd::forwardVelocity(mb, mbc); std::string endEffectorName = mb.body(mb.nrBodies() - 1).name(); rbd::Jacobian jac(mb, endEffectorName); arms_.push_back({mb, mbc, jac, Eigen::MatrixXd(6, jac.dof()), mb.bodyIndexByName(endEffectorName)}); } q_.setZero(dof, 1); qd_.setZero(dof, 1); Eigen::MatrixXd jointTargetJac( Eigen::MatrixXd::Zero(jointTarget.size(), dof)); // file joint targets data and joint target jacobian for(std::size_t i = 0; i < jointTarget.size(); ++i) { const JointTarget& jt = jointTarget[i]; ArmData& ad = arms_[jt.armIndex]; /// TODO manage arm with dof != params /// TODO manage joint.dof > 1 int jointIndex = ad.mb.jointIndexByName(jt.jointName); int jointIndexInQD = armQDBegin[jt.armIndex] + ad.mb.jointPosInDof(jointIndex); jointTargetJac(i, jointIndexInQD) = 1.; jTargetData_.push_back({jointIndexInQD, jt.target}); } // create the first dummy projector projs_.emplace_back(0, dof); int cumDim = 0; // only add the end effector null translation // and rotation error task if the is more than 1 arm if(arms.size() > 1) { // end effector translation task tasks_.emplace_back((arms.size() - 1)*3, dof); cumDim += int(tasks_.back().jac.rows()); projs_.emplace_back(cumDim, dof); // end effector rotation task tasks_.emplace_back((arms.size() - 1)*3, dof); cumDim += int(tasks_.back().jac.rows()); projs_.emplace_back(cumDim, dof); } // minimize rotation error to target tasks_.emplace_back(3, dof); cumDim += int(tasks_.back().jac.rows()); projs_.emplace_back(cumDim, dof); // joints target (jacobian is constant but error is computed each iter) if(jTargetData_.size() > 0) { tasks_.emplace_back(jTargetData_.size(), dof); tasks_.back().jac = jointTargetJac; cumDim += int(tasks_.back().jac.rows()); projs_.emplace_back(cumDim, dof); } // minimize joints velocity // the jacobian and error are constants tasks_.emplace_back(dof, dof); tasks_.back().err.setZero(); tasks_.back().jac.setIdentity(); }