FlyoDoc_2011 Pisa 2011 by GmP --- 011
Public Member Functions | Public Attributes

AnaK3pi Class Reference

#include <anak3pi.h>

Inheritance diagram for AnaK3pi:
Analisi

List of all members.

Public Member Functions

 AnaK3pi ()
int Fisica ()
void Reset_parm ()
void print_scale ()
int Vertice ()
void Ordina ()

Public Attributes

double maspi
int nd
float ss [3]
float su
float sv
float kcog
float vx
float vy
float vz
float chisq
int np
float pmis [3]
float charge
float mkmis
float pkmis
float ptksq
float fi3
float cogm1
float cogm1x
float cogm1y
double chicomb
gvet P1
gvet P2
gvet P3
gvet V0
gvet V1
gvet V2
gvet V3
gvet Noto
gvet PV
gvet Cog3p
gvet VM1
gvet VM2
gvet VM3
gvet DP1
gvet DP2
gvet DP3
qvet Q1
qvet Q2
qvet Q3
qvet QT
qvet QC

Detailed Description

Procedura per k+=>3pi analysis

Author:
Giuseppe Pierazzini

Definition at line 20 of file anak3pi.h.


Constructor & Destructor Documentation

AnaK3pi::AnaK3pi ( )

Ipotesi K-> 3 pi carichi.

Definition at line 49 of file anak3pi.cpp.

   {
    tipo=4;nfit=3;titol="K--> 3 pio_ch";nome="K3pi";
    nd=np=0;
    maspi=.13956;
    Ird0=Ird1=Ird2=0;
    Icb0=Icb1=Icb2=0;
    Gout<<"\n Attivato il fit di "<<titol;
    if(Le_Tracce==0)
     {
       Gout<<"\n Error.. K3pi analisys ... Tracks non defined!"<<std::endl;  
       exit(0); 
     }
   }

Member Function Documentation

int AnaK3pi::Fisica ( ) [virtual]

loop for the best combination...test on the vertex chiq

Reimplemented from Analisi.

Definition at line 66 of file anak3pi.cpp.

  {


  np=nd=0;
  np=Le_Tracce->Tot_trk+1; 
//  Gout<<"\n Nhit: "<<np;
  if(np<3||np>6){np=0;getta_ch++;return(-1);}
  nd=3;
  carica=.0;
 // define the coupling number (1,4,10,20)
   int trial=1;
   if(np>3)trial=(np*(np-1)*(np-2))/6;


   chisq=300.;
   for (int i=0;i<trial;i++)
   {
    count_call++;
// get track index 
   Icb0=combine[i][0];
   Icb1=combine[i][1];
   Icb2=combine[i][2];
   
  double etot= Tracc[Icb0]->Get_P()[3]+Tracc[Icb1]->Get_P()[3]+Tracc[Icb2]->Get_P()[3];
  
  if(etot<10. ){getta_en++;continue;}     //return -2;};
  carica=Tracc[Icb0]->charge+Tracc[Icb1]->charge+Tracc[Icb2]->charge;
  // get the index order...Ird0,Ird1 (same charge as above) Ird3 is the odd charge 
   if( carica!=1&&carica!=-1 ) {getta_char++;continue;}

  Ordina(); // ordina le tracce da essere (++-) o (--+)

  P1=Tracc[Ird0]->Get_Pc1();
  P2=Tracc[Ird1]->Get_Pc1();
  P3=Tracc[Ird2]->Get_Pc1();
  if(Vertice()<1){getta_fit++;continue;} //return -3;};
  if(chicomb<chisq)
    {chisq=chicomb;
     charge=carica;
     PVsave=PV;
     Isv0=Ird0; Isv1=Ird1;Isv2=Ird2;
    }
   }
  if(chisq>200.)return -3; // see Vertice()

  if(trial>1)   // get the saved values by the best fit for trial >1
    {Ird0=Isv0;Ird1=Isv1;Ird2=Isv2;
     P1=Tracc[Ird0]->Get_Pc1();
     P2=Tracc[Ird1]->Get_Pc1();
     P3=Tracc[Ird2]->Get_Pc1();
     PV=PVsave;
    }


  
  pmis[0]=Tracc[Ird0]->ptrk;
  pmis[1]=Tracc[Ird1]->ptrk;
  pmis[2]=Tracc[Ird2]->ptrk;

// calcolo il cog at lkr
  Cog3p=(Tracc[Ird0]->Xlk*pmis[0]+Tracc[Ird1]->Xlk*pmis[1] +Tracc[Ird2]->Xlk*pmis[2]);
  Cog3p/=(pmis[0]+pmis[1]+pmis[2]);
  kcog  = Cog3p.XYNorma();
  cogm1x=Cog3p[0];
  cogm1y=Cog3p[1];     
  cogm1 =kcog;
  PV.putv(vx,vy,vz);
            
  V1= P1-PV; V1.Norma();V1=V1.Verso()*pmis[0];
  V2= P2-PV; V2.Norma();V2=V2.Verso()*pmis[1];
  V3= P3-PV; V3.Norma();V3=V3.Verso()*pmis[2];
  
// calcolo della massa invariante
  Q1.setvn(V1,maspi);
  Q2.setvn(V2,maspi);
  Q3.setvn(V3,maspi);
  QT=Q1+Q2+Q3;
  mkmis=QT.Invar();
  pkmis=QT.norma;

  ptksq=(QT&PV).Norma()/PV.norma;        
// Calcolo dei parametri s1,s2,s3,su..
// con rinomalizzazione della massa invariante a quella del k  !!
//
// qvet QC = dQT/dcorr  quadrivettore derivato rispetti alla correzione
 
   QC.setqn(V1+V2+V3,  Q1.normaq/Q1.e+Q2.normaq/Q2.e+Q3.normaq/Q3.e);
//   QC.print("QC");
   double corr=1.- (QT.m-MASK)*QT.m/(QC*QT);  
// Gout<<"\n Correzione = %12.7lf  %12.5lf ",corr,QT*QC);   
   Q1.setvn(V1*corr,maspi);
   Q2.setvn(V2*corr,maspi);
   Q3.setvn(V3*corr,maspi);
   QT=Q1+Q2+Q3;  QT.Invar();
//   QT.print("QTcorr");
  fi3=atan2(Q3[1],Q3[0]);

  ss[0]=(QT-Q1).Invarq();
  ss[1]=(QT-Q2).Invarq();
  ss[2]=(QT-Q3).Invarq();   
  su = (ss[2]-SS0)/MPICQ;  // u
  sv = 0.433013*(ss[1]-ss[0])/MPICQ;  // v  
  count_wnt++;
  return(1);

}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables