FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <partdltz.h>
Public Member Functions | |
void | DecParm () |
------------------------------------------------------------- | |
Public Attributes | |
double | dlznorm |
double | probdlz [102] |
double | xmindlz |
double | xmaxdlz |
double | stepdlz |
double | massdlz |
Dalitz pairs production, done automatically...
Definition at line 18 of file partdltz.h.
void PartDltz::DecParm | ( | ) | [virtual] |
-------------------------------------------------------------
Reimplemented from Particella.
Definition at line 24 of file partdltz.cpp.
{ // Attenzione questa routine vale solo per la // produzione di dalitz pair nel decadimento del mesone pi0 in gam e e // si suppone una distribuzione che va come df/dmq=(1-mq/mpiq)**3 *1./mq; // limiti tra 2 volte la massa dell'elettrone e quella del pi0. // mass electron= 0.00051 , mass pi0 = 0.13497 (**2=0.0182169009) // vedi anche "Selected problems in theoretical physics" double wtot=0.0,x=0.0,xq=0.0,aux=0.0; int i,j=0; //============================================================== // inizializza la forma integrale della distribuzione di massa normalizzata. if(dlznorm==0.0) { xmindlz=0.0075572349; // = 2 me/mpio xmaxdlz=1.0; stepdlz=(xmaxdlz-xmindlz)/100000.; probdlz[0]=0.0; for (i=1;i<100000;i++) { x=xmindlz+stepdlz*i; xq=x*x; aux=1.-xq; wtot+= (aux*aux*aux)/x; // df/dm if(i%1000 ==0) {j++; probdlz[j]=wtot; } } // normalizzo.... probdlz[100]=1.0; probdlz[101]=10.0; stepdlz=(xmaxdlz-xmindlz)/100.; dlznorm=1./wtot; for (i=1;i<101;i++) probdlz[i]*= dlznorm; } //============================================================= //------------------------------------------ // qui comincia normalmente... get massa and angles double drm; double R=Pran(); i=1; while(1) { if( probdlz[i]>R)break; i++; } // interpolazione ..... piu' peso alle basse masse drm=(R-probdlz[i-1])/(probdlz[i]-probdlz[i-1]); double mm=xmindlz+(i-1.0+drm*drm)*stepdlz; P[3] = P.m=massa=massdlz=mm*0.13497; SelRea->Dalitz_done++; // calcolo la direzione di decadimento dei figli. // double cost = 1.0 - 2.0 * Pran(); /**********/ double rdm=2.*Pran()-1.0; // ==cos(tet)**2 double cost = exp(log( fabs(rdm)+EPSR)/3.); if(rdm<0.0)cost=-cost; /************* double cost = 1.0; while (1) { cost = 1.0 - 2.0 * Pran(); if(Pran()<(cost*cost)) break; } ********* double cost = 1.0; if(Pran()<0.5)cost=-1; *******/ double fi = DuePiGreco * Pran(); dw->cstar=cost; dw->fistar=fi; dw->rg->cstar=-cost; dw->rg->fistar=fi+PiGreco; return; }