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


// data_container.cpp: implementation of the data_container class. 
// 
////////////////////////////////////////////////////////////////////// 
#include "data_container.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
using namespace boost; 
 
#define szNumber2 "[0-9]*[.][0-9]*" 
const boost::regex reNumber2(szNumber2,boost::regbase::normal|boost::regbase::icase); 
 
bool Microarray_Set::get_original_data(wxString Path_name){ 
	 bool error = false; 
	 wxFile file; 
	 file.Close(); 
	 if(file.Open(Path_name)){ 
		int nSize = file.Length(); 
		if(this->original_data == NULL){ 
		   this->original_data = new unsigned char[nSize]; 
		} 
		if(file.Read(original_data,nSize)>0){ 
		   wxString temp_data = (wxString)original_data; 
		   int index_line_feed = temp_data.Find('\012'); 
		   if(index_line_feed != -1) 
		      temp_data.Remove(0,index_line_feed+1);	  
		   else 
			  temp_data.Remove(0,index_line_feed+1); 
 
		   do{ 
              index_line_feed = temp_data.Find('\012'); 
			  if(index_line_feed == -1) 
				 break; 
		      wxString a_gene_data = temp_data.SubString(0,index_line_feed); 
			  if(!this->Get_original_one_gene(a_gene_data)){ 
			     error = true; 
			     break; 
			  } 
			  temp_data.Remove(0,index_line_feed+1); 
		   }while(1); 
		   if(error != true) 
		      micro_set1 = micro_set; 
		   else 
		      return false; 
		   //int a = micro_set.size(); 
		   //string tempa = boost::lexical_cast(a); 
		   //wxMessageBox(tempa.c_str()); 
		} 
		else{ 
		  return false; 
		} 
 
	 } 
	 else{ 
       return false; 
	 } 
	 return true; 
} 
 
bool Microarray_Set::Get_original_one_gene(wxString data) 
{ 
	boost::smatch what; 
	wxString gene_name; 
	if(number_sample == -1){ 
	   number_sample = data.Freq('\t'); 
	} 
	temp_number = number_sample; 
	int temp_save_number = temp_number; 
 
	int index_gene_name = data.Find("_at"); 
	if(index_gene_name != -1) 
	   gene_name = data.SubString(0,index_gene_name+2); 
	else{ 
	   index_gene_name = data.Find("_st"); 
	   if(index_gene_name != -1){ 
          gene_name = data.SubString(0,index_gene_name+2); 
	   } 
	} 
 
	A_Gene_in_a_Condition a_gene_micro; 
	a_gene_micro.name = gene_name; 
	data.Remove(0,index_gene_name+4); 
 
	do{ 
	    int a_gene_express_in_acondition = data.Find('\t'); 
	    if(a_gene_express_in_acondition == -1){ 
           a_gene_express_in_acondition = data.Find('\012'); 
		} 
	    Pixel pixel; 
	    pixel.val = atof(data.SubString(0,a_gene_express_in_acondition)); 
		string tem = data.SubString(0,a_gene_express_in_acondition).c_str(); 
		if(pixel.val == 0.0  
		   && 
		   a_gene_micro.a_micro.size() < 2){//!boost::regex_match(tem, what,reNumber2)){//contain gene's really name 
		   data.Remove(0,a_gene_express_in_acondition+1); 
		   temp_number--; 
		   temp_save_number--; 
		   //number_sample--; 
		   continue; 
		} 
 	    a_gene_micro.a_micro.push_back(pixel); 
	    data.Remove(0,a_gene_express_in_acondition+1); 
	    temp_number--; 
	}while(temp_number != 0); 
	//int r = a_gene_micro.a_micro.size(); 
	if(a_gene_micro.a_micro.size() != temp_save_number){ 
	   wxMessageBox("Error,Load data!"); 
       micro_set.clear(); 
	   return false; 
	} 
    micro_set.push_back(a_gene_micro); 
	return true; 
} 
 
int Microarray_Set::Getindexofonegene(wxString name) 
{ 
	int index ; 
	for(index = 0; index < micro_set1.size();index++){ 
		if(micro_set1[index].name == name){ 
		   break; 
		} 
	} 
	if(index == micro_set1.size()){ 
	   return -1; 
	} 
	else 
       return index; 
} 
 
void Microarray_Set::resturct_genepairs(int i,int j) 
{ 
	for(int index = 0; index < micro_set[0].a_micro.size() ;index++){ 
		Calculate_Base_Pair temp_pairs;// = new Calculate_Base_Pair; 
		temp_pairs.x = micro_set[i].a_micro[index].val; 
        temp_pairs.y = micro_set[j].a_micro[index].val; 
		temp_pairs.maId = index; 
		temp_pairs.xi = 0; 
		temp_pairs.yi = 0; 
        gene_pairs.push_back(temp_pairs); 
	} 
}