void qckisort(int xx[], int left, int right);
void getmedi2(int obox[], int onum, float *midpt, float *stdev, int ilthresh, int ihthresh)
{

  int   i,j,k,ic,cnum,mnum;
  float med,rms;
  int   *clip;
  int   *iclip;
  int   *mbox;

  mnum=0;
  iclip=(int*)malloc(onum*sizeof(int));
  for(i=0; i<onum; i++){
    if(obox[i]>ilthresh && obox[i]<ihthresh){
       iclip[i]=1;
       mnum++;
    } else {
       iclip[i]=0;
    }
  }

  if(mnum==0){
     free(iclip);
     *midpt=-9999;
     *stdev=-99;
     exit(0);  
  }

  ic=0;
  mbox=(int*)malloc(mnum*sizeof(int));
  for(i=0; i<onum; i++){
    if(iclip[i]==1){
      mbox[ic]=obox[i];
      ic++;
    }
  }
  free(iclip);

  qckisort(mbox,0,mnum-1);
  if(mnum%2==0){
    med=0.5*(mbox[mnum/2-1]+mbox[mnum/2]);
  }else{
    med=mbox[mnum/2];
  }

  rms=0;
  for(i=0; i<mnum; i++){
    rms=rms+(mbox[i]-med)*(mbox[i]-med);
  }
  rms=sqrt(rms/mnum);

  for(k=0; k<5; k++){

    cnum=0;
    iclip=(int*)malloc(mnum*sizeof(int));
    for(i=0; i<mnum; i++){
      if(fabs(mbox[i]-med)<3*rms) {
	 iclip[i]=1;
         cnum++;
      } else {
	 iclip[i]=0;
      }
    }

    if(cnum>0){
      clip=(int*)malloc(cnum*sizeof(int));
      j=0;
      for(i=0; i<mnum; i++){
        if(iclip[i]==1){
          clip[j]=mbox[i];
          j++;
	}
      }
      if(cnum%2==0){
        med=0.5*(clip[cnum/2-1]+clip[cnum/2]);
      }else{
        med=clip[cnum/2];
      }
      rms=0;
      for(i=0; i<cnum; i++){
        rms=rms+(clip[i]-med)*(clip[i]-med);
      }
      rms=sqrt(rms/cnum);
      free(clip);
      free(iclip);
    } else {
      med=-9999;
      rms=-99;
      free(iclip);
      break;
    }

  }

  free(mbox);

  *midpt=med;
  *stdev=rms;

}
