    001    package calhoun.analysis.crf.features.tricycle13;
    002
    003    import java.util.List;
    004
    005    import org.apache.commons.logging.Log;
    006    import org.apache.commons.logging.LogFactory;
    007
    008    import calhoun.analysis.crf.AbstractFeatureManager;
    009    import calhoun.analysis.crf.CacheStrategySpec;
    010    import calhoun.analysis.crf.FeatureList;
    011    import calhoun.analysis.crf.FeatureManagerNode;
    012    import calhoun.analysis.crf.ModelManager;
    013    import calhoun.analysis.crf.CacheStrategySpec.CacheStrategy;
    014    import calhoun.analysis.crf.io.CompositeInput;
    015    import calhoun.analysis.crf.io.InputSequence;
    016    import calhoun.analysis.crf.io.TrainingSequence;
    017
    018    public class PfamPhase extends AbstractFeatureManager<CompositeInput> implements FeatureManagerNode<CompositeInput> {
    019            private static final long serialVersionUID = -7659288739348604129L;
    020            private static final Log log = LogFactory.getLog(PfamPhase.class);
    021            boolean debug = log.isDebugEnabled();
    022
    023            /* Contains 1 features:
    024             *    f returns 1 if either of two conditions below and 0 otherwise:
    025             *      a) y_i=intron1,intron2,intron3 and pest(i+1) = 2 [intron only]
    026             *      b) y_i= intron1m,intron2m,intron3m and mest(i+1) = 2 [intron only]
    027             */
    028
    029            int startIx;  // The index of the first feature managed by this FeatureManager
    030            ModelManager model;
    031
    032            int exon1S;
    033            int exon2S;
    034            int exon3S;
    035            int exon1mS;
    036            int exon2mS;
    037            int exon3mS;
    038
    039            public PfamPhase() {
    040            }
    041
    042            public int getNumFeatures() {
    043                    return 1;
    044            }
    045
    046            public String getFeatureName(int featureIndex) {
    047                    return "PfamPhase";
    048            }
    049
    050
    051            public void evaluateNode(InputSequence<? extends CompositeInput> seq, int pos, int state, FeatureList result) {
    052                    if(pos == seq.length()-1) {
    053                            return;
    054                    }
    055
    056                    InputSequence<Integer>  ppfam = (InputSequence<Integer>) seq.getComponent("ppfam");
    057                    InputSequence<Integer>  mpfam = (InputSequence<Integer>) seq.getComponent("mpfam");
    058
    059                    if ((state==exon1S) && (ppfam.getX(pos)==1))  { result.addFeature(startIx, 1); }
    060                    if ((state==exon2S) && (ppfam.getX(pos)==2))  { result.addFeature(startIx, 1); }
    061                    if ((state==exon3S) && (ppfam.getX(pos)==3))  { result.addFeature(startIx, 1); }
    062
    063                    if ((state==exon1mS) && (mpfam.getX(pos)==1))  { result.addFeature(startIx, 1); }
    064                    if ((state==exon2mS) && (mpfam.getX(pos)==2))  { result.addFeature(startIx, 1); }
    065                    if ((state==exon3mS) && (mpfam.getX(pos)==3))  { result.addFeature(startIx, 1); }
    066            }
    067
    068
    069            public void train(int startingIndex, ModelManager modelInfo, List<? extends TrainingSequence<? extends CompositeInput>> data) {
    070                    startIx = startingIndex;
    071                    model = modelInfo;
    072
    073                    exon1S = model.getStateIndex("exon1");
    074                    exon2S = model.getStateIndex("exon2");
    075                    exon3S = model.getStateIndex("exon3");
    076
    077                    exon1mS = model.getStateIndex("exon1m");
    078                    exon2mS = model.getStateIndex("exon2m");
    079                    exon3mS = model.getStateIndex("exon3m");
    080            }
    081            @Override
    082            public CacheStrategySpec getCacheStrategy() {
    083                    return new CacheStrategySpec(CacheStrategy.UNSPECIFIED);
    084            }
    085    }
    086