code: def updatePlaceWeights(self):
      
      self.weightsPI += np.outer(self.activationsI - self.boostTarget,
                                 self.activationsP)*self.dt*\
                                 self.learnFactorP*self.learningRate
      self.weightsPEL += np.outer(self.activationsEL - self.boostTarget,
                                 self.activationsP)*self.dt*\
                                 self.learnFactorP*self.learningRate
      self.weightsPER += np.outer(self.activationsER - self.boostTarget,
                                 self.activationsP)*self.dt*\
                                 self.learnFactorP*self.learningRate
  
      np.minimum(self.weightsPI, 1, self.weightsPI)
      np.minimum(self.weightsPEL, 1, self.weightsPEL)
      np.minimum(self.weightsPER, 1, self.weightsPER)
docs: We use a simplified version of Hebbian learning to learn place weights.
      Cells above the boost target are wired to the currently-active places,
      cells below it have their connection strength to them reduced.