internal bool ForceEvaluation()
        {
            m_ForceEvaluationMarker.Begin();

            CycleStart();
            AcquireHandlingStage.OnCycleStart();
            BestStandaloneMatchStage.CycleStart();

            CacheTraitReferencesStage.Complete();
            ConditionRatingStage.Complete();

            FindMatchProposalsStage.Complete();
            DataAvailabilityStage.Complete();
            TraitFilterStage.Complete();
            MatchReductionStage.Complete();
            BestStandaloneMatchStage.Complete();

            ResultFillStage.Transformation.applyOffsetToPose = m_Database.ApplyOffsetToPose;
            ResultFillStage.Complete();
            MarkUsedStage.Complete();

            m_ForceEvaluationMarker.End();
            // acquire handling usually takes longer than any other stage by far and we already have the answers
            AcquireHandlingStage.Complete();

            if (onStageGroupCompletion != null)
            {
                onStageGroupCompletion();
            }

            CurrentlyActive = false;
            // Return whether we had any matches this iteration
            return(Data.DefiniteMatchAcquireIndices.Count > 0);
        }