Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//Renata Kopecna
#include <folder.hh>
#include <TRandom3.h>
#include <event.hh>
#include <helpers.hh>
#include <spdlog.h>
///fold the set of angles according to the chosen folding scheme
void fcnc::folder::fold(event* e){ //make sure, that the full angular information was saved before into the correct parameters:
assert(e->costhetal == e->costhetal_fa); assert(e->costhetak == e->costhetak_fa); assert(e->phi == e->phi_fa);
double pi = TMath::Pi(); switch(this->scheme){ case -1: return; case 0: if(e->phi < 0)e->phi = e->phi + pi; break; case 1: if(e->phi < 0){ e->phi = -e->phi; } if(e->costhetal < 0){ e->phi = pi - e->phi; e->costhetal = -e->costhetal; } break; case 2: if(e->phi < 0) e->phi = -e->phi;
if(e->costhetal < 0) e->costhetal = -e->costhetal; break; case 3: if(e->phi > pi/2.) e->phi = pi - e->phi; if(e->phi < -pi/2.) e->phi = -pi - e->phi;
if(e->costhetal < 0) e->costhetal = -e->costhetal; break; case 4: if(e->phi > pi/2.) e->phi = pi - e->phi; if(e->phi < -pi/2.) e->phi = -pi - e->phi;
if(e->costhetal < 0){ e->costhetal = -e->costhetal; e->costhetak = -e->costhetak; }
break; } return; }
///inverse fold the set of angles according to the chosen folding scheme
void fcnc::folder::invers_fold(const event* e, event *u_phi, event *u_ctl, event *u_full){
/*
phi /^\ | : | (2) : (4) | : |---------+-------- | : | (1) : (3) |_________________> cos(theta)
(1): original event (e) (2): unfolded in phi (u_phi) (3): unfolded in ctl (u_ctl) (4): twice unfolded (u_full)
*/ *u_phi = *e; //only inversly folded in dependence of phi
*u_ctl = *e; //only inversly folded in dependence of ctl
*u_full = *e; //full inversly folded
double pi = TMath::Pi(); switch(this->scheme){ case -1: return; case 0: assert(e->phi > 0.0);
u_phi->phi = u_phi->phi - pi; u_full->phi = u_full->phi - pi;
break; case 1: assert(e->phi > 0.0); assert(e->costhetal > 0.0);
u_ctl->phi = pi - u_ctl->phi; u_full->phi = pi - u_full->phi; u_ctl->costhetal = -u_ctl->costhetal; u_full->costhetal = -u_full->costhetal;
u_phi->phi = -u_phi->phi; u_full->phi = -u_full->phi;
break; case 2: assert(e->phi > 0.0); assert(e->costhetal > 0.0);
u_phi->phi = -u_phi->phi; u_full->phi = -u_full->phi;
u_ctl->costhetal = -u_ctl->costhetal; u_full->costhetal = -u_full->costhetal;
break; case 3: assert(e->phi < pi/2.); assert(e->phi > -pi/2.); assert(e->costhetal > 0.0);
if(e->phi > 0.0){ u_phi->phi = pi - u_phi->phi; u_full->phi = pi - u_full->phi; } else{ u_phi->phi = -pi - u_phi->phi; u_full->phi = -pi - u_full->phi; }
u_ctl->costhetal = -u_ctl->costhetal; u_full->costhetal = -u_full->costhetal;
break; case 4: assert(e->phi < pi/2.); assert(e->phi > -pi/2.); assert(e->costhetal > 0.0);
if(e->phi > 0.0){ u_phi->phi = pi - u_phi->phi; u_full->phi = pi - u_full->phi; } else{ u_phi->phi = -pi - u_phi->phi; u_full->phi = -pi - u_full->phi; }
u_ctl->costhetal = -u_ctl->costhetal; u_ctl->costhetak = -u_ctl->costhetak; u_full->costhetal = -u_full->costhetal; u_full->costhetak = -u_full->costhetak;
break; } }
void fcnc::folder::test_inv_folding(){
fcnc::event e; e.m = 5286.0; TRandom3 * r = new TRandom3(0); for(int i = 0; i < 10000; i++){
if(i % 100 == 0 && spdlog_info())std::cout << i / 100. << "%" << std::endl;
//generate a folded event:
e.costhetal = r->Rndm() * 2. - 1.; e.costhetak = r->Rndm() * 2. - 1.; e.phi = (r->Rndm() * 2. - 1.) * TMath::Pi(); e.costhetal_fa = e.costhetal; e.costhetak_fa = e.costhetak; e.phi_fa = e.phi;
this->fold(&e);
//get 3 events for (partial-)inverse folding:
fcnc::event inv_e[3];
this->invers_fold(&e, &inv_e[0], &inv_e[1], &inv_e[2]);
for(int j = 0; j < 3; j++){ inv_e[j].costhetal_fa = inv_e[j].costhetal; inv_e[j].costhetak_fa = inv_e[j].costhetak; inv_e[j].phi_fa = inv_e[j].phi; this->fold(&inv_e[j]);
assert(abs(e.phi - inv_e[j].phi ) < 1e-7); assert(abs(e.costhetal - inv_e[j].costhetal) < 1e-7); assert(abs(e.costhetak - inv_e[j].costhetak) < 1e-7); } } spdlog::info("[DONE]\t\tInverse folding #{0:d} works!", this->scheme); }
int fcnc::folder::get_scheme(){ return this->scheme; }
void fcnc::folder::set_scheme(int s){ this->scheme = s; }
|