FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
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 }