Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FragQualFilter.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file protocols/filters/FragQualFilter.cc
11 /// @brief filter structures by packstat score
12 /// @detailed
13 /// @author Nobuyasu Koga ( nobuyasu@uw.edu )
14 
15 // Unit Headers
18 
19 // Project Headers
20 #include <core/types.hh>
21 #include <core/pose/Pose.hh>
23 // AUTO-REMOVED #include <core/scoring/packstat/compute_sasa.hh>
24 #include <basic/MetricValue.hh>
25 // AUTO-REMOVED #include <protocols/moves/DataMap.hh>
27 
28 // Utility headers
29 #include <basic/Tracer.hh>
30 
31 // Parser headers
33 #include <utility/tag/Tag.hh>
34 
35 #include <utility/vector0.hh>
36 #include <utility/vector1.hh>
37 
38 //// C++ headers
39 static basic::Tracer tr("protocols.fldsgn.filters.FragQualFilter");
40 
41 namespace protocols {
42 namespace fldsgn {
43 namespace filters {
44 
45 // @brief default constructor
47  Filter( "FragQual" ),
48  filtered_type_( "num_goodfrag" ),
49  filtered_value_( 0.0 ),
50  rmsd_cutoff_( 1.0 )
51 {}
52 
53 // @brief copy constructor
55  //utility::pointer::ReferenceCount(),
56  Super( rval ),
57  filtered_type_( rval.filtered_type_ ),
58  filtered_value_( rval.filtered_value_ ),
59  rmsd_cutoff_( 1.0 )
60 {}
61 
62 // @brief set filtered value
63 void FragQualFilter::filtered_value( Real const & value )
64 {
65  filtered_value_ = value;
66 }
67 
68 // @brief set report type
70 {
71  filtered_type_ = value;
72 }
73 
74 /// @brief
76 FragQualFilter::report_sm( Pose const & pose ) const
77 {
78  return compute( pose );
79 }
80 
81 /// @brief
82 void
83 FragQualFilter::report( std::ostream & out, Pose const & pose ) const
84 {
85  out << "FragQual: " << compute( pose ) << std::endl;
86 }
87 
88 /// @brief
90 FragQualFilter::compute( Pose const & pose ) const
91 {
92  basic::MetricValue< Real > score;
93  pose.metric( "FragQual", filtered_type_, score );
94  return score.value();
95 }
96 
97 // @brief returns true if the given pose passes the filter, false otherwise.
98 // In this case, the test is whether the give pose is the topology we want.
99 bool FragQualFilter::apply( Pose const & pose ) const
100 {
101  Real value = compute( pose );
102  if( value > filtered_value_ ){
103  tr << "Successfully filtered: " << value << std::endl;
104  return true;
105  }else{
106  tr << "Filter failed current/threshold=" << value << "/" << filtered_value_ << std::endl;
107  return false;
108  }
109 } // apply_filter
110 
111 /// @brief parse xml
112 void
114  TagPtr const tag,
115  DataMap & data,
116  Filters_map const & filters,
117  Movers_map const & movers,
118  Pose const & pose )
119 {
122 
123  // set filtered type
124  filtered_type_ = tag->getOption<String>( "type", "num_goodfrag" );
125  if( filtered_type_ != "num_goodfrag" && filtered_type_ != "coverage" ) {
126  tr << "Filter type, " << filtered_type_ << " is not defined." << std::endl;
127  runtime_assert( false );
128  }
129 
130  // set threshold
131  filtered_value_ = tag->getOption<Real>( "threshold", 0.0 );
132  tr << "Structures with fragqual value, " << filtered_type_ << " above " << filtered_value_ << " will be filtred." << std::endl;
133 
134  // set FragQual
135  CalculatorFactory::Instance().remove_calculator( "FragQual" );
136  FragQualCalculator calculator;
137  calculator.parse_my_tag( tag, data, filters, movers, pose );
138  CalculatorFactory::Instance().register_calculator( "FragQual", calculator.clone() );
139 
140  //calculator.begin( tag->getOption<Size>( "begin", 1 ) );
141  //calculator.end( tag->getOption<Size>( "end", pose.total_residue() ) );
142  //
143  //rmsd_cutoff_ = tag->getOption<Real>( "rmsd_cutoff", 1.0 );
144  //calculator.rmsd_cutoff( rmsd_cutoff_ );
145 
146 }
147 
150 
152 FragQualFilterCreator::keyname() const { return "FragQual"; }
153 
154 
155 } // filters
156 } // fldsgn
157 } // protocols