www.pudn.com > Genecircus20070919.rar > shuffle_get_pvalue.cpp


// shuffle_get_pvalue.cpp: implementation of the shuffle_get_pvalue class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "shuffle_get_pvalue.h" 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
shuffle_get_pvalue::shuffle_get_pvalue() 
{ 
  shuffle_direct = true; 
  shuffle_times = 10000; 
  obj_index = -1; 
} 
 
shuffle_get_pvalue::~shuffle_get_pvalue() 
{ 
 
} 
 
void shuffle_get_pvalue::select_pvalue() 
{ 
	  
} 
 
void shuffle_get_pvalue::random_shuffle() 
{ 
  if(micro_set->micro_set.size() == 0) 
	  return; 
  if(calcu_mi->number == 0) 
	  return; 
 
  typedef std ::vector T; 
  T temp; 
 
  if(calcu_mi->gene_matrix_for_calcu_mi->pvalue.size() != 0){ 
	  for(int i = 0;i< calcu_mi->gene_matrix_for_calcu_mi->pvalue.size(); i++){ 
          calcu_mi->gene_matrix_for_calcu_mi->pvalue[i].clear(); 
	  } 
	  calcu_mi->gene_matrix_for_calcu_mi->pvalue.clear(); 
	  for(int i = 0;i< micro_set->micro_set.size(); i++){ 
		  p i_pvalue; 
          calcu_mi->gene_matrix_for_calcu_mi->pvalue.push_back(i_pvalue); 
	  } 
  } 
  else{ 
	  for(int i = 0;i< micro_set->micro_set.size(); i++){ 
		  p i_pvalue; 
          calcu_mi->gene_matrix_for_calcu_mi->pvalue.push_back(i_pvalue); 
	  } 
  } 
   
  micro_set->micro_set = micro_set->micro_set1; 
 
  if(shuffle_direct == true){ 
	  int time = 0; 
	  time = this->shuffle_times; 
	  while(time != 0){ 
			 unsigned int setsize = micro_set->micro_set.size(); 
			 for(unsigned int i = rand()%(calcu_mi->number);i < calcu_mi->number;i = i+rand()%(10)){ 
				 unsigned int j = 0; 
				 while( j < setsize){ 
					    double a  = micro_set->micro_set[j].a_micro[i].val; 
						j++; 
						temp.push_back(a); 
				 } 
				 std::random_shuffle(temp.begin(),temp.end()); 
				 j = 0; 
				 while( j < setsize ){ 
						double a = temp.back(); 
						temp.pop_back(); 
						micro_set->micro_set[j].a_micro[i].val = a; 
						j++; 
				 } 
			} 
			temp.clear();times = time; 
			time--;			 
			compution_mi(setsize);			 
	  } 
	  this->calcu_mi->Getresult(obj_index); 
  } 
  else{ 
	     int time = 0; 
		 time = this->shuffle_times; 
		 wxString time_begin = wxNow(); 
		 while(time != 0){ 
			 unsigned int setsize = micro_set->micro_set.size(); 
			 for(unsigned int i = 0; i< setsize;i++){ 
				 std::random_shuffle(micro_set->micro_set[i].a_micro.begin(),micro_set->micro_set[i].a_micro.end()); 
			 } 
			 time--; 
			 compution_mi(setsize); 
		 } 
		 wxString time_end = wxNow();time_begin = time_begin+'\n'+time_end; 
		 wxMessageBox(time_begin); 
		 this->calcu_mi->Getresult(obj_index); 
  } 
} 
 
double shuffle_get_pvalue::compution_mi(int setsize) 
{ 
	if(obj_index != -1){ 
	   int i = obj_index; 
	   int j = 0; 
	   while( j < setsize ){ 
			  this->calcu_mi->get_GenePairs_Mi(i,j,false); 
			  j++; 
	   } 
	} 
	return 0.0; 
}