docs: def returnModPositions(peptide, indexStart=1, removeModString='UNIMOD:'):
      """Determines the amino acid positions of all present modifications.
  
      :param peptide: peptide sequence, modifications have to be written in the
          format "[modificationName]"
      :param indexStart: returned amino acids positions of the peptide start with
          this number (first amino acid position = indexStart)
      :param removeModString: string to remove from the returned modification name
  
      :return: {modificationName:[position1, position2, ...], ...}
  
      #TODO: adapt removeModString to the new unimod ids in
      #maspy.constants.aaModComp ("UNIMOD:X" -> "u:X") -> also change unit tests.
      """
      unidmodPositionDict = dict()
      while peptide.find('[') != -1:
          currModification = peptide.split('[')[1].split(']')[0]
          currPosition = peptide.find('[') - 1
          if currPosition == -1: # move n-terminal modifications to first position
              currPosition = 0
          currPosition += indexStart
  
          peptide = peptide.replace('['+currModification+']', '', 1)
  
          if removeModString:
              currModification = currModification.replace(removeModString, '')
          unidmodPositionDict.setdefault(currModification,list())
          unidmodPositionDict[currModification].append(currPosition)
      return unidmodPositionDict