FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
00001 /*************************************************************************** 00002 anake2.cpp - description 00003 ------------------- 00004 begin : Mon Nov 24 2003 00005 copyright : (C) 2003 by gmp 00006 email : peppe@newpeppe 00007 *************************************************************************** 00008 * * 00009 * NA48 simulation program. * 00010 * * 00011 ***************************************************************************/ 00012 //la successione degli include può essere causa di errore..... 00013 00014 #include "flyoh.h" 00015 #include "anakl2.h" 00016 00017 using namespace std; 00018 00019 AnaKl2::AnaKl2() 00020 { 00021 tipo=23; 00022 nfit=1; 00023 titol="K->l nu" ; 00024 nome="Kl2"; 00025 Gout<<"\n Ridefinito e creato il fit di "<<titol; 00026 00027 if(Le_Tracce==0) 00028 { 00029 Gout<<"\n Error.. "<<titol<<" analisys ... Tracks non defined!"; 00030 } 00031 Part_db *pm; 00032 pm=Matter->Pntmatter("Kp"); 00033 mask= pm->Get_Massa(); 00034 pm=Matter->Pntmatter("mup"); 00035 masmu= pm->Get_Massa(); 00036 pm=Matter->Pntmatter("pip"); 00037 maspi= pm->Get_Massa(); 00038 pm=Matter->Pntmatter("elec"); 00039 mase= pm->Get_Massa(); 00040 00041 } 00042 AnaKl2::~AnaKl2() 00043 {} 00044 00045 int AnaKl2::Fisica() 00046 { 00047 count_call++; 00048 // note: otagon cal cut not here.... 00049 00050 // if(lkry->Brem_done<1) return -4; //solo gli eventi con brems 00051 kp=kpx=kpy=0.0; 00052 enlk=pmis=pmisx=pmisy=pmisz=0.0; 00053 ptrs=emisq=mumisq=pimisq=0.0; 00054 00055 00056 // nota Le_Tracce->First_trk corrispomde a Tracc[0] 00057 // atenzione forzata ad uno per vedere la statistica...... 00058 00059 nt=Le_Tracce->Tot_trk+1; 00060 if(nt<1) 00061 { 00062 getta_ch++; 00063 return(-1); 00064 } // non c'e' la traccia carica 00065 00066 // lkry->Pdev[0].print( evento_.Event,lkry->pnome[0],0,"ana");Gout<<" "<<lkry->mhit; 00067 00068 if(Errori>0&&Scatter>0) 00069 { 00070 if(lkry->mhit==0) 00071 { 00072 getta_en++; 00073 return -3; 00074 }// calorimetro vuoto 00075 enlk=0.0; 00076 if((enlk = lkry->M_Hits[0].e_rivela)<0.1) 00077 { 00078 getta_en++; 00079 return -3; 00080 } 00081 ; // cut on energia misurata in lk... 00082 } 00083 else // to run also if not error simulation.. for debug 00084 { 00085 if(lkry->nhit==-1) 00086 { 00087 getta_en++; 00088 return -3; 00089 }// calorimetro vuoto 00090 enlk=0.0; 00091 if((enlk = lkry->M_Hits[0].Pdev.e)<0.1) 00092 { 00093 getta_en++; 00094 return -3; 00095 } 00096 ; // cut on energia misurata in lk... 00097 } 00098 00099 // calcolo la distanza del pione estrapolato al calorimetro dallo hit visto nel cal; 00100 // si usa solo la prima.... si suppone che gli eventi a più tracce siano da scartare nella analisi.. 00101 discal=(Tracc[0]->Xlk-lkry->M_Hits[0].Xdev).XYNorma(); 00102 Xtcal=Tracc[0]->Xlk[0]; 00103 Ytcal=Tracc[0]->Xlk[1]; 00104 00105 00106 00107 // Impulso dell'elettrone * carica dallo spettrometro , 00108 // si potrebbe usare quello dal calor. 00109 00110 double puls=Tracc[0]->ptrk; 00111 00112 00113 if(puls>100.) 00114 puls=100.; 00115 00116 pq=puls*Tracc[0]->charge; 00117 rapsel=-1.; 00118 if(abs(pq)>0.0) 00119 rapsel=enlk/abs(pq); 00120 00121 // Calcolo il quadrimomento del leptone suposto un elettrone 00122 Mome=gvet(Tracc[0]->Get_P()); // impulso calcolato in DevTrk 00123 // impulso fisso del K 00124 Kmom.setvn(0.,0.,75.,.49367); 00125 00126 // missing mass come elettrone 00127 Emom.setvn(Mome, mase); // quadriimpulso come se elettrone 00128 Qtr=Kmom-Emom; // quadrimomento mancate o trasferito( neutrino) 00129 Qtr.Invar(); // Completa il calcolo della massa invariante.... 00130 pmis = Qtr.norma; // impulso nel nu non dipemde dalla massa del leptone.... 00131 pmisx = Qtr[0]; 00132 pmisy = Qtr[1]; 00133 pmisz = Qtr[2]; 00134 ptrs=sqrt(Emom[0]*Emom[0]+Emom[1]*Emom[1]); //impulso transverso 00135 emisq = Qtr.mq; 00136 // debug 00137 /* 00138 Tracc[0]->Get_P().print(evento_.Event,"Emb",0,"Trk");; 00139 Mome.print(evento_.Event,"Mome",0,"Anal2"); 00140 Emom.print(evento_.Event,"Emom",0,"Anal2"); 00141 Qtr.print(evento_.Event,"Qtr0",0,"Anal2"); 00142 */ 00143 00144 00145 // come se muone 00146 Emom.setvn(Mome, masmu); // quadriimpulso come se muone 00147 Qtr=Kmom-Emom; // quadrimomento mancate o trasferito( neutrino) 00148 Qtr.Invar(); // Completa il calcolo della massa invariante.... 00149 mumisq = Qtr.mq; 00150 00151 // come se pione 00152 Emom.setvn(Mome, maspi); // quadriimpulso come se pione 00153 Qtr=Kmom-Emom; // quadrimomento mancate o trasferito( neutrino) 00154 Qtr.Invar(); // Completa il calcolo della massa invariante.... 00155 pimisq = Qtr.mq; 00156 00157 //************************************************************************* 00158 // using the kabes....*********************************** 00159 if(kabs3==0) 00160 { 00161 getta_kabes++; 00162 return -2; 00163 } //non c'e' la kabes 3 si potrebbe uscire.. 00164 00165 // qui si usano le kabes..solo per la direzione ...da rivedere 00166 00167 yb1=kabs1->M_Hits[0].Xdev.y; 00168 yb3=kabs3->M_Hits[0].Xdev.y; 00169 00170 xb1=kabs1->M_Hits[0].Xdev.x; 00171 xb3=kabs3->M_Hits[0].Xdev.x; 00172 // VK.setvn( xb3-xb1, yb3-yb1, 800.);//stima fare meglio 00173 VK.setvn( xb3, yb3, 6378.); 00174 00175 kp=75.0; 00176 PK=VK.Verso()*kp; // vettore impulso del K 00177 kpx = PK.x; 00178 kpy = PK.y; 00179 00180 Kmom.setvn(PK,mask); // quadrimomento del K 00181 //*** 00182 00183 // come se elettrone 00184 Emom.setvn(Mome, mase); // quadriimpulso come se muone 00185 Qtr=Kmom-Emom; // quadrimomento mancate o trasferito( neutrino) 00186 Qtr.Invar(); // Completa il calcolo della massa invariante.... 00187 miskbq = Qtr.mq; 00188 // --------------------------------- 00189 /* 00190 Kmom.print(evento_.Event,"Pk",0,"ric"); 00191 SelRea->avo->P.print(evento_.Event,"Pk",0,"Gen");; 00192 00193 Mome.print(evento_.Event,"Mom2",0,"Anal2"); 00194 // Emom.print(evento_.Event,"Emo2",0,"Anal2"); 00195 Qtr.print(evento_.Event,"Qtr2",0,"Anal2"); 00196 00197 */ 00198 count_wnt++; 00199 return 1 ; 00200 } 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213