static void dump_mixer_config( const DFBScreenMixerConfig *config ) { int n; printf( "\n" ); if (config->flags & DSMCONF_TREE) printf( "Tree: %s\n", tree_name( config->tree ) ); if (config->flags & DSMCONF_LEVEL) printf( "Level: %d\n", config->level ); if (config->flags & DSMCONF_LAYERS) { printf( "Layers: " ); for (n=0; n<DFB_DISPLAYLAYER_IDS_MAX; n++) { if (DFB_DISPLAYLAYER_IDS_HAVE( config->layers, n )) printf( "(%02x) ", n ); } printf( "\n" ); } if (config->flags & DSMCONF_BACKGROUND) printf( "Background: 0x%02x, 0x%02x, 0x%02x, 0x%02x (ARGB)\n", config->background.a, config->background.r, config->background.g, config->background.b ); printf( "\n" ); }
static void opt_tag_last_value_attr_ref(tree_t t) { static ident_t last_value_attr_i = NULL; if (last_value_attr_i == NULL) last_value_attr_i = ident_new("LAST_VALUE"); if (tree_ident(t) == last_value_attr_i) { tree_t signal = tree_ref(tree_name(t)); if (tree_kind(signal) != T_SIGNAL_DECL) return; // A signal in a package will not have nets assigned yet so we cannot // optimise out 'LAST_VALUE if (tree_nets(signal) > 0) tree_add_attr_int(signal, last_value_i, 1); } }
static map_list_t *elab_map(tree_t t, tree_t arch, tree_formals_t tree_Fs, tree_formal_t tree_F, tree_actuals_t tree_As, tree_actual_t tree_A) { tree_t unit = tree_ref(arch); assert(tree_kind(unit) == T_ENTITY); const int nformals = tree_Fs(unit); const int nactuals = (tree_As != NULL) ? tree_As(t) : 0; bool *have_formals = xmalloc(sizeof(bool) * nformals); for (int i = 0; i < nformals; i++) have_formals[i] = false; const int maxr = nformals + nactuals; tree_t *rformals = xmalloc(sizeof(tree_t) * maxr); tree_t *ractuals = xmalloc(sizeof(tree_t) * maxr); int count = 0; map_list_t *maps = NULL; for (int i = 0; i < nactuals; i++) { tree_t p = tree_A(t, i); tree_t formal = NULL; switch (tree_subkind(p)) { case P_POS: { const int pos = tree_pos(p); formal = tree_F(unit, pos); have_formals[pos] = true; } break; case P_NAMED: { ident_t name = elab_formal_name(tree_name(p)); for (int j = 0; j < nformals; j++) { tree_t port = tree_F(unit, j); if (tree_ident(port) == name) { formal = port; have_formals[j] = true; break; } } } break; default: assert(false); } assert(formal != NULL); switch (tree_class(formal)) { case C_SIGNAL: ractuals[count] = elab_signal_port(arch, formal, p, &maps); break; case C_CONSTANT: ractuals[count] = tree_value(p); break; default: assert(false); } rformals[count] = formal; count++; } // Assign default values for (unsigned i = 0; i < nformals; i++) { if (!have_formals[i]) { tree_t f = tree_F(unit, i); if (tree_has_value(f)) { rformals[count] = f; ractuals[count] = tree_value(f); count++; } } } assert(count <= maxr); if (count > 0) { rewrite_params_t params = { .formals = rformals, .actuals = ractuals, .count = count }; tree_rewrite(arch, rewrite_refs, ¶ms); tree_t ent = tree_ref(arch); if (tree_stmts(ent) > 0 || tree_decls(ent) > 0) tree_rewrite(ent, rewrite_refs, ¶ms); }
static tree_t elab_signal_port(tree_t arch, tree_t formal, tree_t param, map_list_t **maps) { assert(tree_kind(param) == T_PARAM); tree_t actual = tree_value(param); // NULL name means associate the whole port tree_t name = NULL; if (tree_subkind(param) == P_NAMED) { tree_t n = tree_name(param); if (tree_kind(n) != T_REF) name = n; } const bool partial_map = name != NULL; switch (tree_kind(actual)) { case T_REF: case T_ARRAY_REF: case T_ARRAY_SLICE: case T_RECORD_REF: { // Replace the formal port with a signal and connect its nets to // those of the actual tree_t ref = actual; tree_kind_t ref_kind; while ((ref_kind = tree_kind(ref)) != T_REF) { if ((ref_kind == T_AGGREGATE) || (ref_kind == T_LITERAL)) return actual; else ref = tree_value(ref); } tree_t decl = tree_ref(ref); tree_kind_t decl_kind = tree_kind(decl); if (decl_kind == T_SIGNAL_DECL) { tree_t s = elab_port_to_signal(arch, formal, actual); if (partial_map) tree_add_attr_int(s, partial_map_i, 1); map_list_t *m = xmalloc(sizeof(map_list_t)); m->next = *maps; m->formal = formal; m->actual = actual; m->signal = s; m->name = name; *maps = m; return s; } else if (decl_kind == T_PORT_DECL) return NULL; // Port was OPEN at a higher level else return actual; } case T_LITERAL: case T_AGGREGATE: { type_t formal_type = tree_type(formal); if (!type_is_unconstrained(formal_type)) tree_set_type(actual, formal_type); return actual; } case T_OPEN: return NULL; case T_TYPE_CONV: // Only allow simple array type conversions for now { type_t to_type = tree_type(actual); type_t from_type = tree_type(tree_value(tree_param(actual, 0))); if (type_is_array(to_type) && type_is_array(from_type)) return actual; else fatal_at(tree_loc(actual), "sorry, this form of type conversion " "is not supported as an actual"); } default: fatal_at(tree_loc(actual), "tree %s not supported as actual", tree_kind_str(tree_kind(actual))); } }
void draw_dca_distrib() { gROOT->SetStyle("Plain"); gStyle->SetOptStat("plain"); //gStyle->SetOptStat(000000); Float_t contrib[knpart][knpbin][knseg_max]; for ( int ipart = 0; ipart < knpart; ipart++ ) for ( int ipbin = 0; ipbin < knpbin; ipbin++ ) for ( int iseg = 0; iseg < knseg_max; iseg++ ) contrib[ipart][ipbin][iseg] = 1; /* contrib[1][0][1] = 0; contrib[1][1][1] = 0; contrib[2][0][1] = 0; contrib[2][1][1] = 0; contrib[2][2][1] = 0; contrib[2][3][1] = 0; contrib[3][0][1] = 0; contrib[3][1][1] = 0; contrib[3][2][1] = 0; contrib[3][3][1] = 0; */ TFile *f[knpart][knseg_max]; //f[0][0] = new TFile("../data/merge/match_pdst_pp_ba_24m_3.root"); //f[0][0] = new TFile("../data/merge/match_pdst_pp_ba_flat.root"); f[0][0] = new TFile("meson_transform/data/train_b.root"); //f[1][0] = new TFile("../data/merge/match_pdst_pp_ca_4.253b_3.root"); //f[1][0] = new TFile("../data/merge/match_pdst_pp_ca_flat.root"); f[1][0] = new TFile("meson_transform/data/train_c.root"); //f[2][0] = new TFile("../data/merge/match_pdst_pp_bg_250b_2.root"); f[2][0] = new TFile("../data/merge/match_pdst_pp_bg_250b_2.root"); f[3][0] = new TFile("../data/merge/match_pdst_pp_ba_24m_3.root"); f[4][0] = new TFile("../data/merge/match_pdst_pp_all_250b_3.root"); TFile *freadin = new TFile("bin500_10pb/draw_dca_distrib_3.root", "READ"); TH1F *hpart_total_tmp[knpart][knpbin]; TString tree_name("mc_trk_eval"); TTree *t[knpart][knseg_max]; for ( Int_t ipart = 0; ipart < knpart; ipart++ ) { for ( Int_t iseg = 0; iseg < knseg[ipart]; iseg++ ) { cout << f[ipart][iseg]->GetName() << endl; t[ipart][iseg] = (TTree*)f[ipart][iseg]->Get(tree_name); //if (ipart == 4) t[ipart][iseg] = (TTree*)f[ipart][iseg]->Get("trk_eval"); } } TH1F *hpart[knpart][knpbin][knseg_max]; TString hpart_name[knpart][knpbin][knseg_max]; TH1F *hpart_total[knpart][knpbin]; TString hpart_total_name[knpart][knpbin]; TString draw_value("(x0reco-evtx0mc)*(px0reco/sqrt(px0reco**2+py0reco**2))+(y0reco-evty0mc)*(py0reco/sqrt(px0reco**2+py0reco**2))"); // TString draw_value("(y0reco-evty0mc)*(px0reco/sqrt(px0reco**2+py0reco**2))-(x0reco-evtx0mc)*(py0reco/sqrt(px0reco**2+py0reco**2))"); TString cut_value("Abs((X0reco-evtx0mc)*(px0reco/sqrt(px0reco**2+py0reco**2))+(y0reco-evty0mc)*(py0reco/sqrt(px0reco**2+py0reco**2)))<0.5&&x0reco!=-9999&&y0reco!=-9999"); TString dca_phi_cut_value("&&abs((y0reco-evty0mc)*(px0reco/sqrt(px0reco**2+py0reco**2))-(x0reco-evtx0mc)*(py0reco/sqrt(px0reco**2+py0reco**2)))<1&&x0reco!=-9999&&y0reco!=-9999&&mu_px!=-9999"); //TString draw_value("((x0mc-px0mc/pz0mc*(z0mc-evtz0mc))-evtx0mc)*(px0mc/sqrt(px0mc**2+py0mc**2))+((y0mc-py0mc/pz0mc*(z0mc-evtz0mc))-evty0mc)*(py0mc/sqrt(px0mc**2+py0mc**2))"); //TString draw_value("((y0mc-py0mc/pz0mc*(z0mc-evtz0mc))-evty0mc)*(px0mc/sqrt(px0mc**2+py0mc**2))-((x0mc-px0mc/pz0mc*(z0mc-evtz0mc))-evtx0mc)*(py0mc/sqrt(px0mc**2+py0mc**2))"); //TString draw_value("mu_chi2"); //TString cut_value("mu_chi2<100&&x0reco!=-9999&&y0reco!=-9999&&mu_px!=-9999"); TString mu_cut_value("&&mu_chi2<5&&mu_lastGap==4&&abs(mu_eta)>1.2&&abs(mu_eta)<2.4&&mu_DG0<15&&mu_pT<30&&abs(mu_pz)>2.8&&abs(mu_pz)<=30&&mu_DDG0<10&&mu_mutr_nhits>=12"); TString xcor("mu_pT"); cut_value += dca_phi_cut_value; cut_value += mu_cut_value; //cut_value += "&&Entry$<100"; TH1F *hmu_pT[knpart]; for ( Int_t ipart = 0; ipart < knpart; ipart++ ) { TString hmu_pT_name("mu_pT_"); hmu_pT_name += kpart_name[ipart]; hmu_pT[ipart] = new TH1F(hmu_pT_name, hmu_pT_name, 2*knpbin, kpmin, kpmax); if (kreadin[ipart] == 0) t[ipart][0]->Draw( xcor + ">>" + hmu_pT_name, cut_value ); } TH1F *hdca_res[knpart]; for ( Int_t ipart = 0; ipart < knpart; ipart++ ) { TString dca_res_name("DCA_res_"); dca_res_name += kpart_name[ipart]; hdca_res[ipart] = new TH1F(dca_res_name, dca_res_name, knpbin, kpmin, kpmax); } TH1F *hppart[knpart][knpbin]; TString hppart_name[knpart][knpbin]; TH1F *hppart_total[knpart]; TString hppart_total_name[knpart]; for ( Int_t ipart = 0 ; ipart < 2; ipart++ ) { hppart_total_name[ipart] = TString("h_") + kpart_name[ipart] + "_p_pt_total"; hppart_total[ipart] = new TH1F(hppart_total_name[ipart], hppart_total_name[ipart], knppbin, kppmin, kppmax); if (kreadin[ipart] == 0) t[ipart][0]->Draw( "py_p_pT>>" + hppart_total_name[ipart], cut_value ); } for ( Int_t ipbin = 0; ipbin < knpbin; ipbin++ ) { Float_t pmin = kpmin + ipbin * kpstep; Float_t pmax = kpmin + (ipbin+1) * kpstep; for ( Int_t ipart = 0; ipart < knpart; ipart++ ) { hpart_total_name[ipart][ipbin] = TString("h_") + kpart_name[ipart] + "_pt_" + int((ipbin+2)/2); if (ipbin%2 == 1) hpart_total_name[ipart][ipbin] += TString(".5"); //read in hist if (kreadin[ipart] == 1) { hpart_total_tmp[ipart][ipbin] = (TH1F*)((TCanvas*)freadin->Get("dca"))->GetPad(ipbin+1)->FindObject( hpart_total_name[ipart][ipbin] ); if (!hpart_total_tmp[ipart][ipbin]) cout << hpart_total_name[ipart][ipbin] << " not found " << endl; hpart_total_tmp[ipart][ipbin]->SetName(hpart_total_name[ipart][ipbin] + "_readin"); //cout << " hpart_total_tmp name " << hpart_total_tmp[ipart][ipbin]->GetName() << endl; } hpart_total[ipart][ipbin] = new TH1F( hpart_total_name[ipart][ipbin], hpart_total_name[ipart][ipbin], khbin, khxmin, khxmax ); if (kreadin[ipart] == 1) { for (int idcabin = 0; idcabin < khbin; idcabin++) hpart_total[ipart][ipbin]->SetBinContent(idcabin+1, hpart_total_tmp[ipart][ipbin]->GetBinContent(idcabin+1)); } for ( Int_t iseg = 0; iseg < knseg[ipart]; iseg++ ) { hpart_name[ipart][ipbin][iseg] = TString("h_") + kpart_name[ipart] + "_pt_" + (ipbin+1) + "_seg" + iseg; cout << hpart_name[ipart][ipbin][iseg] << endl; hpart[ipart][ipbin][iseg] = new TH1F( hpart_name[ipart][ipbin][iseg], hpart_name[ipart][ipbin][iseg], khbin, khxmin, khxmax ); TString pcut; stringstream pcutstr; //pcutstr << "py_p_pT>4&&"; pcutstr << xcor.Data() << ">=" << pmin << "&&" << xcor.Data() << "<" << pmax; pcut = pcutstr.str(); cout << pcut << endl; //if (ipart != 4) t[ipart][iseg]->Draw( draw_value + ">>" + hpart_name[ipart][ipbin][iseg], cut_value+"&&"+pcut+"&&Entry$%2==0"); //else t[ipart][iseg]->Draw( draw_value + ">>" + hpart_name[ipart][ipbin][iseg], cut_value+"&&"+pcut+"&&Entry$%2==1"); if (kreadin[ipart] == 0) t[ipart][iseg]->Draw( draw_value + ">>" + hpart_name[ipart][ipbin][iseg], cut_value+"&&"+pcut ); } hppart_name[ipart][ipbin] = TString("h_") + kpart_name[ipart] + "_p_pt_" + int((ipbin+2)/2); if (ipbin%2 == 1) hppart_name[ipart][ipbin] += TString(".5"); cout << hppart_name[ipart][ipbin] << endl; hppart[ipart][ipbin] = new TH1F( hppart_name[ipart][ipbin], hppart_name[ipart][ipbin], knppbin, kppmin, kppmax ); TString pcut; stringstream pcutstr; pcutstr << xcor.Data() << ">=" << pmin << "&&" << xcor.Data() << "<" << pmax; pcut = pcutstr.str(); cout << pcut << endl; if (kreadin[ipart] == 0) t[ipart][0]->Draw( "py_p_pT>>" + hppart_name[ipart][ipbin], cut_value+"&&"+pcut ); for (int jpbin = 0; jpbin < knppbin; jpbin++) { if (ipart >= 2) continue; if (hppart_total[ipart] != 0 && hppart_total[ipart]->GetBinContent(jpbin+1) != 0) hppart[ipart][ipbin]->SetBinContent(jpbin+1, hppart[ipart][ipbin]->GetBinContent(jpbin+1)/hppart_total[ipart]->GetBinContent(jpbin+1)); else hppart[ipart][ipbin]->SetBinContent(jpbin+1, 0); } } } TCanvas *c_dca = new TCanvas( "dca", "dca", 1200, 900 ); c_dca->Divide(knpadx, knpady) ; for ( Int_t ipbin = 0; ipbin < knpbin; ipbin++ ) { c_dca->cd(ipbin+1); Float_t hymax = 0.0; for ( Int_t ipart = knpart-1 ; ipart >= 0; ipart-- ) { hdca_res[ipart]->SetBinContent(ipbin, hpart[ipart][ipbin][0]->GetRMS()); hdca_res[ipart]->SetBinError(ipbin, hpart[ipart][ipbin][0]->GetRMSError()); TString draw_option(""); if (ipart != knpart-1) draw_option = TString("same"); int nseg_contrib = 0; for ( Int_t iseg = 0; iseg < knseg[ipart]; iseg++ ) { float scale = klt*ksigma[ipart]/knevent[ipart][iseg]; cout << "ipart " << ipart << " iseg " << iseg << " ipbin " << ipbin << " : " << scale << endl; /* if ( ipart != knpart-1 ) { if( knevent[ipart][iseg] != 0 ) hpart[ipart][ipbin][iseg]->Scale( klt*ksigma[ipart]/knevent[ipart][iseg] ); else hpart[ipart][ipbin][iseg]->Scale(0); } */ if ( hpart[ipart][ipbin][iseg] ) hpart[ipart][ipbin][iseg]->Scale( contrib[ipart][ipbin][iseg] ); if ( contrib[ipart][ipbin][iseg] != 0 ) nseg_contrib += contrib[ipart][ipbin][iseg]; *hpart_total[ipart][ipbin] = *hpart_total[ipart][ipbin] + *hpart[ipart][ipbin][iseg]; } cout << "nseg_contrib " << nseg_contrib << endl; hpart_total[ipart][ipbin]->Scale( 1.0/nseg_contrib ); //if ( ipart != knpart-1 ) //hpart_total[ipart][ipbin]->Scale( kreal[ipart] ); hpart_total[ipart][ipbin]->GetXaxis()->SetTitle("dca_r [cm]"); hpart_total[ipart][ipbin]->SetLineColor( khcolor[ipart] ); hpart_total[ipart][ipbin]->SetLineWidth( khwidth[ipart] ); hpart_total[ipart][ipbin]->SetMinimum(khymin); hpart_total[ipart][ipbin]->SetMaximum(khymax); if (ipart != 3) hpart_total[ipart][ipbin]->Draw( draw_option ); /* TGraphErrors *tg = histo_to_tgraph( hpart_total[ipart][ipbin], false ); TString tg_title = hpart_total_name[ipart][ipbin]; tg_title.Replace(0, 8, "@pT="); tg_title += TString("GeV"); tg->SetTitle( tg_title ); tg->GetXaxis()->SetTitle("DCA_r [cm]"); tg->SetMarkerColor( khcolor[ipart] ); tg->SetLineColor( khcolor[ipart] ); tg->SetLineWidth( khwidth[ipart] ); tg->SetMinimum(khymin); tg->SetMaximum(khymax); if (ipart != 3) tg->Draw( draw_option ); TLatex ll[4]; ll[0].SetTextSize(0.045); ll[0].DrawLatex(1., 0.9,"Merged events"); ll[1].SetTextColor(2); ll[1].DrawLatex(1., 0.8, "B events"); ll[2].SetTextColor(4); ll[2].DrawLatex(1., 0.7, "D events"); ll[3].SetTextColor(6); ll[3].DrawLatex(1., 0.6, "Bkgnd events"); */ c_dca->GetPad( ipbin+1 )->SetLogy(); c_dca->GetPad( ipbin+1 )->SetGridx(); c_dca->GetPad( ipbin+1 )->SetGridy(); } } TCanvas *c_dca_res = new TCanvas("c_dca_res", "c_dca_res"); for ( Int_t ipart = knpart-1 ; ipart >= 0; ipart-- ) { TString draw_option("pl"); if (ipart != knpart-1) draw_option += "same"; hdca_res[ipart]->SetMinimum(0.0); hdca_res[ipart]->SetMaximum(0.2); hdca_res[ipart]->SetLineColor( khcolor[ipart] ); if (ipart != 3) hdca_res[ipart]->Draw( draw_option ); } TCanvas *c_ppT = new TCanvas( "ppT", "ppT", 1200, 900 ); c_ppT->Divide(knpadx, knpady); for ( Int_t ipbin = 0; ipbin < knpbin; ipbin++ ) { c_ppT->cd(ipbin+1); double hbin_max = 0; for ( Int_t ipart = 1 ; ipart >= 0; ipart-- ) { if (hppart[ipart][ipbin]->GetBinContent( hppart[ipart][ipbin]->GetMaximumBin() ) > hbin_max) hbin_max = hppart[ipart][ipbin]->GetBinContent( hppart[ipart][ipbin]->GetMaximumBin() ); } for ( Int_t ipart = knpart-1 ; ipart >= 0; ipart-- ) { TString draw_option(""); if (ipart != knpart-1) draw_option = TString("same"); hppart[ipart][ipbin]->SetLineColor( khcolor[ipart] ); hppart[ipart][ipbin]->SetLineWidth( khwidth[ipart] ); hppart[ipart][ipbin]->SetMaximum( hbin_max*1.2 ); if (ipart == 0 || ipart == 1) hppart[ipart][ipbin]->Draw( draw_option ); } } c_ppT->SaveAs("c_ppT.gif"); TCanvas *c_mu_pT = new TCanvas("c_mu_pT", "c_mu_pT", 1200, 900 ); for ( Int_t ipart = knpart-1 ; ipart >= 0; ipart-- ) { TString draw_option(""); if (ipart != knpart-1) draw_option += "same"; hmu_pT[ipart]->SetLineColor( khcolor[ipart] ); if (ipart != 3) hmu_pT[ipart]->Draw( draw_option ); } TFile *f_out = new TFile("draw_dca_distrib.root", "RECREATE"); c_dca->Write(); c_dca_res->Write(); c_ppT->Write(); c_mu_pT->Write(); }