FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <partbullet.h>
Public Member Functions | |
PartBullet () | |
virtual void | Get_Bersaglio (Device *, double) |
Controlla la particella beam nell'urto contro un bersaglio
Definition at line 18 of file partbullet.h.
PartBullet::PartBullet | ( | ) |
------------------------------------------------------------- Procedura che controlla il beam (particella proiettile), nel caso di un urto.
Definition at line 26 of file partbullet.cpp.
{
type=Bullet;
Gout<<"\n Classe PartBullet Done : "<<nome;
}
void PartBullet::Get_Bersaglio | ( | Device * | dev, |
double | lint | ||
) | [virtual] |
------------------------------------------------------------- Determina il punto di interazione dell beam ( definito qui bullet) con la particella bersaglio all'interno del device che ha funzione anche di target.
Questa procedura è chiamata da device::Traccia() se la particella beam (qui bullet) è nel device definito bersaglio. Si ridefisce il cammino potenziale del beam nel materiale del target prima dell'urto e se minore delle dimensioni del dev terget si termina il tracing della particella beam e si calcolano i parametri cinematici del centro di massa cms. Se il cammino è maggiore si procede regolarmente, come richiesto nella epc di riferimento nel caso che il beam non urti nulla e decada regolarmente.
Reimplemented from Particella.
Definition at line 33 of file partbullet.cpp.
{ // Gout<<"\n "<<Eventi_Fatti<<" Bullet in Get_Bersaglio "<< lint; if ( lint==0.0 ) return; // si stima il cammino prima di interagire sfruttando la lunghezza di interazione. double spessore=0.; if ( dev->nowpos==0 ) spessore=2.*dev->Get_Lout().z; //interno else spessore=2.*dev->Get_Lin().z; // nel buco double dz= -lint* log(1.0-Pran()*(1.0-exp(-spessore/lint)) ); if ( dz> spessore ) return; // ha superato il bersaglio senza interagire pathok= dz; Set_Fato ( Distr,-3 ); // qui la particella è distrutta con flags -3 //e diventa sterile, cioè non si fa decadere azzerando il puntatore ai suoi prodotti di decadimento; vedi flyevent() dw=0; // attenzione //====================================// // calcolo i parametridel cms Particella *madre, *ccms; madre=rg; ccms= madre->dw; ccms->P=P+madre->P; ccms->P.Invar(); ccms->Get_Gp() =ccms->P; ccms->Set_Massa(ccms->P.m); ccms->Set_Fato ( Nata,-1 ); // Decido il decadimento nel bar double cslop=11.; if(rea_madre->Get_Slope()>0.0) cslop = rea_madre->Get_Slope(); double cnor=1.-exp(-1.*cslop); double cost =1.0+log(1.0-Pran()*cnor)/cslop; // Gout<<"\n "<<setprecision(5)<< ccms->dw->Get_Nome()<<" ct "<< cost<<" "<<cnor; double fi = DuePiGreco * Pran(); ccms->dw->cstar=cost; ccms->dw->fistar=fi; ccms-> dw->rg->cstar=-cost; ccms->dw->rg->fistar=fi+PiGreco; //Nota: Definire la posizione dopo l'urto.... }