Skip to content

Commit

Permalink
- fixed after rebase
Browse files Browse the repository at this point in the history
  • Loading branch information
rrodionov91 committed Feb 10, 2025
1 parent 35cd466 commit 747d572
Showing 1 changed file with 60 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -423,35 +423,51 @@ export class ChainsCollection {
}
}

private getComplimentaryChainIfNucleotide(node: SubChainNode) {
const monomerToChain = this.monomerToChain;
private getComplimentaryChainIfNucleotide(
node: SubChainNode,
monomerToChain: Map<BaseMonomer, Chain>,
monomerToNode: Map<BaseMonomer, SubChainNode>,
) {
let complimentaryChain: Chain | undefined;
let complimentaryNode: SubChainNode | undefined;

for (const monomerToCheck of node.monomers) {
const { monomer, complimentaryMonomer } =
this.getFirstComplimentaryMonomer(monomerToCheck) || {};
const complimentaryNodeOrUndefined =
complimentaryMonomer && monomerToNode.get(complimentaryMonomer);
const complimentaryChainOrUndefined =
complimentaryMonomer && monomerToChain.get(complimentaryMonomer);

const isRnaMonomer =
isRnaBaseOrAmbiguousRnaBase(monomer) &&
Boolean(getSugarFromRnaBase(monomer));
const isRnaComplimentaryMonomer =
isRnaBaseOrAmbiguousRnaBase(complimentaryMonomer) &&
Boolean(getSugarFromRnaBase(complimentaryMonomer));

if (
!complimentaryNodeOrUndefined ||
!complimentaryChainOrUndefined ||
!(isRnaMonomer || isRnaComplimentaryMonomer)
) {
continue;
}

const { monomer, complimentaryMonomer } =
this.getFirstAntisenseMonomerInNode(node) || {};
const complimentaryNode =
complimentaryMonomer && this.monomerToNode.get(complimentaryMonomer);
const complimentaryChain =
complimentaryMonomer && monomerToChain.get(complimentaryMonomer);

const isRnaMonomer =
isRnaBaseOrAmbiguousRnaBase(monomer) &&
Boolean(getSugarFromRnaBase(monomer));
const isRnaComplimentaryMonomer =
isRnaBaseOrAmbiguousRnaBase(complimentaryMonomer) &&
Boolean(getSugarFromRnaBase(complimentaryMonomer));

if (
!complimentaryNode ||
!complimentaryChain ||
!(isRnaMonomer || isRnaComplimentaryMonomer)
) {
return null;
// return first found complimentary chain and node
return {
complimentaryChain: complimentaryChainOrUndefined,
complimentaryNode: complimentaryNodeOrUndefined,
};
}

return { complimentaryChain, complimentaryNode };
}

private reorderChainsPutSenseChainOrderInAccordanceAntisenseConnection() {
const handledChain = new Set<Chain>();
const monomerToChain = this.monomerToChain;
const monomerToNode = this.monomerToNode;
const reorderedSenseForSequentialAntisenseChains: Chain[] = new Array(
this.chains.length,
);
Expand All @@ -469,7 +485,12 @@ export class ChainsCollection {
const {
complimentaryChain: antisenseChain,
complimentaryNode: antisenseNode,
} = this.getComplimentaryChainIfNucleotide(sNode) ?? {};
} =
this.getComplimentaryChainIfNucleotide(
sNode,
monomerToChain,
monomerToNode,
) ?? {};
if (!antisenseChain) {
return;
}
Expand All @@ -481,7 +502,11 @@ export class ChainsCollection {
}
if (!isFindCur) {
const { complimentaryChain: anotherSenseChain } =
this.getComplimentaryChainIfNucleotide(aNode) ?? {};
this.getComplimentaryChainIfNucleotide(
aNode,
monomerToChain,
monomerToNode,
) ?? {};
if (anotherSenseChain && !handledChain.has(anotherSenseChain)) {
const curChainIdx =
reorderedSenseForSequentialAntisenseChains.findIndex(
Expand Down Expand Up @@ -518,23 +543,31 @@ export class ChainsCollection {
// in the picture we have 5 chains, if we pass number 1 it return 1, 2 and 3, if pass 5, return 4, 5
public getAllChainsWithConnectionInBlock(c: Chain) {
const chains: GrouppedChain[] = [{ group: 0, chain: c }];
const monomerToNode = this.monomerToNode;
const cycledComplimentaryChains = new Set<Chain>(
this.findCycledComplimentaryChains(c, c),
);

const res: GrouppedChain[] = [{ group: 0, chain: c }];
const handledChains = new Set<Chain>([c]);
const monomerToChain = this.monomerToChain;
const monomerToNode = this.monomerToNode;

while (chains.length) {
const { group, chain } = chains.pop() as GrouppedChain;

chain.forEachNode(({ node }) => {
const { complimentaryChain } =
this.getComplimentaryChainIfNucleotide(node) ?? {};
this.getComplimentaryChainIfNucleotide(
node,
monomerToChain,
monomerToNode,
) ?? {};

if (!complimentaryChain || handledChains.has(complimentaryChain) || cycledComplimentaryChains.has(complimentaryChain)) {
if (
!complimentaryChain ||
handledChains.has(complimentaryChain) ||
cycledComplimentaryChains.has(complimentaryChain)
) {
return;
}

Expand Down

0 comments on commit 747d572

Please sign in to comment.