import { Chain } from "./Chain";
import { AmbiguousMonomer, BaseMonomer, Chem, Peptide, Phosphate, RNABase, SubChainNode, Sugar, UnresolvedMonomer, UnsplitNucleotide } from "./..";
import { BaseSubChain } from "./BaseSubChain";
import { BackBoneSequenceNode } from "../BackBoneSequenceNode";
export interface ComplimentaryChainsWithData {
    complimentaryChain: Chain;
    chain: Chain;
    firstConnectedNode: SubChainNode;
    firstConnectedComplimentaryNode: SubChainNode;
    chainIdxConnection: number;
}
export declare type GrouppedChain = {
    group: number;
    chain: Chain;
};
export interface ITwoStrandedChainItem {
    senseNode?: SubChainNode | BackBoneSequenceNode;
    senseNodeIndex: number;
    chain: Chain;
    antisenseNode?: SubChainNode | BackBoneSequenceNode;
    antisenseNodeIndex?: number;
    antisenseChain?: Chain;
}
export declare class ChainsCollection {
    chains: Chain[];
    get monomerToChain(): Map<BaseMonomer, Chain>;
    get monomerToNode(): Map<BaseMonomer, SubChainNode>;
    rearrange(): void;
    add(chain: Chain): this;
    static fromMonomers(monomers: BaseMonomer[]): ChainsCollection;
    static getFirstMonomersInChains(monomers: BaseMonomer[], MonomerTypes?: Array<typeof Peptide | typeof Chem | typeof Phosphate | typeof Sugar | typeof RNABase | typeof UnresolvedMonomer | typeof UnsplitNucleotide | typeof AmbiguousMonomer>): BaseMonomer[][];
    private static getFirstMonomersInMiddleOfChains;
    get firstNode(): SubChainNode;
    private static getFirstMonomersInRegularChains;
    private static getFirstMonomersInCycledChains;
    private static getMonomerWithLowerCoordsFromMonomerList;
    get lastNode(): SubChainNode;
    get length(): number;
    forEachNode(forEachCallback: (params: {
        chainIndex: number;
        subChainIndex: number;
        nodeIndex: number;
        nodeIndexOverall: number;
        node: SubChainNode;
        subChain: BaseSubChain;
        chain: Chain;
    }) => void): void;
    private getFirstComplimentaryMonomer;
    private findCycledComplimentaryChains;
    private getComplimentaryChainIfNucleotide;
    private reorderChainsPutSenseChainOrderInAccordanceAntisenseConnection;
    getAllChainsWithConnectionInBlock(c: Chain): GrouppedChain[];
    getChainByMonomer(monomer: BaseMonomer): Chain | undefined;
    getComplimentaryChainsWithData(chain: Chain): ComplimentaryChainsWithData[];
    getAntisenseChainsWithData(chain: Chain): {
        antisenseChainsWithData: ComplimentaryChainsWithData[];
        antisenseChainsStartIndexes: number[];
        antisenseChainsStartIndexesMap: Map<number, ComplimentaryChainsWithData>;
        antisenseNodesToIndexesMap: Map<number, {
            node: SubChainNode;
            chain: Chain;
            nodeIndex: number;
        }>;
    };
    getAlignedSenseAntisenseChainItems(chain: Chain): ITwoStrandedChainItem[];
    getAlignedSenseAntisenseChains(): ITwoStrandedChainItem[][];
}
