IntaRNA 3.4.1
RNA-RNA interaction prediction | C++ API
Loading...
Searching...
No Matches
SeedHandlerNoBulge.h
Go to the documentation of this file.
1
2#ifndef INTARNA_SEEDHANDLERNOBULGE_H_
3#define INTARNA_SEEDHANDLERNOBULGE_H_
4
8
9#include <boost/unordered_map.hpp>
10
11
12namespace IntaRNA {
13
21{
22
23protected:
24
26 typedef std::vector<E_type> StackingEnergyList;
27
29 typedef boost::unordered_map< Interaction::BasePair, E_type, Interaction::BasePair::Hash > SeedHash;
30
33
34
35public:
36
41 virtual bool guaranteesStackOnlySeeds() const override;
42
43
52 );
53
57 virtual ~SeedHandlerNoBulge() override;
58
67 virtual
68 size_t
69 fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override;
70
81 virtual
82 void
83 traceBackSeed( Interaction & interaction, const size_t i1, const size_t i2) const override;
84
85
92 virtual
93 E_type
94 getSeedE( const size_t i1, const size_t i2 ) const override;
95
104 virtual
105 bool
106 isSeedBound( const size_t i1, const size_t i2 ) const override;
107
114 virtual
115 size_t
116 getSeedLength1( const size_t i1, const size_t i2 ) const override;
117
124 virtual
125 size_t
126 getSeedLength2( const size_t i1, const size_t i2 ) const override;
127
151 virtual
152 bool
153 updateToNextSeed( size_t & i1, size_t & i2
154 , const size_t i1min = 0, const size_t i1max = RnaSequence::lastPos
155 , const size_t i2min = 0, const size_t i2max = RnaSequence::lastPos
156 ) const override;
157
158
159protected:
160
169 void
170 storeSeed( const size_t j1, const size_t j2, const StackingEnergyList & bpE );
171
172};
173
174
178
179
180inline
182 const InteractionEnergy & energy
183 , const SeedConstraint & seedConstraint
184 )
185 :
186 SeedHandler(energy,seedConstraint)
187 , seedForLeftEnd()
188{
189#if INTARNA_IN_DEBUG_MODE
190 if ( ! seedConstraint.getExplicitSeeds().empty()) {
191 LOG(WARNING) <<"explicit seeds definitions not supported by noBulge-seed handler (and thus ignored)";
192 }
193 if ( seedConstraint.getMaxUnpaired1() > 0 ) { throw std::runtime_error("SeedHandlerNoBulge() : seedConstraint.maxUnpaired1 > 0"); }
194 if ( seedConstraint.getMaxUnpaired2() > 0 ) { throw std::runtime_error("SeedHandlerNoBulge() : seedConstraint.maxUnpaired2 > 0"); }
195#endif
196}
197
199
200inline
205
207
208inline
209void
211traceBackSeed( Interaction & interaction
212 , const size_t i1
213 , const size_t i2
214 ) const
215{
216#if INTARNA_IN_DEBUG_MODE
217 if ( !( isSeedBound(i1,i2) ) ) throw std::runtime_error("SeedHandlerNoBulge::traceBackSeed(i1="+toString(i1)+",i2="+toString(i2)+") no seed known");
218#endif
219
220 // get number of base pairs within the seed
221 const size_t seedBps = getConstraint().getBasePairs();
222
223 // add seed base pairs
224 // but exclude left- and right-most bp
225 for (size_t k=1; (k+1)<seedBps; k++) {
226 interaction.basePairs.push_back( energy.getBasePair(i1+k,i2+k) );
227 }
228
229}
230
232
233inline
234E_type
236getSeedE( const size_t i1, const size_t i2 ) const
237{
238 // search for seed entry in hash
239 SeedHash::const_iterator seedData = seedForLeftEnd.find( SeedHash::key_type(i1,i2) );
240 // return according energy value
241 return seedData == seedForLeftEnd.end() ? E_INF : seedData->second;
242}
243
245
246inline
247bool
249isSeedBound( const size_t i1, const size_t i2 ) const
250{
251 // search for seed entry in hash
252 return seedForLeftEnd.find( SeedHash::key_type(i1,i2) ) != seedForLeftEnd.end();
253}
254
256
257inline
258size_t
260getSeedLength1( const size_t i1, const size_t i2 ) const
261{
262#if INTARNA_IN_DEBUG_MODE
263 if ( !( isSeedBound(i1,i2) ) ) throw std::runtime_error("SeedHandlerNoBulge::getSeedLength1(i1="+toString(i1)+",i2="+toString(i2)+") no seed known");
264#endif
265 // check if
266 return getConstraint().getBasePairs();
267}
268
270
271inline
272size_t
274getSeedLength2( const size_t i1, const size_t i2 ) const
275{
276#if INTARNA_IN_DEBUG_MODE
277 if ( !( isSeedBound(i1,i2) ) ) throw std::runtime_error("SeedHandlerNoBulge::getSeedLength2(i1="+toString(i1)+",i2="+toString(i2)+") no seed known");
278#endif
279 // check if
280 return getConstraint().getBasePairs();
281}
282
284
285inline
286void
288storeSeed( const size_t j1, const size_t j2, const StackingEnergyList & bpE )
289{
290 const size_t seedBP = seedConstraint.getBasePairs();
291 E_type seedEhybrid = 0;
292
293 // check if EDs of full seed are within boundaries
294 if ( energy.getED1(j1+1-seedBP, j1) < seedConstraint.getMaxED()
295 && energy.getED2(j2+1-seedBP, j2) < seedConstraint.getMaxED() )
296 {
297 // check seed boundaries if needed
299 && (energy.isGU(j1,j2) || energy.isGU(j1+1-seedBP,j2+1-seedBP)) )
300 {
301 return;
302 }
303
304 // compute seed energy
305 for(auto e=bpE.begin(); e!=bpE.end(); e++) { seedEhybrid += *e; } // (left) stacking energies
306 // check hybridization energy bound (incl E_init)
307 if ( (seedEhybrid+energy.getE_init()) >= seedConstraint.getMaxEhybrid()) {
308 return;
309 }
310
311 E_type seedEfull = energy.getE(j1+1-seedBP, j1, j2+1-seedBP, j2, seedEhybrid) + energy.getE_init(); // ED values etc.
312
313 // store seed hybridization energy if overall E is below to threshold
314 if( seedEfull < seedConstraint.getMaxE() ) {
315 seedForLeftEnd[ SeedHash::key_type(j1+1-seedBP,j2+1-seedBP) ] = seedEhybrid ;
316 }
317 }
318
319
320}
321
323
324inline bool
326{
327 return true;
328}
329
330} // namespace
331
332#endif /* SEEDHANDLERNOBULGE_H_ */
Definition InteractionEnergy.h:20
virtual E_type getE_init() const =0
virtual E_type getE(const size_t i1, const size_t j1, const size_t i2, const size_t j2, const E_type hybridE) const
Definition InteractionEnergy.h:957
virtual E_type getED1(const size_t i1, const size_t j1) const
Definition InteractionEnergy.h:838
virtual Interaction::BasePair getBasePair(const size_t i1, const size_t i2) const
Definition InteractionEnergy.h:808
virtual bool isGU(const size_t i1, const size_t i2) const
Definition InteractionEnergy.h:699
virtual E_type getED2(const size_t i2, const size_t j2) const
Definition InteractionEnergy.h:848
Definition Interaction.h:28
PairingVec basePairs
interacting indices
Definition Interaction.h:229
static const size_t lastPos
Definition RnaSequence.h:57
Definition SeedConstraint.h:20
E_type getMaxEhybrid() const
Definition SeedConstraint.h:334
size_t getMaxUnpaired2() const
Definition SeedConstraint.h:352
E_type getMaxE() const
Definition SeedConstraint.h:316
const std::string & getExplicitSeeds() const
Definition SeedConstraint.h:424
bool isGUendAllowed() const
Definition SeedConstraint.h:451
size_t getBasePairs() const
Definition SeedConstraint.h:307
E_type getMaxED() const
Definition SeedConstraint.h:325
size_t getMaxUnpaired1() const
Definition SeedConstraint.h:343
Definition SeedHandlerNoBulge.h:21
virtual void traceBackSeed(Interaction &interaction, const size_t i1, const size_t i2) const override
Definition SeedHandlerNoBulge.h:211
std::vector< E_type > StackingEnergyList
container to store stacking energies of seed base pairs
Definition SeedHandlerNoBulge.h:26
virtual size_t getSeedLength1(const size_t i1, const size_t i2) const override
Definition SeedHandlerNoBulge.h:260
virtual size_t getSeedLength2(const size_t i1, const size_t i2) const override
Definition SeedHandlerNoBulge.h:274
SeedHandlerNoBulge(const InteractionEnergy &energy, const SeedConstraint &seedConstraint)
Definition SeedHandlerNoBulge.h:181
virtual E_type getSeedE(const size_t i1, const size_t i2) const override
Definition SeedHandlerNoBulge.h:236
virtual size_t fillSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2) override
virtual bool guaranteesStackOnlySeeds() const override
Definition SeedHandlerNoBulge.h:325
virtual ~SeedHandlerNoBulge() override
Definition SeedHandlerNoBulge.h:201
boost::unordered_map< Interaction::BasePair, E_type, Interaction::BasePair::Hash > SeedHash
container type for sparse seed information
Definition SeedHandlerNoBulge.h:29
void storeSeed(const size_t j1, const size_t j2, const StackingEnergyList &bpE)
Definition SeedHandlerNoBulge.h:288
virtual bool updateToNextSeed(size_t &i1, size_t &i2, const size_t i1min=0, const size_t i1max=RnaSequence::lastPos, const size_t i2min=0, const size_t i2max=RnaSequence::lastPos) const override
virtual bool isSeedBound(const size_t i1, const size_t i2) const override
Definition SeedHandlerNoBulge.h:249
SeedHash seedForLeftEnd
container to store seeds' hybridization energies
Definition SeedHandlerNoBulge.h:32
Definition SeedHandler.h:17
const SeedConstraint & seedConstraint
the seed constraint to be applied
Definition SeedHandler.h:209
const InteractionEnergy & energy
the used energy function
Definition SeedHandler.h:206
virtual const SeedConstraint & getConstraint() const
Definition SeedHandler.h:244
#define toString(x)
Definition general.h:60
Definition Accessibility.h:13
int E_type
type for energy values (energy + accessibility [ED]) (internally)
Definition general.h:78
const E_type E_INF
Definition general.h:79