|
FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include "flyoh.h"#include "flyoana.h"#include "fase3max.h"Go to the source code of this file.
Functions | |
| void | Get_Data_Gen () |
| void | Compatibility () |
| int | main (int argc, char *argv[]) |
Flyo è un montecarlo veloce, scritto completamente in C++, compatibile con Root e con Paw, particolarmente adatto per la simulazione di eventi di fisica delle alte energia in apparati di forme complesse ed arbitrarie.
main:
Nota
La elaborazione degli eventi accumulati è in genere sincrona con i trigger, mentre nel caso che sia on il Pileup la simulazione fine dei device [flyosimuladev()],l'analisi e la scrittura sono eseguiti in modo asincrono alla generazione. In particolare l'analisi sugli eventi, accumulati nel buffer circolare, parte solo dopo un lasso di tempo, (per esempio Tpipe=250 ns) per da agio alle informazioni via, via generate di popolare le time slot della pipeline (qui di 25 ns) prima e dopo adiacenti all'evento che ha generato il trigger come accede nella realtà.
Definition in file main.cpp.
| void Compatibility | ( | ) |
Compabilità tra le procedure richieste
Definition at line 181 of file main.cpp.
{
// compatibility....
if ( Pipeline==1 && Luce!=0 )
{
Gout<<"\n **** Pipeline and Illumina incompatibilty... attention ..."<< endl;
cout<<"\n **** Pipeline and Illumina incompatibilty... attention ..."<< endl;
exit ( 0 );
}
if ( Pipeline==1 && Radio!=0 )
{
Gout<<"\n **** Pipeline and Radx incompatibilty... attention! ..."<< endl;
cout<<"\n **** Pipeline and Radx incompatibilty... attention! ..."<< endl;
exit ( 0 );
}
// triger of low level on....
if ( Trigger_low_on==1 ) Gout<<"\n ***** -> trgtest <- set up... did you test the Trigger->Calcola procedure?"<<endl;
}
| void Get_Data_Gen | ( | ) |
Seleziona i dev da usare o da escludere nella procedura di simulazione.
Definition at line 168 of file main.cpp.
{
Device *dev=Apparato;
while ( dev!=0 )
{
if ( dev->escludi!=1 ) dev->Fill_Default();
dev= dev->next;
}
}
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
in Get_DatiOut(); si copiano i dati misurati ( M_Hits ) nelle variabili standard per Root altre variabili per Root possono essere state definite altrove... (in SimulaDev per esempio!) ricordarsi di azzerare le variabili Root aggiunte in Reset_RootData();
Definition at line 36 of file main.cpp.
{
gargc=argc;
gargv=argv;
// all init..
flyoinit();
Gout<<"\n Flyoinit done. "<<flush;
//==========
// test on comnpatibility...
Compatibility();
//==========
//init fits, and the data out_file
FitsControl ( 0 );
Gout<<"\n FitsControl(0) done. "<<flush;
Scrivi_Dati ( 0 );
Gout<<"\n Scrivi_nt(0)) done. "<<flush;
// ========================================================
//***********************************************************
//*********************** L O O P ***********************
//***********************************************************
SelRea=0;
// main do loop
while ( Eventi_Fatti<evento_.Mxev )
{
// reset reazioni e devices...
if ( SelRea!=0 ) SelRea->Reset_Rea();
Reset_Devices();
Eventi_Fatti++;
evento_.Gen.Event=Eventi_Fatti;
// flyoevento() ritorna un numero che dipende dai dev colpiti
// se un detector colpito ha il flag veto, si termina la generazione e si va al prossimo evento...
// attenzione la flag veto non è compatibile con pipelin on poichè l'evento non viene tracciato completamente!!!!
// ==== E V E N T G E N E R A T I O N ====
evento_.Gen.trigger_flag=flyoevento(); //done no zero if at least one dev has been hit...
// ==== E V E N T D O N E ====
if ( evento_.Gen.trigger_flag<=0 ) continue; // if no detector was shot skip to the next event.
if ( Luce!=0 ) Luce->Store_Illumina();// better if Luce activated without the pipeline. See Compatibility()
evento_.Define_Standard_Header(); // event title and basic parameters...
if ( Pipeline==1 ) evento_.Put_Header_into_Buffer();
//=====================================================
//-----------------------------------------------------
// inizio loop per la elaborazione degli eventi memorizzati nel buffer circolare.
// che hanno generato un trigger di basso livello: almeno un device toccato (done).
// La elaborazione dei trigger è asincrona rispetto alla generazione,
// si elaborano comunque tutti gli eventi con trigger generati Tpipe ns prima dell'ultimo evento generato.
// se la pipeline non è attivata la loop è dummy....
static double triggerpast=0.0;
while ( 1 )
{
if ( Pipeline==1 )
{
// estraggo i titoli dal buffer degli header...
// estraggo i dati delle pipeline dei dev in una finestra di
// +- Tpipe attorno al tempo del trigger
// il trigger dev essere almeno "Tpipe" ns prima del tempo attuale.
if ( evento_.Get_Header_from_Buffer() <0 ) break; //if no more events ... skip...
}
else Get_Data_Gen(); // semplicemente copia i dati generati nel buffer M_Hits
// if Trigger_box is on .. check the level 0 trigger.
if ( Trigger!=0 )
{
evento_.Gen.trigger_flag=Trigger->Level0();
if (evento_.Gen.trigger_flag==0 ) break; // if not... skip and look for a new trigger
evento_.Gen.ttrigdif=evento_.Gen.tempo-triggerpast; // redefinition .. see event0.cpp
triggerpast=evento_.Gen.tempo;
}
//==================================== S I M U L A ===========================
flyosimuladev();
//==================================== E N D S I M U L A ===========================
Device *pv;
pv=Apparato;
while ( pv!=0 )
{
if ( pv->escludi==0 ) pv->Get_DatiOut();
pv=pv->next;
}
if ( Radio!=0 ) Radio->Store_Radx(); //take a radiografy of the apparatus!!!
//===============================================================
// si procede all'analisi dei dati misurati se richiesto
if ( Primofit!=0 ) FitsControl ( 1 );
// e si scrive tutto sul file di uscita
Scrivi_Dati ( 1 );
// se la pipeline è off non itero...passo alla generazione del prossimo evento...
if ( Pipeline==0 ) break;
}
}
//=====end event main loop ======
//==== closing the simulation ===============
//==================
// program ends.....
if ( Fasemx!=0 ) Fasemx->Info();
Gout<<"\n\n ======>>> E n d p r o g r a m s u m m a r y "<<endl;
if ( Primofit!=0 ) FitsControl ( 2 );
Scrivi_Dati ( 2 );
flyoend();
cout<<"\n\n ======>>> E n d p r o g r a m "<<endl;
return 0;
}