static void infor(void) { static int first=1; scrcolor(FGmain,BGmain); clrbox(1,1,53,4); goto_xy(4,3); scrcolor(Red,BGmain); print("(sub)Process: "); scrcolor(FGmain,BGmain); print("%s",Process); goto_xy(4,4); scrcolor(Red,BGmain); print("Monte Carlo session: "); scrcolor(Black,BGmain); print("%d",nSess); if(first) { goto_xy(1,7); scrcolor(Blue, BGmain); print(" #IT %s Error[%%] nCall Eff. chi^2", nin_int == 2? "Cross section[pb]":" Width[GeV] "); } if(integral.old) { print("(continue)"); if(integral.n_it>0 && first) { goto_xy(1,8);scrcolor(FGmain, BGmain); integral.In=integral.s1/integral.n_it; integral.dI=sqrt(integral.s0)/integral.n_it; if(integral.n_it<=1 || integral.s0==0 ) integral.khi2=0; else integral.khi2=(integral.s2-integral.s1*integral.s1/integral.n_it)*integral.n_it/(integral.n_it-1)/fabs(integral.s0); print(" < > %12.4E %10.2E %8d %7.7s %-7.1G" , integral.In, fabs(integral.In)? 100*integral.dI/(double)fabs(integral.In):0., integral.nCallTot, effInfo(),integral.khi2); } } else { print("(begin)"); scrcolor(FGmain,BGmain); clrbox(1,8,53,maxRow()-2); } first=0; }
static void decay12information(double totwidth,int Branchings) { clrbox(1,1,53,16); clrbox(1,16, maxRow(), maxCol()); goto_xy(5,3);scrcolor(Red,BGmain); print(" Decay "); scrcolor(Blue,BGmain);print("%s -> 2*x ",inParticle); goto_xy(1,4); scrcolor(Red,BGmain); print(" Total width : "); scrcolor(FGmain,BGmain); if(err_code) {print(" incorrect "); return;} print("%.3E GeV ",totwidth); if (totwidth > 0. ) { int i,xcount = 31, ycount = 15; int * sort= (int*) malloc(sizeof(int)*nprc_int); for(i=0;i<nprc_int;i++) sort[i]=i; for(i=0;i<nprc_int-1;) { if(widths[sort[i]] < widths[sort[i+1]]) { int buff=sort[i]; sort[i]=sort[i+1]; sort[i+1]=buff; if (i!=0) i--; } else i++; } goto_xy(1,6); scrcolor(Red,BGmain); if(Branchings) print(" Modes and fractions :"); else print(" Partial widths [Gev] :"); for(i=0,xcount=5,ycount=7;i<nprc_int;i++,ycount++) if(widths[sort[i]]>0) { if(ycount >= maxRow()) { ycount =16; xcount += 25; if(xcount > maxCol()-20) break; if(xcount >30) ycount=16; else ycount=7; } goto_xy(xcount,ycount); scrcolor(Blue,BGmain); print("%3s ",pinf_int(sort[i]+1,2,NULL,NULL)); print("%3s - ", pinf_int(sort[i]+1,3,NULL,NULL)); scrcolor(FGmain,BGmain); if(Branchings) print("%8.2E%%", 100*widths[sort[i]]/totwidth); else print("%9.3E", widths[sort[i]]); } free(sort); } scrcolor(FGmain,BGmain); }
void main(int argc,char *argv[]) { if (initmouse()==FALSE) { errorbox("GameMaker requires a Microsoft","compatible mouse! (Q)uit",30); exit(quit); } #ifndef DEBUG Palette(5,10,10,10); Palette(7,16,16,16); #endif mouclearbut(); randomize(); #ifdef CHKREG if ((argc >= 2)&&(strcmpi(argv[1],"REGISTER") == 0)) regi(); firststart(); #else gmmain(); #endif Palette(5,42,0,42); Palette(7,42,42,42); clrbox(0,0,79,24,7); exit(quit); }
void main(void) { register int j; char name[31]; // user name char num[12]; // serial number string for f f char cnum[12]; // check sum string for fake file FILE *fp; char done=0; clrbox(0,1,79,23,1); drawbox (27,5,51,7,1,2,8); writestr(29,6,2,"GM "GMVER" Registration"); name[0]=0; num[0]=0; cnum[0]=0; if ((!qwindow(5,14,30,"Enter your name (Exactly as on card): ",name))||(name[0]==0)) { errorbox("ABORTING REGISTRATION","(O)k"); done = 1; } else // zero the rest of the name. { j=0; while (name[j]!=0) j++; while (j<30) { name[j]=0; j++; } name[29]=0; } if (!done) { unsigned long int temp=GetMoreData(); if (temp==0) { errorbox("Please run this program from","your GameMaker directory."); done=TRUE; } sprintf(num,"%lu",temp); } if (!done) { if ((!qwindow(13,14,12,"Enter registration number from card: ",cnum))||(cnum[0] == 0)) { errorbox("ABORTING REGISTRATION","(O)k"); done = 1; } } if (!done) { fp=fopen("playgame.reg","wt"); fprintf(fp,"%s\n%s\n%s\n",name,num,cnum); fclose(fp); // errorbox("REGISTRATION COMPLETE","Hit any key to start GM"); TextMode(); printf("Registration Finished\n"); } }
/* * Record a death at (i,j) */ void death(int i, int j) { char *lp; if (i < 1 || NLIFE - 1 <= i || j < 1 || NLIFE - 1 <= j || !(life[i][j] & 1)) return; lp = &life[i][j]; --*lp; --row[i]; --col[j]; neighbours(-); clrbox(i, j); }
static void regi(void) { char ErrorMsg[]="Aborting Registration"; char Emsg1[] ="(O)k"; register int j; char name[31]; // user name char num[12]; // serial number string for f f char cnum[12]; // check sum string for fake file FILE *fp; unsigned long int temp; clrbox(0,1,79,23,1); drawbox (27,5,51,7,1,2,8); writestr(29,6,2,"GM V1.06 Registration"); writestr(0,0,C(15,4),GMTOPBAR); writestr(0,1,C(15,1)," Play Design Utilities About Quit Help "); name[0]=0; num[0]=0; cnum[0]=0; if ((!qwindow(5,14,30,"Enter your name (Exactly as on card): ",name))||(name[0]==0)) { errorbox(ErrorMsg,Emsg1); return; } else // zero the rest of the name. { j=0; while (name[j]!=0) j++; while (j<30) { name[j]=0; j++; } name[29]=0; } temp=GetMoreData(); sprintf(num,"%lu",temp); if ((!qwindow(13,14,12,"Enter registration number from card: ",cnum))||(cnum[0] == 0)) { errorbox(ErrorMsg,Emsg1); return; } fp=fopen("playgame.reg","wt"); fprintf(fp,"%s\n%s\n%s\n",name,num,cnum); fclose(fp); errorbox("REGISTRATION COMPLETE","Hit any key to start GM"); }
static void firststart(void) { unsigned long int num[2]; char registered; register int j; clrbox(0,0,79,23,0); if ( (registered = GetRegistData( UserName, &(num[0]) )) == 0 ) { errorbox("Missing File: PLAYGAME.REG","(Q)uit"); } else { num[1] = GetMoreData(); if (num[0]!=num[1]) errorbox("Bad Registration File!","(Q)uit"); else { if (UserName[0]==0) sprintf(UserName,"%lu",num[0]); if (registered==2) manualcheck(1); else manualcheck(0); } } }
void mk_reduceprograms(void) { int ndel, ncalc, nrest, i; long nrecord, naxu; csdiagram csd; unsigned ncalctot; shortstr txt; hlpcsptr gstlist, c; vcsect vcs_copy; s_listptr d_facts, df; rmptr t_fact; goto_xy(1,21); scrcolor(Yellow,Blue); print(" REDUCE code generation \n"); scrcolor(Red,BGmain); print(" Generated........\n"); print(" current diagram :\n"); scrcolor(Yellow,Blue); print(" Press Esc to halt REDUCE codes generation "); scrcolor(FGmain,BGmain); diagrq=fopen(DIAGRQ_NAME,"rb"); ncalctot = 0; menuq=fopen(MENUQ_NAME,"rb"); for(nsub=1;nsub<=subproc_sq;nsub++) { rd_menu(2,nsub,txt,&ndel,&ncalc,&nrest,&nrecord); fseek(diagrq,nrecord*sizeof(csdiagram),SEEK_SET); naxu = ndel + ncalc + nrest; for (ndiagr = 1; ndiagr <= naxu; ndiagr++) { goto_xy(20,22); print("%u",ncalctot); goto_xy(20,23); print("%u",ndiagr); clr_eol(); FREAD1(csd,diagrq); if (csd.status != -1) { outFileOpen("%sresults%cp%d_%d.red",pathtouser,f_slash,nsub,ndiagr); writeLabel('%'); writeF("%%\n"); transfdiagr(&csd,&vcs); cwtarg(&vcs); if (vcs.clrnum == 0) { writeF( "%%------- Zero color factor --------\n"); writeF("totFactor_:=0$\n"); writeF("numerator_:=0$\n"); writeF("denominator_:=1$\n"); } else { generateghosts(&vcs,&gstlist); if (gstlist == NULL) { writeF( "%%------- non-existent diagram --------\n"); writeF("totFactor_:=0$\n"); writeF("numerator_:=0$\n"); writeF("denominator_:=1$\n"); } else { goto_xy(40,23); print("(%% %4d subdiagrams)",gstlist->maxnum); writeF("%% The total number of diagrams %d\n",gstlist->maxnum); preperdiagram(); head(); emitfactors(); diagramsrfactors(gstlist,&d_facts,&t_fact); writeF("totFactor_:=%s$\n",rmonomtxt(*t_fact)); writeF("totFactor_:=" "totFactor_*SymmFact*AverFact*FermFact*ColorFact$\n"); clrvm(t_fact->n.v); clrvm(t_fact->d.v); free(t_fact); writesubst(); writeF("numerator_:=0$\n"); c = gstlist; df = d_facts; vcs_copy = vcs; while (c != NULL) { coloringvcs(c); writeF("%% diagram number = %d\n", c->num); DiagramToOutFile(&vcs,1,'%'); {int k; int sgn=c->sgn; for(k=0;k<vcs.sizet;k++) sgn*=vertexes[k].lgrnptr->factor; writeF(" GhostFact:=%d$\n",sgn); } findReversVert(); attachvertexes(); emitreducecode(); writeF(" numerator_:=numerator_ +(%s)*GhostFact*Vrt_1 $\n", smonomtxt(df->monom)); writeF(" Clear Vrt_1,GhostFact$\n"); writeF("%%\n"); vcs = vcs_copy; c = c->next; df = df->next; } eraseslist(d_facts); eraseghosts(gstlist); vcs = vcs_copy; emitdenoms(); writeF(" Clear p%d",nin + nout + 1); for (i = nin + nout + 2; i <= 12; i++) writeF(",p%d",i); writeF("$\n"); writeF("%%\n"); } } writeF("End$\n"); outFileClose(); --(nrest); ++(ncalctot); if (escpressed()) goto exi; } } } exi: fclose(diagrq); fclose(menuq); clrbox(1,21,70,24); }
int generate(void) { char *lp; char **p, **addp, **delp; int i, j, j0 = NLIFE, j1 = -1; int drow[NLIFE], dcol[NLIFE]; for (j = 1; j != NLIFE - 1; j++) { drow[j] = dcol[j] = 0; if (interest(col, j)) { if (j < j0) j0 = j; if (j1 < j) j1 = j; } } addp = adjust; delp = &adjust[NADJUST]; for (i = 1; i != NLIFE - 1; i++) if (interest(row, i)) { for (j = j0, lp = &life[i][j0]; j <= j1; j++, lp++) switch (action[*lp]) { case 'b': ++*lp; ++drow[i]; ++dcol[j]; setbox(i, j); *addp++ = lp; break; case 'd': --*lp; --drow[i]; --dcol[j]; clrbox(i, j); *--delp = lp; break; } } if (addp == adjust && delp == &adjust[NADJUST]) return 0; if (delp < addp) sysfatal("Out of space (delp < addp)"); p = adjust; while (p != addp) { lp = *p++; neighbours(+); } p = delp; while (p != &adjust[NADJUST]) { lp = *p++; neighbours(-); } for (i = 1; i != NLIFE - 1; i++) { row[i] += drow[i]; col[i] += dcol[i]; } if (row[1] || row[NLIFE-2] || col[1] || col[NLIFE-2]) centerlife(); return 1; }
void decay12(void) { int i, k,L; void * pscr=NULL; char * mlist; static int Branch=1; widths=(double*)malloc(sizeof(double)*nprc_int); for(i=1;i<=nvar_int;i++) { if(!strcmp(varName_int[i],"Q")) Q=va_int+i; else if(!strcmp(varName_int[i],"GG")) GG=va_int+i; } if(GG)for(i=1;i<=nvar_int+nfunc_int;i++) if(!strcmp(varName_int[i],"SC")){ SC=va_int+i; break;} inmenutxt(&mlist); L=mlist[0]; sscanf(mlist+1,"%s",inParticle); for(k=1;k;) { char strmen[]="\030" " Incoming particle " " Show Branchings " " QCD Scale Q= Free " " Model parameters " " Constraints " " Parameter dependence " " Les Houches output "; clrbox(1,13, maxCol(), maxRow()); nsubSel=0; decay12information(calcwidth12(),Branch); if(EffQmass) improveStr(strmen,"Free ","M1"); if(!Branch) improveStr(strmen,"Branchings","Partial widths"); menu1(54,4,"",strmen,"n_12_*",&pscr,&k); switch (k) { case 1: { if(strlen(mlist)>L+2) { void * pscr2=NULL; int k=1; menu1(56,5,"",mlist,"",&pscr2,&k); if(k) sscanf(mlist+(k-1)*L+1,"%s",inParticle); put_text(&pscr2); } } break; case 2: Branch=!Branch; break; case 3: EffQmass=!EffQmass; break; case 4: change_parameter(54,8,0); break; case 5: show_depend(54,8); break; case 6: { char proc[20]; char dimInfo[20]="Width [GeV]"; void * pscr=selectChan(); if(!pscr) break; if(nsubSel==0) sprintf(proc,"%s -> 2*x",inParticle); else { sprintf(proc," BR(%s -> %s %s)",inParticle, pinf_int(nsubSel,2,NULL,NULL), pinf_int(nsubSel,3,NULL,NULL)); dimInfo[0]=0; } paramdependence( calcwidth12,proc,dimInfo); put_text(&pscr); } break; case 7: writeLesHdecays(); break; } } free(widths); free(mlist); clrbox(1,1,53,16); clrbox(1,16,maxCol(),maxRow()); }
int main(int argc,char** argv) { /*=================================== 0 - First start. 1 - Model menu. 2 - Enter process menu. 3 - Feynman diagrams menu; squaring. 4 - Squared diagram menu; symbolic calculation. 5 - Write results; new process. 10 -Restart symbolic calculations ==========================================================*/ /* 0-Start; 1-Restart; 2-Heap Error,3-Edit Model,4-UserBreak */ void *pscr1=NULL,*pscr2=NULL,*pscr3=NULL,*pscr4=NULL,*pscr5=NULL; int k1=1,k2=1,k3=1,k4=1,k5=1; int n; int pid=0; char LOCKtxt[]="Directory 'results/' contains the .lock file created by n_calchep.\n" "To continue you may a)Close the n_calchep session, or b)Rename 'results/',\n"; blind=0; strcpy(pathtocomphep,argv[0]); for(n=strlen(pathtocomphep)-1; n && pathtocomphep[n]!=f_slash; n--); pathtocomphep[n-3]=0; for ( n=1;n<argc;n++) { if (strcmp(argv[n],"-blind")==0 && n<argc-1 ) { blind=1; inkeyString=argv[++n]; } if (strcmp(argv[n],"+blind")==0 ) blind=2; } if(!writeLockFile(".lock")) { fprintf(stderr,"locked by other s_calchep. See .lock file\n"); exit(100); } strcpy(pathtouser,""); sprintf(pathtohelp,"%shelp%c",pathtocomphep,f_slash); outputDir="results/"; { char * icon=(char *) malloc(strlen(pathtocomphep)+10); int err; sprintf(icon,"%sicon",pathtocomphep); err=start1("CalcHEP/symb",icon,"calchep.ini",&xw_error); if(err && blind==0) { printf("Error:You have launched interactive session for version compiled without X11 library.\n"); printf("Options: a) Use blind session; b) Recompile CalcHEP with X11\n"); exit(66); } free(icon); } fillModelMenu(); f3_key[0]=f3_key_prog; f3_mess[0]="Model"; f3_key[1]=f4_key_prog; f3_mess[1]="Diagrams"; f3_key[2]=f5_key_prog; f3_mess[2]="Switches"; f3_key[3]=f6_key_prog; f3_mess[3]="Results"; f3_mess[4]="Del"; f3_mess[5]="UnDel"; f3_key[6]=f9_key_prog; f3_mess[6]="Ref"; f3_key[7]=f10_key_prog; f3_mess[7]="Quit"; restoreent(&menulevel); if(!blind && menulevel<2) cheplabel(); switch (menulevel) { case 10: case 6: case 5: case 4: case 3: readModelFiles("./models",n_model); modelinfo(); loadModel(0,forceUG); processinfo(); diagramsinfo(); case 2: k1=n_model; case 1: break; } switch (menulevel) { case 2: menuhelp(); goto label_20; case 3: goto label_31; case 4: goto label_40; case 5: goto label_50; case 6: case 10: goto restart2; } label_10: /* Menu2(ModelMenu): */ f3_key[0]=NULL; /*models*/ f3_key[1]=NULL; /*diagrams*/ menulevel = 1; forceUG=0; menuhelp(); for(;;) { showheap(); k1=n_model; menu1(56,4,"",modelmenu,"s_1",&pscr1,&k1); n_model=k1; if(n_model == 0) { if( mess_y_n(56,4,"Quit session")) { saveent(menulevel); goto exi; } } else if(n_model == maxmodel+1) { clrbox(1,4,55,18); makenewmodel(); menuhelp(); } else if (n_model > 0) { put_text(&pscr1); goto label_20; } } label_20: /* Menu3:Enter Process */ f3_key[0]=NULL; f3_key[1]=NULL; menulevel = 2; saveent(menulevel); readModelFiles("./models",n_model); modelinfo(); k2 = 1; do { char strmen[]="\026" " Enter Process " " Force Unit.Gauge OFF " " Edit model " " Delete model "; if(forceUG)improveStr(strmen,"OFF","ON"); menu1(56,4,"",strmen,"s_2_*",&pscr2,&k2); switch (k2) { case 0: goto_xy(1,1); clr_eol(); goto label_10; case 2: forceUG=!forceUG; modelinfo(); break; case 3: editModel(1); break; case 4: if ( deletemodel(n_model) ) { goto_xy(1,1); clr_eol(); n_model=1; fillModelMenu(); goto label_10; } else readModelFiles("./models",n_model); } } while (k2 != 1); loadModel(0,forceUG); label_21: f3_key[0]=NULL; f3_key[1]=NULL; menulevel=2; errorcode=enter(); /* Enter a process */ newCodes=0; showheap(); if (errorcode) /* 'Esc' pressed */ { menuhelp(); goto label_20;} errorcode=construct(); /* unSquared diagrams */ if (errorcode) { if(blind) { printf("Processes of this type are absent\n"); sortie(111); } else { messanykey(5,22,"Processes of this type are absent"); clrbox(1,19,80,24); goto label_21; } } else if(!blind) { int dirStat=checkDir("results"); if(dirStat!=0) { messanykey( 10,10,"There are files in directory 'results/'.\n" "To continue you has to clean or rename this directory."); viewresults(); if(checkDir("results")!=0) goto label_21; } clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); goto label_31; } label_30: /* Menu4: Squaring,...*/ clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); label_31: f3_key[0]=f3_key_prog; f3_key[1]=NULL; menulevel=3; k3 = 1; do { menu1(56,4,"","\026" " View diagrams " /* " Amplitude calculation" */ " Squaring technique " " Write down processes ","s_squa_*",&pscr3,&k3); switch (k3) { case 0: clrbox(1,2,55,11); menuhelp(); goto label_20; case 1: viewfeyndiag(1); break; case 3: { FILE*f=fopen("results/list_prc.txt","w"); int k,ndel,ncalc,nrest; char process[100]; long recpos; menup=fopen(MENUP_NAME,"r"); for(k=1;;k++) { int err=rd_menu(1,k,process,&ndel,&ncalc,&nrest,&recpos); if(!err) break; trim(process); fprintf(f,"%s\n",process); } fclose(f); fclose(menup); messanykey(20,14,"See file 'results/list_prc.txt'"); } break; /* case 2: messanykey(10,10,"Not implemented yet"); Amplitudes(); */ } } while (k3 != 2); if (!squaring()) goto label_30; /* process is absent */ clear_tmp(); saveent(menulevel); restoreent(&menulevel); label_40: /* Menu5: View squared diagrams..... */ f3_key[0]=f3_key_prog; f3_key[1]=f4_key_prog; menulevel=4; clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); sq_diagramsinfo(); /* ???????? */ k4=1; saveent(menulevel); pscr4=NULL; for(;;) { int res; menu1(56,4,"","\026" " View squared diagrams" " Symbolic calculations" " Make&Launch n_calchep" " Make n_calchep " " REDUCE program " ,"s_calc_*",&pscr4,&k4); res=checkDir("results"); if(res==1) { int n_calchep_id=setLockFile("results/.lock"); if(n_calchep_id) unLockFile(n_calchep_id); else res=2; } switch (k4) { case 0: if (mess_y_n(50,3,"Return to previous menu?"))goto label_30; break; case 1: viewsqdiagr(); break; case 2: /* Compute all diagrams */ restart2: f3_key[0]=f3_key_prog; f3_key[1]=f4_key_prog; menulevel=4; calcallproc(); sq_diagramsinfo(); if(!continuetest()) break; showheap(); put_text(&pscr4); break; case 3: { static char keystr[12]="]{{[{"; if(res==2) messanykey(3,10,LOCKtxt); else inkeyString=keystr; } break; case 4: if(res==2) messanykey(3,10,LOCKtxt); else { char command[100]; FILE *f=fopen("results/EXTLIB","w"); fprintf(f,"EXTLIB=\"%s\"\nexport EXTLIB\n",EXTLIB); fclose(f); saveent(menulevel); { char command[100]; sprintf(command,"cd results; $CALCHEP/bin/make_VandP ../models %d",n_model); system(command); } finish(); sortie(22); } case 5: mk_reduceprograms(); break; } if(k4==2 && continuetest()) { put_text(&pscr4); break; } } label_50: k5=1; pscr5=NULL; menulevel=5; saveent(menulevel); for(;;) { int n_calchep_id; menu1(56,4,"","\026" " C code " " C-compiler " " Edit Linker " " REDUCE code " " MATHEMATICA code " " FORM code " " Enter new process " ,"s_out_*",&pscr5,&k5); if((k5==1||k5==2)&&pid) { int epid=waitpid(pid,NULL,WNOHANG); if(epid) pid=0; else { messanykey(3,10,"This option is frozen while n_calchep runs or is compiled"); continue; } } switch (k5) { case 0: goto label_40; break; case 1: c_prog(); newCodes=0; saveent(menulevel); break; case 2: if(newCodes) { c_prog(); newCodes=0; saveent(menulevel);} pid=fork(); if(pid==0) { char * command; n_calchep_id=setLockFile("results/.lock"); if(n_calchep_id) { command=(char*)malloc(strlen(pathtocomphep)+strlen(EXTLIB)+100); sprintf(command,"EXTLIB=\"%s\"\n" "export EXTLIB\n" "cd results\n" "xterm -e %s/make__n_calchep %d", EXTLIB,pathtocomphep,n_model); system(command); sprintf(command,"cd results; ./n_calchep"); unLockFile(n_calchep_id); system(command); free(command); } exit(0); } break; case 3: if(edittable(1,1,&modelTab[4],1," ",0)) { char fName[STRSIZ]; readEXTLIB(); sprintf(fName,"%smodels%c%s%d.mdl",pathtouser,f_slash,mdFls[4],n_model); writetable( &modelTab[4],fName); } break; case 4: makeReduceOutput(); break; case 5: makeMathOutput(); break; case 6: makeFormOutput(); break; case 7: put_text(&pscr5); clrbox(1,2,55,11); menuhelp(); goto label_20; } } exi: finish(); sortie(0); return 0; }
int main(int argc,char** argv) { /*=================================== 0 - First start. 1 - Model menu. 2 - Enter process menu. 3 - Feynman diagrams menu; squaring. 4 - Squared diagram menu; symbolic calculation. 5 - Write results; new process. 10 -Restart symbolic calculations ==========================================================*/ /* 0-Start; 1-Restart; 2-Heap Error,3-Edit Model,4-UserBreak */ void *pscr1=NULL,*pscr2=NULL,*pscr3=NULL,*pscr4=NULL,*pscr5=NULL; int k1=1,k2=1,k3=1,k4=1,k5=1; int n; int pid=0; char LOCKtxt[]="Directory 'results/' contains the .lock file created by n_calchep.\n" "To continue you may a)Close the n_calchep session, or b)Rename 'results/',\n"; blind=0; strcpy(pathtocalchep,argv[0]); for(n=strlen(pathtocalchep)-1; n && pathtocalchep[n]!=f_slash; n--); pathtocalchep[n-3]=0; for ( n=1;n<argc;n++) { if (strcmp(argv[n],"-blind")==0 && n<argc-1 ) { blind=1; inkeyString=argv[++n]; } if (strcmp(argv[n],"+blind")==0 ) blind=2; if (strcmp(argv[n],"--version")==0 ) { printf("%s\n", VERSION_); exit(0);} } if(!writeLockFile(".lock")) { fprintf(stderr,"locked by other s_calchep. See .lock file\n"); exit(100); } strcpy(pathtouser,""); sprintf(pathtohelp,"%shelp%c",pathtocalchep,f_slash); outputDir="results/"; { char * icon=(char *) malloc(strlen(pathtocalchep)+20); char title[30]; int err; sprintf(icon,"%s/include/icon",pathtocalchep); sprintf(title,"CalcHEP_%s/symb", VERSION); err=start1(title,icon,"calchep.ini",&xw_error); if(err && blind==0) { printf("Error:You have launched interactive session for version compiled without X11 library.\n"); printf(" Presumably X11 development package is not installed in your computer.\n"); printf(" In this case directory /usr/include/X11/ is empty.\n"); printf("Options: a) Use blind session; b) Update Linux and recompile CalcHEP \n"); printf("Name of needed package\n"); printf(" libX11-devel Fedora/Scientific Linux/CYGWIN/Darwin(MAC)\n"); printf(" libX11-dev Ubuntu/Debian\n"); printf(" xorg-x11-devel SUSE\n"); exit(66); } free(icon); } fillModelMenu(); f3_key[0]=f3_key_prog; f3_mess[0]="Model"; f3_key[1]=f4_key_prog; f3_mess[1]="Diagrams"; f3_key[2]=f5_key_prog; f3_mess[2]="Switches"; f3_key[3]=f6_key_prog; f3_mess[3]="Results"; f3_mess[4]="Del"; f3_mess[5]="UnDel"; f3_key[6]=f9_key_prog; f3_mess[6]="Ref"; f3_key[7]=f10_key_prog; f3_mess[7]="Quit"; restoreent(&menulevel); if(!blind && menulevel<2) cheplabel(); switch (menulevel) { case 10: case 6: case 5: case 4: case 3: readModelFiles("./models",n_model); modelinfo(); loadModel(0,forceUG); processinfo(); diagramsinfo(); k1=n_model; break; case 2: k1=n_model; readModelFiles("./models",n_model); break; } switch (menulevel) { case 2: menuhelp(); goto label_20; case 3: goto label_31; case 4: goto label_40; case 5: goto label_50; case 6: case 10: goto restart2; } label_10: /* Menu2(ModelMenu): */ f3_key[0]=NULL; /*models*/ f3_key[1]=NULL; /*diagrams*/ menulevel = 1; forceUG=0; menuhelp(); for(;;) { showheap(); k1=n_model; menu1(56,4,"",modelmenu,"s_1",&pscr1,&k1); if(k1 == 0) { if( mess_y_n(56,4,"Quit session")) {n_model=0; saveent(menulevel); goto exi; } } else if(k1 == maxmodel+1) { clrbox(1,4,55,18); makenewmodel(); menuhelp(); } else if (k1 > 0) { int err=0; put_text(&pscr1); if(k1!=n_model || ldModelStatus==0) { err=readModelFiles("./models",k1);} n_model=k1; if(err){ if(blind) sortie(133); else goto label_10;} else goto label_20; } } label_20: /* Menu3:Enter Process */ f3_key[0]=NULL; f3_key[1]=NULL; menulevel = 2; saveent(menulevel); modelinfo(); k2 = 1; do { char strmen[]="\026" " Enter Process " " Force Unit.Gauge= OFF" " Edit model " " Numerical Evaluation " "======================" " Delete model "; if(forceUG)improveStr(strmen,"OFF","ON"); menu1(56,4,"",strmen,"s_2_*",&pscr2,&k2); switch (k2) { case 0: goto_xy(1,1); clr_eol(); goto label_10; case 2: forceUG=!forceUG; modelinfo(); break; case 3: editModel(1); break; case 4: numcheck(); case 5: break; case 6: if(deletemodel(n_model)) { goto_xy(1,1); clr_eol(); n_model=1; ldModelStatus=0; fillModelMenu(); goto label_10; } } } while (k2 != 1); if(!loadModel(0,forceUG)) goto label_20; label_21: f3_key[0]=NULL; f3_key[1]=NULL; menulevel=2; checkAuxDir(n_model); errorcode=enter(); /* Enter a process */ newCodes=0; showheap(); if (errorcode) /* 'Esc' pressed */ { menuhelp(); goto label_20;} errorcode=construct(); /* unSquared diagrams */ if (errorcode) { if(blind) { printf("Processes of this type are absent\n"); sortie(111); } else { messanykey(5,22,"Processes of this type are absent"); clrbox(1,19,80,24); goto label_21; } } else if(!blind) { int dirStat=checkDir("results"); if(dirStat!=0) { messanykey( 10,10,"There are files in directory 'results/'.\n" "To continue you has to clean or rename this directory."); viewresults(); if(checkDir("results")!=0) goto label_21; } clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); goto label_31; } label_30: /* Menu4: Squaring,...*/ clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); label_31: f3_key[0]=f3_key_prog; f3_key[1]=NULL; menulevel=3; k3 = 1; do { menu1(56,4,"","\026" " View diagrams " /* " Amplitude calculation" */ " Square diagrams " " Write down processes ","s_squa_*",&pscr3,&k3); switch (k3) { case 0: clrbox(1,2,55,11); menuhelp(); goto label_20; case 1: viewfeyndiag(1); break; case 3: { FILE*f=fopen("results/list_prc.txt","w"); int k,ndel,ncalc,nrest; char process[100]; long recpos; menup=fopen(MENUP_NAME,"r"); for(k=1;;k++) { int err=rd_menu(1,k,process,&ndel,&ncalc,&nrest,&recpos); if(!err) break; trim(process); fprintf(f,"%s\n",process); } fclose(f); fclose(menup); messanykey(20,14,"See file 'results/list_prc.txt'"); } break; /* case 2: messanykey(10,10,"Not implemented yet"); Amplitudes(); */ } } while (k3 != 2); if (!squaring()) goto label_30; /* process is absent */ clear_tmp(); saveent(menulevel); restoreent(&menulevel); label_40: /* Menu5: View squared diagrams..... */ f3_key[0]=f3_key_prog; f3_key[1]=f4_key_prog; menulevel=4; clr_scr(FGmain,BGmain); modelinfo(); processinfo(); diagramsinfo(); sq_diagramsinfo(); /* ???????? */ k4=1; saveent(menulevel); pscr4=NULL; for(;;) { int res; menu1(56,4,"","\026" " View squared diagrams" " Symbolic calculations" " Make&Launch n_calchep" " Make n_calchep " " REDUCE program " ,"s_calc_*",&pscr4,&k4); res=checkDir("results"); if(res==1) { int n_calchep_id=setLockFile("results/.lock"); if(n_calchep_id) unLockFile(n_calchep_id); else res=2; } switch (k4) { case 0: if (mess_y_n(50,3,"Return to previous menu?"))goto label_30; break; case 1: viewsqdiagr(); break; case 2: /* Compute all diagrams */ restart2: f3_key[0]=f3_key_prog; f3_key[1]=f4_key_prog; menulevel=4; if(!nPROCSS ) calcallproc(); else { int *pids=malloc(sizeof(int)*nPROCSS); int *pipes=malloc(2*sizeof(int)*nPROCSS); int **qd=malloc(sizeof(int*)*nPROCSS); int totD=sqDiagList(qd, nPROCSS); int totC,nProc; int k; fflush(NULL); for(k=0;k<nPROCSS;k++) { int* kpipe=pipes+2*k; pipe(kpipe); pids[k]=fork(); if(pids[k]==0) { close(kpipe[0]); calcWithFork(k,qd[k],kpipe[1]); exit(0); } } for(k=0;k<nPROCSS;k++) close(pipes[2*k+1]); infoLine(0.); for(nProc=nPROCSS,totC=0;nProc;) { int one; int err; nProc=0; for(k=0;k<nPROCSS;k++) if(pids[k]) { if(waitpid(pids[k],NULL,WNOHANG)==0) { nProc++; if(read(pipes[2*k],&one,sizeof(int)))totC+=one; } else { for(;read(pipes[2*k],&one,sizeof(int))>0;) totC+=one; pids[k]=0; } } if(infoLine((double)totC/(double)totD)) for(k=0;k<nPROCSS;k++) if(pids[k]) kill(pids[k],SIGUSR1); } infoLine(2); for(k=0;k<nPROCSS;k++) { char ctlgName[100]; char command[200]; sprintf(ctlgName,"%s_%d",CATALOG_NAME,k); if(access(ctlgName,R_OK)==0) { sprintf(command," cat %s >> %s", ctlgName,CATALOG_NAME); system(command); unlink(ctlgName); } } if(totC) newCodes=1; updateMenuQ(); for(k=0;k<nPROCSS;k++) close(pipes[2*k]); free(pids); free(pipes); for(k=0;k<nPROCSS;k++) free(qd[k]); free(qd); } sq_diagramsinfo(); if(!continuetest()) break; showheap(); put_text(&pscr4); break; case 3: { static char keystr[12]="]{{[{"; if(res==2) messanykey(3,10,LOCKtxt); else inkeyString=keystr; } break; case 4: if(res==2) messanykey(3,10,LOCKtxt); else { char command[100]; saveent(menulevel); chdir("results"); makeVandP(0,"../models",n_model,2,pathtocalchep); finish(); sortie(22); } case 5: mk_reduceprograms(); break; } if(k4==2 && continuetest()) { put_text(&pscr4); break; } } label_50: k5=1; pscr5=NULL; menulevel=5; saveent(menulevel); sq_diagramsinfo(); for(;;) { int n_calchep_id; menu1(56,4,"","\026" " C code " " C-compiler " " Edit Linker " " REDUCE code " " MATHEMATICA code " " FORM code " " Enter new process " ,"s_out_*",&pscr5,&k5); if((k5==1||k5==2)&&pid) { int epid=waitpid(pid,NULL,WNOHANG); if(epid) pid=0; else { messanykey(3,10,"This option is frozen while n_calchep runs or is compiled"); continue; } } switch (k5) { case 0: goto label_40; break; case 1: c_prog(); newCodes=0; saveent(menulevel); break; case 2: if(newCodes) { c_prog(); newCodes=0; saveent(menulevel);} n_calchep_id=setLockFile("results/.lock"); if(n_calchep_id) { if(nPROCSS) { chdir("results"); makeVandP(0,"../models",n_model,2,pathtocalchep); pCompile(); if(access("./n_calchep",X_OK)==0) { fflush(NULL); pid=fork(); if(pid==0) { system("./n_calchep"); exit(0); } } else messanykey(15,15,"n_calchep is not generated"); chdir("../"); } else { fflush(NULL); pid=fork(); if(pid==0) { if(chdir("results")==0) { char*command=malloc(100+strlen(pathtocalchep)); makeVandP(0,"../models",n_model,2,pathtocalchep); sprintf(command,"xterm -e %s/sbin/make__n_calchep %d", pathtocalchep,n_model); system(command); free(command); system("./n_calchep"); } exit(0); } } unLockFile(n_calchep_id); } break; case 3: if(edittable(1,1,&modelTab[4],1," ",0)) { char fName[STRSIZ]; sprintf(fName,"%smodels%c%s%d.mdl",pathtouser,f_slash,mdFls[4],n_model); writetable( &modelTab[4],fName); } break; case 4: makeReduceOutput(); break; case 5: makeMathOutput(); break; case 6: makeFormOutput(); break; case 7: put_text(&pscr5); clrbox(1,2,55,11); menuhelp(); goto label_20; } } exi: finish(); sortie(0); return 0; }
static void prtcllist(int key) { char fullname[STRSIZ]; char hlp[60]; char p1[60], p2[60]; int i, j, pnum; linelist ln; int tabMax,tabSz; static int nTot,nFirst; tabMax=ycons -7; if (key==0) { scrcolor(FGmain,BGmain); for (i = 2; i <= 24; i++) { goto_xy(1,i); clr_eol(); } goto_xy(14,3); scrcolor(Blue,BGmain); print("List of particles (antiparticles)"); nTot=0; nFirst=1; } else { if (nTot <= 3 *tabMax ) return; switch (key) { case KB_DOWN : nFirst+=3; break; case KB_UP : nFirst-=3; break; case KB_PAGED: nFirst +=3*tabMax; break; case KB_PAGEU: nFirst -=3*tabMax; break; } if (nFirst <1) nFirst=1; if (nTot-nFirst+3<3*tabMax ) nFirst=1+3*((nTot+2)/3) -3*tabMax; clrbox(1,4,79,5+tabMax); } goto_xy(3,5); scrcolor(FGmain,BGmain); for(i=0,ln=prtcls_tab.strings; ln; ln=ln->next ) { sscanf(ln->line,"%[^|]%*c%[^|]%*c%[^|]%*c%*[^|]%*c%*[^|]%*c%*[^|]%*c%*[^|]%*c%*[^|]%*c%[^|]", fullname,p1,p2,hlp); trim(p1); locateinbase(p1,&pnum); trim(hlp); if (prtclbase[pnum-1].top != NULL && strcmp(hlp,"*") != 0) { i++; if (i>=nFirst && (i-nFirst)/3 <tabMax ) { print("%s",p1); if (strcmp(p1,p2) == 0) print(" "); else print("(%s)",p2); trim(fullname); print("- %s",fullname); j = i % 3; if (j == 0) goto_xy(3,where_y() + 1); else goto_xy(3 + 26 * j,where_y()); } } } nTot=i; tabSz=MIN((nTot+2)/3,tabMax); chepbox(1,4,79,5+tabSz); if (nFirst >1 ) { goto_xy(72,4); print("PgUp"); } if (nFirst+3*tabSz <= nTot ) { goto_xy(72,5+tabMax); print("PgDn"); } scrcolor(FGmain,BGmain); }
int enter(void) { int i, y0,scat; int redres; char ** items=NULL; char * errpos=NULL; char * arrpos=NULL; int curh=0; prtcllist(0); scrcolor(Red,BGmain); y0 = ycons; errTxt=NULL; label_1: if(y0<maxRow()) y0++; for(;y0>ycons;y0--){goto_xy(1,y0); clr_eol();} if(arrpos) strncpy(arrpos,"->",2); redres=input(y0,"s_ent_1", "Enter process: ",processch,errpos?errpos-processch+1:1,SSTRLEN); switch (redres) { case KB_F1: /* Help */ show_help("s_ent_1"); goto label_1; case KB_ESC: clrbox(1,2,maxCol(),24); return 1; } /* Case */ arrpos=strstr(processch,"->"); if(arrpos) strncpy(arrpos,", ",2); else { errTxt="'->' is absent "; goto label_1; } if( strchr(processch,',')<arrpos ) scat=1; else scat=0; if(items) free(items); items=stritems(" ,",processch); for(i=0,nin=0,nout=0,n_x=0,curh=0; items[i]; i++) { char name[100]; sscanf(items[i],"%[^, ]", name); if(strlen(name)>7) {errTxt="Too long name"; break;} if(strlen(name)==0){errTxt="Empty item"; break;} if(items[i]>arrpos && strlen(name) == 3 && name[1] == '*' && (name[2] == 'X' || name[2] == 'x') && isdigit(name[0])) {n_x += name[0]-'0'; nout +=name[0]-'0';} else { if(curh==MAXINOUT-1){errTxt="Too many particles"; break;} if(items[i]>arrpos) nout++; else nin++; if(nin>2){errTxt="Too many incoming particles"; break;} if(enter_h(&y0,name,curh,scat)) break; curh++; } } errpos=items[i]; free(items); items=NULL; if(errpos && !errTxt) { sprintf(err_Txt,"wrong definition of %d-th particle",i+1); errTxt=err_Txt; } if(errTxt) goto label_1; if(nout<2) { errTxt="The number of outgoing particles should exceed 1"; goto label_1; } if(nin<1) { errTxt="Incoming particle(s) is not defined"; goto label_1; } if(errpos||nin+nout>MAXINOUT) {if(!errTxt) errTxt=errtxt; goto label_1; } y0++; if(y0>=maxRow()-1) {y0=maxRow()-1; goto_xy(1,y0); clr_eol();} if(restrict_p(y0,1, "Exclude diagrams with ","s_ent_4",limpch,liminsp) ) goto label_1; for(nilprtcl(LimQ), i=0;i<liminsp[i].who;i++) if(liminsp[i].how <0) { liminsp[i].how =-liminsp[i].how; addlim(LimQ,liminsp[i].who,liminsp[i].how,0); } y0++; if(y0>=maxRow()-1) {y0=maxRow()-1; goto_xy(1,y0); clr_eol();} if(n_x && restrict_p(y0,0,"Exclude X-particles ","s_ent_5",deloutch,limout) ) goto label_1; for(i=nin+nout;i<MAXINOUT;i++) hadrons[i].name[0]=0; strncpy(arrpos,"->",2); return 0; }