示例#1
0
void Boresight_transformation::fill_params_outer_bore()
{ //todo change Rotation
	//cam koordinate system
	//Translation
	m_translation_cam = m_cam.get_O();
	//Rotation
	m_rotation_cam = Rotation_matrix(Rotation_matrix::math,m_cam.get_rotX(),m_cam.get_rotY(),m_cam.get_rotZ());
	
	//car koordinate system
	//Translation
	m_translation_car = m_cam.get_B();
	//Rotation
	m_rotation_car = Rotation_matrix(Rotation_matrix::math,m_cam.get_B_rotx(),m_cam.get_B_roty(),m_cam.get_B_rotz());
}
示例#2
0
void Boresight_transformation::fill_params_global()
{//todo change Rotation
	//gps coordinate system
	//Translation
	m_translation_global = Point(m_Easting,m_Northing,m_ell_Height,m_dEasting,m_dNorthing,m_dell_Height);
	//Rotation
	

	//m_rotation_global = Rot(m_pitch,m_roll,m_heading);
	m_rotation_global = Rotation_matrix(Rotation_matrix::math,m_roll,m_pitch,m_heading);
	//std::cout<<std::endl<<"Rnach: "<<m_rotation_global<<std::flush;
}
void  read_xtc2structure(char * filename,char * out_file, int ion_position,vector<int> quartet_1_serial,vector<int> quartet_2_serial,struct atom * atom_head,int step_frame )
{
        int natoms,step;
        float time_temp;
        float p;
        matrix box;
        rvec *x;
        XDRFILE *xtc;
        xtc=xdrfile_open(filename,"r");
        int read_return=read_xtc_natoms(filename,&natoms);
		
		int num_step=0;

		ofstream out(out_file);
		out<<"#calculate the distence of  ion to the center of the two quartets in z-axis/"<<endl;
		out<<"#Time\t"<<"dist2ions"<<"\t"<<"dist2quartets"<<endl;

		double * ion_coor;
		ion_coor=dvector(0,2);


		struct chain * chain_head;
		chain_head=read_pdb_to_chain(atom_head);
		struct chain * ch_q_1_G_1;
		struct chain * ch_q_1_G_2;
		struct chain * ch_q_1_G_3;
		struct chain * ch_q_1_G_4;
		struct chain * ch_q_2_G_1;
		struct chain * ch_q_2_G_2;
		struct chain * ch_q_2_G_3;
		struct chain * ch_q_2_G_4;
		ch_q_1_G_1=get_base_chain(chain_head,quartet_1_serial.at(0));
		ch_q_1_G_2=get_base_chain(chain_head,quartet_1_serial.at(1));
		ch_q_1_G_3=get_base_chain(chain_head,quartet_1_serial.at(2));
		ch_q_1_G_4=get_base_chain(chain_head,quartet_1_serial.at(3));
		ch_q_2_G_1=get_base_chain(chain_head,quartet_2_serial.at(0));
		ch_q_2_G_2=get_base_chain(chain_head,quartet_2_serial.at(1));
		ch_q_2_G_3=get_base_chain(chain_head,quartet_2_serial.at(2));
		ch_q_2_G_4=get_base_chain(chain_head,quartet_2_serial.at(3));

		struct base_purine_serial * bs_q_1_G_1;
		struct base_purine_serial * bs_q_1_G_2;
		struct base_purine_serial * bs_q_1_G_3;
		struct base_purine_serial * bs_q_1_G_4;
		struct base_purine_serial * bs_q_2_G_1;
		struct base_purine_serial * bs_q_2_G_2;
		struct base_purine_serial * bs_q_2_G_3;
		struct base_purine_serial * bs_q_2_G_4;
//得到G碱基的原子的序号。
		bs_q_1_G_1=read_pdb2purine_base(atom_head,*ch_q_1_G_1);
		bs_q_1_G_2=read_pdb2purine_base(atom_head,*ch_q_1_G_2);
		bs_q_1_G_3=read_pdb2purine_base(atom_head,*ch_q_1_G_3);
		bs_q_1_G_4=read_pdb2purine_base(atom_head,*ch_q_1_G_4);
		bs_q_2_G_1=read_pdb2purine_base(atom_head,*ch_q_2_G_1);
		bs_q_2_G_2=read_pdb2purine_base(atom_head,*ch_q_2_G_2);
		bs_q_2_G_3=read_pdb2purine_base(atom_head,*ch_q_2_G_3);
		bs_q_2_G_4=read_pdb2purine_base(atom_head,*ch_q_2_G_4);



        x=(rvec * )calloc(natoms,sizeof(x[0]));
        while(1)
       {

              read_return=read_xtc(xtc,natoms,&step,&time_temp,box,x,&p);
			  num_step++;

			if(step%10000==0)
			{
				cout<<"Reading frame : "<<step<<"\t time :"<<time_temp<<endl;
			}
             if(read_return!=0)
            {
                 break;
             }
			if(num_step%step_frame==0)
			{
					double ** q_1_G_1_matrix;
					double ** q_1_G_2_matrix;
					double ** q_1_G_3_matrix;
					double ** q_1_G_4_matrix;
					double ** q_2_G_1_matrix;
					double ** q_2_G_2_matrix;
					double ** q_2_G_3_matrix;
					double ** q_2_G_4_matrix;

					 q_1_G_1_matrix=dmatrix(0,8,0,2);
					 q_1_G_2_matrix=dmatrix(0,8,0,2);
					 q_1_G_3_matrix=dmatrix(0,8,0,2);
					 q_1_G_4_matrix=dmatrix(0,8,0,2);
					 q_2_G_1_matrix=dmatrix(0,8,0,2);
					 q_2_G_2_matrix=dmatrix(0,8,0,2);
					 q_2_G_3_matrix=dmatrix(0,8,0,2);
					 q_2_G_4_matrix=dmatrix(0,8,0,2);

					for(int i=0;i<natoms;i++)
			     {
       //    cout<<step<<"\t"<<time_temp<<"\t"<<natom<<"\t"<<x[natom][0]<<"\t"<<x[natom][1]<<"\t"<<x[natom][2]<<endl;
						if((i+1)==ion_position)
						{
							ion_coor[0]=10*x[i][0];
							ion_coor[1]=10*x[i][1];
							ion_coor[2]=10*x[i][2];
	//						cout<<"get ions coordination"<<endl;
						}

					 //q_1_G_1
						 if((i+1)==bs_q_1_G_1->C2_serial)
						{
							q_1_G_1_matrix[6][0]=10*x[i][0];
							q_1_G_1_matrix[6][1]=10*x[i][1];
							q_1_G_1_matrix[6][2]=10*x[i][2];
							
						}
						if((i+1)==bs_q_1_G_1->C4_serial)
						{
							q_1_G_1_matrix[8][0]=10*x[i][0];
							q_1_G_1_matrix[8][1]=10*x[i][1];
							q_1_G_1_matrix[8][2]=10*x[i][2];	

						}
						if((i+1)==bs_q_1_G_1->C5_serial)
						{
							q_1_G_1_matrix[3][0]=10*x[i][0];
							q_1_G_1_matrix[3][1]=10*x[i][1];
							q_1_G_1_matrix[3][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_1->C6_serial)
						{
							q_1_G_1_matrix[4][0]=10*x[i][0];
							q_1_G_1_matrix[4][1]=10*x[i][1];
							q_1_G_1_matrix[4][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_1->C8_serial)
						{
							q_1_G_1_matrix[1][0]=10*x[i][0];
							q_1_G_1_matrix[1][1]=10*x[i][1];
							q_1_G_1_matrix[1][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_1->N1_serial)
						{
							q_1_G_1_matrix[5][0]=10*x[i][0];
							q_1_G_1_matrix[5][1]=10*x[i][1];
							q_1_G_1_matrix[5][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_1->N3_serial)
						{
							q_1_G_1_matrix[7][0]=10*x[i][0];
							q_1_G_1_matrix[7][1]=10*x[i][1];
							q_1_G_1_matrix[7][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_1->N7_serial)
						{
							q_1_G_1_matrix[2][0]=10*x[i][0];
							q_1_G_1_matrix[2][1]=10*x[i][1];
							q_1_G_1_matrix[2][2]=10*x[i][2];	
						}
						if((i+1)==bs_q_1_G_1->N9_serial)
						{
							q_1_G_1_matrix[0][0]=10*x[i][0];
							q_1_G_1_matrix[0][1]=10*x[i][1];
							q_1_G_1_matrix[0][2]=10*x[i][2];
						}
// q_1_G_2
						if((i+1)==bs_q_1_G_2->C2_serial)
						{
							q_1_G_2_matrix[6][0]=10*x[i][0];
							q_1_G_2_matrix[6][1]=10*x[i][1];
							q_1_G_2_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_2->C4_serial)
						{
							q_1_G_2_matrix[8][0]=10*x[i][0];
							q_1_G_2_matrix[8][1]=10*x[i][1];
							q_1_G_2_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_1_G_2->C5_serial)
						{
							q_1_G_2_matrix[3][0]=10*x[i][0];
							q_1_G_2_matrix[3][1]=10*x[i][1];
							q_1_G_2_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->C6_serial)
						{
							q_1_G_2_matrix[4][0]=10*x[i][0];
							q_1_G_2_matrix[4][1]=10*x[i][1];
							q_1_G_2_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->C8_serial)
						{
							q_1_G_2_matrix[1][0]=10*x[i][0];
							q_1_G_2_matrix[1][1]=10*x[i][1];
							q_1_G_2_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->N1_serial)
						{
							q_1_G_2_matrix[5][0]=10*x[i][0];
							q_1_G_2_matrix[5][1]=10*x[i][1];
							q_1_G_2_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->N3_serial)
						{
							q_1_G_2_matrix[7][0]=10*x[i][0];
							q_1_G_2_matrix[7][1]=10*x[i][1];
							q_1_G_2_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->N7_serial)
						{
							q_1_G_2_matrix[2][0]=10*x[i][0];
							q_1_G_2_matrix[2][1]=10*x[i][1];
							q_1_G_2_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_2->N9_serial)
						{
							q_1_G_2_matrix[0][0]=10*x[i][0];
							q_1_G_2_matrix[0][1]=10*x[i][1];
							q_1_G_2_matrix[0][2]=10*x[i][2];		
						}
//q_1_G_3
						if((i+1)==bs_q_1_G_3->C2_serial)
						{
							q_1_G_3_matrix[6][0]=10*x[i][0];
							q_1_G_3_matrix[6][1]=10*x[i][1];
							q_1_G_3_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_3->C4_serial)
						{
							q_1_G_3_matrix[8][0]=10*x[i][0];
							q_1_G_3_matrix[8][1]=10*x[i][1];
							q_1_G_3_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_1_G_3->C5_serial)
						{
							q_1_G_3_matrix[3][0]=10*x[i][0];
							q_1_G_3_matrix[3][1]=10*x[i][1];
							q_1_G_3_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->C6_serial)
						{
							q_1_G_3_matrix[4][0]=10*x[i][0];
							q_1_G_3_matrix[4][1]=10*x[i][1];
							q_1_G_3_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->C8_serial)
						{
							q_1_G_3_matrix[1][0]=10*x[i][0];
							q_1_G_3_matrix[1][1]=10*x[i][1];
							q_1_G_3_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->N1_serial)
						{
							q_1_G_3_matrix[5][0]=10*x[i][0];
							q_1_G_3_matrix[5][1]=10*x[i][1];
							q_1_G_3_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->N3_serial)
						{
							q_1_G_3_matrix[7][0]=10*x[i][0];
							q_1_G_3_matrix[7][1]=10*x[i][1];
							q_1_G_3_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->N7_serial)
						{
							q_1_G_3_matrix[2][0]=10*x[i][0];
							q_1_G_3_matrix[2][1]=10*x[i][1];
							q_1_G_3_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_3->N9_serial)
						{
							q_1_G_3_matrix[0][0]=10*x[i][0];
							q_1_G_3_matrix[0][1]=10*x[i][1];
							q_1_G_3_matrix[0][2]=10*x[i][2];		
						}
//q_1_G_4
						if((i+1)==bs_q_1_G_4->C2_serial)
						{
							q_1_G_4_matrix[6][0]=10*x[i][0];
							q_1_G_4_matrix[6][1]=10*x[i][1];
							q_1_G_4_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_1_G_4->C4_serial)
						{
							q_1_G_4_matrix[8][0]=10*x[i][0];
							q_1_G_4_matrix[8][1]=10*x[i][1];
							q_1_G_4_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_1_G_4->C5_serial)
						{
							q_1_G_4_matrix[3][0]=10*x[i][0];
							q_1_G_4_matrix[3][1]=10*x[i][1];
							q_1_G_4_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->C6_serial)
						{
							q_1_G_4_matrix[4][0]=10*x[i][0];
							q_1_G_4_matrix[4][1]=10*x[i][1];
							q_1_G_4_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->C8_serial)
						{
							q_1_G_4_matrix[1][0]=10*x[i][0];
							q_1_G_4_matrix[1][1]=10*x[i][1];
							q_1_G_4_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->N1_serial)
						{
							q_1_G_4_matrix[5][0]=10*x[i][0];
							q_1_G_4_matrix[5][1]=10*x[i][1];
							q_1_G_4_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->N3_serial)
						{
							q_1_G_4_matrix[7][0]=10*x[i][0];
							q_1_G_4_matrix[7][1]=10*x[i][1];
							q_1_G_4_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->N7_serial)
						{
							q_1_G_4_matrix[2][0]=10*x[i][0];
							q_1_G_4_matrix[2][1]=10*x[i][1];
							q_1_G_4_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_1_G_4->N9_serial)
						{
							q_1_G_4_matrix[0][0]=10*x[i][0];
							q_1_G_4_matrix[0][1]=10*x[i][1];
							q_1_G_4_matrix[0][2]=10*x[i][2];		
						}
//q_2_G_1
						if((i+1)==bs_q_2_G_1->C2_serial)
						{
							q_2_G_1_matrix[6][0]=10*x[i][0];
							q_2_G_1_matrix[6][1]=10*x[i][1];
							q_2_G_1_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_2_G_1->C4_serial)
						{
							q_2_G_1_matrix[8][0]=10*x[i][0];
							q_2_G_1_matrix[8][1]=10*x[i][1];
							q_2_G_1_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_2_G_1->C5_serial)
						{
							q_2_G_1_matrix[3][0]=10*x[i][0];
							q_2_G_1_matrix[3][1]=10*x[i][1];
							q_2_G_1_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->C6_serial)
						{
							q_2_G_1_matrix[4][0]=10*x[i][0];
							q_2_G_1_matrix[4][1]=10*x[i][1];
							q_2_G_1_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->C8_serial)
						{
							q_2_G_1_matrix[1][0]=10*x[i][0];
							q_2_G_1_matrix[1][1]=10*x[i][1];
							q_2_G_1_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->N1_serial)
						{
							q_2_G_1_matrix[5][0]=10*x[i][0];
							q_2_G_1_matrix[5][1]=10*x[i][1];
							q_2_G_1_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->N3_serial)
						{
							q_2_G_1_matrix[7][0]=10*x[i][0];
							q_2_G_1_matrix[7][1]=10*x[i][1];
							q_2_G_1_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->N7_serial)
						{
							q_2_G_1_matrix[2][0]=10*x[i][0];
							q_2_G_1_matrix[2][1]=10*x[i][1];
							q_2_G_1_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_1->N9_serial)
						{
							q_2_G_1_matrix[0][0]=10*x[i][0];
							q_2_G_1_matrix[0][1]=10*x[i][1];
							q_2_G_1_matrix[0][2]=10*x[i][2];		
						}
//q_2_G_2
						if((i+1)==bs_q_2_G_2->C2_serial)
						{
							q_2_G_2_matrix[6][0]=10*x[i][0];
							q_2_G_2_matrix[6][1]=10*x[i][1];
							q_2_G_2_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_2_G_2->C4_serial)
						{
							q_2_G_2_matrix[8][0]=10*x[i][0];
							q_2_G_2_matrix[8][1]=10*x[i][1];
							q_2_G_2_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_2_G_2->C5_serial)
						{
							q_2_G_2_matrix[3][0]=10*x[i][0];
							q_2_G_2_matrix[3][1]=10*x[i][1];
							q_2_G_2_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->C6_serial)
						{
							q_2_G_2_matrix[4][0]=10*x[i][0];
							q_2_G_2_matrix[4][1]=10*x[i][1];
							q_2_G_2_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->C8_serial)
						{
							q_2_G_2_matrix[1][0]=10*x[i][0];
							q_2_G_2_matrix[1][1]=10*x[i][1];
							q_2_G_2_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->N1_serial)
						{
							q_2_G_2_matrix[5][0]=10*x[i][0];
							q_2_G_2_matrix[5][1]=10*x[i][1];
							q_2_G_2_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->N3_serial)
						{
							q_2_G_2_matrix[7][0]=10*x[i][0];
							q_2_G_2_matrix[7][1]=10*x[i][1];
							q_2_G_2_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->N7_serial)
						{
							q_2_G_2_matrix[2][0]=10*x[i][0];
							q_2_G_2_matrix[2][1]=10*x[i][1];
							q_2_G_2_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_2->N9_serial)
						{
							q_2_G_2_matrix[0][0]=10*x[i][0];
							q_2_G_2_matrix[0][1]=10*x[i][1];
							q_2_G_2_matrix[0][2]=10*x[i][2];		
						}
//q_2_G_3
						if((i+1)==bs_q_2_G_3->C2_serial)
						{
							q_2_G_3_matrix[6][0]=10*x[i][0];
							q_2_G_3_matrix[6][1]=10*x[i][1];
							q_2_G_3_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_2_G_3->C4_serial)
						{
							q_2_G_3_matrix[8][0]=10*x[i][0];
							q_2_G_3_matrix[8][1]=10*x[i][1];
							q_2_G_3_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_2_G_3->C5_serial)
						{
							q_2_G_3_matrix[3][0]=10*x[i][0];
							q_2_G_3_matrix[3][1]=10*x[i][1];
							q_2_G_3_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->C6_serial)
						{
							q_2_G_3_matrix[4][0]=10*x[i][0];
							q_2_G_3_matrix[4][1]=10*x[i][1];
							q_2_G_3_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->C8_serial)
						{
							q_2_G_3_matrix[1][0]=10*x[i][0];
							q_2_G_3_matrix[1][1]=10*x[i][1];
							q_2_G_3_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->N1_serial)
						{
							q_2_G_3_matrix[5][0]=10*x[i][0];
							q_2_G_3_matrix[5][1]=10*x[i][1];
							q_2_G_3_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->N3_serial)
						{
							q_2_G_3_matrix[7][0]=10*x[i][0];
							q_2_G_3_matrix[7][1]=10*x[i][1];
							q_2_G_3_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->N7_serial)
						{
							q_2_G_3_matrix[2][0]=10*x[i][0];
							q_2_G_3_matrix[2][1]=10*x[i][1];
							q_2_G_3_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_3->N9_serial)
						{
							q_2_G_3_matrix[0][0]=10*x[i][0];
							q_2_G_3_matrix[0][1]=10*x[i][1];
							q_2_G_3_matrix[0][2]=10*x[i][2];		
						}
//q_2_G_4
						if((i+1)==bs_q_2_G_4->C2_serial)
						{
							q_2_G_4_matrix[6][0]=10*x[i][0];
							q_2_G_4_matrix[6][1]=10*x[i][1];
							q_2_G_4_matrix[6][2]=10*x[i][2];
						}
						if((i+1)==bs_q_2_G_4->C4_serial)
						{
							q_2_G_4_matrix[8][0]=10*x[i][0];
							q_2_G_4_matrix[8][1]=10*x[i][1];
							q_2_G_4_matrix[8][2]=10*x[i][2];						
						}
						if((i+1)==bs_q_2_G_4->C5_serial)
						{
							q_2_G_4_matrix[3][0]=10*x[i][0];
							q_2_G_4_matrix[3][1]=10*x[i][1];
							q_2_G_4_matrix[3][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->C6_serial)
						{
							q_2_G_4_matrix[4][0]=10*x[i][0];
							q_2_G_4_matrix[4][1]=10*x[i][1];
							q_2_G_4_matrix[4][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->C8_serial)
						{
							q_2_G_4_matrix[1][0]=10*x[i][0];
							q_2_G_4_matrix[1][1]=10*x[i][1];
							q_2_G_4_matrix[1][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->N1_serial)
						{
							q_2_G_4_matrix[5][0]=10*x[i][0];
							q_2_G_4_matrix[5][1]=10*x[i][1];
							q_2_G_4_matrix[5][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->N3_serial)
						{
							q_2_G_4_matrix[7][0]=10*x[i][0];
							q_2_G_4_matrix[7][1]=10*x[i][1];
							q_2_G_4_matrix[7][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->N7_serial)
						{
							q_2_G_4_matrix[2][0]=10*x[i][0];
							q_2_G_4_matrix[2][1]=10*x[i][1];
							q_2_G_4_matrix[2][2]=10*x[i][2];		
						}
						if((i+1)==bs_q_2_G_4->N9_serial)
						{
							q_2_G_4_matrix[0][0]=10*x[i][0];
							q_2_G_4_matrix[0][1]=10*x[i][1];
							q_2_G_4_matrix[0][2]=10*x[i][2];		
						}
					}
					
					double ** q_1_G_1_rotation_matrix;
					double ** q_1_G_2_rotation_matrix;
					double ** q_1_G_3_rotation_matrix;
					double ** q_1_G_4_rotation_matrix;
					double ** q_2_G_1_rotation_matrix;
					double ** q_2_G_2_rotation_matrix;
					double ** q_2_G_3_rotation_matrix;
					double ** q_2_G_4_rotation_matrix;

					q_1_G_1_rotation_matrix=dmatrix(0,2,0,2);
					q_1_G_2_rotation_matrix=dmatrix(0,2,0,2);
					q_1_G_3_rotation_matrix=dmatrix(0,2,0,2);
					q_1_G_4_rotation_matrix=dmatrix(0,2,0,2);
					q_2_G_1_rotation_matrix=dmatrix(0,2,0,2);
					q_2_G_2_rotation_matrix=dmatrix(0,2,0,2);
					q_2_G_3_rotation_matrix=dmatrix(0,2,0,2);
					q_2_G_4_rotation_matrix=dmatrix(0,2,0,2);

					Rotation_matrix(q_1_G_1_matrix,'G',q_1_G_1_rotation_matrix);
					Rotation_matrix(q_1_G_2_matrix,'G',q_1_G_2_rotation_matrix);
					Rotation_matrix(q_1_G_3_matrix,'G',q_1_G_3_rotation_matrix);
					Rotation_matrix(q_1_G_4_matrix,'G',q_1_G_4_rotation_matrix);
					Rotation_matrix(q_2_G_1_matrix,'G',q_2_G_1_rotation_matrix);
					Rotation_matrix(q_2_G_2_matrix,'G',q_2_G_2_rotation_matrix);
					Rotation_matrix(q_2_G_3_matrix,'G',q_2_G_3_rotation_matrix);
					Rotation_matrix(q_2_G_4_matrix,'G',q_2_G_4_rotation_matrix);

					//以q_1_G_1为基准,校正z-axis的方向。
					double * vector_q_1_G_1;
					double * vector_q_1_G_2;
					double * vector_q_1_G_3;
					double * vector_q_1_G_4;
					double * vector_q_2_G_1;
					double * vector_q_2_G_2;
					double * vector_q_2_G_3;
					double * vector_q_2_G_4;

					vector_q_1_G_1=dvector(0,2);
					vector_q_1_G_2=dvector(0,2);
					vector_q_1_G_3=dvector(0,2);
					vector_q_1_G_4=dvector(0,2);
					vector_q_2_G_1=dvector(0,2);
					vector_q_2_G_2=dvector(0,2);
					vector_q_2_G_3=dvector(0,2);
					vector_q_2_G_4=dvector(0,2);

					for(int i=0;i<3;i++)
					{
						vector_q_1_G_1[i]=q_1_G_1_rotation_matrix[i][2];
						vector_q_1_G_2[i]=q_1_G_2_rotation_matrix[i][2];
						vector_q_1_G_3[i]=q_1_G_3_rotation_matrix[i][2];
						vector_q_1_G_4[i]=q_1_G_4_rotation_matrix[i][2];
						vector_q_2_G_1[i]=q_2_G_1_rotation_matrix[i][2];
						vector_q_2_G_2[i]=q_2_G_2_rotation_matrix[i][2];
						vector_q_2_G_3[i]=q_2_G_3_rotation_matrix[i][2];
						vector_q_2_G_4[i]=q_2_G_4_rotation_matrix[i][2];
					}

					if(dot_product_vector(vector_q_1_G_1,vector_q_1_G_2,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_1_G_2_rotation_matrix[j][i]= - q_1_G_2_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_1_G_3,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_1_G_3_rotation_matrix[j][i]= - q_1_G_3_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_1_G_4,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_1_G_4_rotation_matrix[j][i]= - q_1_G_4_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_2_G_1,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_2_G_1_rotation_matrix[j][i]= - q_2_G_1_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_2_G_2,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_2_G_2_rotation_matrix[j][i]= - q_2_G_2_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_2_G_3,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_2_G_3_rotation_matrix[j][i]= - q_2_G_3_rotation_matrix[j][i];
							}
						}
					}
					if(dot_product_vector(vector_q_1_G_1,vector_q_2_G_4,3)<0)
					{
						for(int i=1;i<3;i++)
						{
							for(int j=0;j<3;j++)
							{
								q_2_G_4_rotation_matrix[j][i]= - q_2_G_4_rotation_matrix[j][i];
							}
						}
					}


					free_dvector(vector_q_1_G_1,0,2);
					free_dvector(vector_q_1_G_2,0,2);
					free_dvector(vector_q_1_G_3,0,2);
					free_dvector(vector_q_1_G_4,0,2);
					free_dvector(vector_q_2_G_1,0,2);
					free_dvector(vector_q_2_G_2,0,2);
					free_dvector(vector_q_2_G_3,0,2);
					free_dvector(vector_q_2_G_4,0,2);


					//get the origin position of 8 guanine.
					double * origin_vector_q_1_G_1;
					double * origin_vector_q_1_G_2;
					double * origin_vector_q_1_G_3;
					double * origin_vector_q_1_G_4;
					double * origin_vector_q_2_G_1;
					double * origin_vector_q_2_G_2;
					double * origin_vector_q_2_G_3;
					double * origin_vector_q_2_G_4;

					origin_vector_q_1_G_1=dvector(0,2);
					origin_vector_q_1_G_2=dvector(0,2);
					origin_vector_q_1_G_3=dvector(0,2);
					origin_vector_q_1_G_4=dvector(0,2);
					origin_vector_q_2_G_1=dvector(0,2);
					origin_vector_q_2_G_2=dvector(0,2);
					origin_vector_q_2_G_3=dvector(0,2);
					origin_vector_q_2_G_4=dvector(0,2);


					origin_vector(q_1_G_1_matrix,q_1_G_1_rotation_matrix,'G',origin_vector_q_1_G_1);
					origin_vector(q_1_G_2_matrix,q_1_G_2_rotation_matrix,'G',origin_vector_q_1_G_2);
					origin_vector(q_1_G_3_matrix,q_1_G_3_rotation_matrix,'G',origin_vector_q_1_G_3);
					origin_vector(q_1_G_4_matrix,q_1_G_4_rotation_matrix,'G',origin_vector_q_1_G_4);
					origin_vector(q_2_G_1_matrix,q_2_G_1_rotation_matrix,'G',origin_vector_q_2_G_1);
					origin_vector(q_2_G_2_matrix,q_2_G_2_rotation_matrix,'G',origin_vector_q_2_G_2);
					origin_vector(q_2_G_3_matrix,q_2_G_3_rotation_matrix,'G',origin_vector_q_2_G_3);
					origin_vector(q_2_G_4_matrix,q_2_G_4_rotation_matrix,'G',origin_vector_q_2_G_4);
				
					//get the z-axis
					vector_q_1_G_1=dvector(0,2);
					vector_q_1_G_2=dvector(0,2);
					vector_q_1_G_3=dvector(0,2);
					vector_q_1_G_4=dvector(0,2);
					vector_q_2_G_1=dvector(0,2);
					vector_q_2_G_2=dvector(0,2);
					vector_q_2_G_3=dvector(0,2);
					vector_q_2_G_4=dvector(0,2);

					for(int i=0;i<3;i++)
					{
						vector_q_1_G_1[i]=q_1_G_1_rotation_matrix[i][2];
						vector_q_1_G_2[i]=q_1_G_2_rotation_matrix[i][2];
						vector_q_1_G_3[i]=q_1_G_3_rotation_matrix[i][2];
						vector_q_1_G_4[i]=q_1_G_4_rotation_matrix[i][2];
						vector_q_2_G_1[i]=q_2_G_1_rotation_matrix[i][2];
						vector_q_2_G_2[i]=q_2_G_2_rotation_matrix[i][2];
						vector_q_2_G_3[i]=q_2_G_3_rotation_matrix[i][2];
						vector_q_2_G_4[i]=q_2_G_4_rotation_matrix[i][2];

		//				cout<<vector_q_1_G_1[i]<<endl;  //for test 
		//				cout<<vector_q_1_G_2[i]<<endl;  //for test 
		//				cout<<vector_q_1_G_3[i]<<endl;  //for test 
		//				cout<<vector_q_1_G_4[i]<<endl;  //for test 
		//				cout<<vector_q_2_G_1[i]<<endl;  //for test 
		//				cout<<vector_q_2_G_2[i]<<endl;  //for test 
			//			cout<<vector_q_2_G_3[i]<<endl;  //for test 
		//				cout<<vector_q_2_G_4[i]<<endl;  //for test 
					}

					double * vector_q_1_G_1_2;
					double * vector_q_1_G_3_4;
					double * vector_q_1_G_1_2_3_4;
					double * vector_q_2_G_1_2;
					double * vector_q_2_G_3_4;
					double * vector_q_2_G_1_2_3_4;
					double * vector_orientation;

					 vector_q_1_G_1_2=dvector(0,2);
					 vector_q_1_G_3_4=dvector(0,2);
					 vector_q_1_G_1_2_3_4=dvector(0,2);
					 vector_q_2_G_1_2=dvector(0,2);
					 vector_q_2_G_3_4=dvector(0,2);
					 vector_q_2_G_1_2_3_4=dvector(0,2);
					 vector_orientation=dvector(0,2);

					rotate_2_vector(vector_q_1_G_1,vector_q_1_G_2, vector_q_1_G_1_2);
					// for test
			//		for(int i=0;i<3;i++)
		//			{
		//				cout<<vector_q_1_G_1_2[i]<<endl;
		//			}
					//
					rotate_2_vector(vector_q_1_G_3,vector_q_1_G_4,vector_q_1_G_3_4);

					rotate_2_vector(vector_q_2_G_1,vector_q_2_G_2,vector_q_2_G_1_2);
					rotate_2_vector(vector_q_2_G_3,vector_q_2_G_4,vector_q_2_G_3_4);

					rotate_2_vector(vector_q_1_G_1_2,vector_q_1_G_3_4,vector_q_1_G_1_2_3_4);
					rotate_2_vector(vector_q_2_G_1_2,vector_q_2_G_3_4,vector_q_2_G_1_2_3_4);

					rotate_2_vector(vector_q_1_G_1_2_3_4,vector_q_2_G_1_2_3_4,vector_orientation);
					//for test
					/*
					for(int i=0;i<3;i++)
					{
						cout<<vector_orientation[i]<<endl;
					}
					*/
					//

					//get the center position.
					double * center_position_vector;
					double * center_1;
					double * center_2;
					double * vector_2_ion;
					double * vector_1_2;
					center_position_vector=dvector(0,2);
					vector_2_ion=dvector(0,2);
					center_1=dvector(0,2);
					center_2=dvector(0,2);
					vector_1_2=dvector(0,2);

					for(int i=0;i<3;i++)
					{
						center_position_vector[i]=(origin_vector_q_1_G_1[i]+origin_vector_q_1_G_2[i]+origin_vector_q_1_G_3[i]+origin_vector_q_1_G_4[i]+origin_vector_q_2_G_1[i]+origin_vector_q_2_G_2[i]+origin_vector_q_2_G_3[i]+origin_vector_q_2_G_4[i])/8;
						center_1[i]=(origin_vector_q_1_G_1[i]+origin_vector_q_1_G_2[i]+origin_vector_q_1_G_3[i]+origin_vector_q_1_G_4[i])/4;
						center_2[i]=(origin_vector_q_2_G_1[i]+origin_vector_q_2_G_2[i]+origin_vector_q_2_G_3[i]+origin_vector_q_2_G_4[i])/4;
						vector_2_ion[i]=ion_coor[i]-center_position_vector[i];

						vector_1_2[i]=center_1[i]-center_2[i];
					}
					
					double length=0;
					double dist_z=0;
					double dist=0;
	
					length=dot_product_vector(vector_orientation,vector_2_ion,3); 
					dist_z=dot_product_vector(vector_orientation,vector_1_2,3);
					dist=sqrt(dot_product_vector(vector_1_2,vector_1_2,3));								
					 
					//
					out<<fixed<<showpoint;
					out<<time_temp<<"\t"<<setprecision(4)<<fabs(length)<<"\t"<<setprecision(4)<<dist<<"\t"<<setprecision(4)<<fabs(dist_z)<<endl;		


					free_dmatrix(q_1_G_1_matrix,0,2,0,8);
					free_dmatrix(q_1_G_2_matrix,0,2,0,8);
					free_dmatrix(q_1_G_3_matrix,0,2,0,8);
					free_dmatrix(q_1_G_4_matrix,0,2,0,8);
					free_dmatrix(q_2_G_1_matrix,0,2,0,8);
					free_dmatrix(q_2_G_2_matrix,0,2,0,8);
					free_dmatrix(q_2_G_3_matrix,0,2,0,8);
					free_dmatrix(q_2_G_4_matrix,0,2,0,8);

					free_dmatrix(q_1_G_1_rotation_matrix,0,2,0,2);
					free_dmatrix(q_1_G_2_rotation_matrix,0,2,0,2);
					free_dmatrix(q_1_G_3_rotation_matrix,0,2,0,2);
					free_dmatrix(q_1_G_4_rotation_matrix,0,2,0,2);
					free_dmatrix(q_2_G_1_rotation_matrix,0,2,0,2);
					free_dmatrix(q_2_G_2_rotation_matrix,0,2,0,2);
					free_dmatrix(q_2_G_3_rotation_matrix,0,2,0,2);
					free_dmatrix(q_2_G_4_rotation_matrix,0,2,0,2);

					free_dvector(vector_q_1_G_1,0,2);
					free_dvector(vector_q_1_G_2,0,2);
					free_dvector(vector_q_1_G_3,0,2);
					free_dvector(vector_q_1_G_4,0,2);
					free_dvector(vector_q_2_G_1,0,2);
					free_dvector(vector_q_2_G_2,0,2);
					free_dvector(vector_q_2_G_3,0,2);
					free_dvector(vector_q_2_G_4,0,2);

					free_dvector(origin_vector_q_1_G_1,0,2);
					free_dvector(origin_vector_q_1_G_2,0,2);
					free_dvector(origin_vector_q_1_G_3,0,2);
					free_dvector(origin_vector_q_1_G_4,0,2);
					free_dvector(origin_vector_q_2_G_1,0,2);
					free_dvector(origin_vector_q_2_G_2,0,2);
					free_dvector(origin_vector_q_2_G_3,0,2);
					free_dvector(origin_vector_q_2_G_4,0,2);

					 free_dvector(vector_q_1_G_1_2,0,2);
					 free_dvector(vector_q_1_G_3_4,0,2);
					 free_dvector(vector_q_1_G_1_2_3_4,0,2);
					 free_dvector(vector_q_2_G_1_2,0,2);
					 free_dvector(vector_q_2_G_3_4,0,2);
					 free_dvector( vector_q_2_G_1_2_3_4,0,2);
				     free_dvector( vector_orientation,0,2);
			}
        }
        xdrfile_close(xtc);
		out.close();
}