FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
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 00014 00015 #include "flyoh.h" 00016 00017 00018 using namespace GmpConst; 00019 00026 PartBullet::PartBullet() 00027 { 00028 type=Bullet; 00029 Gout<<"\n Classe PartBullet Done : "<<nome; 00030 } 00031 00032 00033 void PartBullet::Get_Bersaglio ( Device *dev, double lint ) 00034 { 00035 00047 // Gout<<"\n "<<Eventi_Fatti<<" Bullet in Get_Bersaglio "<< lint; 00048 if ( lint==0.0 ) return; 00049 00050 // si stima il cammino prima di interagire sfruttando la lunghezza di interazione. 00051 double spessore=0.; 00052 if ( dev->nowpos==0 ) spessore=2.*dev->Get_Lout().z; //interno 00053 else spessore=2.*dev->Get_Lin().z; // nel buco 00054 00055 double dz= -lint* log(1.0-Pran()*(1.0-exp(-spessore/lint)) ); 00056 00057 if ( dz> spessore ) return; // ha superato il bersaglio senza interagire 00058 pathok= dz; 00059 Set_Fato ( Distr,-3 ); // qui la particella è distrutta con flags -3 00060 //e diventa sterile, cioè non si fa decadere azzerando il puntatore ai suoi prodotti di decadimento; vedi flyevent() 00061 dw=0; // attenzione 00062 00063 //====================================// 00064 // calcolo i parametridel cms 00065 Particella *madre, *ccms; 00066 madre=rg; 00067 ccms= madre->dw; 00068 ccms->P=P+madre->P; 00069 ccms->P.Invar(); 00070 ccms->Get_Gp() =ccms->P; 00071 ccms->Set_Massa(ccms->P.m); 00072 ccms->Set_Fato ( Nata,-1 ); 00073 00074 00075 // Decido il decadimento nel bar 00076 double cslop=11.; 00077 if(rea_madre->Get_Slope()>0.0) cslop = rea_madre->Get_Slope(); 00078 double cnor=1.-exp(-1.*cslop); 00079 double cost =1.0+log(1.0-Pran()*cnor)/cslop; 00080 // Gout<<"\n "<<setprecision(5)<< ccms->dw->Get_Nome()<<" ct "<< cost<<" "<<cnor; 00081 00082 00083 00084 double fi = DuePiGreco * Pran(); 00085 ccms->dw->cstar=cost; ccms->dw->fistar=fi; 00086 ccms-> dw->rg->cstar=-cost; ccms->dw->rg->fistar=fi+PiGreco; 00087 00088 00089 //Nota: Definire la posizione dopo l'urto.... 00090 00091 }