|
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....
}