示例#1
0
double ProcessPP (int i_PktNumb)
{
  // Show that we've received some data
  int processed = 0, count=0, i=0;
  double sum = 0., mean = 0., median=0.;

  for (i=0; i<i_PktNumb*2-1; i++) 
    {
      if (seq[i] == seq[i+1] && seq[i] >= 0 ) //packet pair not lost
	{
	  if ( processed > seq[i]) continue; // duplicated packet
	  while (processed < seq[i])        // we skip any pairs?
	    {
	      ceflag[processed] = 0;                                 // this pair is not valid
	      printf("[%2d]: Packet pair lost\n", processed);
	      processed ++;
	    }

    	  ceflag[processed] = 1;                                     // this pair is valid

	  disperse[count] = (arrival[i+1].tv_sec - arrival[i].tv_sec) * 1000000 +
	    (arrival[i+1].tv_usec - arrival[i].tv_usec);

	  ce[count] = (psize[i+1]*8.0/disperse[count]);              // compute effective capacity
	  sr[count] = psize[i+1]*8.0/(sendtime[i+1]-sendtime[i]);    // compute sending rate
	  
	  if (ce[count] > 0.) 
	    {
	      sum += ce[count];
	      printf("[%2d]: %d recv in %d usec - Ce: %7.2f Mbps, sendRate: %7.2f Mbps\n", 
		     seq[i+1], psize[i+1], disperse[count], ce[count], sr[count]);

	      count ++ ; // increase valid packet pair by 1
	    }

	  processed ++;  // Move to next pair

	  if (processed >= i_PktNumb) break;
	}
    }
  
  mean = sum/count;

  sort_double(ce, count);
  median = (ce[count/2]+ce[count/2+1])/2;

  printf("Summary of Ce test with %d valid tests out %d pairs:\n\tmedian: %f Mbps\n", 
	 count, i_PktNumb, median);
  if (median >= 0) 
    {
      return median; 
    }
  else
    {
      return 0.0;
    }
} // end ProcessPP()
示例#2
0
void select_high_scoring_seq_for_EM (double *ChIPScore,int numSeq,int numSeqEM,char *Iseq,double fEM) {
  
  register int i;
  int numSeqWithQualityScore,numSeqEMtmp1,numSeqEMtmp2;
  double *tmpScore;
  double ChIPscoreCutoff;
  
  tmpScore=alloc_double(numSeq);
  
  numSeqWithQualityScore=0;
  for (i=0; i<numSeq; i++)
  {
    if (ChIPScore[i]>0) numSeqWithQualityScore++;
  }
  
  tmpScore=alloc_double(numSeq);
  for (i=0; i<numSeq; i++) tmpScore[i]=ChIPScore[i];
  sort_double(tmpScore,numSeq);
  
  ChIPscoreCutoff=tmpScore[(int)(fEM*numSeq)];
  
  if (numSeqWithQualityScore<=(int)(fEM*numSeq))
  {
    for (i=0; i<numSeq; i++) Iseq[i]='0';
    numSeqEMtmp1=0;
    for (i=0; i<numSeq; i++)
    {
      if (ChIPScore[i]>0)
      {
        Iseq[i]='1'; numSeqEMtmp1++;
      }
    }
    numSeqEMtmp2=0;
    for (i=0; i<numSeq; i++)
    {
      if (ChIPScore[i]<=0)
      {
        Iseq[i]='1'; numSeqEMtmp2++;
        if (numSeqEMtmp1+numSeqEMtmp2==numSeqEM) break;
      }
    }
  }
  else
  {
    for (i=0; i<numSeq; i++) Iseq[i]='0';
    numSeqEMtmp1=0; numSeqEMtmp2=0;
    for (i=0; i<numSeq; i++) {
      if (ChIPScore[i]>=ChIPscoreCutoff)
      {
        Iseq[i]='1'; numSeqEMtmp1++;
        if (numSeqEMtmp1==numSeqEM) break;
      }
    }
  }
  if (tmpScore) 
  { 
    free(tmpScore);  
    tmpScore=NULL;  
  }
  if (ChIPScore) 
  { 
    free(ChIPScore);
    ChIPScore=NULL; 
  }
  
}
示例#3
0
/*
******IMPORTANT*********
* Process the TCP packets received, and the main logic is in the function.
*/
void process_tcp_packet(unsigned char* Buffer, int Size)
{
    unsigned short iphdrlen;
    struct iphdr *iph = (struct iphdr *)Buffer;
    iphdrlen = iph->ihl*4;
    struct tcphdr *tcph=(struct tcphdr*)(Buffer + iphdrlen);
    if (ntohs(tcph->dest) == RECV_PORT) {
        gettimeofday(&end,NULL);
        gettimeofday(&last_receive_time,NULL);
        diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
        if(count >= TEST_COUNT * 2) {
            rtt_filter();
            sort_double(ce,valid_counts);
            final_ce = 1500.0*8/(min_rtt2 - min_rtt1);
            printf("MIN_RTT1 = %d MIN_RTT2 = %d --> Ce= %f\n",min_rtt1,min_rtt2,final_ce);
            //avg_ce = 1500.0/(min_rtt2 - min_rtt1) * 8;
            avg_ce = get_double_avg(ce,valid_counts);
            avg_rtt1 = get_double_avg(final_rtt1_list, valid_counts);
            if(valid_counts % 2 == 0){
                median_ce = (ce[valid_counts/2-1]+ce[valid_counts/2])/2;
                median_rtt1 = (final_rtt1_list[valid_counts/2-1]+final_rtt1_list[valid_counts/2])/2;
            }
            else{
                median_ce = ce[valid_counts/2];
                median_rtt1 = final_rtt1_list[valid_counts/2];
            }
            printf("avg_ce = %f\tmedian_ce = %f\n",  avg_ce,median_ce);
            printf("avg_rtt1 = %f\tmedian_rtt1 = %f\n", avg_rtt1, median_rtt1);
            avaliable_bandwidth = 1500*8/(min_rtt2+avg_rtt1-2*min_rtt1);
            printf("avg_rtt1 --> Ab = %.2f\n",avaliable_bandwidth);
            avaliable_bandwidth = 1500*8/(min_rtt2+median_rtt1-2*min_rtt1);
            printf("median_rtt1 --> Ab = %.2f\n",avaliable_bandwidth);

            loop = 0;
            return;
        }
        if (count%2 == 0) {
            rtt1 = diff;
            gettimeofday(&start,NULL);
            sendpacket(2);
            sendpacket(1);

        } else {
            rtt2 = diff;
            //double result = 1500.0/(rtt2 - rtt1) * 8;
            //printf("#Rtt1 = %d,Rtt2 = %d\n",rtt1,rtt2);
            //printf("#Ce = %f \n\n",result);
            //if (result > FILT_MIN && result < FILT_MAX) {
                //avg_rtt1 = (avg_rtt1*valid_counts+rtt1)/(valid_counts+1);
                //rtt1_list[valid_counts] = rtt1;
                //ce[valid_counts] = result;
            if(rtt2 > rtt1){
                rtt1_list[valid_counts] = rtt1;
                rtt2_list[valid_counts] = rtt2;
                valid_counts++;

                min_rtt1 = min_rtt1 > rtt1 ? rtt1 : min_rtt1;
                min_rtt2 = min_rtt2 > rtt2 ? rtt2 : min_rtt2;
            }

            gettimeofday(&start,NULL);
            sendpacket(1);
        }
        count ++;
        return;
    }
    else {
     	gettimeofday(&current_receive_time,NULL);
     	double duration = 1000000 * (current_receive_time.tv_sec-last_receive_time.tv_sec)+ current_receive_time.tv_usec-last_receive_time.tv_usec;
     	if (duration > EXCEED_TIME)
     	{
     	    count = count%2 == 1 ? count - 1 : count;
            gettimeofday(&start,NULL);
            sendpacket(1);
     	}
        //Port number is not valid.
        return;
    }
}