FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_ana/analisi.cpp

00001 /***************************************************************************
00002                           analisi.cpp  -  description
00003                              -------------------
00004     begin                : Sat Jan 18 2003
00005     copyright            : (C) 2003 by Giuseppe Pierazzini
00006     email                : peppe@unipi.it
00007   ***************************************************************************
00008   *                                                                         *
00009   *   NA48  simulation program.                                             *
00010   *                                                                         *
00011   ***************************************************************************/
00012 
00013 //    Procedura per l'analisi dei dati
00014 // Tirrenia 5.09.00       by GmP
00015 
00016 #define EPSR     1.0E-200
00017 #include "flyoh.h"
00018 #include "flyoana.h"
00019 
00020 //---------------------------------------------
00021 //
00022 //==================  A n a l i s i  ============
00023 Analisi::Analisi()
00024 {
00025         static Analisi *last=0;
00026 
00027 // links...
00028         if ( last == 0 ) Primofit = this;
00029         else             last->next = this;
00030         up = last;
00031         last = this;
00032         this->next = 0;
00033 
00034         count_call=count_decay=getta_gg=getta_en=getta_cog=getta_tau=getta_gf=0;
00035         getta_trk=getta_ch=getta_fit=count_wnt=getta_char=getta_kabes=0;
00036         for (int i=0;i<30;i++) counter[i]=0;
00037         ana_tempo=ana_dtim=0.0;
00038         
00039 // get the  chamber pointers.....
00040 // occorrono i nome definiti nella file *.epc
00041 //......................
00042         titol=" Analisi title Not defined! ";
00043 
00044  /*   da definire a run time altrove??????????????????????????????
00045  // Avo parameters
00046   Particella *Pr_avo=SelRea->avo;
00047    msAvo= Pr_avo->Get_Massa(); 
00048    msqAvo=msAvo*msAvo;
00049    ctauAvo=Pr_avo->Get_Ctau();
00050   
00051 //      msAvo=.49767;          // default:  Kl  mass
00052 
00053         msqAvo=msAvo*msAvo;
00054         reckik=0.0;
00055         if ( Mag48!=0 )
00056         {
00057                 reckik=Mag48->Get_Kik();
00058                 Gout<<"\n Analisys momentum kik="<<reckik;
00059         }
00060 */
00061 
00062 
00063 
00064 }
00065 Analisi::~Analisi() {  }
00066 
00067 void Analisi::Write_titol()
00068 {
00069         Gout<<"\n Ev "<< evento_.Gen.Event<<"  Fit: "<<nome<<" => Rea: "<<titol<<"  <=";
00070 }
00071 //----------------------------------------------------
00072 void Analisi::Set_tempo_parms()
00073 {
00074         ana_dtim=evento_.Gen.tempo-ana_tempo;
00075         ana_tempo=evento_.Gen.tempo;    
00076 }
00077 
00078 
00079 void Analisi::print_scale()
00080 {
00081 
00082         Gout<<"\n\n ----->  "<<titol<<"   Analysis Summary. <-------\n";
00083         Gout<<"\n Fit entries          "<<count_call;
00084         Gout<<"\n No kabes             "<<getta_kabes;
00085         Gout<<"\n Too few tracks       "<<getta_ch;
00086         Gout<<"\n Killed by energy     "<<getta_en;
00087         Gout<<"\n Tau cut              "<<getta_tau;
00088         Gout<<"\n No good vertex       "<<getta_fit;
00089         Gout<<"\n Good events          "<<count_wnt;
00090         Gout<<"\n\n ======>           d o n e     <============ ";
00091 }
00092 
00093 
00094 double Analisi::Vertice2(gvet &Xvert,gvet P1,gvet V1,gvet P2,gvet V2)
00095 {
00096         // calcolo del vertice o meglio si calcola il punto più
00097         // vicino a due rette e si  ritorna come chiq il quadrato delle distanze
00098         // del punto(vertice) delle rette
00099         //   si potrebbe facilmente generalizzare a n rette.
00100 static gmatrix Unit(3,1.0);
00101 static gvet Vnoto;
00102 static gmatrix Pro1(3,3),Pro2(3,3),Pros(3,3);
00103 
00104         
00105     V1>>Pro1;    //matrice Pro1= |V1><V1|
00106     Pro1=Unit-Pro1;
00107     V2>>Pro2;    //matrice Pro2= |V2><V2|
00108     Pro2=Unit-Pro2;
00109     Pros=Pro1+Pro2;
00110     Vnoto= Pro1%P1 +Pro2%P2;
00111     Pros.Det();
00112     Xvert= (!Pros)%Vnoto;
00113 //chiq
00114     gvet d1= Pro1%(Xvert-P1);
00115     gvet d2= Pro2%(Xvert-P2);
00116     double chiq= d1%d1+d2%d2;
00117     return chiq;
00118 
00119 }
00120 
00121 //  calcolo del vertice con due o più tracce
00122 
00123 Vtxstruct::Vtxstruct(int n)
00124   {
00125    Ntr=n;
00126    P=new gvet[Ntr];
00127    V=new gvet[Ntr];
00128    Proj= new gmatrix[Ntr];
00129    for(int i=0;i<Ntr;i++)Proj[i].Set_Size(3,3);
00130    gmatrix U(3,1.0);
00131       
00132   }
00133 
00134 void Vtxstruct::Vertice()
00135 {
00136 // algebra matriciale 
00137 
00138 static gmatrix Unita(3,1.0);
00139 gmatrix Prjtot(3,3);  
00140 gvet noto;  
00141 for(int i=0;i<Ntr;i++)
00142 {
00143 V[i]>>Proj[i];//matrice Proj= |V><V|
00144 Proj[i]=Unita-Proj[i];
00145 Prjtot+=Proj[i];
00146 noto+=Proj[i]%P[i]; 
00147 }
00148   
00149 Prjtot.Det();
00150 Vtx=(!Prjtot)%noto;
00151 
00152 chiq=0.0;
00153 for(int i=0;i<Ntr;i++)
00154 {
00155   gvet dist= Proj[i]%(Vtx-P[i]);
00156   dist.Norma();
00157    chiq+= dist.normaq;
00158 }
00159   
00160  
00161   
00162 }
 All Classes Namespaces Files Functions Variables