436 def makeCombinedStep(parallel_steps, stepNumber, chainDefList, allSteps = [], currentChainSteps = [], leg_numbering = [], alignment_group = ""):
440 log.verbose(
"[makeCombinedStep] steps %s ", parallel_steps)
451 if not hasNonEmptyStep:
453 if len(parallel_steps)>=len(chainDefList)
and all(step
is None for step
in parallel_steps[len(chainDefList):]):
457 parallel_steps=parallel_steps[:len(chainDefList)]
458 log.debug(
"[makeCombinedStep] removing empty steps exceeding chainDefList size. The new steps are now %s ", parallel_steps)
460 for chain_index, step
in enumerate(parallel_steps):
462 if step
is None or len(step.sequenceFunctions) == 0:
464 new_stepDicts = deepcopy(chainDefList[chain_index].steps[-1].stepDicts)
465 currentStepName =
'Empty' + chainDefList[chain_index].alignmentGroups[0]+
'Align'+
str(stepNumber)+
'_'+new_stepDicts[0][
'chainParts'][0][
'multiplicity']+new_stepDicts[0][
'signature']
466 log.debug(
'[makeCombinedStep] step has no sequences, making empty step %s', currentStepName)
469 for new_stepDict
in new_stepDicts:
470 oldLegName = new_stepDict[
'chainName']
471 if re.search(
'^leg[0-9]{3}_',oldLegName):
472 oldLegName = oldLegName[7:]
473 new_stepDict[
'chainName'] =
legName(oldLegName,leg_counter)
474 log.debug(
"[makeCombinedStep] stepDict naming old: %s, new: %s", oldLegName, new_stepDict[
'chainName'])
475 stepDicts.append(new_stepDict)
480 currentStepName = step.name
483 if currentStepName.startswith(
'merged_'):
484 currentStepName = currentStepName[7:]
487 log.debug(
'[makeCombinedStep] adding step dictionaries %s',step.stepDicts)
489 for new_stepDict
in deepcopy(step.stepDicts):
490 oldLegName = new_stepDict[
'chainName']
491 if re.search(
'^leg[0-9]{3}_',oldLegName):
492 oldLegName = oldLegName[7:]
493 if len(leg_numbering) > 0:
494 leg_counter = leg_numbering[chain_index]
495 new_stepDict[
'chainName'] =
legName(oldLegName,leg_counter)
496 log.debug(
"[makeCombinedStep] stepDict naming old: %s, new: %s", oldLegName, new_stepDict[
'chainName'])
497 stepDicts.append(new_stepDict)
500 stepName +=
'_' + currentStepName
502 theChainStep = ChainStep(stepName, Sequences=[], multiplicity=[], chainDicts=stepDicts, comboHypoCfg=ComboHypoCfg)
503 log.debug(
"[makeCombinedStep] Merged empty step: \n %s", theChainStep)
506 for chain_index, step
in enumerate(parallel_steps):
508 if step
is None or (hasNonEmptyStep
and len(step.sequenceFunctions) == 0):
512 if chain_index+1 > len(chainDefList):
513 chain_index-=chain_index
515 if alignment_group ==
"":
516 alignment_group = chainDefList[0].alignmentGroups[0]
518 new_stepDict = deepcopy(chainDefList[chain_index].steps[-1].stepDicts[-1])
519 seqName =
getEmptySeqName(new_stepDict[
'signature'], stepNumber, alignment_group)
522 stepSeq.append(functools.partial(EmptyMenuSequenceCfg,
None, name=seqName+
"FS"))
523 currentStepName =
'Empty' + alignment_group +
'Align'+
str(stepNumber)+
'_'+new_stepDict[
'chainParts'][0][
'multiplicity']+new_stepDict[
'signature']+
'FS'
525 stepSeq.append(functools.partial(EmptyMenuSequenceCfg,
None, name=seqName))
526 currentStepName =
'Empty' + alignment_group +
'Align'+
str(stepNumber)+
'_'+new_stepDict[
'chainParts'][0][
'multiplicity']+new_stepDict[
'signature']
528 log.debug(
"[makeCombinedStep] chain_index: %s, step name: %s, empty sequence name: %s", chain_index, currentStepName, seqName)
532 if stepNumber > 1
and len(currentChainSteps[stepNumber-2].multiplicity) >0:
533 prev_step_mult =
int(currentChainSteps[stepNumber-2].multiplicity[chain_index])
536 prev_step_mult =
int(new_stepDict[
'chainParts'][0][
'multiplicity'])
537 stepMult.append(prev_step_mult)
539 oldLegName = new_stepDict[
'chainName']
540 if re.search(
'^leg[0-9]{3}_',oldLegName):
541 oldLegName = oldLegName[7:]
542 new_stepDict[
'chainName'] =
legName(oldLegName,leg_counter)
543 stepDicts.append(new_stepDict)
547 log.debug(
"[makeCombinedStep] step %s, multiplicity = %s", step.name,
str(step.multiplicity))
548 if len(step.sequenceFunctions):
549 log.debug(
"[makeCombinedStep] with sequences = %s",
' '.
join(map(str, [seq.func.__name__
for seq
in step.sequenceFunctions])))
552 if len(step.sequenceFunctions) > 1:
553 log.debug(
"[makeCombinedStep] combining in an already combined chain")
555 if ( comboHypo
is None or
556 (hasattr(step.comboHypoCfg,
'__name__')
and step.comboHypoCfg.__name__ !=
"ComboHypoCfg") ):
557 comboHypo = step.comboHypoCfg
558 currentStepName = step.name
560 if currentStepName.startswith(
'merged_'):
561 currentStepName = currentStepName[7:]
562 stepSeq.extend(step.sequenceFunctions)
564 if len(step.multiplicity) == 0:
567 stepMult.extend(step.multiplicity)
568 comboHypoTools.extend(step.comboToolConfs)
570 log.debug(
'[makeCombinedStep] adding step dictionaries %s',step.stepDicts)
571 log.debug(
'[makeCombinedStep] my leg_numbering is: %s, for chain_index %s',leg_numbering, chain_index)
572 for new_stepDict
in deepcopy(step.stepDicts):
573 oldLegName = new_stepDict[
'chainName']
574 if re.search(
'^leg[0-9]{3}_',oldLegName):
575 oldLegName = oldLegName[7:]
576 if len(leg_numbering) > 0:
577 leg_counter = leg_numbering[chain_index]
578 new_stepDict[
'chainName'] =
legName(oldLegName,leg_counter)
579 log.debug(
"[makeCombinedStep] stepDict naming old: %s, new: %s", oldLegName, new_stepDict[
'chainName'])
580 stepDicts.append(new_stepDict)
585 stepName +=
'_' + currentStepName
586 log.debug(
'[makeCombinedStep] current step name %s',stepName)
589 comboHypoTools =
list(
set(comboHypoTools))
590 theChainStep = ChainStep(stepName, Sequences=stepSeq, multiplicity=stepMult, chainDicts=stepDicts, comboHypoCfg=comboHypo, comboToolConfs=comboHypoTools)
591 log.debug(
"[makeCombinedStep] Merged step: \n %s", theChainStep)