FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <anak6g.h>
Public Member Functions | |
AnaK6g () | |
void | Reset_parm () |
int | Fisica () |
void | Permutazione (int) |
int | Get_Data_from_saved (int) |
int * | Get_Permuta (int) |
int | Fitta () |
double | Calcolo_Vincoli () |
double | F_Vinc (int i4, double *ec, double dist, int id, double delta) |
void | Reset_Dummy_Data () |
void | Save_good_fit () |
Public Attributes | |
int | ngm |
int | dead6 |
int | permut_fit |
int | iter_fit |
float | eg_fit [6] |
float | dist_fit |
float | cog_fit |
float | egamt_fit |
float | bmax |
float | ws6 [3] |
float | ss6 [3] |
float | vss6 [3] |
float | ss6_sort |
float | vss6_sort |
float | dist_sort |
double | last_chiq |
double | dchi2 |
gmatrix | Bm64 |
gmatrix | Az41 |
gmatrix | F41 |
gmatrix | R41 |
gmatrix | De61 |
gmatrix | Lmd41 |
gmatrix | Zm11 |
gmatrix | Var66 |
gmatrix | InV66 |
gmatrix | BVB |
gmatrix | GB |
gmatrix | AGBA |
gmatrix | Gx |
gmatrix | CHQ |
float | Ass [3] |
float | Ae_fit [6] |
float | Ax_fit [6] |
float | Ay_fit [6] |
float | Ase_fit [6] |
float | Asx_fit [6] |
float | Asy_fit [6] |
float | Azeta |
float | Avita |
float | Vertex [3] |
float | Vsigsq [3] |
float | Ener |
float | Esigsq |
float | ChiKin |
int | iter_flag |
int | permut_flag |
float | xg_fit [6] |
float | yg_fit [6] |
double | em [6] |
double | ec [6] |
double | egtk6 |
double | sq [6] |
double | xg [6] |
double | yg [6] |
double | dist_vertex |
double | dq [6][6] |
double | xg_sav [12] |
double | yg_sav [12] |
double | zg_sav [12] |
double | eg_sav [12] |
int | idpr_fit [12] |
int | idpr_sav [12] |
qvet | Gq [6] |
qvet | Pio01 |
qvet | Pio23 |
qvet | Pio45 |
gvet | Versg |
gvet | Pgam |
AnaK6g::AnaK6g | ( | ) |
Ipotesi K-> 3 pi neutri Studio del cups
Definition at line 23 of file anak6g.cpp.
{ tipo=2;nfit=6;titol="K--> 3 pi0 -> 6 gam" ;nome="K6gam"; Gout<<"\n Ridefinito e creato il fit di "<<titol; // gmatrix set size; Bm64.Set_Size ( 6,4 );Az41.Set_Size ( 4,1 ); F41.Set_Size ( 4,1 ); R41.Set_Size ( 4,1 ); De61.Set_Size ( 6,1 );Lmd41.Set_Size ( 4,1 ); Zm11.Set_Size ( 1,1 ); Var66.Set_Size ( 6,6 ); InV66.Set_Size ( 6,6 ); BVB.Set_Size ( 4,4 ); GB.Set_Size ( 4,4 ); AGBA.Set_Size ( 1,1 ); Gx.Set_Size ( 1,1 ); CHQ.Set_Size ( 1,1 ); }
int AnaK6g::Fisica | ( | ) | [virtual] |
Fit ipotesi K-> 3 pi neutri Studio del cups
Reimplemented from AnaK4g.
Definition at line 57 of file anak6g.cpp.
{ if ( Debugon==1 ) Write_titol(); count_call++; Reset_parm(); ngm = mishit=lkry->mhit; if ( WrtNt>1 ) Reset_Dummy_Data(); // se si scrivono tutti gli eventi // also 7 gammas for dalitz.... if ( mishit<6 ) {getta_gg++;dead6=-1;return -1;} //if( mishit>6 ) {getta_gg++;dead6=-1;return -1;} //too many gammas.. double xi,yi,egx; bmax=0.;egamtot=0.; int ngood=-1; for ( int i=0;i<mishit;i++ ) { xi=lkry->M_Hits[i].Xdev.x; yi=lkry->M_Hits[i].Xdev.y; egx=lkry->M_Hits[i].e_rivela; if ( egx<3.||egx>100. ) {nextra++; continue;} // giudici 2007 energia test // goemetrical cut double braccio=sqrt ( xi*xi+yi*yi ); if ( braccio>bmax ) bmax=braccio; if ( braccio<15. ) continue; // if ( braccio>116. ) continue; // circolar 116. double absx=fabs ( xi ), absy=fabs ( yi ); if ( absx >116. || absy >116. ) continue; if ( absx +absy > 164. ) continue; // rectangular 116.*sqrt(2) if ( absx >63.2 && absy >84.7 ) continue; if ( absx >52.2 && absy >94.7 ) continue; if ( pow ( ( absx-63.2 ),2 ) +pow ( ( absy-94.7 ),2 ) < 121. ) continue; //octagonal // save the good gammas in _sav ngood++; eg_sav[ngood] =egx; xg_sav[ngood] =xi; yg_sav[ngood] =yi; zg_sav[ngood] =lkry->M_Hits[i].Xlab.z; idpr_sav[ngood]=lkry->M_Hits[i].idm; egamtot+=egx; } // cut on gammas on the base of fit type..here 6 [5 in C++] if ( ngood<5 ) {getta_gg++;dead6=-3;return -3;} if ( egamtot< 60. ) {getta_en++; dead6=-4;return -4;} int Debug_fit=0; // per test se ==1 if ( Debug_fit==1 ) { int ngboni=ngood+1; Gout<<setprecision ( 3 ); Gout<<"\n Start "<<evento_.Gen.Event<<" whit "<<ngboni <<" gam e zv "<<setw ( 8 ) <<evento_.Gen.zv <<" etot "<<setw ( 8 ) <<egamtot <<" Lkrz "<<lkry->Get_Cface().z; for ( int i=0;i<ngboni;i++ ) Gout<<"\nG xyze "<<setw ( 8 ) <<xg_sav[i]<<" " <<setw ( 8 ) <<yg_sav[i]<<" " <<setw ( 8 ) <<eg_sav[i]<<" Idm "<<idpr_sav[i]; Gout<<endl; } // FITTING begin nd=0; chisq=15.; // se ci sono sette gamma si itera sulle possibili 6-ple (sette ipotesi) int ik =0, ipotesi=1, iok=0; if ( ngood==6 ) ipotesi=7; while ( ik< ipotesi ) { if ( Get_Data_from_saved ( ik ) <0 ) { ik++;continue;} // select the 6-pla // first large cuts on neasured values....just to speed up the fitting...gmatrix if ( egamtot< 60.||egamtot>180. ) {ik++;continue;} if ( cog > 100.0 ) {ik++;continue;} ik++; // debug ======gmatrix if ( Debug_fit>=2 ) { for ( int i=0;i<6;i++ ) Gout<<"\nC xyze "<<setw ( 8 ) <<xgood[i]<<" " <<setw ( 8 ) <<ygood[i]<<" " <<setw ( 8 ) <<egood[i]<<" Idm "<<idpr[i]; Gout<<endl; } // end debug ===== // procedure F I T T A if ( Fitta() ==1 ) iok=1; } if ( iok==0 ) return -1; // non ci sono fit ok... // debug ===== if ( Debug_fit==1 ) { Gout<<setprecision ( 3 ); Gout<<"\n Fit ev "<<evento_.Gen.Event<<" ipot. "<<ik<<" itr "<<iter_fit <<" chq "<<setw ( 8 ) <<chisq<<" zeta "<<setw ( 8 ) <<zeta <<" et "<<setw ( 8 ) <<egamt_fit; for ( int i=0;i<6;i++ ) Gout<<"\nF xyze "<<setw ( 8 ) <<xg_fit[i]<<" " <<setw ( 8 ) <<yg_fit[i] <<setw ( 8 ) <<eg_fit[i]<<" Perm "<<permut_fit<<" Idm "<<idpr_fit[i]; Gout<<endl; } // ------------fit done ---- if ( egamt_fit<70. ||egamt_fit>170. ) {getta_en++; dead6=-4;return -4;} if ( chisq>15. ) {getta_fit++;dead6=-6;return -6;} // wrong chiq in the fit! if ( dist_fit<0.0 ) {getta_gf++;dead6=-7;return -7;} // wrong vx dist_fit // if (cog_fit>20.0) {getta_cog++; dead6=-5;return -5;} // wrong cog_fit if ( cog_fit>100.0 ) {getta_cog++; dead6=-5;return -5;} // wrong cog_fit 19.07.09 // time life cut from aks for Kl // aks=607.2; // posizione della coincidenza double volo=zeta-607.2; //massa Ks=0.497648; cvita= ( ( volo*0.497648 ) /egamt_fit ) /2.6842; //19.07.09 // if ( cvita<-2.|| cvita>10. ) {getta_tau++;dead6=-8;return -8;} //no il 19.07.09 if ( cvita> ( 0.8+0.06*egamt_fit ) ) {getta_tau++;dead6=-9;return -9;} // define cinematic variables for ( int i=0;i<6;i++ ) { Versg.setvn ( xg_fit[i],yg_fit[i],dist_fit ); Pgam=Versg.NVerso() *eg_fit[i]; Gq[i].setvn ( Pgam,0.0 ); } Pio01=Gq[0]+Gq[1];mgg[0]= Pio01.Invarq(); Pio23=Gq[2]+Gq[3];mgg[1]= Pio23.Invarq(); Pio45=Gq[4]+Gq[5];mgg[2]= Pio45.Invarq(); if(mgg[0]>0.)mgg[0]=sqrt(mgg[0]); else mgg[0]=-sqrt(fabs(mgg[0])); if(mgg[1]>0.)mgg[1]=sqrt(mgg[1]); else mgg[1]=-sqrt(fabs(mgg[1])); if(mgg[2]>0.)mgg[2]=sqrt(mgg[2]); else mgg[2]=-sqrt(fabs(mgg[2])); qvet Pm12=Pio23+Pio45; qvet Pm02=Pio01+Pio45; qvet Pm01=Pio23+Pio01; ss6[0]= Pm12.Invarq(); ss6[1]= Pm02.Invarq(); ss6[2]= Pm01.Invarq(); vss6[0]= fabs(ss6[1]-ss6[2])*0.577350269;//1./sqrt(3.) vss6[1]= fabs(ss6[2]-ss6[0])*0.577350269; vss6[2]= fabs(ss6[0]-ss6[1])*0.577350269; int Irand=evento_.Gen.Irand_ss; if ( Irand==0 ) { ss6_sort=ss6[0]; vss6_sort=vss6[0]; } else if ( Irand==1 ) { ss6_sort=ss6[1]; vss6_sort=vss6[1]; } else if ( Irand==2 ) { ss6_sort=ss6[2]; vss6_sort=vss6[2]; } // Pio01.print("p01"); Gout<<setprecision(6)<<" "<<Pio01.m<<" pi0m "<<pi0mass<<" " <<4.*pi0massq; // Pio23.print("p23"); Gout<<setprecision(6)<<" "<<Pio23.m<<" ss6[0] "<<ss6[0]<<" " <<evento_.Gen.ss0; // Pio45.print("p45"); Gout<<setprecision(6)<<" "<<Pio45.m<<" dif "<<ss6[0]-evento_.Gen.ss0; // calcolo il peso per ogni ss double wpeso; wpeso=Fspace ( 0.49767,Pm12.m, 0.13497 ) *Fspace ( Pm12.m, 0.13497,0.13497 ); if ( wpeso>0.0 ) ws6[0]=1./wpeso; wpeso=Fspace ( 0.49767,Pm02.m, 0.13497 ) *Fspace ( Pm02.m, 0.13497,0.13497 ); if ( wpeso>0.0 ) ws6[1]=1./wpeso; wpeso=Fspace ( 0.49767,Pm01.m, 0.13497 ) *Fspace ( Pm01.m, 0.13497,0.13497 ); if ( wpeso>0.0 ) ws6[2]=1./wpeso; //------------------------- count_wnt++; dead6=0; return 1; }