All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.campagnelab.dl.somatic.mappers.FlipSamplesFeatureMapper Maven / Gradle / Ivy

package org.campagnelab.dl.somatic.mappers;

import org.campagnelab.dl.framework.mappers.FeatureMapper;
import org.campagnelab.dl.framework.mappers.MappedDimensions;
import org.campagnelab.dl.varanalysis.protobuf.BaseInformationRecords;
import org.nd4j.linalg.api.ndarray.INDArray;

/**
 * Flip the samples of a record on the fly. Sample 1 becomes sample 0 and reciprocally. Tumor status is also switched.
 * Could be useful before calling mutator, but untested.
 * Created by fac2003 on 11/17/16.
 */
public class FlipSamplesFeatureMapper implements FeatureMapper {
    private FeatureMapper delegate;
    @Override
    public int numberOfFeatures() {
        return delegate.numberOfFeatures();
    }

    @Override
    public MappedDimensions dimensions() {
        return delegate.dimensions();
    }

    public void prepareToNormalize(BaseInformationRecords.BaseInformation record, int indexOfRecord) {

        delegate.prepareToNormalize(flip(record), indexOfRecord);
    }

    private BaseInformationRecords.BaseInformation flip(BaseInformationRecords.BaseInformation record) {
        assert record.getSamplesCount()==2:"Flip can only flip records with two samples.";
        BaseInformationRecords.BaseInformation.Builder builder = record.toBuilder();
        BaseInformationRecords.SampleInfo.Builder firstSample = builder.getSamples(0).toBuilder();
        BaseInformationRecords.SampleInfo.Builder secondSample = builder.getSamples(1).toBuilder();
        // flip isTumor status:
        firstSample.setIsTumor(!firstSample.getIsTumor());
        secondSample.setIsTumor(!secondSample.getIsTumor());
        builder.setSamples(0,secondSample);
        builder.setSamples(1,firstSample);
        return builder.build();
    }

    public void mapFeatures(BaseInformationRecords.BaseInformation record, INDArray inputs, int indexOfRecord) {
        delegate.mapFeatures(flip(record), inputs, indexOfRecord);
    }

    @Override
    public boolean hasMask() {
        return delegate.hasMask();
    }

    public void maskFeatures( BaseInformationRecords.BaseInformation record, INDArray mask, int indexOfRecord) {
       if (delegate.hasMask()) {
           delegate.maskFeatures(flip(record), mask, indexOfRecord);
       }
    }

    public boolean isMasked( BaseInformationRecords.BaseInformation record, int featureIndex) {
        if (delegate.hasMask()) {
            return delegate.isMasked(flip(record), featureIndex);
        }else {
            return false;
        }
    }

    public float produceFeature(BaseInformationRecords.BaseInformation record, int featureIndex) {
        return delegate.produceFeature(flip(record), featureIndex);
    }



}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy