FlyoDoc_2011 Pisa 2011 by GmP --- 011
Public Member Functions | Public Attributes

PartLepton Class Reference

#include <partlepton.h>

Inheritance diagram for PartLepton:
Particella

List of all members.

Public Member Functions

 PartLepton ()
void DecParm ()
void DecParm_Brems ()
int Get_Brems (Device *dev, double &path, double &rad)
 ******************************************** bremssthralung section...
double Get_Ecut ()
double Get_brem ()

Public Attributes

double brems_factor
double Ecut
double ngam
double ebrem
double mbrem
double mbremq
double rappe

Detailed Description

Controlla la produzione di bremsstrhalung

Author:
Giuseppe Pierazzini

Definition at line 16 of file partlepton.h.


Constructor & Destructor Documentation

PartLepton::PartLepton ( )

PartLepton Controlla la produzione di bremsstrhalung dinamica, vedi anche Partgam per la pair production. La generazione di elettroni (e muoni) è attivata dall parola chiave in .epc: "bremsstrahlung " non commentata! Neldefinizione del device occorre inserire una linea con " brems xxx " dove xxx è il numero massimo di gamma generati.. Attenzione nel caso si voglia attivare la produzione di sciami elettromagnetici il numero indicato può essere alto come 100 o addirittura 500. In questo caso deve essere attivata anche la pair production da gamma con: "pairprod yyy " con yyyy simile a quello previsto per il bremsstrhalung. Nella produzione si creano automaticamente gamma e ed elettroni marcati per la produzioni di pair o brems. Il numero massimo di particelle (leptoni e gamma) creati è legato ai numeri su discussi e al valore della soglia (Ecut) definito in PartLepton(). Per esempio in un radiatore compatto e abbastanza lungo in lunghezze di radiazioni, si possono produrre numerose particelle, mille o più... 30.12.2009 gmp

Author:
Giuseppe Pierazzini

Definition at line 31 of file partlepton.cpp.

{
    type=Lepstar;

    Ecut=0.250;
    // attenzione questo taglio determina l'energia minima di soglia per la produzion del Brems.
    // Nella distribuzione della energia di ionizzazione rilasciata dagli elettrini  nel radiatore appare un picco
    // alla stessa energia di soglia su scelta.
    // Questa soglia determina anche il numero delle particelle (gamma. elettroni e positroni)
    // generati nella simulazione per ciascun evento.

    double mrap= ptr_Elec->Get_Massa()/massa;
    brems_factor=mrap*mrap;  //brems_factor=0.01;
    if (Abilita_Brems) Brems_Production=1;
    else Brems_Production=0;

    if (evento_.Gen.Event<1)
    {
        Gout<<"\n Classe PartLepton  : "<<nome;
        if (Abilita_Brems) Gout<<"*  done!  with Brems_factor: "<<setprecision(6)<<brems_factor;
        else Gout<<"  done! ";
    }

}

Member Function Documentation

int PartLepton::Get_Brems ( Device dev,
double &  path,
double &  rad 
) [virtual]

******************************************** bremssthralung section...

** attenzione ***** renormalize the rad_length, for muons o other charged particles ( no for electrons...) brems_factor is defined in the particle constructor....

Reimplemented from Particella.

Definition at line 65 of file partlepton.cpp.

{
// questa procedura e' chiamata da Device::traccia()
// se siamo qui....c' e' possibilita' di bremsstrhalung
// nell'interno o nel buco del dev..
//-----------------------------------------------
// vedi l'articolo di Y. S. Tsai, Pair Production and Bremsstrahlung of Charged Leptons,
// Rev. Moder. Phys. 46,1974

// procedura:
// 1- si accettano solo particelle con energia superiore a Ecut
// 2- in ogni intervallo dx=step=frazione di lrad si
//    verifica se viene emesso un gamma
// 3- se si, se ne genera l'energia
// 4- si aggiorna l'energia della particella madre e si
//    passa all step successivo.
// 5- l'energia di tutti i gamma emessi si sommano insieme
// 6- flyo poi genera un gamma di brems unico a partire
//    da un punto spaziale medio
// see the blue book or the article of Tsai del 1974 Rev.Moder. Phys. 46,4
//-------------------------------------------------
    double step,e,Emax, rapmx,rapmxq,rap,rapq,pmax;
    double eb=0.,prob,prand;
    double path_fatto,path_free,path_resta;
    double rad_length=rad;




//  rad deve essere > 0 !!

    if (path<.1) return 0;   //ritorna subito per cammini insignificanti


    if (massa>0.0005) rad_length/=brems_factor;
    if (path/rad_length<0.000001) return 0;

    step=rad_length*0.1;
    e=P.e;
    if (e<Ecut) return 0;  // attenzione a questo cut... vedi il costruttore Partlepton()
    ebrem=mbrem=0.0;
    path_fatto=0.0;
    path_free=0.0;

//  start loop
    while (path_fatto<path)
    {
        path_resta=path-path_fatto;
        if (step>path_resta) step=path_resta;


        e-=dev->Msperdita(step);       // stima della energia persa per msc.

        Emax=e-massa;
        rapmx= (Emax-Ecut)/e;
        rapmxq=rapmx*(Emax+Ecut)/e;
        pmax=(1.33333*(log(Emax/Ecut)-rapmx) + .5*rapmxq);

//test to make a brems

        if (Pran()<pmax*step/rad_length) // makes a gam...
        {
//  get gam energy  
//  con eb =(Ecut+alfa(Emax-Ecut)
//  rap = (eb-Ecut)/e = (Ecut+alfa(Emax-Ecut)-Ecut)/e = alfa*rapmx
            prand=Pran()*pmax;
            for (double alfa=0.0;alfa<1.;alfa+=0.001) // in step del permille
            {
                rap=alfa*rapmx;
                rapq=alfa*alfa*rapmxq;
                eb =Ecut+e*rap;
                prob=(1.33333*(log(eb/Ecut)-rap) + .5*rapq);
                if (prand<prob) break;
            }
            ebrem+=eb;
            e-=eb;
            path_free+=(path_fatto+Pran()*step)*eb;
        }

        if (e<=Ecut) break;   // vedere meglio????
        path_fatto+=step;
    }

    if (ebrem>0.0)      // bremsstrhalung ok...
    {
        Brems_Production=2;  // brems fatto....
        fato=Decay;// si fa per dire....si fa decare?!
        Ifato=-13;
        path_free/=ebrem;     //cammino libero prima di decadere: punto piu' probabile..
        SelRea->Brem_done++;
        dev->Brem_done++;
       
        if (Debugon==1)
        {
            P.print( nome);
            X.print(nome);
            Gout<<"\n Brlm "<<evento_.Gen.Event<<" "
            <<fato<< " dw "<<dw
            << " dev " << dev->Get_Nome()<<" Brem_done "<<dev->Brem_done
            << "  path " <<path<<"  free "<<path_free;
        }
        path=path_free;

// generate the new partcles: un nuovo leptone ed un gamma
// max defined into device cards...
        Particella *pb,*pc;
// electron o muon      test se  possono fare ancora brems...
        Partname=nome;
        if (Abilita_Brems>0&&dev->Brem_done<=dev->maxBrems) {
            pb = new PartLepton();
        }
        else pb= new Particella();  //no brems....

// gamma di brems...test se  può fare pair production ...
        Partname=Gam;
        if (Abilita_Pair>0&& dev->Pair_done<=dev->maxPair)   {
            pc = new PartGam();  // no pair production
        }
        else pc= new Particella();
// links: attention here the link is broken to the older particle... but see Restore_link
// attenzione non alterare la sequenza dei link....altrimenti cambiano gli Id
        dw=pb;
        pb->up=this;
        pb->rg=pc;
        pc->lf=pb;
        pc->up=this;
        pb->Set_Id();
        pc->Set_Id();

        return -13;  //brems ok

    }
    return 0;  // no brems
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables