FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_ana/anakl2.cpp

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 
 All Classes Namespaces Files Functions Variables