def pwArcsinh(inputArray,constant): 
    '''
    Function returns an ndarray by performing a pointwise inverse hyperbolic sine transformation on the input ndarray 
    :param inputArray: ndarray of gene expression data in raw count or RPKM format 
    :param contstant: some constant to normalize for total read count number
    :return transformed: ndarray of transformed inputArray 
    '''
    #this function assumes rows are cells and columns are genes in the input array
    countsum=np.sum(inputArray,axis=1) #calculate the total number of counts per cell
    holder=np.zeros_like(inputArray,dtype=float)
    transformed=np.zeros_like(inputArray,dtype=float) #initialize the output array
    print ("Completion:")
    for i in range(0,inputArray.shape[0]):
        print (((i/inputArray.shape[0])*100),end='\r')#progress meter 
        holder[i,:]=(inputArray[i,:]/countsum[i])*constant #divide each genes counts by total number of counts in cell
        transformed[i,:]=np.arcsinh((holder[i,:]/constant*1000)) #do arcsinh transform for each element of matrix
    return transformed
Function returns an ndarray by performing a pointwise inverse hyperbolic sine transformation on the input ndarray 
    :param inputArray: ndarray of gene expression data in raw count or RPKM format 
    :param contstant: some constant to normalize for total read count number
    :return transformed: ndarray of transformed inputArray