public List<Word> myBabelRun(String WAVDIR, String modelIPBFilename, String modelPitchFilename, String wav_filename, HashMap<String, ArrayList<Word>> utts) {


        List<Word> taggedWords = new ArrayList<Word>();

        try {

            String intonational_phrase_detector_filename = modelIPBFilename;
            String pitch_accent_detector_filename = modelPitchFilename;

            AuToBIClassifier intonational_phrase_boundary_detector = ClassifierUtils.readAuToBIClassifier(intonational_phrase_detector_filename);
            AuToBIClassifier pitch_accent_detector = ClassifierUtils.readAuToBIClassifier(pitch_accent_detector_filename);

            WavReader reader = new WavReader();
            WavData wav = reader.read(WAVDIR + wav_filename + ".wav");

            UttsFileComparator comp = new UttsFileComparator();
            TreeMap<String, ArrayList<Word>> sortedUtts = new TreeMap<String, ArrayList<Word>>(comp);
            sortedUtts.putAll(utts);

            List<Word> words = new ArrayList<Word>();

            for (Entry<String, ArrayList<Word>> e : sortedUtts.entrySet()) {
                String uttId = e.getKey();
                words.addAll(e.getValue());
            }

            FeatureSet autobi_fs = new FeatureSet();
            autobi_fs.setDataPoints(words);
            for (Word w : words) {
                w.setAttribute("wav", wav);
            }

            AuToBITask t = new AuToBITask();
            t.setClassifier(intonational_phrase_boundary_detector);
            t.setTrueFeature("nominal_IntonationalPhraseBoundary");
            t.setHypFeature("hyp_IP_location");
            t.setConfFeature("hyp_IP_location_conf");
            t.setDistFeature("hyp_IP_location_dist");
            t.setFeatureSet(new IntonationalPhraseBoundaryDetectionFeatureSet());
            tasks.put("intonational_phrase_boundary_detection", t);

            t = new AuToBITask();
            t.setClassifier(pitch_accent_detector);
            t.setTrueFeature("nominal_PitchAccent");
            t.setHypFeature("hyp_pitch_accent");
            t.setConfFeature("hyp_pitch_accent_conf");
            t.setDistFeature("hyp_pitch_accent_dist");
            t.setFeatureSet(new PitchAccentDetectionFeatureSet());
            tasks.put("pitch_accent_detection", t);

            registerAllFeatureExtractors();
            registerNullFeatureExtractor("speaker_id");

            for (AuToBITask task : tasks.values()) {

                FeatureSet fs = task.getFeatureSet();
                AuToBIClassifier classifier = task.getClassifier();
                String hyp_feature = task.getHypFeature();

                registerFeatureExtractor(new HypothesizedEventFeatureExtractor(hyp_feature, classifier, fs));
                autobi_fs.insertRequiredFeature(hyp_feature);

                if (getBooleanParameter("distributions", false)) {
                    String dist_feature = task.getDistFeature();
                    registerFeatureExtractor(new HypothesizedDistributionFeatureExtractor(dist_feature, classifier, fs));
                    autobi_fs.insertRequiredFeature(dist_feature);
                }
                autobi_fs.insertRequiredFeature(fs.getClassAttribute());
            }

            extractFeatures(autobi_fs);
            autobi_fs.constructFeatures();

            for (AuToBITask task : tasks.values()) {
                ClassifierUtils.evaluateClassification(task.getHypFeature(), task.getTrueFeature(), autobi_fs);
            }

            taggedWords.addAll(autobi_fs.getDataPoints());


        } catch (AuToBIException e) {
            e.printStackTrace();
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (FeatureExtractorException e) {
            e.printStackTrace();
        }

        return taggedWords;
    }