/* Program: abc.c The ABC program simulates particle physics. The user first defines objects and particles via the command line or script files (*.s), and then generates random particle events. ABC swims the particles through the objects, applying physical processes (e.g. energy loss, decay) at each step. The user can then display the events or save detector object data to standard output. This main program defines common process tags and simulator constants, initializes the data arrays, and then calls the command input routine abc_com. A default universe is defined as a 1-meter cube with zero color and material. */ #include "abc.h" /* Process tags (0=off,1=on unless noted) */ int abctag=1; /* read abc.s on startup */ int dattag=1; /* detector output data (0=off,1=normal,2=formatted) */ int dectag=1; /* particle decay */ int drwtag=1; /* display drawing package */ int lostag=1; /* energy loss */ int magtag=1; /* magnetic fields */ int mlttag=1; /* multiple scattering */ int trctag=1; /* error tracing */ int vrbtag=1; /* verbose state (0=off,1=normal,2=echo input) */ /* Simulator constants */ double inclos=0.01; /* step increment for energy loss */ double incmag=0.1; /* step increment for magnetic field */ double incrad=1.0; /* step increment for radiation length */ double maxstp=0.33; /* maximum step size */ double minstp=0.000001; /* minimum step size */ double minmom=0.001; /* minimum particle momentum */ double mintol=0.000001; /* minimum edge tolerance */ /* Generator data */ int genprt[maxgen]; int genflg[maxgen]; double genxpo[maxgen]; double genypo[maxgen]; double genzpo[maxgen]; double genxmo[maxgen]; double genymo[maxgen]; double genzmo[maxgen]; double gendmo[maxgen]; /* Detector hit data */ int hitnum; int hitprt[maxhit]; double hitxpo[maxhit]; double hitypo[maxhit]; double hitzpo[maxhit]; /* Track data */ int trknum; int trkpnt[maxtrk]; int trkprt[maxtrk]; double trktpo[maxtrk][maxpnt]; double trkxpo[maxtrk][maxpnt]; double trkypo[maxtrk][maxpnt]; double trkzpo[maxtrk][maxpnt]; double trkemo[maxtrk][maxpnt]; double trkxmo[maxtrk][maxpnt]; double trkymo[maxtrk][maxpnt]; double trkzmo[maxtrk][maxpnt]; /* Particle data */ int prtnum[maxprt]; int prtcol[maxprt]; char prtnam[maxprt][maxnam]; double prtchr[maxprt]; double prtmas[maxprt]; double prtlif[maxprt]; int prtmdn[maxprt]; int prtmdp[maxprt][maxmdn]; double prtmdb[maxprt][maxmdn]; /* Material data */ int matnum[maxmat]; char matnam[maxmat][maxnam]; double matatm[maxmat]; double matatn[maxmat]; double matden[maxmat]; double matrad[maxmat]; /* Object data */ int objnum[maxobj]; int objcol[maxobj]; int objmat[maxobj]; int objdet[maxobj]; char objbty[maxobj]; double objbmg[maxobj]; char objnam[maxobj][maxnam]; char objshp[maxobj][maxnam]; double objdim[maxobj][maxdim]; /* Color data */ double drwcol[maxcol][4]; /* Physical constants */ double kb=0.307075; /* Bethe-Bloch constant (MeV*cm2/g) */ double me=0.51099906; /* electron mass (MeV) */ double pi=3.141592653589793; /* pi */ main(int argc,char **argv) { int i; double a,x,y; /* Initialize arrays */ trknum = 0; hitnum = 0; for(i=0;i