#include "generator.h" int main ( int argc , char* argv[] ) { int ievt ; event* evt ; FILE* outfile ; ScanArguments ( argc , argv ) ; if ( 0==strcmp(OutFile,"") ) outfile = stdout ; else if ( ! (outfile=fopen(OutFile,"w")) ) { fprintf(stderr,"Error opening output file %s\n",OutFile) ; exit (-2) ; } for ( ievt=1 ; ievt<=Nevts ; ievt++ ) { evt = evt_gen (Ecm) ; if (evt) { evt->number = ievt ; write_event (outfile,evt) ; } } fclose (outfile) ; return 0 ; } /* --------------------------------------------------------------------------------------------- */ void ScanArguments ( int argc , char* argv[] ) { int i ; for ( i=1 ; i] [[-o] ] [-E ]\n") ; exit(-1) ; } /* --------------------------------------------------------------------------------------------- */ event * evt_gen ( float Ecm ) { event* evt ; int igood , ibad , ngood , nbad , this_one ; track* trk ; evt = Create_event() ; if ( flat_random() < 0.1 ) ngood = 2 ; else ngood = 2*(int)(flat_random()*20) ; nbad = (int)(flat_random()*15) ; evt->ntrack = ngood + nbad ; igood = ibad = 0 ; while ( 1 ) { /* Please note that the way we generate track parameters does not follow any physical law, so don't try to understand it! */ if ( igood < ngood ) { if ( ibad < nbad ) this_one = (flat_random()<.5) ? 1 : 0 ; else this_one = 1 ; } else { if ( ibad < nbad ) this_one = 0 ; else break ; } trk = Create_track () ; if ( this_one ) { igood++ ; trk->charge = ( (igood%2) ? +1 : -1 ) ; trk->Nhits = binom_random( 150 , 0.8 ) ; trk->origin = scale( spher_random() , exp_random(1) ) ; trk->P = scale( spher_random() , exp_random(Ecm/evt->ntrack) ) ; trk->chi2 = chi2_random(trk->Nhits) ; trk->dEdx = gauss_random(10.,3.5) ; } else { ibad++ ; trk->charge = ( (flat_random()<0.5) ? +1 : -1 ) ; trk->Nhits = binom_random( 150 , 0.2 ) ; trk->origin = scale( spher_random() , exp_random(5.) ) ; trk->P = scale( spher_random() , exp_random(0.8) ) ; trk->chi2 = (int) (flat_random()*10.) ; trk->dEdx = gauss_random(10.,6.0) ; } append_track_to_event ( evt , trk ) ; } return evt ; }