www.pudn.com > Genecircus20070919.rar > MulithreadGetNetworks.cpp
// MulithreadGetNetworks.cpp: implementation of the MulithreadGetNetworks class.
//
//////////////////////////////////////////////////////////////////////
#include "MulithreadGetNetworks.h"
#include "wx_pch.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define cent_x 400
#define cent_y 340
#define radius 300
MulithreadGetNetworks::MulithreadGetNetworks()
{
net = new Network();
tolerance = 0.9;
if_complex_calculate = false;
}
MulithreadGetNetworks::~MulithreadGetNetworks()
{
delete net;
}
//boost::mutex io_mutex;
/*
2006 8 16 Ruoyu Luo add the following :
1) for (int i = 0; i < t->data_base->micro_set.size(); i++){ ==> for (int i = 0; i < t->data_base->index_temp.size(); i++){
the order for this change is only find the first control step's network relationship
*/
void rebuild(int id,MulithreadGetNetworks * parent)
{
vector::iterator index_iter;
MulithreadGetNetworks * t = parent;
for (int i = 0; i < t->data_base->index_temp.size(); i++){
if(t->data_base->index_temp[i] != id && id > t->data_base->index_temp[i]){
double mi = t->calculate->get_GenePairs_Mi_and_save(id ,t->data_base->index_temp[i]);
if(mi > t->calculate->pvalue){
if(t->calculate->ok_readandwrite_index == true){
//boost::mutex::scoped_lock
//lock(io_mutex);
t->calculate->ok_readandwrite_index = false;
t->data_base->xyindex[id][t->data_base->index_temp[i]] = 1;
t->data_base->xyindex[t->data_base->index_temp[i]][id] = 1;
t->calculate->ok_readandwrite_index = true;
}
}
}
}
}
void MulithreadGetNetworks::Get()
{
clear_connect_matrix();
new_connect_matrix();
if(getroundindex()){
for(int i = 0;iif_complex_calculate == false){
DPI_first_step();
check_delete_gene();
check_delete_con();
}
else{
DPI_first_step();
check_delete_gene();
DPI_first_step_complex();
check_delete_con();
}
delete_gene_control();
check_have_out_connect();
savenetwork();
}
void MulithreadGetNetworks::delete_gene_control()
{
gene g1;
g1 = net->g;
net->size_total = net->g.size();
//net->g2_step = net->g;
for(int i = 1;i < g1.size();i++){
for(int j = 0; j < net->c.size(); j++){
if(net->c[j].delete_or_keep == true && net->c[j].index_begin == 0 && net->c[j].index_end == g1[i].index
||
net->c[j].delete_or_keep == true && net->c[j].index_end == 0 && net->c[j].index_begin == g1[i].index){
int index_j = g1[i].index_express;
int index_i = g1[i].index;
for(int a = i;a < g1.size()-1;a++){
g1[a] = g1[a+1];
g1[a].index--;
}
g1.pop_back();
for(int ii = 0; ii ::iterator result = find(g1[ii].temp.begin(),g1[ii].temp.end(),index_j);
if(result != g1[ii].temp.end()){
remove(g1[ii].temp.begin(),g1[ii].temp.end(),index_j);
}
}
for(int ii = 0; ii c.size();ii++){
if(net->c[ii].index_begin == index_i
||
net->c[ii].index_end == index_i){
net->c[ii].delete_or_keep = true;
}
if(net->c[ii].index_begin > index_i){
net->c[ii].index_begin -= 1;
}
if(net->c[ii].index_end > index_i){
net->c[ii].index_end -= 1;
}
}
}
}
}
net->g.clear();
net->g = g1;
}
void MulithreadGetNetworks::create_mi_matrix()
{
for(int i = 0;i < net->g.size();i++){
for(int j = 0;j < net->g.size();j++){
if(i != j && i > j){
double mi = calculate->get_GenePairs_Mi_and_save(net->g[i].index_express ,net->g[j].index_express);
if(mi > calculate->pvalue){
data_base->mivector[i][j] = mi;
data_base->mivector[j][i] = mi;
}
}
}
}
}
void MulithreadGetNetworks::savenetwork()
{
wxString dirname = calculate->dirname;
string networkmodel = "";
string temp;
for(int i = 0; i < net->g.size(); i++){
networkmodel = networkmodel + (string)(net->g[i].name) + ":" + '\r'+'\n';
temp = boost::lexical_cast(net->g[i].x);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->g[i].y);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->g[i].index_express);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->g[i].index);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->g[i].index_orginial);
networkmodel += temp +'\t';
temp = "have";
string temp1 = "not";
if(net->g[i].if_have_other == true)
networkmodel += temp +'\r'+'\n';
else
networkmodel += temp1 +'\r'+'\n';
}
string temp2 = "***";
temp2 += boost::lexical_cast(net->size_total);
networkmodel += temp2 + "total" + '\r'+'\n';
for(int i = 0; i < net->c.size(); i++){
if(net->c[i].delete_or_keep == false){
temp = boost::lexical_cast(net->c[i].index);
networkmodel += temp +":" + '\r' +'\n';
temp = boost::lexical_cast(net->c[i].index_begin);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->c[i].index_end);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->c[i].index_begin_express);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->c[i].index_end_express);
networkmodel += temp +'\t';
temp = boost::lexical_cast(net->c[i].mi);
networkmodel += temp +'\t';
temp = "delete";
string temp1 = "keep";
if(net->c[i].delete_or_keep == true)
networkmodel += temp +'\r'+'\n';
else
networkmodel += temp1 +'\r'+'\n';
}
}
int count = networkmodel.length();
const char * t = networkmodel.c_str();
dirname = dirname + data_base->micro_set[shuffle->obj_index].name+"_network"+".tmp";
wxFile file;
file.Create(dirname,true);
file.Open(dirname,wxFile::read_write);
file.Write(t,count);
file.Close();
}
void MulithreadGetNetworks::DPI_first_step()
{
int iii ,ii,i;
stack g_temp;
for(int j = 0; j < net->g.size();j = j + net->g.size()){
if(net->g[j].temp.size() <= 1){
continue;
}
else if(g_temp.size() == 0){
g_temp.push(net->g[j]);//first
for(i = 0; i < net->g[j].temp.size();i++){
Gene gt2 = getgene(net->g[j].temp[i]);
if(gt2.name == "")
continue;
if(gt2.temp.size() > 1)
g_temp.push(gt2);//second
else
continue;
for(ii = 0; ii < gt2.temp.size();ii++){
Gene gt3 = getgene(gt2.temp[ii]);
if(gt3.name == "")
continue;
if(gt3.temp.size() > 1
&&
gt3.index_express != net->g[j].index_express)
g_temp.push(gt3);//third
else
continue;
if(gt3.index_express != net->g[j].index_express){//this line has'nt using
for(iii = 0;iii < gt3.temp.size();iii++){
Gene gt4 = getgene(gt3.temp[iii]);
if(gt4.name == "")
continue;
if(gt4.temp.size() > 1
&&
gt4.index_express != gt2.index_express)
g_temp.push(gt4);
else
continue;
if(gt4.index_express != net->g[j].index_express){//four nodes
for(int iiii = 0;iiii < gt4.temp.size();iiii++){
if(gt4.temp[iiii] == net->g[j].index_express){
DPI4nodes(net->g[j],gt2,gt3,gt4);
break;
}
}
g_temp.pop();
}
else{//three nodes
g_temp.pop();
DPI3nodes(net->g[j],gt2,gt3,net->g[j]);
}
}
if(iii == gt3.temp.size())
g_temp.pop();//pop gt3
}
}//for ii
if(ii == gt2.temp.size())
g_temp.pop();// pop gt2
}//for i 与这个基因相连的每个基因
if(i == net->g[j].temp.size())
g_temp.pop();// pop gt1
}//else if
else if(g_temp.size() != 0) {
wxMessageBox("Error found in stack first level!");
}
}//for j 每个基因
}
void MulithreadGetNetworks::check_delete_con()
{
for(int a = 0;a < net->c.size();a++){
if(net->c[a].delete_or_keep == false && net->g[net->c[a].index_begin].delete_if == true
||
net->c[a].delete_or_keep == false && net->g[net->c[a].index_end].delete_if == true){
net->c[a].delete_or_keep = true;
}
}
}
void MulithreadGetNetworks::check_delete_gene()
{
int a = 0;
for(int j = 1; j < net->g.size();j++){
for(int a = 0;a < net->c.size();a++){
if(net->c[a].delete_or_keep == true && net->c[a].index_begin == 0 && net->c[a].index_end == net->g[j].index
||
net->c[a].delete_or_keep == true && net->c[a].index_end == 0 && net->c[a].index_begin == net->g[j].index){
break;
}
}
if(a != net->c.size()){
net->g[j].delete_if = true;
}
}
}
void MulithreadGetNetworks::DPI_first_step_complex()
{
int iii,ii,i;
stack g_temp;
for(int j = 1; j < net->g.size();j++){
if(net->g[j].delete_if){
continue;
}
if(net->g[j].temp.size() <= 1){
continue;
}
else if(g_temp.size() == 0){
g_temp.push(net->g[j]);//first
for(i = 0; i < net->g[j].temp.size();i++){
Gene gt2 = getgene(net->g[j].temp[i]);
if(gt2.name == "")
continue;
if(gt2.index_express == shuffle->obj_index)
continue;
if(gt2.delete_if)//////////
continue;
if(gt2.temp.size() > 1)
g_temp.push(gt2);//second
else
continue;
for(ii = 0; ii < gt2.temp.size();ii++){
Gene gt3 = getgene(gt2.temp[ii]);
if(gt3.name == "")
continue;
if(gt3.delete_if)/////////
continue;
if(gt3.index_express == shuffle->obj_index)
continue;
if(gt3.temp.size() > 1
&&
gt3.index_express != net->g[j].index_express)
g_temp.push(gt3);//third
else
continue;
if(gt3.index_express != net->g[j].index_express){//this line has'nt using
for(iii = 0;iii < gt3.temp.size();iii++){
Gene gt4 = getgene(gt3.temp[iii]);
if(gt4.name == "")
continue;
if(gt4.delete_if)/////////
continue;
if(gt4.index_express == shuffle->obj_index)
continue;
if(gt4.temp.size() > 1
&&
gt4.index_express != gt2.index_express)
g_temp.push(gt4);
else
continue;
if(gt4.index_express != net->g[j].index_express){//four nodes
for(int iiii = 0;iiii < gt4.temp.size();iiii++){
if(gt4.temp[iiii] == net->g[j].index_express){
DPI4nodes(net->g[j],gt2,gt3,gt4);
break;
}
}
g_temp.pop();
}
else{//three nodes
g_temp.pop();
DPI3nodes(net->g[j],gt2,gt3,net->g[j]);
}
}
if(iii == gt3.temp.size())
g_temp.pop();//pop gt3
}
}//for ii
if(ii == gt2.temp.size())
g_temp.pop();// pop gt2
}//for i 与这个基因相连的每个基因
if(i == net->g[j].temp.size())
g_temp.pop();// pop gt1
}//else if
else if(g_temp.size() != 0) {
wxMessageBox("Error found in stack first level!");
}
}//for j 每个基因
}
void MulithreadGetNetworks::DPI3nodes(Gene g1,Gene g2,Gene g3,Gene center)
{
typedef std::vector sort_p;
sort_p p;
int i = g1.index_express;
int j = g2.index_express;
int k = g3.index_express;
double mi_ij = data_base->mivector[g1.index][g2.index];
double mi_ik = data_base->mivector[g1.index][g3.index];
double mi_jk = data_base->mivector[g2.index][g3.index];
if(mi_ij > calculate->pvalue && mi_ik > calculate->pvalue && mi_jk > calculate->pvalue){
p.push_back(mi_ij);p.push_back(mi_ik);p.push_back(mi_jk);
sort(p.begin(),p.end());
if(p[0] == mi_ij && p[0] < p[1]*tolerance){
for(int a = 0; a< net->c.size();a++){
if(net->c[a].index_begin_express == i && net->c[a].index_end_express == j
||
net->c[a].index_end_express == i && net->c[a].index_begin_express == j){
if(i == center.index_express || j == center.index_express){
if(i == center.index_express){
if(!preciseDPI(g3,g2,mi_jk,g1)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
else{
if(!preciseDPI(g3,g1,mi_ik,g2)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
}
else{
net->c[a].delete_or_keep = true;
break;
}
}
}
}
else if(p[0] == mi_ik && p[0] < p[1]*tolerance){
for(int a = 0; a< net->c.size();a++){
if(net->c[a].index_begin_express == i && net->c[a].index_end_express == k
||
net->c[a].index_end_express == i && net->c[a].index_begin_express == k){
if(i == center.index_express || k == center.index_express){
if(i == center.index_express){
if(!preciseDPI(g2,g3,mi_jk,g1)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
else{
if(!preciseDPI(g2,g1,mi_ij,g3)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
}
else{
net->c[a].delete_or_keep = true;
break;
}
}
}
}
else if(p[0] == mi_jk && p[0] < p[1]*tolerance){
for(int a = 0; a< net->c.size();a++){
if(net->c[a].index_begin_express == j && net->c[a].index_end_express == k
||
net->c[a].index_end_express == j && net->c[a].index_begin_express == k){
if(j == center.index_express || k == center.index_express){
if(j == center.index_express){
if(!preciseDPI(g1,g3,mi_ik,g2)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
else{
if(!preciseDPI(g1,g2,mi_ij,g3)){
net->c[a].delete_or_keep = true;
break;
}
else
break;
}
}
else{
net->c[a].delete_or_keep = true;
break;
}
}
}
}
}
}
bool MulithreadGetNetworks::preciseDPI(Gene index1/*center*/,Gene index2/*waiting decision*/,double mi_temp,Gene center)
{
for(int i = 1;i < net->g.size();i++){//i can't be center of the problem
if(data_base->mivector[index1.index][i] != -1
&&
i != index2.index//also can't be the waiting decision
&&
i != center.index){
if(data_base->mivector[i][index2.index] != -1){
typedef std::vector sort_p;
sort_p p;
p.push_back(mi_temp);
p.push_back(data_base->mivector[index1.index][i]);
p.push_back(data_base->mivector[i][index2.index]);
sort(p.begin(),p.end());
if(p[0] == mi_temp && p[0] < p[1]*tolerance){
return false;
}
}
}
/*
if(data_base->mivector[index1.index][i] != -1
&&
i != index2.index
&&
i != center.index){
if(data_base->mivector[i][center.index] != -1){
typedef std::vector sort_p;
sort_p p;
p.push_back(data_base->mivector[index1.index][center.index]);
p.push_back(data_base->mivector[index1.index][i]);
p.push_back(data_base->mivector[i][center.index]);
sort(p.begin(),p.end());
if(p[0] == data_base->mivector[index1.index][center.index]
&&
p[0] < p[1]*tolerance){
return false;
}
}
}
*/
}
return true;
}
bool MulithreadGetNetworks::resuctmap(int index,int index2,double mi_temp)
{
return true;//may be keep
}
void MulithreadGetNetworks::DPI4nodes(Gene g1,Gene g2,Gene g3,Gene g4)
{
int i = g1.index_express;
int j = g2.index_express;
int k = g3.index_express;
int l = g4.index_express;
if(data_base->mivector[g1.index][g3.index] != -1 && data_base->mivector[g2.index][g4.index] != -1){
//data_base->xyindex[i][k] == 1 && data_base->xyindex[j][l] == 1){//a line is connect between i and k
DPI3nodes(g1,g2,g3,g1);
DPI3nodes(g1,g3,g4,g1);
DPI3nodes(g2,g3,g4,g1);
DPI3nodes(g1,g2,g4,g1);
}
else if(data_base->mivector[g1.index][g3.index] != -1 && data_base->mivector[g2.index][g4.index] == -1){
//data_base->xyindex[i][k] == 1 && data_base->xyindex[j][l] != 1){
DPI3nodes(g1,g2,g3,g1);
DPI3nodes(g1,g3,g4,g1);
}
else if(data_base->mivector[g1.index][g3.index] == -1 && data_base->mivector[g2.index][g4.index] != -1){
//data_base->xyindex[i][k] != 1 && data_base->xyindex[j][l] == 1){//a line is connect between i and k
DPI3nodes(g2,g3,g4,g1);
DPI3nodes(g1,g2,g4,g1);
}
else if(data_base->mivector[g1.index][g3.index] == -1 && data_base->mivector[g2.index][g4.index] == -1){
//data_base->xyindex[i][k] != 1 && data_base->xyindex[j][l] != 1){
double mi_ij = data_base->mivector[g1.index][g2.index];
double mi_jk = data_base->mivector[g2.index][g3.index];
double mi_kl = data_base->mivector[g3.index][g4.index];
double object = data_base->mivector[g1.index][g4.index];
typedef std::vector sort_p;
sort_p p;
p.push_back(mi_ij);p.push_back(mi_jk);p.push_back(mi_kl);
sort(p.begin(),p.end());
if(object < p[0]*tolerance)
for(int a = 0; a< net->c.size();a++){
if(net->c[a].index_begin_express == i && net->c[a].index_end_express == l
||
net->c[a].index_end_express == i && net->c[a].index_begin_express == l){
net->c[a].delete_or_keep = true;
break;
}
}
}
}
Gene MulithreadGetNetworks::getgene(int index)
{
int i;
Gene g;
g.name = "";
for(i = 0;i < net->g.size();i++){
if(net->g[i].index_express == index){
return net->g[i];
}
}
if(i == net->g.size()){
string ind = boost::lexical_cast(index);
ind = ind + ":Error!";
wxMessageBox(ind.c_str());
return g;
}
}
Gene MulithreadGetNetworks::find_next_step(Gene g)
{
Gene g_temp;
return g_temp;
}
void MulithreadGetNetworks::check_have_out_connect()
{
for(int j = 0; j < net->g.size();j++){
if(j != 0){
for(int i = 0; i < data_base->micro_set1.size();i++){
if(i != shuffle->obj_index){
vector::iterator to = find(data_base->index_temp.begin(),data_base->index_temp.end(),i);
if(to == data_base->index_temp.end()){
double mi = this->calculate->get_GenePairs_Mi_and_save(net->g[j].index_express,i);
if(mi > calculate->pvalue){
net->g[j].if_have_other = true;//have other node which out of the system connect this node
break;
}
}
}
}
}
}
}
void MulithreadGetNetworks::rebuildnetwork_connect_gene()
{
int r1,r;
int index = 0;
for(int j = 0; j < net->g.size();j++){
if(j != 0){
Ccontrol * con = new Ccontrol();
con->index = index++;
con->index_begin = 0;
con->index_end = net->g[j].index;
con->index_begin_express = shuffle->obj_index;
con->index_end_express = net->g[j].index_express;//lry 2006 8 17
con->mi = data_base->mivector[con->index_begin][con->index_end];
net->c.push_back(*con);
}
}
for(int j = 0; j < net->g.size();j++){
if(j != 0 && net->g[j].temp.size() != 0){
for(int a = 0;a < net->g[j].temp.size();a++){
Ccontrol * con = new Ccontrol();
con->index = index++;
con->index_begin = net->g[j].index;
con->index_begin_express = net->g[j].index_express;
int index_temp = 0;
for(int r = 0;r < net->g.size();r++){
if(net->g[r].name == data_base->micro_set1[net->g[j].temp[a]].name){
index_temp = net->g[r].index;
}
}
con->index_end = index_temp;
con->mi = data_base->mivector[con->index_begin][con->index_end];
con->index_end_express = net->g[j].temp[a];
for(r = 0; r < net->c.size();r++){
if(net->c[r].index_begin == net->g[j].index && net->c[r].index_end == index_temp
||
net->c[r].index_end == net->g[j].index && net->c[r].index_begin == index_temp){
delete con;
break;
}
}
for(r1 = 0; r1 < net->c.size();r1++){
if(net->c[r1].index_begin == net->g[j].index && net->c[r1].index_end == index_temp
&& data_base->mivector[net->g[j].index][index_temp] == -1
||
net->c[r1].index_end == net->g[j].index && net->c[r1].index_begin == index_temp
&& data_base->mivector[index_temp][net->g[j].index] == -1){
delete con;
break;
}
}
if(r == net->c.size() && r1 == net->c.size())
net->c.push_back(*con);
}
}
}
}
void MulithreadGetNetworks::rebuildnetwork_Set_gene_para()
{
Gene * g = &(net->g[0]);
g->x = cent_x;
g->y = cent_y;
for(int j = 0; j < net->g.size();j++){
if(j != 0){
net->g[j].x = cent_x + radius*sin(j*(2*M_PI/(net->g.size()-1)));
net->g[j].y = cent_y - radius*cos(j*(2*M_PI/(net->g.size()-1)));
}
}
}
void MulithreadGetNetworks::rebuildnetwork_get_gene()
{
int index = 0;
Gene * g_cent = new Gene();
g_cent->name = calculate->name_for_now_gene;
g_cent->index = index++;
g_cent->index_express = shuffle->obj_index;
g_cent->index_orginial = 0;
int a = this->data_base->Getindexofonegene(calculate->name_for_now_gene);
for(int j = 0; j < data_base->micro_set.size();j++){
if(data_base->xyindex[a][j] == 1 && a > j){
g_cent->temp.push_back(j);
}
if(a == j){
for(;a < data_base->micro_set.size();a++){
int yy = data_base->xyindex[a][j];
if(data_base->xyindex[a][j] == 1){
g_cent->temp.push_back(a);
}
}
break;
}
}
net->g.push_back(*g_cent);
for(int i = 0; i < data_base->micro_set.size();i++){
if(i != this->data_base->Getindexofonegene(calculate->name_for_now_gene)){
vector::iterator to = find(data_base->xyindex[i].begin(),data_base->xyindex[i].end(),1);
if(to != data_base->xyindex[i].end()){
Gene * g_temp = new Gene();
g_temp->name = data_base->micro_set1[i].name;
g_temp->index = index++;
g_temp->index_express = i;
g_temp->index_orginial = g_temp->index;
for(int j = 0; j < data_base->micro_set.size();j++){//for xyindex is down_triple matirx
if(data_base->xyindex[i][j] == 1 && i > j){
g_temp->temp.push_back(j);
}
if(i == j){
for(int a0 = i;a0 < data_base->micro_set.size();a0++){
if(data_base->xyindex[a0][j] == 1){
g_temp->temp.push_back(a0);
}
}
break;
}
}
net->g.push_back(*g_temp);
}
}
}
if(data_base->xyindex.size() != 0){
for(int i = 0; i < data_base->micro_set.size();i++){
data_base->xyindex[i].clear();
}
data_base->xyindex.clear();
}
}
void MulithreadGetNetworks::clear_connect_matrix()
{
if(data_base->xyindex.size() != 0){
for(int i = 0; i < data_base->micro_set.size();i++){
data_base->xyindex[i].clear();
}
data_base->xyindex.clear();
}
if(data_base->mivector.size() != 0){
for(int i = 0;i< data_base->mivector.size(); i++){
data_base->mivector[i].clear();
}
data_base->mivector.clear();
for(int i = 0;i< data_base->index_temp.size()+1; i++){
mi i_mivalue;
data_base->mivector.push_back(i_mivalue);
for(int j = 0;j< data_base->index_temp.size()+1; j++){
data_base->mivector[i].push_back(-1.0);
}
}
}
else{
for(int i = 0;i< data_base->index_temp.size()+1; i++){
mi i_mivalue;
data_base->mivector.push_back(i_mivalue);
for(int j = 0;j< data_base->index_temp.size()+1; j++){
data_base->mivector[i].push_back(-1.0);
}
}
}
//DPI_temp_mi.clear();
//DPI_temp_center.clear();
}
void MulithreadGetNetworks::new_connect_matrix()
{
for(int i = 0; i < data_base->micro_set.size();i++){
y_index y;
data_base->xyindex.push_back(y);
for(int j = 0; j micro_set.size();j++){
int a = 100;
data_base->xyindex[i].push_back(100);
}
}
for(int i = 0;i < data_base->index_temp.size();i++){
//int yy = data_base->index_temp[i];
if(shuffle->obj_index > data_base->index_temp[i])
data_base->xyindex[shuffle->obj_index][data_base->index_temp[i]] = 1;//这里没有考虑,基因号相同的情况
else
data_base->xyindex[data_base->index_temp[i]][shuffle->obj_index] = 1;
}
}
bool MulithreadGetNetworks::getroundindex()
{
index = data_base->index_temp;
return 1;
}