#include <stdio.h>
//  1  3
//  2  4
FILE *fp;
char  h[144][80],head[72][80],f1[30],g[9],f3[30];
short b[4096][4072];
float a[4096][4072],c[4032][4096],d1[20],d2[20],d[4032][4096];
float xd1[4096],xd2[4096],yd1[4096],yd2[4096],xx[4096],zd1[4096],zd2[4096];
int   n1,n2,n11,n22;
char  osmark[4],over;
int   idate,inum;
float avsky,aslope;
main(ac,av)
int ac; char *av[];
{
  int i,j,k,id,j6;
  int i1,i2;
  float x,x1,x2,x3,x4,y1,y2;
  if(ac<3){
     printf("\n\t*** addfit (overscan,statsky,x-y; last -bias) ******\n");
     printf("\n\tUsage: e4b in_fits bias_fit [!]\n");
     printf("\n\tuse 4 kind of methods to calaulate overscan\n");
     printf("\n\t! plot curve\n");
     exit(0);
  }
  fp=fopen(av[1],"rb");
  if(fp==0){ printf("\n\tinput file not found ! %s\n\n",av[1]); exit(0); }
  sscanf(&av[1][1],"%d",&k);
  sscanf(&av[1][6],"%d",&inum);
  idate=0;
  if(k>5700)idate=k;            // 201109   5822-5828
                                // 201110   5859-5866
  n2=4072;   n1=4096;
  fread(h,108,80,fp);
  sscanf(&h[1][28],"%d",&k); 
  if(k!=16){ printf("\n\tinput file must_be *_?.fit(16)\n\n"); exit(0); }
  sscanf(&h[2][28],"%d",&k); 
  if(k!= 2){ printf("\n\tinput file must_be *_?.fit(16)\n\n"); exit(0); }
  k=indexpos(h,"END     ",108);
  if(k==108)fread(&h[k][0],36,80,fp); 
  for(i=0;i<72;i++)for(j=0;j<80;j++)head[i][j]=32;
  strcpy(&head[ 0][0], "SIMPLE  =                    T ");
  strcpy(&head[ 1][0], "BITPIX  =                  -32 ");
  strcpy(&head[ 2][0], "NAXIS   =                    2 ");
  strcpy(&head[ 3][0], "NAXIS1  =                 4096 ");
  strcpy(&head[ 4][0], "NAXIS2  =                 4032 ");
  for(i=0;i<5;i++)head[i][31]='/'; 
  puthead(head, 7,h,"CCD_NO: ");    
  puthead(head, 8,h,"DATE-OBS");
  puthead(head, 9,h,"TIME-OBS");
  puthead(head,10,h,"EXPTIME ");
  puthead(head,11,h,"RA      ");
  puthead(head,12,h,"DEC     ");
  puthead(head,13,h,"HA      ");
  puthead(head,14,h,"EPOCH   ");
  puthead(head,15,h,"FILTER  ");
  puthead(head,16,h,"FOCUSVAL");
  puthead(head,17,h,"OBJECT  ");
  puthead(head,18,h,"INSTRUME");
  puthead(head,19,h,"RDNOISE ");
  puthead(head,20,h,"GAIN    ");
  puthead(head,21,h,"FILENAME");
  puthead(head,22,h,"OBSERVER");
  puthead(head,23,h,"SITEELEV");
  puthead(head,24,h,"CAMTEMP ");
  puthead(head,25,h,"READ_SPD");
  puthead(head,26,h,"TEMPS1  ");
  puthead(head,27,h,"WEATHER0");
  puthead(head,28,h,"WEATHER3");
  puthead(head,30,h,"RDNOCAL ");
  puthead(head,31,h,"GAINCAL ");
  puthead(head,32,h,"SKYADU  ");
  strcpy(&head[71][0], "END"); head[71][3]=32;
  k=indexpos(head,"RA      ",72);
  if(head[5][0]==32){
  for(i=0;i<2;i++)for(j=0;j<80;j++)head[5+i][j]=head[k+i][j];
  head[5][2]=head[6][3]='-';
  head[5][3]=head[6][4]='O';
  head[5][4]=head[6][5]='B';
  head[5][5]=head[6][6]='S';
  }

  sscanf(&head[7][28],"%d",&id);

  strcpy(g,"RDNOIS? ");
  if(id==1 || id==2){
    for(i=0;i<4;i++){
      g[6]=id*4+45+i; k=indexpos(h,g,108); 
      for(j=0;j<3;j++)head[19][12+j+i*5]=h[k][27+j];
    }
  }
  if(id==3){
    k=indexpos(h,"RDNOIS9 ",108); for(j=0;j<3;j++)head[19][12+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS10",108); for(j=0;j<3;j++)head[19][17+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS11",108); for(j=0;j<3;j++)head[19][22+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS12",108); for(j=0;j<3;j++)head[19][27+j]=h[k][27+j];
  }
  if(id==4){
    k=indexpos(h,"RDNOIS13",108); for(j=0;j<3;j++)head[19][12+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS14",108); for(j=0;j<3;j++)head[19][17+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS15",108); for(j=0;j<3;j++)head[19][22+j]=h[k][27+j];
    k=indexpos(h,"RDNOIS16",108); for(j=0;j<3;j++)head[19][27+j]=h[k][27+j];
  }
  k=(id-1)*4+1;
  sprintf(&head[19][31],"/ Read noise (e-) for amp %2d--%2d",k,k+3);
  head[19][63]=32;
//
  strcpy(g,"GAIN?   ");
  if(id==1 || id==2){
    for(i=0;i<4;i++){
      g[4]=id*4+45+i; k=indexpos(h,g,108); 
      for(j=0;j<3;j++)head[20][12+j+i*5]=h[k][27+j];
    }
  }
 if(idate==0){
  if(id==1){
    sprintf(&head[30][11]," 7.1  6.9  7.3 13.7 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"1.79 1.83 1.76 1.82 / IDL results"); head[31][44]=32;
  }
  if(id==2){
    sprintf(&head[30][11]," 9.2  9.6  9.0  9.2 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"2.26 2.17 2.24 2.20 / IDL results"); head[31][44]=32;
  }
  if(id==3){
    k=indexpos(h,"GAIN9   ",108); for(j=0;j<3;j++)head[20][12+j]=h[k][27+j];
    k=indexpos(h,"GAIN10  ",108); for(j=0;j<3;j++)head[20][17+j]=h[k][27+j];
    k=indexpos(h,"GAIN11  ",108); for(j=0;j<3;j++)head[20][22+j]=h[k][27+j];
    k=indexpos(h,"GAIN12  ",108); for(j=0;j<3;j++)head[20][27+j]=h[k][27+j];
    sprintf(&head[30][11],"11.3  9.0 17.4 11.5 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"2.29 2.29 2.26 2.30 / IDL results"); head[31][44]=32;
  }
  if(id==4){
    k=indexpos(h,"GAIN13  ",108); for(j=0;j<3;j++)head[20][12+j]=h[k][27+j];
    k=indexpos(h,"GAIN14  ",108); for(j=0;j<3;j++)head[20][17+j]=h[k][27+j];
    k=indexpos(h,"GAIN15  ",108); for(j=0;j<3;j++)head[20][22+j]=h[k][27+j];
    k=indexpos(h,"GAIN16  ",108); for(j=0;j<3;j++)head[20][27+j]=h[k][27+j];
    sprintf(&head[30][11]," 8.0  8.0  8.0  8.0 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"2.10 2.10 2.10 2.10 / IDL results"); head[31][44]=32;
  }
 }
 if(idate){
  if(id==1){
    sprintf(&head[30][11]," 6.5  7.0  7.0  7.5 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"1.78 1.74 1.55 1.76 / IDL results"); head[31][44]=32;
  }
  if(id==2){
    sprintf(&head[30][11]," 8.1  8.1  8.6  8.6 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"1.84 1.80 1.80 1.81 / IDL results"); head[31][44]=32;
  }
  if(id==3){
    k=indexpos(h,"GAIN9   ",108); for(j=0;j<3;j++)head[20][12+j]=h[k][27+j];
    k=indexpos(h,"GAIN10  ",108); for(j=0;j<3;j++)head[20][17+j]=h[k][27+j];
    k=indexpos(h,"GAIN11  ",108); for(j=0;j<3;j++)head[20][22+j]=h[k][27+j];
    k=indexpos(h,"GAIN12  ",108); for(j=0;j<3;j++)head[20][27+j]=h[k][27+j];
    sprintf(&head[30][11],"10.8  9.3 10.2  9.3 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"1.70 1.70 1.73 1.85 / IDL results"); head[31][44]=32;
  }
  if(id==4){
    k=indexpos(h,"GAIN13  ",108); for(j=0;j<3;j++)head[20][12+j]=h[k][27+j];
    k=indexpos(h,"GAIN14  ",108); for(j=0;j<3;j++)head[20][17+j]=h[k][27+j];
    k=indexpos(h,"GAIN15  ",108); for(j=0;j<3;j++)head[20][22+j]=h[k][27+j];
    k=indexpos(h,"GAIN16  ",108); for(j=0;j<3;j++)head[20][27+j]=h[k][27+j];
    sprintf(&head[30][11],"13.3  7.7  7.1  6.6 / IDL results"); head[30][44]=32;
    sprintf(&head[31][11],"1.65 1.72 1.85 1.89 / IDL results"); head[31][44]=32;
  }
 }
  k=(id-1)*4+1;
  sprintf(&head[20][31],"/ Conversion gain (e-/DN) for amp %2d--%2d",k,k+3);
  head[20][71]=32;
//
  for(j=30;j<48;j++)if(head[22][j]=='/')break; j+=2;
  k=indexpos(h,"OPERATOR",108);
  for(i=0;i<30;i++)head[22][i+j]=h[k][i];
//
  k=indexpos(h,"SITELAT ",108);
  for(i=0;i<23;i++)head[23][i+33]=h[k][i];
  k=indexpos(h,"SITELONG",108);
  for(i=0;i<23;i++)head[23][i+56]=h[k][i];
//
  k=indexpos(h,"WEATHER1",108);
  for(i=0;i<20;i++)head[27][i+29]=h[k][i+10];
  k=indexpos(h,"WEATHER2",108);
  for(i=0;i<21;i++)head[27][i+52]=h[k][i+10];
//
  k=indexpos(h,"WEATHER4",108);
  for(i=0;i<24;i++)head[28][i+29]=h[k][i+10];
  k=indexpos(h,"WEATHER5",108);
  for(i=0;i<20;i++)head[28][i+56]=h[k][i+10];
//
//
  fread(b,n2*n1,2,fp);  fclose(fp);
  swap2(b,n2*n1*2);
  for(i=0;i<n1;i++)for(j=0;j<n2;j++)a[i][j]=b[i][j]+32768.;
  for(i=0;i<n1;i++){
    for(j=0;j<20;j++){ d1[j]=a[i][4032+j]; d2[j]=a[i][4052+j]; }
    xd1[i]=xmedian(d1,20);   xd2[i]=xmedian(d2,20);
  }
// CCD_4 xd2[n11-n1] !=0;
// overscan take median again 
  n11=n1/2; j=99; k=499;  
  for(i=0;i<n1;i++){
    if(i<n11){
      yd1[i]=xmed2(xd1,n11,i,j); yd2[i]=xmed2(xd2,n11,i,j);
      zd1[i]=xmed2(xd1,n11,i,k); zd2[i]=xmed2(xd2,n11,i,k);
    } else {
      yd1[i]=xmed2(&xd1[n11],n11,i-n11,j); yd2[i]=xmed2(&xd2[n11],n11,i-n11,j);
      zd1[i]=xmed2(&xd1[n11],n11,i-n11,k); zd2[i]=xmed2(&xd2[n11],n11,i-n11,k);
    }
  }
  n2=4032; n22=n2/2;                  //  1  3
  k=0;                                //  2  4
// xd~ori; yd~win9; zd~win99;  input
// yd is out, 1: win9 2: win99 3: win999 4 white_black;
  j6=0; 
  avsky=0.;         // while mark=4, force balence & slop adjust
// j6=0: normal; j=1,4 force mark==4; j6=5: force !=4; j6=6: force use a value;
//  idate==0
  if(strncmp(av[1],"d5473_0026_1.fit",16)==0)j6=3;
  if(strncmp(av[1],"d5508_0087_3.fit",16)==0)j6=2;   // force mark=4
  if(strncmp(av[1],"d5508_0089_1.fit",16)==0)j6=4;   // force mark=4
  if(strncmp(av[1],"d5507.0087_2.fit",16)==0)insert(yd1,zd1,3000,3500);
  if(strncmp(av[1],"d5534_0098_3.fit",16)==0)insert(yd2,zd2,3200,3800);
  if(strncmp(av[1],"d5535_0132_1.fit",16)==0)j6=4;   // force mark=4
// idate==1
  if(strncmp(av[1],"d5824_0015_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5824_0039_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5824_0039_3.fit",16)==0){ avsky=0.49; aslope=0.016; }
  if(strncmp(av[1],"d5824_0057_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5825_0047_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5825_0051_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5825_0057_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5825_0061_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5825_0067_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5826_0102_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5827_0018_3.fit",16)==0){ avsky=0.80; aslope=0.0; }
  if(strncmp(av[1],"d5827_0092_4.fit",16)==0)j6=5;
  if(strncmp(av[1],"d5827_0094_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5827_0096_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5827_0151_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5828_0054_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5828_0070_3.fit",16)==0)j6=6;
// 111024-31    bgright star + black strip
  if(strncmp(av[1],"d5859_0062_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5859_0141_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5860_0013_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5860_0046_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5860_0052_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5861_0077_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5861_0109_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0026_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0042_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0044_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0090_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0120_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0121_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0128_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5862_0174_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0058_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0059_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0121_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0133_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0168_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5864_0172_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5865_0128_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5865_0149_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5865_0154_2.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5865_0165_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5866_0106_4.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5866_0173_1.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5866_0189_3.fit",16)==0)j6=6;
  if(strncmp(av[1],"d5866_0204_2.fit",16)==0)j6=6;
// 2011,1123-1201   
  if(strncmp(av[1],"d5888_0039_1.fit",16)==0)insert(yd2,zd2,2500,3300);
  if(strncmp(av[1],"d5888_0050_3.fit",16)==0){
               yd1[0]=yd1[500]; zd1[0]=zd1[500]; insert(yd1,zd1,0,450); }
  if(strncmp(av[1],"d5888_0096_1.fit",16)==0)insert(yd1,zd1,1500,2000);
  if(strncmp(av[1],"d5889_0036_3.fit",16)==0){
               yd2[0]=yd2[200]; zd2[0]=zd2[200]; insert(yd2,zd2,0,180); }
  if(strncmp(av[1],"d5889_0079_2.fit",16)==0)insert(yd2,zd2,1700,2040);
  if(strncmp(av[1],"d5889_0112_3.fit",16)==0){
       yd2[2047]=yd2[1900]; zd2[2047]=zd2[1900]; insert(yd2,zd2,1900,2047); }
  if(strncmp(av[1],"d5889_0124_2.fit",16)==0)insert(yd1,zd1,2048,2400);
  if(strncmp(av[1],"d5889_0127_3.fit",16)==0)insert(yd2,zd2,3600,4050);
  if(strncmp(av[1],"d5891_0056_4.fit",16)==0){
       yd1[2048]=yd1[2600]; zd1[2048]=zd1[2600]; insert(yd1,zd1,2048,2600); }
  if(strncmp(av[1],"d5891_0060_4.fit",16)==0){
       yd1[4095]=yd1[3900]; zd1[4095]=zd1[3900]; insert(yd1,zd1,3900,4095); }
  if(strncmp(av[1],"d5891_0141_1.fit",16)==0){
       yd1[2047]=yd1[1900]; zd1[2047]=zd1[1900]; insert(yd1,zd1,1950,2047);
       yd1[2048]=yd1[2200]; zd1[2048]=zd1[2200]; insert(yd1,zd1,2048,2150); }
  if(strncmp(av[1],"d5892_0038_4.fit",16)==0){
       yd2[2048]=yd2[4095]; zd2[2048]=zd2[4095]; insert(yd2,zd2,2048,4095); }
  if(strncmp(av[1],"d5892_0043_2.fit",16)==0)insert(yd2,zd2,2048,2100);
  if(strncmp(av[1],"d5892_0048_4.fit",16)==0){
       yd1[2047]=yd1[1900]; zd1[2047]=zd1[1900]; insert(yd1,zd1,1950,2047);
       yd1[2048]=yd1[2200]; zd1[2048]=zd1[2200]; insert(yd1,zd1,2048,2150); }
  if(strncmp(av[1],"d5892_0081_1.fit",16)==0){
       yd1[2047]=yd1[1900]; zd1[2047]=zd1[1900]; insert(yd1,zd1,1950,2047);
       yd1[2048]=yd1[2200]; zd1[2048]=zd1[2200]; insert(yd1,zd1,2048,2200); }
  if(strncmp(av[1],"d5892_0163_4.fit",16)==0){
       yd1[2047]=yd1[1500]; zd1[2047]=zd1[1500]; insert(yd1,zd1,1500,2047);
       yd1[2048]=yd1[2500]; zd1[2048]=zd1[2500]; insert(yd1,zd1,2048,2500); }
  if(strncmp(av[1],"d5893_0188_3.fit",16)==0)insert(yd1,zd1,1000,1500);
  if(strncmp(av[1],"d5894_0196_3.fit",16)==0){
       yd2[2047]=yd2[1800]; zd2[2047]=zd2[1800]; insert(yd2,zd2,1800,2047);
       yd2[2048]=yd2[2200]; zd2[2048]=zd2[2200]; insert(yd2,zd2,2048,2200); }
  if(strncmp(av[1],"d5895_0126_1.fit",16)==0){
       yd2[4095]=yd2[3500]; zd2[4095]=zd2[3500]; insert(yd2,zd2,3500,4095); }
  if(strncmp(av[1],"d5895_0212_2.fit",16)==0)insert(yd2,zd2,200,1800);
  if(strncmp(av[1],"d5896_0062_4.fit",16)==0)insert(yd1,zd1,1400,2030);
  if(strncmp(av[1],"d5896_0066_4.fit",16)==0){
       yd2[2047]=yd2[1900]; zd2[2047]=zd2[1900]; insert(yd2,zd2,1900,2047);
       yd2[2048]=yd2[2100]; zd2[2048]=zd2[2100]; insert(yd2,zd2,2048,2100); }
  if(strncmp(av[1],"d5896_0073_3.fit",16)==0)insert(yd2,zd2,10,1200);

  osmark[k++]=judge(yd1,zd1,n11,0,0,ac,j6,1);
  osmark[k++]=judge(yd2,zd2,n11,0,n22,ac,j6,2);
  osmark[k++]=judge(&yd1[n11],&zd1[n11],n11,n11,0,ac,j6,3);
  osmark[k++]=judge(&yd2[n11],&zd2[n11],n11,n11,n22,ac,j6,4);
// always use win499
  if(idate==0){
    if(j6!=1)adjustslope(yd1,n11,1);          //1
    if(j6!=2)adjustslope(yd2,n11,1);          //2
    if(j6!=3)adjustslope(&yd1[n11],n11,0);    //3
    if(j6!=4)adjustslope(&yd2[n11],n11,0);    //4
  }
  for(i=0;i<4;i++){ head[18][26+i]=osmark[i]; printf("%c",osmark[i]); }
  if(ac>3){
    for(i=0;i<n1;i++)xx[i]=i;
    for(i=0;i<n1;i++){ zd1[i]=yd1[i]-50; zd2[i]=yd2[i]-50; }
    i=0; i1=1; i2=2; pgbegin_(&i,"/xw",&i1,&i2,3);
    x=1.5; pgsch_(&x); x1=-60.; x2=4096+60.; 
    y1=(xmedian(zd1,2048)+xmedian(&zd1[2048],2048))/2.-200;  y2=y1+600.;
    pgenv_(&x1,&x2,&y1,&y2,&i,&i);
      pglabel_("","",av[1],0,0,strlen(av[1]));
    i2=3; pgsci_(&i2); pgpoint_(&n1,xx,xd1,&i1);
    i2=1; pgsci_(&i2); pgpoint_(&n1,xx,zd1,&i1);
    x=y2-100; y1=100; y2=y1+n11; 
    pgtext_(&y1,&x,"gate 1",6); pgtext_(&y2,&x,"gate 3",6);
    y1=xmedian(zd2,2048); y2=xmedian(&zd2[2048],2048);  
      if(id!=4)y1=(y1+y2)/2.-200.; else y1=y2-200.;          y2=y1+600.;
    pgenv_(&x1,&x2,&y1,&y2,&i,&i);
    i2=3; pgsci_(&i2); pgpoint_(&n1,xx,xd2,&i1);
    i2=1; pgsci_(&i2); pgpoint_(&n1,xx,zd2,&i1);
    x=y2-100; y1=100; y2=y1+n11; 
    pgtext_(&y1,&x,"gate 2",6); pgtext_(&y2,&x,"gate 4",6);
    pgend_();
  }
// some 111024~111031 *_4.fit, last 4 gate, need not modify overscan
  if(idate>=5858 && idate<=5866){   // 111024~~111031
    j=k=0;                            // no bright star, but strip
    if(strncmp(av[1],"d5859_0154_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5859_0158_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5859_0159_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5859_0160_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0041_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0130_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0139_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0144_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0153_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5863_0156_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5866_0150_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5866_0165_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5866_0166_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5866_0167_4.fit",16)==0)k=3;
    if(strncmp(av[1],"d5866_0168_4.fit",16)==0)k=3;
    if(id==4 && j6==0 )j=4;
    if(strncmp(av[1],"d5859_0055_4.fit",16)==0)j=0;  // has star
    if(strncmp(av[1],"d5859_0066_4.fit",16)==0)j=0;  // still use smooth over
    if(strncmp(av[1],"d5859_0078_4.fit",16)==0)j=0;  // scan data
    if(strncmp(av[1],"d5859_0093_4.fit",16)==0)j=0; 
    if(strncmp(av[1],"d5859_0112_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0017_4.fit",16)==0)j=0; 
    if(strncmp(av[1],"d5860_0019_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0024_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0033_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0038_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0039_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0058_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0066_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5860_0080_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0080_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0083_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0084_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0125_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0130_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0143_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0152_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5861_0166_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0024_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0027_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0052_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0065_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0091_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0177_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5862_0201_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0035_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0057_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0076_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0082_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0088_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0127_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0135_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0137_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0155_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5863_0167_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0023_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0046_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0064_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0093_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0109_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0149_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0160_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5864_0167_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0038_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0065_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0093_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0103_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0128_4.fit",16)==0)j=0;
    if(strncmp(av[1],"d5865_0129_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0156_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0178_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0186_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5865_0187_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0058_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0061_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0071_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0073_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0083_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0136_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0142_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0150_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0167_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0175_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0204_4.fit",16)==0)j=0;  
    if(strncmp(av[1],"d5866_0246_4.fit",16)==0)j=0;  
    printf(" *%d %d %d ",j,id,j6);
    if(k==3)for(i=2048;i<n1;i++)yd1[i]=xd1[i];    // no modify overscan at all
    if(j==4)for(i=2048;i<n1;i++)yd2[i]=xd2[i];
// 111024~111031  some 1/4 ccd need add a value 
    j=k=0;
    if(strncmp(av[1],"d5862_0022_2.fit",16)==0){ j=4; x4=-2.; } // force bright
    if(strncmp(av[1],"d5862_0023_2.fit",16)==0){ j=4; x4=-2.; } // force bright
    if(strncmp(av[1],"d5862_0104_1.fit",16)==0){ j=4; x4=2.; } // force bright
    if(strncmp(av[1],"d5862_0174_2.fit",16)==0){ j=2; x2=20.; }
    if(strncmp(av[1],"d5862_0201_1.fit",16)==0){ k=3; x3=-4.; }
    if(strncmp(av[1],"d5862_0201_2.fit",16)==0){ j=4; x4=-4.; }
    if(strncmp(av[1],"d5862_0174_2.fit",16)==0){ j=2; x2=20.; }
    if(strncmp(av[1],"d5863_0065_2.fit",16)==0){ j=4; x4=6.; } // force bright
    if(strncmp(av[1],"d5863_0131_3.fit",16)==0){ j=2; x2=6.; } // force bright
    if(strncmp(av[1],"d5864_0022_1.fit",16)==0){ j=4; x4=3.; } // force bright
    if(strncmp(av[1],"d5864_0022_1.fit",16)==0){ k=1; x1=2.; } // force bright
    if(strncmp(av[1],"d5864_0048_3.fit",16)==0){ k=1; x1=4.; } // force bright
    if(strncmp(av[1],"d5864_0132_4.fit",16)==0){ k=1; x1=6.; } // force bright
    if(strncmp(av[1],"d5865_0023_1.fit",16)==0){ k=3; x3=-3.; } 
    if(strncmp(av[1],"d5865_0023_2.fit",16)==0){ k=1; x1=-2.; } 
    if(strncmp(av[1],"d5865_0023_2.fit",16)==0){ j=4; x4=-5.; } 
    if(id==2 && idate==5859 && (inum>=149 && inum<=167) ){
      printf(" #%d ",inum); j=4; x4=2.; } 
    if(id==2 && idate==5861 && (inum>=140 && inum<=151 || inum==161) ){
      printf(" #%d ",inum); j=4; x4=-2.; } 
    if(id==2 && idate==5862 && (inum==49 || inum>=51 && inum<=53 ||
      inum>=56 && inum<=58 ) ){ printf(" #%d ",inum); j=4; x4=2.; } 
    if(id==2 && idate==5863 && (inum>=175 && inum<=178) ){
      printf(" #%d ",inum); j=4; x4=2.; } 
    if(id==2 && idate==5866 && (inum>=37 && inum<=69) ){
      printf(" #%d ",inum); j=4; x4=-2.; } 
    if(k==1)for(i=0; i<n1/2;i++)yd1[i]-=x1;
    if(k==3)for(i=2048;i<n1;i++)yd1[i]-=x3;
    if(j==2)for(i=0; i<n1/2;i++)yd2[i]-=x2;
    if(j==4)for(i=2048;i<n1;i++)yd2[i]-=x4;
  }
// 2011,12,  no change
  j=k=0;
  if(strncmp(av[1],"d5888_0060_4.fit",16)==0)j=4; 
  if(strncmp(av[1],"d5888_0064_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0064_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0067_2.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0067_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0073_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0073_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0074_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0074_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0075_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0080_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0081_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0081_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0082_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0082_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0083_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0083_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0084_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0084_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0085_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0086_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0086_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0087_3.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0087_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0088_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0089_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0090_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0091_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0094_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0096_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0099_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0105_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5888_0108_4.fit",16)==0)k=3;
  if(strncmp(av[1],"d5889_0030_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5889_0058_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5889_0060_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0032_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0051_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0054_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0072_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0073_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0074_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0077_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0079_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0100_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0102_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0103_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0104_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5891_0129_1.fit",16)==0)j=4;

  if(strncmp(av[1],"d5892_0054_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0055_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0057_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0072_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0074_4.fit",16)==0)j=4;

  if(strncmp(av[1],"d5892_0082_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0083_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0089_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0089_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0090_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0091_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0095_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0100_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0103_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0104_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0105_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0116_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5892_0123_1.fit",16)==0)j=4;

  if(strncmp(av[1],"d5894_0035_2.fit",16)==0)j=4;
  if(strncmp(av[1],"d5894_0067_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5894_0079_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5894_0121_4.fit",16)==0)j=4;
  if(strncmp(av[1],"d5894_0138_4.fit",16)==0)k=3;

  if(strncmp(av[1],"d5895_0166_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5895_0166_2.fit",16)==0)j=4;
  if(strncmp(av[1],"d5895_0167_1.fit",16)==0)j=4;
  if(strncmp(av[1],"d5895_0185_2.fit",16)==0)j=4;
  if(strncmp(av[1],"d5895_0189_2.fit",16)==0)j=4;
  if(strncmp(av[1],"d5895_0212_2.fit",16)==0)j=4;

  if(strncmp(av[1],"d5896_0038_2.fit",16)==0)k=3;
// 2011,12 
    if(k==1)for(i=0; i<2048;i++)yd1[i]=xd1[i];    // no modify overscan at all
    if(k==3)for(i=2048;i<n1;i++)yd1[i]=xd1[i];    // no modify overscan at all
    if(j==2)for(i=0; i<2048;i++)yd2[i]=xd2[i];
    if(j==4)for(i=2048;i<n1;i++)yd2[i]=xd2[i];
  if(strncmp(av[1],"d5888_0083_4.fit",16)==0)insert(yd1,yd1,2600,2680);

//2011,12  add 4 block bias
  j=k=0;
  if(strncmp(av[1],"d5888_0081_3.fit",16)==0){ k=1; x1=5; }
  if(strncmp(av[1],"d5888_0185_1.fit",16)==0){ k=3; x3=-1.5; }
  if(strncmp(av[1],"d5889_0045_2.fit",16)==0){ j=4; x4=1.5; }
  if(strncmp(av[1],"d5889_0097_2.fit",16)==0){ k=1; x1=1.5; }
  if(strncmp(av[1],"d5889_0102_2.fit",16)==0){ k=3; x3=1.5; }
  if(strncmp(av[1],"d5891_0156_2.fit",16)==0){ j=2; x2=20; }
  if(strncmp(av[1],"d5892_0024_2.fit",16)==0){ k=3; x3=-6; }
  if(strncmp(av[1],"d5892_0024_2.fit",16)==0){ j=2; x2= 4; }
  if(strncmp(av[1],"d5892_0024_4.fit",16)==0){ k=3; x3=-4; }
  if(strncmp(av[1],"d5892_0024_4.fit",16)==0){ j=4; x4=-5; }
  if(strncmp(av[1],"d5892_0027_2.fit",16)==0){ k=3; x3=-2; }
  if(strncmp(av[1],"d5893_0023_1.fit",16)==0){ j=4; x4= 3; }
  if(strncmp(av[1],"d5893_0023_2.fit",16)==0){ j=4; x4=-6; }
  if(strncmp(av[1],"d5893_0024_2.fit",16)==0){ j=4; x4=-3; }
  if(strncmp(av[1],"d5893_0025_2.fit",16)==0){ j=4; x4=-3; }
  if(strncmp(av[1],"d5893_0163_3.fit",16)==0){ j=2; x2= 8; }
  if(strncmp(av[1],"d5894_0023_2.fit",16)==0){ j=4; x4=-3; }
  if(strncmp(av[1],"d5894_0035_2.fit",16)==0){ j=2; x2=-2; }
  if(strncmp(av[1],"d5894_0196_1.fit",16)==0){ k=3; x3=-3; }
  if(strncmp(av[1],"d5894_0197_1.fit",16)==0){ k=3; x3=-7; }
  if(strncmp(av[1],"d5894_0197_2.fit",16)==0){ k=3; x3= 7; }
  if(strncmp(av[1],"d5894_0197_2.fit",16)==0){ j=4; x4=-7; }
  if(strncmp(av[1],"d5895_0024_1.fit",16)==0){ k=3; x3=-5; }
  if(strncmp(av[1],"d5895_0024_1.fit",16)==0){ j=2; x2=-6; }
  if(strncmp(av[1],"d5895_0024_3.fit",16)==0){ k=1; x1= 3; }
  if(strncmp(av[1],"d5895_0024_4.fit",16)==0){ k=3; x3=-2; }
  if(strncmp(av[1],"d5895_0024_4.fit",16)==0){ j=2; x2=-4; }
  if(strncmp(av[1],"d5895_0025_1.fit",16)==0){ k=3; x3=-2; }
  if(strncmp(av[1],"d5895_0025_1.fit",16)==0){ j=2; x2=-4; }
  if(strncmp(av[1],"d5895_0025_2.fit",16)==0){ j=4; x4=-9.; } 
  if(strncmp(av[1],"d5895_0026_1.fit",16)==0){ j=4; x4= 5.; } 
  if(strncmp(av[1],"d5895_0026_2.fit",16)==0){ j=4; x4=-5.; } 
  if(strncmp(av[1],"d5895_0027_2.fit",16)==0){ j=4; x4=-3.; } 
  if(strncmp(av[1],"d5895_0028_1.fit",16)==0){ j=4; x4= 3.; } 
  if(strncmp(av[1],"d5895_0029_1.fit",16)==0){ j=4; x4= 3.; } 
  if(strncmp(av[1],"d5895_0029_2.fit",16)==0){ j=4; x4=-2.; } 
  if(strncmp(av[1],"d5895_0030_1.fit",16)==0){ j=4; x4= 2.; } 
  if(strncmp(av[1],"d5895_0101_1.fit",16)==0){ j=4; x4= 2.; } 
  if(strncmp(av[1],"d5895_0222_2.fit",16)==0){ j=4; x4=-2.; } 
  if(strncmp(av[1],"d5895_0223_2.fit",16)==0){ j=4; x4=-2.; } 
  if(strncmp(av[1],"d5895_0224_2.fit",16)==0){ j=4; x4=-4.; } 
  if(strncmp(av[1],"d5895_0225_1.fit",16)==0){ k=1; x1= 4.; } 
  if(strncmp(av[1],"d5895_0225_1.fit",16)==0){ j=4; x4= 4.; } 
  if(strncmp(av[1],"d5895_0225_4.fit",16)==0){ k=1; x1= 4.; } 
  if(strncmp(av[1],"d5895_0225_4.fit",16)==0){ j=4; x4= 3.; } 
    if(k==1)for(i=0; i<2048;i++)yd1[i]-=x1;    // bias +-
    if(k==3)for(i=2048;i<n1;i++)yd1[i]-=x3;
    if(j==2)for(i=0; i<2048;i++)yd2[i]-=x2;
    if(j==4)for(i=2048;i<n1;i++)yd2[i]-=x4;
  if(strncmp(av[1],"d5891_0064_2.fit",16)==0)for(i=3690;i<4096;i++){
               x=3;      yd1[i]-=x; yd2[i]-=x; }
  if(strncmp(av[1],"d5891_0083_2.fit",16)==0)for(i=1920;i<2175;i++){
               x=-2;      yd1[i]-=x; yd2[i]-=x; }
  if(strncmp(av[1],"d5891_0087_2.fit",16)==0)for(i=3220;i<4096;i++){
               x=3;      yd1[i]-=x; yd2[i]-=x; }
  if(strncmp(av[1],"d5891_0091_2.fit",16)==0)for(i=3180;i<4096;i++){
               x=3;      yd1[i]-=x; yd2[i]-=x; }
  if(strncmp(av[1],"d5894_0195_2.fit",16)==0)for(i=0;i<4096;i++)yd2[i]+=3;
  if(strncmp(av[1],"d5894_0196_2.fit",16)==0){
        for(i=0;i<2048;i++)yd2[i]+=3; for(i=2048;i<4096;i++)yd2[i]+=6; }
  if(strncmp(av[1],"d5894_0197_2.fit",16)==0)for(i=0;i<2048;i++)yd1[i]-=2;
  if(strncmp(av[1],"d5895_0024_2.fit",16)==0){
        for(i=0;i<2048;i++)yd2[i]+=3; for(i=2048;i<4096;i++)yd2[i]+=13; }
  if(strncmp(av[1],"d5895_0025_1.fit",16)==0)for(i=2048;i<4096;i++)yd2[i]-=2;
  if(strncmp(av[1],"d5895_0213_1.fit",16)==0)for(i=0;i<2048;i++)yd1[i]=yd1[0];
  if(strncmp(av[1],"d5895_0225_2.fit",16)==0){
        for(i=0;i<2048;i++)yd2[i]+=3; for(i=2048;i<4096;i++)yd2[i]+=8; }
  if(strncmp(av[1],"d5896_0063_4.fit",16)==0)
                  for(i=2048;i<4096;i++)yd2[i]=yd2[4090];

// overscan correct
  for(i=0;i<n1;i++){
    for(j=0;j<2016;j++)c[4031-j][i]=a[i][j]-yd1[i];
    for(j=2016;j<4032;j++)c[4031-j][i]=a[i][j]-yd2[i];
  }
// -bias
  fp=fopen(av[2],"rb");
  if(fp==0){ printf("\n\t%s not found!\n",av[2]); exit(0); }
  fseek(fp,72*80,0);
  fread(d,n2*n1,4,fp);
  fclose(fp);
  swap4(d,n2*n1*4);
  for(i=0;i<n2;i++)for(j=0;j<n1;j++)c[i][j]-=d[i][j];
// -bias end
  stat4sky(c,&x,avsky); 
  k=indexpos(head,"SKYADU  ",72);
  sprintf(&head[k][9]," %20.2f / -bias only",x); head[k][43]=32;
  swap4(c,n2*n1*4);
  av[1][0]='e';
  fp=fopen(av[1],"wb");
  fwrite(head,72,80,fp);
  fwrite(c,n2*n1,4,fp);
  fclose(fp);
  printf("  %s  produced !\n",av[1]);
}

adjustslope(a,n,m)                  // a[n], if(m)reverise
float *a; int n,m;
/*
#include <stdio.h>
#define n 24
main()
{
  int i,j,k,a[n]={3,2,2,3,4,4,5,6,7,8,9,8,7,6,6,7,7,8,9,11,14,13,14,15};
  for(i=0;i<n;i++)printf("%d ",a[i]); printf("\n");
  k=a[0]; for(i=1;i<n;i++)if(k>a[i])k=a[i];  a[0]=k; 
  for(i=1;i<n;i++){ if(a[i]>=a[i-1]) continue; 
    k=a[i]; for(j=1;j<i;j++)if(a[j]>k)a[j]=k;
  }
  for(i=0;i<n;i++)printf("%d ",a[i]); printf("\n");
}
*/
{
  int i,j;
  float x;
  if(m)for(i=0;i<n/2;i++){ x=a[i]; a[i]=a[n-1-i]; a[n-1-i]=x; }
  x=a[0]; for(i=1;i<n;i++)if(x>a[i])x=a[i];  a[0]=x; 
  for(i=1;i<n;i++){ if(a[i]>=a[i-1]) continue; 
    x=a[i]; for(j=1;j<i;j++)if(a[j]>x)a[j]=x;
  }
  if(m)for(i=0;i<n/2;i++){ x=a[i]; a[i]=a[n-1-i]; a[n-1-i]=x; }
}

insert(a,b,k1,k2)
float *a,*b; int k1,k2;
{
  float y1,y2; int i;
  y1=a[k1]; y2=a[k2];
  for(i=k1+1;i<k2;i++)a[i]=b[i]=y2-(y2-y1)*(k2-i)/(k2-k1);
}

judge(yd,zd,n,n11,n22,ac,f4,gate)           // input yd-win99; zd~win499
float *yd,*zd; int n,n11,n22,ac,f4,gate;    // output yd
{
  int i,i1,i2,j,j1,j2,k;
  float x,s[2048],e[2048];
  short f[2016];
  if(f4==gate)goto lf4;
  j=999;
  for(i=0;i<n;i++)e[i]=xmed2(yd,n,i,j);  
  x=(e[512]+e[1024]+e[1536])/3.;
  if(f4==6)for(i=0;i<n;i++)zd[i]=x;  // force a value
  j1=j2=0;
  for(i=99;i<n-99;i++){
    i1=yd[i]-zd[i]; if(i1<0)i1=-i1; if(i1>2)j1+=(i1-2)*(i1-2);
    i2=zd[i]-e[i];  if(i2<0)i2=-i2; if(i2>1)j2+=(i2-1)*(i2-1);
  }
  if(ac>3)printf(" %d_%d ",j1,j2);
  for(i=0;i<n;i++)yd[i]=zd[i];      // always output, use 499
  if(j1==0) return('1');
  if(j2<=1) return('2'); 
  j=0; for(i=0;i<n-1;i++)j+=(e[i]-e[i+1])*(e[i]-e[i+1]);
  k=0; for(i=0;i<n-1;i++)if(e[i]!=e[i+1])k++;
  if(j==k)  return('3'); 
     
  if(f4==5 || f4==6)  return('3');    //   force return;
lf4:
  for(i=0;i<n;i++){
    for(j=0;j<2016;j++)e[j]=a[i+n11][j+n22];
    k=0; for(j=0;j<2016;j++)if(e[j]<32000.)f[k++]=e[j];
    white_black(f,1,k,&s[i],&x);
  }                                         // header find balance in 20 
  for(i=0;i<n;i++)zd[i]=xmed2(s,n,i,9); 
  for(i=0;i<n;i++){ e[i]=yd[i]; s[i]=zd[i]; }
  sortx1(e,n); sortx1(s,n);
  x=xmedian(e,20)-xmedian(s,20);
  for(i=0;i<n;i++)yd[i]=zd[i]+x;
          return('4');
}

stat4sky(c,sky,avsky)
float c[][4096],*sky, avsky;
{
  int i,j,k,l=0,n11,n22;
  float sk[4],s;
  short d[200*200];
  k=0; for(i=2016;i<2416;i+=2)for(j=1648;j<2048;j+=2)d[k++]=c[i][j]/2.;  //1
  white_black(d,1,k,&sk[l],&s);  sk[l++]*=2;
  k=0; for(i=1616;i<2016;i+=2)for(j=1648;j<2048;j+=2)d[k++]=c[i][j]/2.;  //2
  white_black(d,1,k,&sk[l],&s);  sk[l++]*=2;
  k=0; for(i=2016;i<2416;i+=2)for(j=2048;j<2448;j+=2)d[k++]=c[i][j]/2.;  //3
  white_black(d,1,k,&sk[l],&s);  sk[l++]*=2;
  k=0; for(i=1616;i<2016;i+=2)for(j=2048;j<2448;j+=2)d[k++]=c[i][j]/2.;  //4
  white_black(d,1,k,&sk[l],&s);  sk[l++]*=2;
  printf(" block's skyadu: %9.2f %9.2f %9.2f %9.2f\n",sk[0],sk[1],sk[2],sk[3]);
  s=0.; j=0;
  for(i=0;i<4;i++)if(osmark[i]!='4'){ s+=sk[i]; j++; }
  *sky=s/j;
  if(sk[1]==0.){ *sky=sk[3]; return; }                // for idate==0 CCD_4
  for(l=0;l<4;l++)if(osmark[l]=='4'){
    s=*sky-sk[l]; n11=n22=0;         // 0~2, 1~3 background as same
    if(l==0){ n22=2016;          if(osmark[1]!='4')s=sk[1]-sk[0]; }
    if(l==1)                     if(osmark[0]!='4')s=sk[0]-sk[1];
    if(l==2){ n22=2016; n11=2048;if(osmark[3]!='4')s=sk[3]-sk[2]; } 
    if(l==3){ n11=2048;          if(osmark[2]!='4')s=sk[2]-sk[3]; }
    if(avsky!=0.){
      s*=avsky;
      printf("marked 4, adjust a little*****%f\n",s);
      for(j=0;j<2016;j++)for(i=0;i<2048;i++)c[j+n22][i+n11]+=s-i*aslope;
    }
  }
}
/*
#include <stdio.h>
main(int ac, char **av)
{
  int  i,j,j1,j2,j3,k,c,n;
  if(ac<4){ printf("\n\t***** a dimension window minw********\n"); exit(0); }
  sscanf(av[1],"%d",&n); sscanf(av[2],"%d",&c); sscanf(av[3],"%d",&j3);
  for(i=0;i<n;i++){
    j1=j2=c;
    k=2*i+1;         if(k<c)j1=k; 
    k=(n-i)*2-1;     if(k<c)j2=k;
    j=(j1>j2)?j2:j1; if(j<j3)j=j3;
    printf("%2d %2d     %2d\n",i,j,c);
  }
}
*/
xmed2(b,n,i1,c)
float *b; int n,i1,c;
{
  int i,j,k,i2;
  float a[999],x;                     // alway in odd
// adjust window
  int j1,j2;
  j1=j2=c;
  k=2*i1+1;     if(k<c)j1=k;
  k=(n-i1)*2-1; if(k<c)j2=k;
  j=(j1>j2)?j2:j1; if(j<9)j=9;        // assume min_window is 9
// adjust window end
  k=j/2;
  i2=i1-k; if(i2<0)i2=0;
  if(i1+k>=n-1)i2=n-j-1;
  for(i=0;i<j;i++)a[i]=b[i2+i]; 
  sortx1(a,j);
  return(a[k]);
}

xmedian(b,n)
float *b; int n;
{
  int i,j;
  float x,a[4096];
  for(i=0;i<n;i++)a[i]=b[i];
  if(n<=20){
    for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]){
      x=a[i]; a[i]=a[j]; a[j]=x;
    }
  } else sortx1(a,n);
  i=n%2; j=n/2; 
  if(i)return(a[j]);
  return((a[j]+a[j-1])/2);
}

sortx1(a,n)
float *a; int n;
{
  int i,j,k=2,ii,ifin;
  float x;
  while(k<n)k*=2;
  k=(3*k)/4-1; if(n<k)k=n;
l20:
  k/=2;        ifin=n-k;
  for(ii=0;ii<ifin;ii++){
    i=ii;      j=i+k;
    if(a[i]<=a[j])continue;
    x = a[j]; 
l40:
    a[j]= a[i]; 
    j=i;       i-=k;
    if(i<0)goto l60;
    if(a[i]>x)goto l40;
l60:
    a[j]=x;  
  }
  if(k>1)goto l20;
}

puthead(head,k,h,f)
char head[][80],h[][80],*f;
int  k;
{
  int i,j;
  j=indexpos(h,f,140);
  if(j==140){ sprintf(&head[k][0],"%s=",f); head[k][9]=32; }
  else for(i=0;i<80;i++)head[k][i]=h[j][i];
}
