FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include "flyoh.h"
Go to the source code of this file.
Functions | |
void | flyoinit () |
int | flyoevento () |
void | flyosimuladev () |
void | flyoend () |
Variables | |
Particella * | Pr_avo |
Particella * | pr |
Particella * | pb |
Particella * | pc |
Contiene:
Definition in file mainuti.cpp.
void flyoend | ( | ) |
Termina la simulazione, Scrive il sommario sulla file di linsting di uscita.
Da i tempi di elaborazione globali.
Definition at line 413 of file mainuti.cpp.
{ Gout<<"\n------------ Device hit summary ----------"; Apparato->Dev_summary(); Gout<<"\n------------ E n d ----------"; Gout<<"\n--- ----\n"; if ( Le_Tracce!=0 ) Gout<<"\n Charged tracks info.. "<<Tracc[0]->tottrk<<" "<<Tracc[1]->tottrk<<" "<<Tracc[2]->tottrk<<endl; Reaction->Fine_run (); clockend = time ( &tck ); double dft=clockend-clockstart; double evsec =Eventi_Fatti/dft; Gout<<"\n T start "<<clockstart<<" e stop "<<clockend<<" e diff "<<dft<<" Sec."<<endl; Gout<<"\n Epsi Event/sec = "<<setw ( 10 ) <<evsec<<endl; Gout<<"\n Epsi main loop start at "<<setw ( 25 ) <<ctime ( &clockstart ) <<endl; Gout<<"\n Epsi main loop end at "<<setw ( 25 ) <<ctime ( &clockend ) <<endl; }
int flyoevento | ( | ) |
Genera le reazioni secondo le richieste dell'utente e traccia tutte le particelle nell'apparato.
Definition at line 163 of file mainuti.cpp.
{ // int colpo=0, visto = 0,debaggati=0; colpo=0; // se Correla=2 inizializzazione di random secondo l'evento e run if ( Correla==2 ) Set_PranEv(); Debugon=1; if ( Eventi_Fatti < evento_.Debg_first ) Debugon=0; if ( Eventi_Fatti > evento_.Debg_last ) Debugon=0; if ( Eventi_Fatti % Mostra == 0 ) { clockend = time ( &tck ); double Elapsed=clockend-clockstart; double FromLast=clockend-clocklast; double pevsec=-1.,evsec =-1.; if ( Elapsed>0.0 ) evsec=Eventi_Fatti/Elapsed; if ( FromLast>0.0 ) pevsec= ( Eventi_Fatti-evento_.Evenlast ) /FromLast; std::ostringstream strs; strs << pevsec; std::string str = strs.str(); if (pevsec<0.) str="inf"; cout<<"\n Run "<<evento_.Gen.Run <<" Ev. "<<setw ( 8 ) <<Eventi_Fatti <<" Ev/s "<<setw ( 8 ) << str.c_str() <<" Ev/s medio "<<setw ( 8 ) <<evsec <<" elapsed "<<Elapsed <<" At "<<ctime ( &clockend ); cout<<endl; Gout<<setprecision ( 1 ); Gout<<"\n Run "<<evento_.Gen.Run <<" Ev. "<<setw ( 8 ) <<Eventi_Fatti <<" Ev/s "<<setw ( 8 ) << str.c_str() <<" Ev/s medio "<<setw ( 8 ) <<evsec <<" elapsed "<<Elapsed <<" At "<<ctime ( &clockend ); clocklast=clockend; evento_.Evenlast=Eventi_Fatti; } // reset the old reaction.... // if(SelRea!=0) SelRea->Reset_Rea(); // get the reaction pointer according to the rate... if ( ( SelRea = Reaction->Select_reation () ) == 0 ) { Gout<<"\n Reaction not found... exit"<<endl; exit ( 0 ); } SelRea->AddGen(); if ( Debugon==1 ) { debaggati++; Gout<<"\n\nRun " <<setprecision ( 0 ) <<fixed <<setw ( 6 ) <<evento_.Gen.Run<<" E v e n t o " <<setw ( 6 ) <<Eventi_Fatti<<" Dbg=" <<setw ( 6 ) <<debaggati<<" " <<setw ( 25 ) <<SelRea->Get_Titolo() <<endl; } // =================== reset param...===================================== Pr_avo = SelRea->avo; //------------------- // get the beam (for the moment Get_Beam returns allways 1! but just in the case... if ( SelRea->Get_Beam () ==0 ) return ( -2 ); //-------------------------------------------- visto=0; // trasport the first particle della reazione... colpo = Pr_avo->Trasport(); // Pr_avo->Stampa_questa_particella(); visto+= colpo; // if the beam do not decay or has not gas intaractions...get out if ( Pr_avo->dw!=0 || Pr_avo->cls!=0 ); else if ( SelRea->rea_type==-1 ) { visto=1; return ( 1 ); } if ( colpo<0 ) { return ( colpo ); } //================================ l o o p for the other particles =========// // decay loop ....dei decadimenti . // main loop: iterative procedura to follow the reaction tree... if ( Pr_avo->dw!=0 || Pr_avo->cls!=0 ) //non un urto: decay oppure gas { // la particella padre decade comunque.... // se è un proiettile che ha interagito non decade vedi PartBullet::Get_Bersaglio() Pr_avo->Set_Pbar(); Pr_avo->Main_Loop(); //vedi qui sotto il sorgente // cout<<"\n DGEv dopo main "<<Eventi_Fatti<<" colpo "<<colpo<<" visto "<<visto; } if ( Pr_avo->Get_Type() ==Bullet ) { // la particella padre è il proiettile // il bersaglio è alla sua destra..... // ccms è il sistema virtuale (proiettile -bersaglio) // i cui parametri sono definiti in PartBullet::Get_Bersaglio() // Gout<<"\n "<<Eventi_Fatti<<" è una Bullet...."; Particella * ccms=Pr_avo->rg->dw; ccms->Set_Pbar(); ccms->Main_Loop(); } // qui solo per debug // if(Eventi_Fatti==151) SelRea->Simple_List(); if ( Debugon==1 ) { Pr_avo->Stampa_particle ( SelRea ); Gout<<endl; } //============================ main l o o p end===================// //------------update special counters --- SelRea->Totpair+= SelRea->Pair_done; SelRea->Totbrem+= SelRea->Brem_done; SelRea->Totdltz+= SelRea->Dalitz_done; evento_.Gen.Ipair=SelRea->Pair_done; evento_.Gen.Ibrem=SelRea->Brem_done; evento_.Gen.Idlz =SelRea->Dalitz_done; if ( Debugon==1 ) SelRea->avo->Debug_out (); // cout<<"\n Run-spia "<<evento_.Gen.Run <<" Ev. "<<setw ( 8 ) <<Eventi_Fatti<<endl; return ( visto ); }
void flyoinit | ( | ) |
Inizializza tutta la procedura di simulazione. Definisce le file di lettura e scrittura (vedi File_Manager()) ed i parametri di controllo della simulazione (vedi carte.cpp e Leggi_input_File(cardin)).
Per il momento è specializzato per gli esperimenti NA48 e NA62, ma può facilmente essere generalizzato ad altre geometrie.
Definition at line 31 of file mainuti.cpp.
{ //------------------------------------------------------------- cout<<"\n <><><><><><><><><><><><><><><><><><><><><><><><><>"<<endl; cout<<"\n Flyo starts running "<< ctime ( &clockstart ); clockstart=clocklast = time ( &tck ); Gout<<"\n Flyo starts running "<< ctime ( &clockstart ); Gout<<"\n <><><><><><><><><><><><><><><><><><><><><><><><><>"<<endl; //------------------------------------------------------------------ // Inizializzazione.... TBurst=new Tempo(); // crea il data base delle particelle . //Se manacano particelle aggiungere in: Crea_part_db(); Crea_part_db(); // crea il data base dei materiali //Se manacano materiali aggiungere in: Crea_materiali_db(); Crea_materiali_db(); // si legge le file .epc e .app File_Manager(); Sommario_Input_Data(); // first call... initialization if ( Reaction==0 ) { Gout<<"\n Reactions not defined.. exit!!"; exit ( 0 ); } Reaction->MaxSpettro(); Reaction->Norma_Rate(); // rate normalization Reaction->Simple_List(); Gout<<"\n\n"<<endl ; // get dev pointers. Attention...adjust with dev name changes... Apparato->Get_Pointers(); if ( Trigger_low_on==1 ) Trigger=new TriggerBox(); if ( Wtrk==1 ) { // do tracks or trigger... at least four chamber... // for the kpivv experiment we need six chamber. of four planes each..... // NA48 experiment 4 chambers if ( Cam1!=0&&Cam2!=0&&Cam3!=0&&Cam4!=0&&Mag48!=0 ) { // Na48/1, NA48/2 apparatus // in principio si possono trovare piu' tracce ma // ne ricostruiamo solo per 6 .... Le_Tracce=new Flyline(); Tracc[0]=new Flytrk(); Tracc[1]=new Flytrk(); Tracc[2]=new Flytrk(); Tracc[3]=new Flytrk(); Tracc[4]=new Flytrk(); Tracc[5]=new Flytrk(); Gout<<"\n Dev NA48 track done \n"; } // Kpvv experimento... nuovo apparato per il calcolo della fascio dal gigatrack... if ( giga1!=0&&giga2!=0&&giga3 ) { // NA62: Kpivv new apparatus with double spectrometer // Trkgiga=new TrackGiga(); // to test // Gout<<"\n Dev Trkgiga done \n"; } } // here devstraw create...TriggerBox if ( FirstStraw!=0 ) { // gmpKill DevStraw * poistraw=FirstStraw; ChambClus[0]=new ClusterStraw ( poistraw ); poistraw=poistraw->nextstraw->nextstraw->nextstraw->nextstraw; ChambClus[1]=new ClusterStraw ( poistraw ); poistraw=poistraw->nextstraw->nextstraw->nextstraw->nextstraw; ChambClus[2]=new ClusterStraw ( poistraw ); poistraw=poistraw->nextstraw->nextstraw->nextstraw->nextstraw; ChambClus[3]=new ClusterStraw ( poistraw ); // generate the track straw pointer. if ( Wtrk==1 )Trkstraw = new TrgmpStraw(); Gout<<"\n Dev NA62 track (gmp) done \n"; // generate the track straw pointer. // if( Wtrk==1 )Trkstraw = new TrackStraw(); // Gout<<"\n Dev NA62 track done \n"; // ChambClus[0]=new ClusterStraw ( FirstStraw);// attenzione per test gmp } Gout<<endl; // general random initialitiation: // Correla =0 Inizializzazione fissa // Correla =1 Inizializzazione dipendente dal run // Correla =2 Inizializzazione dipendente dal run ed evento if ( Correla==0 ) Pran(); else Set_Pran(); Mostra=evento_.Mxev/10; if ( Mostra< 10000 ) Mostra=10000; if ( Mostra>200000 ) Mostra=200000; clockstart = time ( &tck ); Gout<<"\n\n Starting time: "<< tck<<" ===> "<<ctime ( &clockstart ); cout<<"\n\n Starting time: "<< tck<<" ===> "<<ctime ( &clockstart ) <<endl; }
void flyosimuladev | ( | ) |
Introduce gli errori sperimentali nei dati geometrici e cinematici relativi a ciascun rivelatore (vedi virtual void DataSmear()) e ne simula in dettaglio il comportamento (procedura virtual int SimulaDev()) se richiesto.
Definition at line 333 of file mainuti.cpp.
{ Device *pv; pv=Apparato; while ( pv!=0 ) { if ( pv->escludi==0) { pv->Reset_RootData(); // if ( pv->nhit>-1 ) // { // si simula in dettaglio il dev e poi si introducono gli errori // aggionamento con inversione (DataSmear<-> simulaDev) dal 5/3/2011 if ( Errori==1 ) pv->SimulaDev(); if ( Errori==1 ) pv->DataSmear(); // } } pv=pv->next; } //======================================================== // ricostruisco le tracce per NA48..... if ( Le_Tracce!=0 ) { Le_Tracce->Reset(); Le_Tracce->Get_Hits_from_Dev(); Le_Tracce->Find_Tracce(); // creo le tracce: max six ma si puo' aumentare if ( Debugon==1 ) { if ( Tracc[0]!=0 ) Tracc[0]->Spia_Trk(); } } //======================================================== // straw chamber track GmpKill if ( Trkstraw !=0 ) { ChambClus[0]->Get_Cluster(); ChambClus[1]->Get_Cluster(); ChambClus[2]->Get_Cluster(); ChambClus[3]->Get_Cluster(); Trkstraw->Make_Trk(); } // it is called at the tracing end //------------update special counters --- SelRea->Tailsrt+= SelRea->Tailsrt_done; SelRea->Tailong+= SelRea->Tailong_done; evento_.Gen.Itsrt=SelRea->Tailsrt_done; evento_.Gen.Itlg= SelRea->Tailong_done; }