FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
00001 /*************************************************************************** 00002 partp00p.cpp - description 00003 ------------------- 00004 begin : Tue Apr 30 2002 00005 copyright : (C) 2002 by Giuseppe Pierazzini 00006 email : peppe@unipi.it 00007 *************************************************************************** 00008 * * 00009 * NA48 simulation program. * 00010 * * 00011 ***************************************************************************/ 00012 00013 00014 #include "flyoh.h" 00015 00016 using namespace std; 00017 // decadimento del K+ e K- in pic+ p00p 00018 // p00p -> pi0 pi0 00019 // particella virtuale che attiva questa procedura p00p 00020 00021 // constructor 00022 Partp00p::Partp00p(){ 00023 mpadre=0.; 00024 } 00025 00026 00027 //--------------- 00028 void Partp00p::Get_MatrixParm() 00029 { 00030 // decay K->pic p00p ; p00p-> pi0 pi0 00031 // ovvero mpadre -> mfrate mchd1 mchd2 00032 par_a0 = 0.220; // +/- 0.005 (articolo Cabibbo) 00033 par_a2 = -0.0444; // +/- 0.0010 ibid. 00034 madiff=0.66667*(par_a0 -par_a2); 00035 par_A0v= 1.; 00036 par_Apv= 2.*par_A0v; 00037 par_gzero = 0.652; 00038 par_gplus = -0.2154; 00039 Ethres = 4.*mfrateq; 00040 mfrateq2 = 2.*mfrateq; 00041 Mtxthr=par_Apv*(1. + par_gplus*(mpadreq-9.*mfrateq)/(12.*mfrateq)); 00042 //-------- 00043 normprb = 0; 00044 // prob max finding to speed up the generation... 00045 wmtr_max=0.0; 00046 for (mresq=mminq+0.000001;mresq<mminq+dmq;mresq+=dmq*0.01) 00047 {Get_MatrixValue(); 00048 if(prb>wmtr_max) wmtr_max=prb; 00049 00050 // mres=sqrt(mresq); //per debug 00051 // double prbf = Fspace(mres, mchd1, mchd2) * Fspace(mpadre, mfrate, mres); 00052 // double prbb =prbf*prb; 00053 // double prb0 =Mtx0*Mtx0*prbf; 00054 00055 } 00056 Gout<<"\n p00p Wmtr_max "<< wmtr_max<<" "<<SelRea->Get_Titolo(); 00057 normprb=1; // switch on = norm prob n done 00058 } 00059 //--------------- 00060 00061 00062 int Partp00p::Get_MatrixValue() 00063 { // see cabibbo matrx 00064 double s3=mresq; // mresq and s0 from PartFase::Get_PhaseSpace() and Get_PhaseParm() 00065 Mtx0= par_A0v*(1. + par_gzero*(s3-s0)/mfrateq2); 00066 00067 if((sdum= (Ethres -s3)/s3 )>0.0) // select on threshold 00068 { 00069 par_j= sqrt(sdum); 00070 Mtx1 =-madiff*Mtxthr*par_j; // nota qui sempre negativo. 00071 prb = Mtx0*Mtx0 + Mtx1*Mtx1 + 2.*Mtx0*Mtx1 ; // S3< 4.mpic**2 00072 } 00073 else 00074 { par_j= sqrt(-sdum); // in verita' par_j= (-img)*PIGREC*sqrt(-sdum); 00075 Mtx1 = madiff*Mtxthr*par_j; // = (+img)*madiff*Mtxthr*par_j immag positivo ==> 00076 // prb= Mtx0*Mtx0 + [(+img)*Mtx1]**2 ; 00077 prb = Mtx0*Mtx0 + Mtx1*Mtx1 ; // S3> 4.mpic**2 00078 } 00079 00080 if(prb>wmtr_max&& normprb==1) 00081 { 00082 Gout<<"\n Wmtr off: Ev " 00083 <<setprecision(4)<<fixed 00084 <<setw(6)<<evento_.Gen.Event<<" iter=" 00085 <<setw(4)<<itermtr<<" pb=" 00086 <<setw(7)<<prb<<" pbx=" 00087 <<setw(7)<<wmtr_max <<" e0=" 00088 <<setprecision(2)<<fixed 00089 <<setw(6)<<e0<<" e1=" 00090 <<setw(6)<<e1<<" " 00091 <<setw(25)<<SelRea->Get_Titolo()<<std::endl; 00092 00093 00094 wmtr_max=prb*1.01; // aggiorno ma informo.... dovrebbe accadere poche volte! 00095 } 00096 00097 if((wmtr_max*Pran())<prb) return 1; 00098 else return 0; 00099 }