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

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

package org.campagnelab.dl.somatic.mappers;

import org.campagnelab.dl.framework.mappers.ConcatFeatureMapper;
import org.campagnelab.dl.framework.mappers.FeatureNameMapper;
import org.campagnelab.dl.framework.mappers.NoMaskFeatureMapper;
import org.campagnelab.dl.framework.mappers.OneHotHashModuloMapper;
import org.campagnelab.dl.varanalysis.protobuf.BaseInformationRecords;
import org.nd4j.linalg.api.ndarray.INDArray;

/**
 * Encode a genomic position. Encode both chromosome and position with one hot encoding hash modulo.
 * Created by fac2003 on 7/12/16.
 */
public class GenomicPositionDiscreteMapper extends NoMaskFeatureMapper
        implements FeatureNameMapper {
    private ConcatFeatureMapper delegate;
    private int numChromosomeFeatures = 50;
    // use 1MB window.
    private int windowSize;
    private int numPositionFeatures;

    public GenomicPositionDiscreteMapper() {
        // we bin position in 1 mega base windows:
        this(1000000);
    }

    public GenomicPositionDiscreteMapper(int windowSize) {
        numPositionFeatures = 250000000 / windowSize;
        this.windowSize = windowSize;
        OneHotHashModuloMapper chromosomeMapper =
                new OneHotHashModuloMapper<>(numChromosomeFeatures,
                        BaseInformationRecords.BaseInformationOrBuilder::getReferenceId);

        OneHotHashModuloMapper positionMapper =
                new OneHotHashModuloMapper(

                        numPositionFeatures, record -> {
                    return record.getPosition() / windowSize;
                }
                );
        this.delegate = new ConcatFeatureMapper<>(chromosomeMapper, positionMapper);
    }

    @Override
    public int numberOfFeatures() {
        return delegate.numberOfFeatures();

    }

    @Override
    public void prepareToNormalize(BaseInformationRecords.BaseInformationOrBuilder record, int indexOfRecord) {
        delegate.prepareToNormalize(record, indexOfRecord);
    }

    int[] indices = new int[]{0, 0};

    @Override
    public void mapFeatures(BaseInformationRecords.BaseInformationOrBuilder record, INDArray inputs, int indexOfRecord) {
        delegate.mapFeatures(record, inputs, indexOfRecord);
    }

    @Override
    public float produceFeature(BaseInformationRecords.BaseInformationOrBuilder record, int featureIndex) {
        return delegate.produceFeature(record, featureIndex);
    }

    @Override
    public String getFeatureName(int featureIndex) {
        if (featureIndex < numChromosomeFeatures) {
            return "chromosomeHash" + featureIndex;
        } else {
            return "positionWindowHash" + (featureIndex - numChromosomeFeatures);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy