[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [IMP-dev] score function weights

or model.set_weight(myrestraint_index, .5) or
model.set_weight(my_restraint_pointer, .5);
or restraintset.set_weight(r, .5);

I don't like the second because it requires the model to keep a second
bunch of restraint pointers hanging around, and then you have to keep
them synchronized with the 'real' list of restraints (what happens if
you remove a restraint from a model, or you delete a restraint and then
create a new one which happens to have the same address?) I _really_
don't like the first one because 1) it requires the list of restraints
to remain ordered and 2) it wouldn't work with restraints that live
inside other restraints.
They just require that either the model/RestraintSet (for the first) store the Restraint pointers in a vector of std::pairs with weights and return the index (just like the Particles) or, for the second, just in a map or any other container and go and find the correct restraint when the weight is set. Simple enough. No duplications and no significant overhead.

And the user has to keep around the identity of the restraints he is interested in somehow anyway.

If you like the third, why not compromise and say just that any
RestraintSet can scale its children.
The third is the same as the first, just that both models and restraint sets store lists of restraints.

Yes, I figured you'd say that. ;) On the other hand, adding a scale
member to the Restraint base class adds a per-object overhead, and maybe it's better to only have that for RestraintSets. So we can agree not to
put it in Restraint, but for different reasons...
Well, one word is pretty negligible. Especially with that mysterious list of particles there already :-)

Sure. But that requires copying the object and keeping them
synchronized. Not that I see any particular application of this :-)

Maybe I'm missing something here, but a RestraintSet (currently) just
keeps a vector of pointers to Restraints. So there's no reason why the
same Restraint object couldn't be in two sets.
Yes, but if we store the weight in the Restraint, it can't really be in two sets any more because the weights are linked.