30 #include <basic/datacache/BasicDataCache.hh>
35 #include <ObjexxFCL/FArray1D.hh>
36 #include <ObjexxFCL/FArray2D.hh>
39 #include <basic/Tracer.hh>
40 #include <utility/vector1.hh>
43 #include <numeric/random/random.hh>
44 #include <numeric/xyzVector.hh>
57 using namespace fragment;
58 static basic::Tracer
tr(
"protocols.jumping.MembraneJump");
59 static numeric::random::RandomGenerator
RG(750107);
69 templates_.read_from_file_no_filters(template_file);
71 template_size_=templates_.size();
72 pairings_size_=pairings_.size();
80 using namespace ObjexxFCL;
83 if(pairings_.size()==0)
85 std::cout <<
"setting up fold_tree with " << njumps <<
" jump(s)\n";
94 FArray1D_bool tmh_involved_in_jump(total_tmhelix,
false);
101 }
else if(j>topology.
span_end(total_tmhelix)) {
102 tmh(j)=total_tmhelix;
106 for (
Size reg = 2; reg <= total_tmhelix; ++reg ) {
115 for (
Size j = 1; j <= total_tmhelix; ++j ) {
122 while(selected_pairings.size()<njumps && tries < 10) {
123 Size index=
static_cast< int >(
RG.uniform()*pairings_.size()+1);
124 std::cout <<
"Tries : " << tries <<
" " << index <<
' ' << pairings_[index].Pos1() <<
' ' << tmh(pairings_[index].Pos1()) <<
' ' << pairings_[index].Pos2() <<
' ' << tmh(pairings_[index].Pos2()) <<std::endl;
125 bool check_compatible=
true;
128 if(tmh_involved_in_jump(tmh(pairings_[index].Pos1())) ||
129 tmh_involved_in_jump(tmh(pairings_[index].Pos2()))){
130 check_compatible=
false;
133 for (
Size j = 1; j <= selected_pairings.size(); ++j) {
134 if(selected_pairings[j].Pos1() == pairings_[index].Pos1() &&
135 selected_pairings[j].Pos2() == pairings_[index].Pos2())
137 check_compatible=
false;
143 selected_pairings.push_back(pairings_[index]);
144 tmh_involved_in_jump(tmh(pairings_[index].Pos1()))=
true;
145 tmh_involved_in_jump(tmh(pairings_[index].Pos2()))=
true;
149 if(selected_pairings.size()<njumps)
151 std::cout <<
"WARNING: Only picked " << selected_pairings.size() <<
" given number was " << njumps <<
" only allow one jump between any two TMHs " << std::endl;
153 FArray2D_int jumps(2,selected_pairings.size());
154 for(
Size i=1;i<=selected_pairings.size();++i) {
155 jumps(1,i)=selected_pairings[i].Pos1();
156 jumps(2,i)=selected_pairings[i].Pos2();
158 FArray1D_float cut_bias(nres,0.0);
165 int num_jumps_in=selected_pairings.size();
172 for(
Size i=1;i<=selected_pairings.size();++i) {
173 Size p1=selected_pairings[i].Pos1();
174 Size p2=selected_pairings[i].Pos2();
176 core::kinematics::RT rt(templates_.get_random_tmh_jump(selected_pairings[i].Orientation(),p1,p2));