char jpcall1c(void) { char an; int rand; rand = (int)randdata(0, 9); switch(rand){ case 0: an = 'J'; break; case 1: an = 'J'; break; case 2: an = 'J'; break; case 3: an = 'J'; break; case 4: an = 'J'; break; case 5: an = 'J'; break; case 6: an = '7'; break; case 7: an = '7'; break; case 8: an = '8'; break; case 9: an = '8'; break; default : an = 'J'; break; } return an; }
int main(int argc, char* argv[]) { #ifdef MEMDEBUG atexit(&DumpUnfreed); #endif if (argc < 3) myerror("Usage: corrnn datafile randfiles"); dbgout = new std::ofstream("nn.debug"); std::ifstream fin(argv[1]); std::ifstream randlistfin(argv[2]); std::vector<NCellData> data; dbg << "Read gals\n"; Read(fin,minsep,binsize,data); NCell wholefield(data); dbg << "ngals = "<<data.size(); dbg << "Read rand fields\n"; int nrandfields; randlistfin >> nrandfields; if (!randlistfin) myerror("reading randlistfile ",argv[2]); if (!(nrandfields > 0)) myerror("no random fields"); std::vector<std::vector<NCellData> > randdata(nrandfields); std::vector<NCell*> randfield(nrandfields); for(int i=0;i<nrandfields;++i) { std::string randfieldname; randlistfin >> randfieldname; if (!randlistfin) myerror("reading randlistfile ",argv[2]); std::ifstream randfin(randfieldname.c_str()); Read(randfin,minsep,binsize,randdata[i]); randfield[i] = new NCell(randdata[i]); } dbg<<"nbins = "<<nbins<<": min,maxsep = "<<minsep<<','<<maxsep<<std::endl; std::vector<BinData2<1,1> > DD(nbins), RR(nbins), DR(nbins); Process2(DD,minsep,maxsep,minsepsq,maxsepsq,wholefield); for(int k=0;k<nbins;++k) DD[k].npair *= 2; for(int i=0;i<nrandfields;++i) { dbg<<"rand: i = "<<i<<std::endl; Process2(RR,minsep,maxsep,minsepsq,maxsepsq,*randfield[i]); Process11(DR,minsep,maxsep,minsepsq,maxsepsq,wholefield,*randfield[i]); } for(int k=0;k<nbins;++k) RR[k].npair *= 2; int ndr = nrandfields; int nrr = nrandfields; #ifdef DOCROSSRAND for(int i=0;i<nrandfields;++i) { for(int j=i+1;j<nrandfields;++j) { dbg<<"j = "<<j<<std::endl; Process11(RR,minsep,maxsep,minsepsq,maxsepsq, *randfield[i],*randfield[j]); ++nrr; } } #endif dbg<<"done process DD,DR,RR data\n"; for(int i=0;i<nbins;++i) { dbg<<"RR["<<i<<"] = "<<RR[i].npair<<", DD = "<<DD[i].npair<<", DR = "<<DR[i].npair<<std::endl; RR[i].npair /= nrr; DR[i].npair /= ndr; } dbg<<"done divide by number of realizations\n"; std::ofstream fout("nn.out"); WriteNN(fout,minsep,binsize,DD,DR,RR,nrr); dbg<<"done write"<<std::endl; if (dbgout && dbgout != &std::cout) { delete dbgout; dbgout=0; } return 0; }
int main(int argc, char ** argv) { int fd; int mo, no, co, co2, co3, inrand, mode, bb; char sw[6]; char * swap = sw; no = 1; mo = 1; fd = -1; inrand = 0; mode = 0; bb = 1; memset(swap, 0x00, 6); // cw用の構造体を定義します。 cw_length cw_len; // デフォルトの符号データベースを初期化 cw_default_memset(&cw_len); // デフォルトの信号の長さ(3)と周波数(2)を設定 cw_defaultset(&cw_len, 700, 80); calloptin(argc, argv, &cw_len, &mo, &no, &bb, &mode); printf("生成数 -c : %d\n", no); printf("2繰り返し -m : %d\n", mo); printf("ワードのスペース -b : %d\n", bb); printf("コールサインの種類 : %d\n", mode); // beepデバイスファイルを開いてFDを得る fd = beep_fdopen(fd); cw_len.ws = cw_len.sp * 4; // '*' の長さを短点の4倍に設定 cw_len.cs = cw_len.sp * 2; // 前の文字の後ろに1スペースあるので2 // ワードの繰り返し for(co2 = 0; co2 < no; co2++){ memset(swap, 0x00, 6); // なんでもありのモード if(mode <= 1){ // call sign 1文字目 inrand = (int)randdata(10, 35); swap[0] = cw_len.roman.char_sign[inrand]; // call sign 2文字目 inrand = (int)randdata(10, 35); swap[1] = cw_len.roman.char_sign[inrand]; // call sign 3文字目 inrand = (int)randdata(0, 9); swap[2] = cw_len.roman.char_sign[inrand]; // call sign 4文字目 inrand = (int)randdata(10, 35); swap[3] = cw_len.roman.char_sign[inrand]; // call sign 5文字目 inrand = (int)randdata(10, 35); swap[4] = cw_len.roman.char_sign[inrand]; // call sign 6文字目 inrand = (int)randdata(10, 35); swap[5] = cw_len.roman.char_sign[inrand]; } // なんでもありのモード else if(mode == 2){ // call sign 1文字目 swap[0] = jpcall1c(); // j,7,8, // call sign 2文字目 if(swap[0] == 'J' || swap[0] == 'j'){ inrand = (int)randdata(10, 28); // a - j swap[1] = cw_len.roman.char_sign[inrand]; } else{ inrand = (int)randdata(19, 23); // j - n swap[1] = cw_len.roman.char_sign[inrand]; } // call sign 3文字目 inrand = (int)randdata(0, 9); swap[2] = cw_len.roman.char_sign[inrand]; // call sign 4文字目 inrand = (int)randdata(10, 35); swap[3] = cw_len.roman.char_sign[inrand]; // call sign 5文字目 inrand = (int)randdata(10, 35); swap[4] = cw_len.roman.char_sign[inrand]; // call sign 6文字目 inrand = (int)randdata(10, 35); swap[5] = cw_len.roman.char_sign[inrand]; } for(co = 0; co < mo; co++){ for(co3 = 0; co3 < 6; co3++){ cw_sign(&cw_len, fd, swap[co3]); cw_sign(&cw_len, fd, ' '); printf("%c\n", swap[co3]); } // ワード間のスペース for(co3 = 0; co3 < bb; co3++){ cw_sign(&cw_len, fd, '*'); printf("\n"); } } printf("CALL SIGN = %s\n", swap); } // beepのFDを開放し終了。 beep_close(fd); return 0; }