示例#1
0
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;
}
示例#3
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;
}