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