// Autogenerated by tools\build\make_containers.py
// from tools\build\container_templates\core\ClassnameRestraint.h
// Do not edit - any changes will be lost!

/**
 *  \file IMP/core/TripletRestraint.h
 *  \brief Apply a TripletScore to a Triplet.
 *
 *  Copyright 2007-2021 IMP Inventors. All rights reserved.
 *
 */

#ifndef IMPCORE_TRIPLET_RESTRAINT_H
#define IMPCORE_TRIPLET_RESTRAINT_H

#include <IMP/core/core_config.h>

#include <IMP/internal/TupleRestraint.h>
#include <IMP/TripletScore.h>

#include <iostream>

IMPCORE_BEGIN_NAMESPACE

//! Applies a TripletScore to a Triplet.
/** This restraint stores a Triplet.
    \see TripletRestraint
 */
class TripletRestraint :
#if defined(SWIG) || defined(IMP_DOXYGEN)
    public Restraint
#else
    public IMP::internal::TupleRestraint<TripletScore>
#endif
    {
 public:
  //! Create the restraint.
  /** This function takes the function to apply to the
      stored Triplet and the Triplet.
   */
  TripletRestraint(Model *m, TripletScore *ss, const ParticleIndexTriplet& vt,
                     std::string name = "TripletRestraint %1%")
      : IMP::internal::TupleRestraint<TripletScore>(ss, m, vt, name) {
  }

#if defined(SWIG) || defined(IMP_DOXYGEN)
 protected:
  double unprotected_evaluate(IMP::DerivativeAccumulator *accum) const;
  IMP::ModelObjectsTemp do_get_inputs() const;
  IMP_OBJECT_METHODS(TripletRestraint)
#endif
};

IMPCORE_END_NAMESPACE

#endif /* IMPCORE_TRIPLET_RESTRAINT_H */
