FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_par/partdltz.cpp

00001 /***************************************************************************
00002                           partdltz.cpp  -  description
00003                              -------------------
00004     begin                : Sun May 9 2004
00005     copyright            : (C) 2004 by gmp
00006     email                : peppe@newpeppe
00007   ***************************************************************************
00008   *                                                                         *
00009   *   NA48  simulation program.                                             *
00010   *                                                                         *
00011   ***************************************************************************/
00012 
00013 #define EPSR     1.0E-200
00014 
00015 #include "flyoh.h"
00016 using namespace GmpConst;
00017 
00019 //             D a l i t z
00020 //--------------------------------------------------------------
00021 // Get the Dalitz pair mass  and decay angles
00022 
00023 void PartDltz::
00024  DecParm()
00025  {
00026 
00027 // Attenzione questa routine vale solo per la
00028 // produzione di dalitz pair nel decadimento del mesone pi0 in gam e e
00029 // si suppone una distribuzione che va come df/dmq=(1-mq/mpiq)**3 *1./mq;
00030 // limiti tra 2 volte la massa dell'elettrone e quella del pi0.
00031 // mass electron= 0.00051 , mass pi0 = 0.13497 (**2=0.0182169009)
00032 // vedi anche  "Selected problems in theoretical physics"
00033 
00034   double wtot=0.0,x=0.0,xq=0.0,aux=0.0;
00035   int i,j=0;
00036 //==============================================================
00037 // inizializza la forma integrale della distribuzione di massa normalizzata.
00038   if(dlznorm==0.0)
00039    {
00040      xmindlz=0.0075572349;    // = 2 me/mpio
00041      xmaxdlz=1.0;
00042      stepdlz=(xmaxdlz-xmindlz)/100000.;
00043      probdlz[0]=0.0;
00044 
00045      for (i=1;i<100000;i++)
00046       { x=xmindlz+stepdlz*i;
00047         xq=x*x;
00048         aux=1.-xq;
00049         wtot+= (aux*aux*aux)/x;   // df/dm
00050         if(i%1000 ==0)
00051         {j++;
00052          probdlz[j]=wtot;
00053 
00054         }
00055       }
00056 // normalizzo....
00057    probdlz[100]=1.0;
00058    probdlz[101]=10.0;
00059    stepdlz=(xmaxdlz-xmindlz)/100.;
00060    dlznorm=1./wtot;
00061    for (i=1;i<101;i++) probdlz[i]*= dlznorm;
00062   }
00063   
00064 //=============================================================
00065 //------------------------------------------
00066 // qui comincia normalmente... get massa and angles
00067 
00068   double drm;
00069   double R=Pran();
00070   i=1;
00071   while(1)
00072    {
00073     if( probdlz[i]>R)break;
00074     i++;
00075    }
00076 // interpolazione ..... piu' peso alle basse masse
00077    drm=(R-probdlz[i-1])/(probdlz[i]-probdlz[i-1]);
00078    double mm=xmindlz+(i-1.0+drm*drm)*stepdlz;
00079 
00080    P[3] = P.m=massa=massdlz=mm*0.13497;
00081 
00082 
00083 
00084    SelRea->Dalitz_done++;
00085 
00086 
00087 // calcolo la direzione di decadimento dei figli.
00088 
00089 //   double cost = 1.0 -  2.0 * Pran();
00090 /**********/
00091    double rdm=2.*Pran()-1.0;    // ==cos(tet)**2
00092    double cost = exp(log( fabs(rdm)+EPSR)/3.);
00093    if(rdm<0.0)cost=-cost;
00094 /*************
00095    double cost = 1.0;
00096    while (1)
00097    {
00098    cost = 1.0 -  2.0 * Pran();
00099    if(Pran()<(cost*cost)) break;
00100 
00101    }
00102 *********
00103     double cost = 1.0;
00104      if(Pran()<0.5)cost=-1;
00105 *******/
00106 
00107    double   fi = DuePiGreco * Pran();
00108    dw->cstar=cost;     dw->fistar=fi;
00109    dw->rg->cstar=-cost; dw->rg->fistar=fi+PiGreco;
00110    return;
00111  }
 All Classes Namespaces Files Functions Variables