FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <anakmunu.h>
Public Member Functions | |
AnaKmunu () | |
============================================== | |
int | Fisica () |
void | print_scale () |
Public Attributes | |
gvet | Pk_mom |
double | mas_Kp |
double | mas_mu |
qvet | Pkp |
qvet | Pmu |
qvet | Pnu |
int | np |
float | charge |
float | chiq_trk |
float | pxkp |
float | pykp |
float | pzkp |
float | momk |
float | pxmu |
float | pymu |
float | pzmu |
float | mommu |
float | tmom |
float | emu |
float | pxnu |
float | pynu |
float | pznu |
float | momnu |
float | mqnu |
float | enu |
float | masnu |
float | chiq_vert |
float | xnu |
float | ynu |
float | znu |
float | xlac |
float | ylac |
float | zlac |
float | timedif |
float | xkbs1 |
float | ykbs1 |
float | xkbs2 |
float | ykbs2 |
K+=> pi nu nu
Definition at line 21 of file anakmunu.h.
AnaKmunu::AnaKmunu | ( | ) |
==============================================
Il costruttore della procedura di prova per pi nu nu analisi
Definition at line 23 of file anakmunu.cpp.
{ tipo=29; nfit=1; titol="K--> mu nu " ; nome="Kmunu"; mas_Kp= ptr_Kapp->Get_Massa(); mas_mu=ptr_Mup->Get_Massa(); Pk_ric =new GigaBeam(); Gout<<"\n Attivato il fit di "<<titol; }
int AnaKmunu::Fisica | ( | ) | [virtual] |
Il fit per la procedura mu nu
calcolo del vertice
evento scartato se il vertice รจ fuori dal tronco di cono delimitato radialmente dalla collimazione del fascio e in z dalla zona di decadimento
Reimplemented from Analisi.
Definition at line 46 of file anakmunu.cpp.
{ count_call++; np=0; pxkp=pykp=pzkp=momk=0.; pxmu=pymu=pzmu=mommu=0.; emu =masnu= mqnu=0.; pxnu=pynu=pznu=momnu=0.; xnu=ynu=znu =0.; //taglio sul vertice generato (taglia solo gli eventi che finiscono sul collimatore)da togliere!!! if (evento_.Gen.zv < 10000.) { counter[0]++; return -1; } count_decay++; np=0; int npt = 0 ; if (Trkstraw!=0) npt = Trkstraw->ntrk_done; if (npt<1) { counter[1]++; return -1; } // ricavo l'impulso del K dal gigatrak Pk_mom=Pk_ric->Beam_Rec(); // impulso del beam dal gigatrack Pkp.setvn ( Pk_mom,mas_Kp ); // definizione del quadrimomento Pkp.putvn( pxkp,pykp,pzkp,momk ); // salvo per root // Dato che si selezionano eventi con solo una traccia, uso l'indirizzo della traccia [0] Track Trk=Trkstraw->Traccia[0]; charge=Trk.charge; chiq_trk=Trk.chiq_fit; if (Trk.chiq_fit>2.) { counter[6]++; return -1; } if ( charge !=1. ) { //even for wrong sign study, positive cut later! counter[2]++; return -1; } // impulso del mu+ dallo spettromentro Pmu.setvn(Trk.P_in,mas_mu); Pmu.putvn( pxmu,pymu,pzmu,mommu ); // taglio sull'impulso del mup if (mommu<15. || mommu>75.) { counter[3]++; return -1; } // 4 camere coinvolte if (Trk.camere!=4) { counter[4]++; return -1; } // taglio radiale sulle strawchambers; d < 7.5 || d > 110 gvet XCamera,XCamera1; double dq=0.; XCamera= Trk.Xmg + Trk.P_in*((St1x->Get_Cface().z-Trk.Xmg.z)/Trk.P_in.z); XCamera1=XCamera; XCamera=St1x->Lab2cDev(XCamera) ; dq=XCamera.XYNorma(); if (dq<7.5||dq>110.) { counter[5]++; return -1; } XCamera= Trk.Xmg + Trk.P_in*((St2x->Get_Cface().z-Trk.Xmg.z)/Trk.P_in.z); XCamera=St2x->Lab2cDev(XCamera) ; dq=XCamera.XYNorma(); if (dq<7.5||dq>110.) { counter[5]++; return -1; } XCamera= Trk.Xmg + Trk.P_out*((St3x->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); XCamera=St3x->Lab2cDev(XCamera) ; dq=XCamera.XYNorma(); if (dq<7.5||dq>110.) { counter[5]++; return -1; } XCamera= Trk.Xmg + Trk.P_out*((St4x->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); XCamera=St4x->Lab2cDev(XCamera) ; dq=XCamera.XYNorma(); if (dq<7.5||dq>110.) { counter[5]++; return -1; } emu=Pmu*Pkp/mas_Kp; // energia del pi nel sistema Kappa Pnu=Pkp-Pmu; mqnu=Pnu.Invarq(); masnu=Pnu.m; Pnu.putvn( pxnu,pynu,pznu,momnu ); enu=Pnu*Pkp/mas_Kp; // calcolo dell'impulso trasverso del mu gvet ptrasv; ptrasv= Pmu&Pkp; ptrasv.Norma(); tmom=ptrasv.mom/Pkp.mom; Vtxstruct Xdecay(2); Xdecay.P[0].setvn(0.,0.,10240.); // beam at G3 (0.,0.,10240.); Fare meglio Xdecay.V[0]=Pkp.NVerso(); // versore del beam... Xdecay.P[1]=Trkstraw->Traccia[0].Xmg; // coordinate della traccia 1 al centro del magnete (definizione) Xdecay.V[1]=Trkstraw->Traccia[0].P_in.NVerso(); // versore della traccia 1 Xdecay.Vertice(); chiq_vert=Xdecay.chiq; Xdecay.Vtx.putv( xnu,ynu,znu ); // //taglio sul vertice ricostruito (livello 0) if (znu<10250.||znu>17000.) { counter[7]++; return -1; } //taglio su xnu e ynu //per il segnale taglia circa 2 eventi su 10^4 che hanno passato la selezione, per il gas il 10%! //collimatore a 10000 con raggio 3.5 (fascio generato in 0) //=> r_min = 3.5, z_min = 10000 => r_max = 5.95 se z_max = 17000 gvet beam0 (0.,0.,10240.) ; // beam point at gigatrack 3 gvet beamc (-10.7,0.,18366.) ;// beam point at st1x chamber gvet bvers; bvers = beamc-beam0 ; bvers = bvers.NVerso() ; double dbeam = (Xdecay.Vtx - beam0)%bvers; gvet tbeam; tbeam =(Xdecay.Vtx - beam0)-bvers*dbeam; double dtrv = tbeam.Norma(); if (dtrv > dbeam*0.00035) { counter[8]++; return -1; } // taglio sui cluster del calorimetro if ( lkry->hit_recorded>1) { counter[9]++; return -1; } // calcolo le coordinate estrapolate della traccia al piano del calorimeter gvet X_at_lkr; X_at_lkr= Trk.Xmg + Trk.P_out*((lkry->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); X_at_lkr.putv(xlac,ylac,zlac); double rqcl= X_at_lkr.XYNorma(); rqcl = rqcl*rqcl; // accettanza ottagonale if (sqrt(rqcl)<=15. || fabs( X_at_lkr.x) >= 113. ||fabs( X_at_lkr.y) >= 113. || (fabs(X_at_lkr.x)+fabs(X_at_lkr.y)) >= 113.*sqrt(2.)) { counter[10]++; return -1; } //distanza traccia cluster < 10 cm if (lkry->hit_recorded>0) { double dx = lkry->mxl[0] - X_at_lkr.x; double dy = lkry->myl[0] - X_at_lkr.y; if (dx*dx + dy*dy > 100) { counter[11]++; return -1; } } // accettanza dei muv1,2,3 gvet X_at_muv; X_at_muv= Trk.Xmg + Trk.P_out*((muvet1->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); if (fabs(X_at_muv.x)<10.&&fabs(X_at_muv.y)<10.) { //taglio interno counter[12]++; return -1; } if (fabs(X_at_muv.x)>120.||fabs(X_at_muv.y)>120) { //taglio esterno counter[13]++; return -1; } // muvet2 X_at_muv= Trk.Xmg + Trk.P_out*((muvet2->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); if (fabs(X_at_muv.x)<10.&&fabs(X_at_muv.y)<10.) { //taglio interno counter[14]++; return -1; } if (fabs(X_at_muv.x)>120.||fabs(X_at_muv.y)>120) { //taglio esterno counter[15]++; return -1; } // muvet3 X_at_muv= Trk.Xmg + Trk.P_out*((muvet3->Get_Cface().z-Trk.Xmg.z)/Trk.P_out.z); if (fabs(X_at_muv.x)<10.&&fabs(X_at_muv.y)<10.) { //taglio interno counter[16]++; return -1; } if (fabs(X_at_muv.x)>120.||fabs(X_at_muv.y)>120) { //taglio esterno counter[17]++; return -1; } //************************************************* count_wnt++; np=1; Set_tempo_parms(); timedif=ana_dtim; return 1; }
void AnaKmunu::print_scale | ( | ) | [virtual] |
Stampa il summary del fit.
Reimplemented from Analisi.
Definition at line 283 of file anakmunu.cpp.
{ Gout<<"\n -----> "<<titol<<" Analysis Summary <-------\n"; Gout<<"\n Fit entries "<<count_call; Gout<<"\n Good decays "<<count_decay << " (after zv cut)"; for (int i=0;i<30;i++) { if (counter[i]>0) Gout<<"\n Rejection "<<setw(3)<<i<<" "<<counter[i]; } Gout<<"\n Good events "<<count_wnt; Gout<<"\n\n ======> d o n e <============ "<<std::endl; }