00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef THREADING_H_
00019 #define THREADING_H_
00020 #include <gecode/kernel.hh>
00021 #include <gecode/int.hh>
00022 #include <gecode/search.hh>
00023 #include <gecode/minimodel.hh>
00024
00025 #include <gecode/int/branch.hh>
00026
00027 #include <string>
00028 #include <vector>
00029 #include <cpsp/HCore.hh>
00030
00031 #include <cpsp/gecode/GC_LatticeNeighbored2.hh>
00032 #include <cpsp/gecode/GC_ValNearCenter.hh>
00033
00034 #include <cpsp/gecode/gecodeExtensions.hh>
00035
00036 #include <biu/LatticeFrame.hh>
00037
00038
00039 using namespace Gecode;
00040 namespace cpsp{
00041
00042 namespace scth{
00043 class SideChainThreading : public Gecode::Space {
00044 private:
00046 IntSet HDomain;
00047
00049 IntSet BHDomain;
00050
00052 IntSet OutCoreDomain;
00053
00054
00057 void BsNeighbours(const std::string *sequence,const biu::IndexVec* neighVecs);
00058
00061 void B_PsNeighbours(const biu::IndexVec* neighVecs);
00062
00065 void B_HsNeighbours(const biu::IndexVec* neighVecs);
00066
00069 void inCore(cpsp::HCore* );
00070
00072 void attachedToCore(cpsp::HCore* );
00073
00075 void outCore(const std::string *sequence,cpsp::HCore* );
00076
00078 void selfAvoid();
00079
00080
00082 void setHDomain(const biu::LatticeFrame* latFrame,cpsp::HCore* hCore);
00083
00085 void setOutCoreDomain(const std::string *sequence,const biu::LatticeFrame* latFrame,cpsp::HCore* hCore);
00086
00088 void setBHDomain(const biu::LatticeFrame* latFrame,cpsp::HCore* hCore);
00089
00093 int getMaxHull(const std::string *sequence);
00094
00096 void printSol(const std::string* seq,const biu::LatticeFrame* latFrame);
00097
00103 std::string printAsMoves(const std::string* seq,const biu::LatticeFrame* latFrame);
00104
00106 void printAsDrowMoves(const std::string* seq,const biu::LatticeFrame* latFrame);
00107 public:
00116 SideChainThreading(const std::string *sequence,
00117 const biu::LatticeFrame* latFrame,const biu::IndexVec* neighVecs,
00118 cpsp::HCore* hCore,const biu::IPointVec* shiftVec=NULL, bool withBreakingSymmetry=true);
00119
00121 SideChainThreading(bool , SideChainThreading& );
00122
00124 virtual Gecode::Space* copy(bool share);
00125
00130 virtual std::string print(const std::string* sequence,const biu::LatticeFrame* latFrame,int option=0);
00131
00132
00136 virtual ~SideChainThreading();
00137
00139 IntVarArray Hs;
00140
00142 IntVarArray Ps;
00143
00145 IntVarArray BHs;
00146
00148 IntVarArray BPs;
00149
00150 };
00151 }
00152 }
00153 #endif
00154