/// \brief Use the specified DSSP file to check the hbond calculations for the specified PDB file
		///
		/// \todo Remove the arg_warn_only_on_diff argument if dssp_ignores_valid_residue_1 is resolved
		inline void dssp_hbond_calc_test_suite_fixture::use_dssp_file_to_check_hbonds_calcs(const path &arg_dssp_file,        ///< The DSSP file to compare against
		                                                                                    const path &arg_pdb_file,         ///< The PDB file to check
		                                                                                    const bool &arg_warn_only_on_diff ///< Whether to only warn on differences
		                                                                                    ) {
			BOOST_REQUIRE( exists( arg_pdb_file ) );
			// const auto read_dssp_start_time = high_resolution_clock::now();
			const auto dssp_hbonds = parse_dssp_for_calc_testing( arg_dssp_file );
			// const auto read_dssp_stop_time  = high_resolution_clock::now();

			if ( ! dssp_hbonds.empty() ) {
				// const auto read_pdb_start_time = high_resolution_clock::now();
				const auto parsed_pdb          = read_pdb_file( arg_pdb_file );
				// const auto read_pdb_stop_time  = high_resolution_clock::now();

				protein_from_dssp_and_pdb( read_dssp_file( arg_dssp_file ), parsed_pdb, dssp_skip_policy::DONT_SKIP__BREAK_ANGLES );

				// const auto calc_start_time = high_resolution_clock::now();
				const auto bifur_hbonds = dssp_hbond_calc::calc_bifur_hbonds_of_pdb__recalc_backbone_residues(
					parsed_pdb
				);
				// const auto calc_stop_time  = high_resolution_clock::now();

				// std::cerr << "Read DSSP   : " << durn_to_seconds_string ( read_dssp_stop_time - read_dssp_start_time ) << "\n";
				// std::cerr << "Read PDB    : " << durn_to_seconds_string ( read_pdb_stop_time  - read_pdb_start_time  ) << "\n";
				// std::cerr << "Calc hbonds : " << durn_to_seconds_string ( calc_stop_time      - calc_start_time      ) << "\n";

				// BOOST_TEST_INFO() isn't present in Boost > 1.58.0
				// BOOST_TEST_INFO  ( "Checking DSSP file \"" + arg_dssp_file.string() + "\"" );
				if ( arg_warn_only_on_diff ) {
					BOOST_WARN_EQUAL ( difference_string( dssp_hbonds, bifur_hbonds ), none );
				}
				else {
					BOOST_CHECK_EQUAL( difference_string( dssp_hbonds, bifur_hbonds ), none );
				}
			}
		}
Beispiel #2
0
int main (int argc, char *argv[]) {

          
	if (argc < PDB_INDEX+1) 
	{
	cout <<"Usage:"<<argv[0]<<" monomer.ruf.pstrm\n";
	exit(1);
	}//end of if
	
	coord_struct  asa;
	int    i,j;
	char p_n[20];
	vector<char> chain;
        vector<aa> w_c, w_c2;	

        vector<aa_asa> std_asa; 
        vector<naa2>w_c4;
        vector<naa>w_c3;

        vector<residue>a_w_c;
	
        vector<protein_rou> proteins_rou;	
	
	char *c_a;
	c_a=new char[1];
	

         vector<protein> whole_protein;
         vector<aa> wc_c_aa2,wc_t_aa2;
         vector<naa> wc_c_aa3,wc_t_aa3;
	
        
	 ifstream protein_file("monomer_u.txt",ios::in);

         char *file_name;
         file_name=new char[10];

         while(protein_file>>file_name)
        {

	read_asa_file(w_c,asa,file_name);
        cal_tot_asa_of_res(w_c4,w_c);

        // cout<<setiosflags(ios::left)<<setw(15)<<file_name<<setiosflags(ios::left)<<setw(10)<<w_c.size()<<endl;
        // w_c.clear();

        //geo_cen_of_res(wc_c_aa3,wc_c_aa2,a_w_c,w_c);
          //res_alpha_atom(wc_c_aa3,wc_c_aa2,a_w_c,w_c);
        
        //cout<<whole_protein.size()<<endl; 
           

            
	geo_cen_of_side_chain2(wc_c_aa3,wc_c_aa2,w_c);
	ter_atom_of_side_chain2(wc_t_aa3,wc_t_aa2,w_c);
 

	for(i=0;i<wc_c_aa3.size();i++)
        {
           wc_c_aa3[i].angle_t=1000;
	}

	
	for(i=0;i<wc_c_aa3.size();i++)
        {
         for(j=0;j<wc_t_aa3.size();j++)
         {
         if(wc_c_aa3[i].res_num==wc_t_aa3[j].res_num&&wc_c_aa3[i].chain_type==wc_t_aa3[j].chain_type&&
            (strncmp(wc_c_aa3[i].res_id,wc_t_aa3[j].res_id,3)==0))
          {
           wc_c_aa3[i].angle_t=wc_t_aa3[j].angle;
          }//end of if
         }//end of for
        }// end of for
        
	for(i=0;i<wc_c_aa3.size();i++)
        {
         for(j=0;j<w_c4.size();j++)
         {
         if(wc_c_aa3[i].res_num==w_c4[j].res_num&&wc_c_aa3[i].chain_type==w_c4[j].chain_type&&
            (strncmp(wc_c_aa3[i].res_id,w_c4[j].res_id,3)==0))
          {
           wc_c_aa3[i].asa=w_c4[j].tot_atom_asa;
          }//end of if
         }//end of for
        }// end of for
/*
	cout<<setiosflags(ios::left)<<setw(8)<<"res_num"
        <<setiosflags(ios::left)<<setw(8)<<"res_id"
        <<setiosflags(ios::left)<<setw(8)<<"ch_type"
        <<setiosflags(ios::left)<<setw(8)<<"an_c_c"
        <<setiosflags(ios::left)<<setw(8)<<"an_c_t"
	<<setiosflags(ios::left)<<setw(8)<<"asa"<<endl;
	
	for(i=0;i<wc_c_aa3.size();i++)
	{
	cout<<setiosflags(ios::left)<<setw(8)<<wc_c_aa3[i].res_num
        <<setiosflags(ios::left)<<setw(8)<<wc_c_aa3[i].res_id
        <<setiosflags(ios::left)<<setw(8)<<wc_c_aa3[i].chain_type
        <<setiosflags(ios::fixed)
        <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<wc_c_aa3[i].angle
        <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<wc_c_aa3[i].angle_t
 	<<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<wc_c_aa3[i].asa<<endl;
	}//end of for
  */
        
        
        residue one_residue;
        one_residue.res_id=new char[5];

        
        protein one_protein;
        one_protein.protein_name=new char[10];

        strcpy(one_protein.protein_name,strtok(file_name,"."));

        for(i=0;i<wc_c_aa3.size();i++)
        {
          one_residue.res_id=wc_c_aa3[i].res_id;
          one_residue.res_num=wc_c_aa3[i].res_num;
          one_residue.chain_type=wc_c_aa3[i].chain_type;
          one_residue.angle=wc_c_aa3[i].angle;
          one_residue.asa=wc_c_aa3[i].asa;
          one_protein.residue_str.push_back(one_residue); 
        }
        whole_protein.push_back(one_protein);

        one_protein.residue_str.clear();
        wc_c_aa2.clear();
        wc_t_aa2.clear();
        wc_c_aa3.clear();
        wc_t_aa3.clear();
        w_c4.clear();
        w_c.clear();  
         
        }//end of while 

        //these two functions are in read_dimer.cpp file     
	read_pdb_file(proteins_rou,argv[PDB_INDEX]);
        calculate_roughness_of_residue(proteins_rou);   
	
	 ofstream output("results3_asa.txt",ios::out);
         int m,n,tt;

	for(i=0;i<whole_protein.size();i++)
         {
          for(m=0;m<whole_protein[i].residue_str.size();m++)
           {whole_protein[i].residue_str[m].roughness=-100;}
         }

          for(j=0;j<proteins_rou.size();j++)
            {
             for(n=0;n<proteins_rou[j].w_c_rou.size();n++)
              {
              proteins_rou[j].w_c_rou[n].asa=0;  
              }
            }               
       

         tt=0;    
	for(i=0;i<whole_protein.size();i++)
	{
          for(j=0;j<proteins_rou.size();j++)
           {
            if(strcmp(whole_protein[i].protein_name,strtok(proteins_rou[j].protein_rou_id,"."))==0) 
           {
        	for(m=0;m<whole_protein[i].residue_str.size();m++)
        	{
                  for(n=0;n<proteins_rou[j].w_c_rou.size();n++)
                   {
                     if(whole_protein[i].residue_str[m].res_num==proteins_rou[j].w_c_rou[n].res_num&&
                       *whole_protein[i].residue_str[m].res_id==*proteins_rou[j].w_c_rou[n].res_id&&
                        whole_protein[i].residue_str[m].chain_type==*proteins_rou[j].w_c_rou[n].chain_type&&
                        whole_protein[i].residue_str[m].asa>5&&
                        proteins_rou[j].w_c_rou[n].roughness>0
                       )
                     {

                     output<<setiosflags(ios::left)<<setw(10)<<whole_protein[i].protein_name
                           <<setiosflags(ios::left)<<setw(6)<<whole_protein[i].residue_str[m].res_num
                           <<setiosflags(ios::left)<<setw(4)<<whole_protein[i].residue_str[m].res_id
                           <<setiosflags(ios::left)<<setw(3)<<whole_protein[i].residue_str[m].chain_type
                           <<setiosflags(ios::left)<<setw(10)<<proteins_rou[j].protein_rou_id
                           <<setiosflags(ios::left)<<setw(6)<<proteins_rou[j].w_c_rou[n].res_num
                           <<setiosflags(ios::left)<<setw(4)<<proteins_rou[j].w_c_rou[n].res_id
                           <<setiosflags(ios::left)<<setw(3)<<proteins_rou[j].w_c_rou[n].chain_type
                           <<setiosflags(ios::fixed)
        	     <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<whole_protein[i].residue_str[m].angle
        	     <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<whole_protein[i].residue_str[m].asa
                     <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<proteins_rou[j].w_c_rou[n].roughness<<endl;
                     whole_protein[i].residue_str[m].roughness=proteins_rou[j].w_c_rou[n].roughness;
                     proteins_rou[j].w_c_rou[n].asa=whole_protein[i].residue_str[m].asa;
                     tt=tt+1; 
                     }//end if
                   }//end for
 	        }//end of for
            }//end of if
           }//end of for 
        }//end of for
	 
         ofstream output1("results3_asa1.txt",ios::out);

	for(i=0;i<whole_protein.size();i++)
         {
          for(m=0;m<whole_protein[i].residue_str.size();m++)
           {
            if(whole_protein[i].residue_str[m].roughness>0)
            {
                     output1<<setiosflags(ios::left)<<setw(10)<<whole_protein[i].protein_name
                           <<setiosflags(ios::left)<<setw(6)<<whole_protein[i].residue_str[m].res_num
                           <<setiosflags(ios::left)<<setw(4)<<whole_protein[i].residue_str[m].res_id
                           <<setiosflags(ios::left)<<setw(3)<<whole_protein[i].residue_str[m].chain_type
                           <<setiosflags(ios::fixed)
        	     <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<whole_protein[i].residue_str[m].angle
        	     <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<whole_protein[i].residue_str[m].asa
                     <<whole_protein[i].residue_str[m].roughness<<endl;
            } 
           }
         }
 
         ofstream output2("results3_asa2.txt",ios::out);

          for(j=0;j<proteins_rou.size();j++)
            {
             for(n=0;n<proteins_rou[j].w_c_rou.size();n++)
              {
               if(proteins_rou[j].w_c_rou[n].asa>5)
                 {                
                     output2<<setiosflags(ios::left)<<setw(10)<<proteins_rou[j].protein_rou_id
                           <<setiosflags(ios::left)<<setw(6)<<proteins_rou[j].w_c_rou[n].res_num
                           <<setiosflags(ios::left)<<setw(4)<<proteins_rou[j].w_c_rou[n].res_id
                           <<setiosflags(ios::left)<<setw(3)<<proteins_rou[j].w_c_rou[n].chain_type
                           <<setiosflags(ios::fixed)
                           <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<proteins_rou[j].w_c_rou[n].roughness
                           <<setiosflags(ios::left)<<setprecision(2)<<setw(8)<<proteins_rou[j].w_c_rou[n].asa<<endl;
                 }         
              }
            }               

         sum_and_output(whole_protein);
         sum_and_output3(whole_protein); 
         sum_and_output5(whole_protein); 
      
         cout<<"total surface residue(asa>5 and roughness>0) is:"<<tt<<endl;
         protein_file.close(); 
      
     
        return(0);
     }//end of main