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);
}
}