<commit_before>package org.bonej.wrapperPlugins;

import ij.ImagePlus;
import net.imagej.Dataset;
import net.imagej.ops.OpService;
import net.imagej.patcher.LegacyInjector;
import net.imglib2.IterableInterval;
import org.bonej.ops.TriplePointAngles;
import org.bonej.ops.TriplePointAngles.TriplePoint;
import org.bonej.utilities.ImageCheck;
import org.bonej.utilities.ResultsInserter;
import org.scijava.command.Command;
import org.scijava.command.ContextCommand;
import org.scijava.convert.ConvertService;
import org.scijava.log.LogService;
import org.scijava.platform.PlatformService;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import org.scijava.ui.DialogPrompt;
import org.scijava.ui.UIService;
import org.scijava.widget.Button;
import org.scijava.widget.ChoiceWidget;
import org.scijava.widget.NumberWidget;
import sc.fiji.analyzeSkeleton.AnalyzeSkeleton_;
import sc.fiji.analyzeSkeleton.Graph;
import sc.fiji.skeletonize3D.Skeletonize3D_;

import java.util.List;

import static org.bonej.wrapperPlugins.ErrorMessages.*;

/**
 * A wrapper UI class for the TriplePointAngles Op
 *
 * @author <NAME>
 */
@Plugin(type = Command.class, menuPath = "Plugins>BoneJ>Triple Point Angles")
public class TriplePointAnglesWrapper extends ContextCommand {
    static {
        // NB: Needed if you mix-and-match IJ1 and IJ2 classes.
        // And even then: do not use IJ1 classes in the API!
        LegacyInjector.preinit();
    }

    /** @implNote Use Dataset because it has a conversion to ImagePlus */
    @Parameter(initializer = "initializeImage")
    private Dataset inputImage;

    @Parameter(label = "Measurement mode", description = "Where to measure the triple point angles",
            style = ChoiceWidget.RADIO_BUTTON_VERTICAL_STYLE, choices = {
            "Opposite vertex", "Edge point"})
    private String measurementMode;

    @Parameter(label = "Edge point #", min = "0", max = "100", stepSize = "1",
            description = "Ordinal of the edge point used for measuring", style = NumberWidget.SLIDER_STYLE,
            persist = false)
    private int edgePoint = 0;

    @Parameter(label = "Help", callback = "openHelpPage")
    private Button helpButton;

    @Parameter
    private ConvertService convertService;

    @Parameter
    private LogService logService;
<commit_msg>Add tooltip<commit_after>package org.bonej.wrapperPlugins;

import ij.ImagePlus;
import net.imagej.Dataset;
import net.imagej.ops.OpService;
import net.imagej.patcher.LegacyInjector;
import net.imglib2.IterableInterval;
import org.bonej.ops.TriplePointAngles;
import org.bonej.ops.TriplePointAngles.TriplePoint;
import org.bonej.utilities.ImageCheck;
import org.bonej.utilities.ResultsInserter;
import org.scijava.command.Command;
import org.scijava.command.ContextCommand;
import org.scijava.convert.ConvertService;
import org.scijava.log.LogService;
import org.scijava.platform.PlatformService;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import org.scijava.ui.DialogPrompt;
import org.scijava.ui.UIService;
import org.scijava.widget.Button;
import org.scijava.widget.ChoiceWidget;
import org.scijava.widget.NumberWidget;
import sc.fiji.analyzeSkeleton.AnalyzeSkeleton_;
import sc.fiji.analyzeSkeleton.Graph;
import sc.fiji.skeletonize3D.Skeletonize3D_;

import java.util.List;

import static org.bonej.wrapperPlugins.ErrorMessages.*;

/**
 * A wrapper UI class for the TriplePointAngles Op
 *
 * @author <NAME>
 */
@Plugin(type = Command.class, menuPath = "Plugins>BoneJ>Triple Point Angles")
public class TriplePointAnglesWrapper extends ContextCommand {
    static {
        // NB: Needed if you mix-and-match IJ1 and IJ2 classes.
        // And even then: do not use IJ1 classes in the API!
        LegacyInjector.preinit();
    }

    /** @implNote Use Dataset because it has a conversion to ImagePlus */
    @Parameter(initializer = "initializeImage")
    private Dataset inputImage;

    @Parameter(label = "Measurement mode", description = "Where to measure the triple point angles",
            style = ChoiceWidget.RADIO_BUTTON_VERTICAL_STYLE, choices = {
            "Opposite vertex", "Edge point"})
    private String measurementMode;

    @Parameter(label = "Edge point #", min = "0", max = "100", stepSize = "1",
            description = "Ordinal of the edge point used for measuring", style = NumberWidget.SLIDER_STYLE,
            persist = false)
    private int edgePoint = 0;

    @Parameter(label = "Help", description = "Open help web page", callback = "openHelpPage")
    private Button helpButton;

    @Parameter
    private ConvertService convertService;

    @Parameter
    private LogService logService;

{'fraction_non_alphanumeric': 0.09808102345415778, 'fraction_numerical': 0.00511727078891258, 'mean_word_length': 4.235491071428571, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3638266', 'n_tokens_mistral': 1477, 'n_tokens_neox': 1432, 'n_words': 356}