double EW_CHMN::AFB_q(const QCD::quark q) const { return ( 3.0 / 4.0 * A_l(StandardModel::ELECTRON) * A_q(q)); }
int main(int argc, char* argv[]){ typedef ROOT::Math::SMatrix<double,2> SMatrix22; typedef ROOT::Math::SVector<double,2> SVector2; std::string param_file; if (argc != 2) { std::cout << "Usage: ./ZbbCalc <parameter file>" << std::endl; exit(1); } else { param_file = argv[1]; } TRandom3 rand; TH1F h_N1("N1","N1",100,10000,13000); TH1F h_N2("N2","N2",100,1000,2000); SimpleParamParser input; input.ParseFile(param_file); double x_N_TAG_1 = input.GetParam<double>("N_TAG_1"); double N_TAG_1_err = input.GetParam<double>("N_TAG_1_err"); double x_N_TAG_2 = input.GetParam<double>("N_TAG_2"); double N_TAG_2_err = input.GetParam<double>("N_TAG_2_err"); double N_TAG_1, N_TAG_2; double p_1 = input.GetParam<double>("p_1"); double p_21 = input.GetParam<double>("p_21"); double p_22 = input.GetParam<double>("p_22"); double p_2; double ftt_1 = input.GetParam<double>("ftt_1"); double ftt_2 = input.GetParam<double>("ftt_2"); double N_RTAG_1, N_RTAG_2; double x_e_b_11 = input.GetParam<double>("e_b_11"); double e_b_11_err = input.GetParam<double>("e_b_11_err"); double x_e_b_21 = input.GetParam<double>("e_b_21"); double e_b_21_err = input.GetParam<double>("e_b_21_err"); double x_e_b_22 = input.GetParam<double>("e_b_22"); double e_b_22_err = input.GetParam<double>("e_b_22_err"); double e_b_11, e_b_21, e_b_22; double x_e_l_1 = input.GetParam<double>("e_l_1"); double e_l_1_err = input.GetParam<double>("e_l_1_err"); double x_e_l_2 = input.GetParam<double>("e_l_2"); double e_l_2_err = input.GetParam<double>("e_l_2_err"); double e_l_1, e_l_2; double x_e_r_11 = input.GetParam<double>("e_r_11"); double e_r_11_err = input.GetParam<double>("e_r_11_err"); double x_e_r_21 = input.GetParam<double>("e_r_21"); double e_r_21_err = input.GetParam<double>("e_r_21_err"); double x_e_r_12 = input.GetParam<double>("e_r_12"); double e_r_12_err = input.GetParam<double>("e_r_12_err"); double x_e_r_22 = input.GetParam<double>("e_r_22"); double e_r_22_err = input.GetParam<double>("e_r_22_err"); double x_e_r_01 = input.GetParam<double>("e_r_01"); double e_r_01_err = input.GetParam<double>("e_r_01_err"); double x_e_r_02 = input.GetParam<double>("e_r_02"); double e_r_02_err = input.GetParam<double>("e_r_02_err"); double e_r_11, e_r_21, e_r_12, e_r_22, e_r_01, e_r_02; double R = input.GetParam<double>("R"); double x_a_l_1 = input.GetParam<double>("a_l_1"); double a_l_1_err = input.GetParam<double>("a_l_1_err"); double x_a_l_2 = input.GetParam<double>("a_l_2"); double a_l_2_err = input.GetParam<double>("a_l_2_err"); double a_l_1, a_l_2; double lumi = input.GetParam<double>("lumi"); double N1, N2; for (unsigned i = 0; i < 1000000; ++i) { p_2 = p_21 * p_22; N_TAG_1 = x_N_TAG_1; N_TAG_2 = x_N_TAG_2; e_b_11 = x_e_b_11; e_b_21 = x_e_b_21; e_b_22 = x_e_b_22; e_l_1 = x_e_l_1; e_l_2 = x_e_l_2; e_r_11 = x_e_r_11; e_r_21 = x_e_r_21; e_r_12 = x_e_r_12; e_r_22 = x_e_r_22; e_r_01 = x_e_r_01; e_r_02 = x_e_r_02; a_l_1 = x_a_l_1; a_l_2 = x_a_l_2; if (i > 0) { N_TAG_1 = rand.Gaus(N_TAG_1, N_TAG_1_err); N_TAG_2 = rand.Gaus(N_TAG_2, N_TAG_2_err); e_b_11 = rand.Gaus(e_b_11, e_b_11_err); e_b_21 = rand.Gaus(e_b_21, e_b_21_err); e_b_22 = rand.Gaus(e_b_22, e_b_22_err); e_l_1 = rand.Gaus(e_l_1, e_l_1_err); e_l_2 = rand.Gaus(e_l_2, e_l_2_err); e_r_11 = rand.Gaus(e_r_11, e_r_11_err); e_r_12 = rand.Gaus(e_r_12, e_r_12_err); e_r_21 = rand.Gaus(e_r_21, e_r_21_err); e_r_22 = rand.Gaus(e_r_22, e_r_22_err); e_r_01 = rand.Gaus(e_r_01, e_r_01_err); e_r_02 = rand.Gaus(e_r_02, e_r_02_err); a_l_1 = rand.Gaus(a_l_1, a_l_1_err); a_l_2 = rand.Gaus(a_l_2, a_l_2_err); } double N_T_arr[] = { N_TAG_1, N_TAG_2 }; SVector2 N_T(N_T_arr,2); if (i == 0) { std::cout << "-----------------------------------------------" << std::endl; std::cout << "N_events (tagged) [Z+1b, Z+2b]: \n\t" << N_T << std::endl; } N_T[0] = N_TAG_1 * (p_1 - ftt_1) + N_TAG_2 * (p_22+p_21 - 2.*p_2); N_T[1] = N_TAG_2 * (p_2 - ftt_2); double ep_b_arr[] = { 1.0/e_b_11 , -1.0 * e_b_21/(e_b_22*e_b_11), 0.0 , 1.0/(e_b_22) }; double ep_l_arr[] = { 1.0/e_l_1 , 0.0, 0.0 , 1.0/e_l_2 }; double ep_r_arr[] = { e_r_11 + R*e_r_01 , e_r_21 + R*e_r_01, e_r_12 + R*e_r_02 , e_r_22 + R*e_r_02 }; double A_l_arr[] = { 1.0/a_l_1 , 0.0, 0.0 , 1.0/a_l_2 }; SMatrix22 ep_b(ep_b_arr,4); SMatrix22 ep_l(ep_l_arr,4); SMatrix22 ep_r(ep_r_arr,4); SMatrix22 A_l(A_l_arr,4); if (i ==0) { std::cout << "-----------------------------------------------" << std::endl; std::cout << "epsilon_b Matrix:\n" << ep_b << std::endl; std::cout << "epsilon_l Matrix:\n" << ep_l << std::endl; std::cout << "epsilon_r/C_hadron Matrix:\n" << ep_r << std::endl; } ep_r.Invert(); if (i == 0) { std::cout << "epsilon_r/C_hadron Matrix (inverted):\n" << ep_r << std::endl; std::cout << "Acceptance_l Matrix:\n" << A_l << std::endl; std::cout << "-----------------------------------------------" << std::endl; std::cout << "N_events (after purity & f_tt): \n\t" << N_T << std::endl; } double total_before_ep_b = N_T[0] + N_T[1]; N_T = ep_b * N_T; if (i == 0) std::cout << "N_events (after epsilon_b):\n\t" << N_T << std::endl; double total_before_ep_l = N_T[0] + N_T[1]; N_T = ep_l * N_T; if (i == 0) std::cout << "N_events (after epsilon_l):\n\t" << N_T << std::endl; double total_before_c_had = N_T[0] + N_T[1]; N_T = ep_r * N_T; if (i == 0) std::cout << "N_events (after epsilon_r/C_hadron):\n\t" << N_T << std::endl; double total_before_a_l = N_T[0] + N_T[1]; N_T = A_l * N_T; double total_after_a_l = N_T[0] + N_T[1]; if (i == 0)std::cout << "N_events (after Acceptance_l):\n\t" << N_T << std::endl; if (i > 0) { h_N1.Fill(N_T[0]); h_N2.Fill(N_T[1]); } if (i == 0) { N1 = N_T[0]; N2 = N_T[1]; std::cout << "-----------------------------------------------" << std::endl; std::cout << "Effective Z+1b inclusive e_b(HE): " << total_before_ep_b/total_before_ep_l << std::endl; std::cout << "Effective Z+1b inclusive e_l: " << total_before_ep_l/total_before_c_had << std::endl; std::cout << "Effective Z+1b inclusive C_had: " << total_before_c_had/total_before_a_l << std::endl; std::cout << "Effective Z+1b inclusive A_l: " << total_before_a_l/total_after_a_l << std::endl; std::cout << "-----------------------------------------------" << std::endl; } } TFitResultPtr h_N1_fit = h_N1.Fit("gaus","NSQ"); double N1_err = h_N1_fit->Parameter(2); TFitResultPtr h_N2_fit = h_N2.Fit("gaus","NSQ"); double N2_err = h_N2_fit->Parameter(2); double XS_1 = N1 / lumi; double XS_1_err = N1_err/lumi; double XS_2 = N2 / lumi; double XS_2_err = N2_err/lumi; std::cout << "XS [pb] (Z+1b Exclusive):\t" << XS_1 << " +/- " << XS_1_err << " (stat)" << std::endl; std::cout << "XS [pb] (Z+2b Inclusive):\t" << XS_2 << " +/- " << XS_2_err << " (stat)" << std::endl; return 0; }
double EW_CHMN::AFB_l(const QCD::lepton l) const { return ( 3.0 / 4.0 * A_l(StandardModel::ELECTRON) * A_l(l)); }