def clusterCLipped(clippedList, clippedSide, minNbReads, maxNbReads):
    '''
    '''
    #print "** clusterCLipped  function **"

    ### 1. Sort the list of clipped reads in increasing coordinates order
    if (clippedSide == "beg"):    
        clippedSortedList = sorted(clippedList, key=lambda alignmentObj: alignmentObj.reference_start, reverse=False)
    else:
        clippedSortedList = sorted(clippedList, key=lambda alignmentObj: alignmentObj.reference_end, reverse=False)

    ### 2. Make clipped read clusters:
    clusterList = []

    ## For each clipped read alignment 
    for alignmentObj in clippedSortedList:

        # A) No cluster in the list -> Create first cluster
        if not clusterList:

            clusterObj = cluster(alignmentObj, clippedSide) 
            clusterObj.addClippedRead(alignmentObj)
            clusterList.append(clusterObj)

        # B) There is already at least one cluster in the list -> Check if current clipped read within the latest cluster
        else:

            ## Define bkp position:
            bkpPos = alignmentObj.reference_start if clippedSide == "beg" else alignmentObj.reference_end        

            ## Define cluster range for searching for overlap
            lastClusterObj = clusterList[-1]     
            begClusterRange = lastClusterObj.bkpPos 
            endClusterRange = lastClusterObj.bkpPos + 3