Пример #1
0
def transform(C, X, *Y):
    """ Transform the covariance nmatrix C at point X to the variables Y(X)
    >>> X = 1 , 2
    >>> C = Ostap.SymMatrix(2)()
    >>> C [ 0 , 0 ] = 0.20
    >>> C [ 0 , 1 ] = 0.05
    >>> C [ 1 , 1 ] = 0.30
    >>> r   = lambda x , y : (x*x+y*y)**2
    >>> phi = lambda x , y : math.atan2 ( y , x )
    >>> C_polar = transform ( C , X , r , phi ) 
    """

    ny = len(Y)
    assert 1 <= ny, 'Invalid size of Y!'

    nx = len(X)
    if C is None and 1 <= nx:
        C = Ostap.SymMatrix(nx)()
        for i, x in enumerate(X):
            xx = VE(x)
            C[i, i] = xx.cov2()

    shape = C.shape
    assert shape[0] == shape[1] and shape[0] == nx, 'Invalid shape of matrix C!'

    CC = Ostap.SymMatrix(nx)()
    for i in range(CC.kRows):
        CC[i, i] = C(i, i)
        for j in range(i + 1, CC.kCols):
            v = 0.5 * (C(i, j) + C(j, i))
            CC[i, j] = v

    XX = Ostap.Vector(nx)()
    for i, x in enumerate(X):
        XX[i] = float(x)

    ## get vector-with-errors
    XX = Ostap.VectorE(nx)(XX, CC)

    R = XX.transform(*Y)

    return R.cov2()
Пример #2
0
def test_linalg2() :
    """The main function to test linear algebra
    """
    
    logger.info('Test Linaear Algebra: ')
    
    LA3 = Ostap.Vector(3)
    l1  = LA3(0,1,2)
    l2  = LA3(3,4,5)
    
    logger.info ( 'l1 , l2 : %s %s '  % ( l1 , l2  ) )
    logger.info ( 'l1 + l2 : %s    '  % ( l1 + l2  ) )
    
    logger.info ( 'l1 - l2 : %s    '  % ( l1 - l2  ) )
    logger.info ( 'l1 * l2 : %s    '  % ( l1 * l2  ) )
    logger.info ( 'l1 *  2 : %s    '  % ( l1 *  2  ) )
    logger.info ( ' 2 * l2 : %s    '  % ( 2  * l2  ) )
    logger.info ( 'l1 /  2 : %s    '  % ( l1 /  2  ) )
    
    l1 /= 2 
    logger.info ( 'l1 /= 2 : %s    '  % l1 )
    
    l1 *= 2 
    logger.info ( 'l1 *= 2 : %s    '  % l1 )


    ## if ( 3 , 5 ) <= python_version :
        
    ##     logger.info ( 'l1 @ l2 : %s    '  % ( l1 @ l2  ) )
    ##     logger.info ( 'l1 @  2 : %s    '  % ( l1 @  2  ) )
    ##     logger.info ( ' 2 @ l2 : %s    '  % ( 2  @ l2  ) )
        
    logger.info('TEST matrices: ')
    
    m22 = Ostap.Math.Matrix(2,2) ()
    m23 = Ostap.Math.Matrix(2,3) ()
    s22 = Ostap.Math.SymMatrix(2)()
    
    l2  = Ostap.Math.Vector(2)()
    l3  = Ostap.Math.Vector(3)()
    
    l2[0]    = 1
    l2[1]    = 2
    
    l3[0]    = 1
    l3[1]    = 2
    l3[1]    = 3
    
    logger.info ( 'l2 , l3 : %s %s '  % ( l2 , l3  ) )
    
    m22[0,0] = 1
    m22[0,1] = 1
    m22[1,1] = 1
    
    m23[0,0] = 1
    m23[1,1] = 1
    m23[0,2] = 1
    
    s22[0,0] = 2
    s22[1,0] = 1
    s22[1,1] = 3
    
    logger.info ( 'm22\n%s'    % m22     ) 
    logger.info ( 's22\n%s'    % s22     ) 
    logger.info ( 'm23\n%s'    % m23     ) 
    logger.info ( 'm22/3\n%s'  % (m22/3) )
    
    logger.info ( 'm23*3\n%s'  % (m23*3) ) 

    logger.info ( 'm22**3\n%s' % m22**3  ) 
    logger.info ( 's22**4\n%s' % s22**4  ) 

    logger.info ( 'm22 * m23 :\n%s' % ( m22 * m23 ) ) 
    logger.info ( 'm22 *  l2 : %s ' % ( m22 * l2  ) ) 
    logger.info ( 'l2  * m22 : %s ' % ( l2  * m22 ) ) 
    logger.info ( 'm23 *  l3 : %s ' % ( m23 * l3  ) ) 
    logger.info ( 'l2  * m23 : %s ' % ( l2  * m23 ) )
    
    logger.info ( 'm22 * s22 + 2 * m22 :\n%s ' %  ( m22*s22 + 2*m22  ) )
    logger.info ( 'm22 == m22*1.0 : %s ' % (  m22 == m22 * 1.0 ) )
    logger.info ( 'm22 != m22*1.1 : %s ' % (  m22 != m22 * 1.1 ) )
    logger.info ( 'm23 == m23*1.0 : %s ' % (  m23 == m23 * 1.0 ) )
    logger.info ( 'm23 != m23*1.1 : %s ' % (  m23 != m23 * 1.1 ) )
    logger.info ( 'l1  == l1 *1.0 : %s ' % (  l1  == l1  * 1.0 ) )
    logger.info ( 'l1  != l1 *1.1 : %s ' % (  l1  != l1  * 1.1 ) )
    logger.info ( 's22 == s22*1.0 : %s ' % (  s22 == s22 * 1.0 ) )
    logger.info ( 's22 != s22*1.1 : %s ' % (  s22 != s22 * 1.1 ) )
    
    logger.info ( ' l1 == (0,1,2) : %s ' % (  l1 == ( 0 , 1 , 2 ) ) )
    logger.info ( ' l1 == [0,1,2] : %s ' % (  l1 == [ 0 , 1 , 2 ] ) )

    
    ## if ( 3 , 5 ) <= python_version :
        
    ##     logger.info ( 'm23 @ 3   :\n%s' % ( m23 @ 3   ) ) 
    ##     logger.info ( 'm22 @ m23 :\n%s' % ( m22 @ m23 ) ) 
    ##     logger.info ( 'm22 @  l2 : %s ' % ( m22 @ l2  ) ) 
    ##     logger.info ( 'm23 @  l3 : %s ' % ( m23 @ l3  ) ) 
         

    m22[0,0] = 1
    m22[0,1] = 2
    m22[1,0] = 2
    m22[1,1] = 3
    
    s22[0,0] = 1
    s22[0,1] = 2
    s22[1,1] = 3
    
    logger.info ( ' m22 == s22     : %s ' % ( m22 == s22       ) )
    logger.info ( ' m22 == s22*1.0 : %s ' % ( m22 == s22 * 1.0 ) )
    logger.info ( ' m22 != s22*1.1 : %s ' % ( m22 != s22 * 1.1 ) )


    m22 += m22
    logger.info ( ' m22 += m22  :\n%s ' % m22 )

    m22 -= m22*2
    logger.info ( ' m22 += m22*2 :\n%s ' % m22 )

    m22 += s22*0
    logger.info ( ' m22 += s22*0 :\n%s ' % m22 )

    m22 -= s22*2
    logger.info ( ' m22 -= s22*2 :\n%s ' % m22 )

    s22 += s22*2
    logger.info ( ' s22 += s22*2 :\n%s ' % s22 )

    s22 -= s22*2
    logger.info ( ' s22 -= s22*2 :\n%s ' % s22 )
    

    if np :
        logger.info ( 'Operations with numpy objects')
        
        v2 = np.array ( [1.0,2.0]      )
        v3 = np.array ( [1.0,2.0,3.0 ] )

        logger.info ( 'v2  * l2  : %s' % ( v2  * l2  ) )
        logger.info ( 'l3  * v3  : %s' % ( l3  * v3  ) )
        logger.info ( 's22 * v2  : %s' % ( s22 * v2  ) )
        logger.info ( 'm22 * v2  : %s' % ( m22 * v2  ) )
        logger.info ( 'm23 * v3  : %s' % ( m23 * v3  ) )
        
        logger.info ( 'm22  * m22(np) :\n%s' % ( m22 * m22.to_numpy() ) )
        logger.info ( 's22  * s22(np) :\n%s' % ( s22 * s22.to_numpy() ) )
        logger.info ( 's22  * m23(np) :\n%s' % ( s22 * m23.to_numpy() ) )        
        logger.info ( 'l2   * m22(np) :\n%s' % ( l2  * m22.to_numpy() ) )

        
    logger.info ( 'SVector with errors')

    v2  = Ostap.Math.VectorE (2)()

    v2 [ 0 ] = 3
    v2 [ 1 ] = 4
    
    v2 . cov2 () [ 0 , 0 ] = 0.10
    v2 . cov2 () [ 0 , 1 ] = 0.05
    v2 . cov2 () [ 1 , 1 ] = 0.20

    rho = lambda x,y : ( x * x + y * y ) **  0.5
    phi = lambda x,y : math.atan2 ( y , x ) 
    

    r1 = v2.transform ( rho , phi )
    logger.info ( " -> rho, phi %s " % r1 )

    r2 = v2.transform ( rho  )
    logger.info ( " -> rho      %s " % r2 )