Skip to content
Snippets Groups Projects
Select Git revision
  • e1121f97eb8c0883aca7e1e8fea29de4f1d7bd11
  • master default protected
  • use_flight_altitude
  • distribute
4 results

cloud_fraction_fcn_viirs.py

Blame
  • probabilityDensity.pro 7.79 KiB
    ;;; Function to compute 2D slope probability density function
    
    FUNCTION prob2D_xi, xi1, xi2
    
    	COMMON SLOPECUMULANTS,kappa_1,kappa_2,kappa_3,kappa_11,kappa_21,kappa_12, $
    		kappa_110,kappa_101,kappa_011, $
    		kappa_210,kappa_120, $
    		kappa_201,kappa_102, $
    		kappa_012,kappa_021, $
    		kappa_111
    
    	COMMON LAMBDA,lambda2_Matrix,lambda3_Matrix,lambda_Det,lambda2_invMatrix,lambda3_invMatrix
    
    	nu1 = (xi1-kappa_1)/(SQRT(kappa_2))
    	nu2 = (xi2-kappa_1)/(SQRT(kappa_2))
    
    	nu = TRANSPOSE([nu1, nu2])
    
    	;;; Compute the normalised cumulants
    	lambda_3 = kappa_3/(kappa_2^1.5D)
    	lambda_21 = kappa_21/(kappa_2^1.5D)
    	lambda_12 = kappa_12/(kappa_2^1.5D)
    
    	;;; Quadratic form nu^T . Inverse(Lambda) . nu
    
    	quadForm = TRANSPOSE(nu) ## (lambda2_invMatrix ## nu)
    
    	;;; Save Hermite polynomials
    	He2_30 = He2([3,0],nu)
    	He2_03 = He2([0,3],nu)
    	He2_12 = He2([1,2],nu)
    	He2_21 = He2([2,1],nu)
    
    	;;; Compute the linear component of the pdf
    	probDensLin = (1.D/(2.D*!DPI*SQRT(lambda_Det)*kappa_2))*EXP(-0.5D*quadForm)
    
    	;;; Add the nonlinear correction
    	probDens = probDensLin $
    		*(1.D + (1.D/6.D)*(lambda_3*He2_30 + 3.D*lambda_21*He2_21 $
    				 + 3.D*lambda_12*He2_12 + lambda_3*He2_03))
    
    	RETURN,probDens
    
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;;; Function to compute slope probability density function, for scalar xi1 
    ;;; and vector xi2. Since prob2D_xi() only accepts scalars, we must construct 
    ;;; a vector of values over xi2 for a single value of xi1.
    
    FUNCTION prob2D_xi_int, xi1, xi2
    
    	prob_xi_Return = DBLARR(N_ELEMENTS(xi2))
    	FOR i=0,N_ELEMENTS(xi2)-1 DO prob_xi_Return[i]=prob2D_xi(xi1,xi2[i])
    	RETURN,prob_xi_Return
    END
    
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;;; Function to compute 3D slope probability density function
    
    FUNCTION prob3D_xi, xi1, xi2, xi3
    
    	COMMON SLOPECUMULANTS,kappa_1,kappa_2,kappa_3,kappa_11,kappa_21,kappa_12, $
    		kappa_110,kappa_101,kappa_011, $
    		kappa_210,kappa_120, $
    		kappa_201,kappa_102, $
    		kappa_012,kappa_021, $
    		kappa_111
    
    	COMMON LAMBDA,lambda2_Matrix,lambda3_Matrix,lambda_Det,lambda2_invMatrix,lambda3_invMatrix
    
    	nu1 = (xi1-kappa_1)/(SQRT(kappa_2))
    	nu2 = (xi2-kappa_1)/(SQRT(kappa_2))
    	nu3 = (xi3-kappa_1)/(SQRT(kappa_2))
    
    	nu = TRANSPOSE([nu1, nu2, nu3])
    
    	;;; Quadratic form nu^T . Inverse(Lambda) . nu
    
    	quadForm = TRANSPOSE(nu) ## (lambda3_invMatrix ## nu)
    
    	;;; Compute the normalised cumulants
    	lambda_300 = kappa_3 / (kappa_2^1.5D)
    	lambda_030 = kappa_3 / (kappa_2^1.5D)
    	lambda_003 = kappa_3 / (kappa_2^1.5D)
    
    	lambda_210 = kappa_210  / (kappa_2^(1.5D))
    	lambda_120 = kappa_120  / (kappa_2^(1.5D))
    
    	lambda_201 = kappa_201  / (kappa_2^(1.5D))
    	lambda_102 = kappa_102  / (kappa_2^(1.5D))
    
    	lambda_021 = kappa_021  / (kappa_2^(1.5D))
    	lambda_012 = kappa_012  / (kappa_2^(1.5D))
    
    	lambda_111 = kappa_111 / (kappa_2^(1.5D))
    
    	;;; Save Hermite polynomials
    	He3_300 = He3([3,0,0],nu)
    	He3_030 = He3([0,3,0],nu)
    	He3_003 = He3([0,0,3],nu)
    
    	He3_210 = He3([2,1,0],nu)
    	He3_120 = He3([1,2,0],nu)
    	He3_201 = He3([2,0,1],nu)
    	He3_102 = He3([1,0,2],nu)
    	He3_012 = He3([0,1,2],nu)
    	He3_021 = He3([0,2,1],nu)
    
    	He3_111 = He3([1,1,1],nu)
    
    	;;; Compute the linear component of the pdf
    	probDensLin = EXP(-0.5D*quadForm)/(((2.D*!DPI*kappa_2)^1.5D)*SQRT(lambda_Det))
    
    	;;; Add the nonlinear correction
    	probDens = probDensLin $
    		*(1.D + (1.D/6.D)*(lambda_300*He3_300 + lambda_030*He3_030 + lambda_003*He3_003 + $ 
    			3.D*(lambda_210 * He3_210  	     $
                    + lambda_120 * He3_120 	     $
    				+ lambda_201 * He3_201 	     $
    				+ lambda_102 * He3_102 	     $
    				+ lambda_012 * He3_012 	     $
    				+ lambda_021 * He3_021)	     $
    				+ 6.D*lambda_111 * He3_111   $
    			))
    
    	RETURN,probDens
    	
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;;; Function to compute slope probability density function, for scalar xi1, xi2 
    ;;; and vector xi3. Since prob3D_xi() only accepts scalars, we must construct 
    ;;; a vector of values over xi3 for a single values of xi1 and xi2.
    
    FUNCTION prob3D_xi_int, xi1, xi2, xi3
    	prob_xi_Return = DBLARR(N_ELEMENTS(xi3))
    	FOR i=0,N_ELEMENTS(xi3)-1 DO prob_xi_Return[i]=prob3D_xi(xi1,xi2,xi3[i])
    	RETURN,prob_xi_Return
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;; Function to compute 2D slope probability density function for the case where
    ;;; lambda_101 goes to unity
    
    FUNCTION prob2D_21_xi, xi1, xi2
    
    	COMMON SLOPECUMULANTS,kappa_1,kappa_2,kappa_3,kappa_11,kappa_21,kappa_12, $
    		kappa_110,kappa_101,kappa_011, $
    		kappa_210,kappa_120, $
    		kappa_201,kappa_102, $
    		kappa_012,kappa_021, $
    		kappa_111
    
    	COMMON LAMBDA,lambda2_Matrix,lambda3_Matrix,lambda_Det,lambda2_invMatrix,lambda3_invMatrix
    
    	nu1 = (xi1-kappa_1)/(SQRT(kappa_2))
    	nu2 = (xi2-kappa_1)/(SQRT(kappa_2))
    
    	nu = TRANSPOSE([nu1, nu2])
    
    	;;; Compute the normalised cumulants
    	lambda_3 = kappa_3/(kappa_2^1.5D)
    	lambda_21 = kappa_21/(kappa_2^1.5D)
    	lambda_12 = kappa_12/(kappa_2^1.5D)
    
    	;;; Quadratic form nu^T . Inverse(Lambda) . nu
    
    	quadForm = TRANSPOSE(nu) ## (lambda2_invMatrix ## nu)
    
    	;;; Save Hermite polynomials
    	He2_30 = He2([3,0],nu)
    	He2_03 = He2([0,3],nu)
    	He2_12 = He2([1,2],nu)
    	He2_21 = He2([2,1],nu)
    
    	;;; Compute the linear component of the pdf
    	probDensLin = EXP(-0.5D*quadForm)/(2.D*!DPI*kappa_2*SQRT(lambda_Det))
    
    	;;; Add the nonlinear correction
    	probDens = probDensLin $
    		*((1.D/6.D)*(  8.D*lambda_3*He2_30 $
    		             + 1.D*lambda_3*He2_03 $
    					 + 9.D*lambda_21*He2_21 $
    					 + 3.D*lambda_12*He2_12 $
    					 - 3.D*lambda_12*He2_21 $
    					 - 3.D*lambda_21*He2_12 ))
    					 ;+ 3.D*lambda_12*He2_21 $
    					 ;+ 3.D*lambda_21*He2_12 ))
    
    	RETURN,probDens
    
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;;; Function to compute slope probability density function, for scalar xi1 
    ;;; and vector xi2. Since prob2D_xi() only accepts scalars, we must construct 
    ;;; a vector of values over xi2 for a single value of xi1.
    
    FUNCTION prob2D_21_xi_int, xi1, xi2
    
    	prob_xi_Return = DBLARR(N_ELEMENTS(xi2))
    	FOR i=0,N_ELEMENTS(xi2)-1 DO prob_xi_Return[i]=prob2D_21_xi(xi1,xi2[i])
    	RETURN,prob_xi_Return
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;; Function to compute 2D slope probability density function for the case where
    ;;; lambda_011 goes to unity
    
    FUNCTION prob2D_12_xi, xi1, xi2
    
    	COMMON SLOPECUMULANTS,kappa_1,kappa_2,kappa_3,kappa_11,kappa_21,kappa_12, $
    		kappa_110,kappa_101,kappa_011, $
    		kappa_210,kappa_120, $
    		kappa_201,kappa_102, $
    		kappa_012,kappa_021, $
    		kappa_111
    
    	COMMON LAMBDA,lambda2_Matrix,lambda3_Matrix,lambda_Det,lambda2_invMatrix,lambda3_invMatrix
    
    	nu1 = (xi1-kappa_1)/(SQRT(kappa_2))
    	nu2 = (xi2-kappa_1)/(SQRT(kappa_2))
    
    	nu = TRANSPOSE([nu1, nu2])
    
    	;;; Compute the normalised cumulants
    	lambda_3 = kappa_3/(kappa_2^1.5D)
    	lambda_21 = kappa_21/(kappa_2^1.5D)
    	lambda_12 = kappa_12/(kappa_2^1.5D)
    
    	;;; Quadratic form nu^T . Inverse(Lambda) . nu
    
    	quadForm = TRANSPOSE(nu) ## (lambda2_invMatrix ## nu)
    
    	;;; Save Hermite polynomials
    	He2_30 = He2([3,0],nu)
    	He2_03 = He2([0,3],nu)
    	He2_12 = He2([1,2],nu)
    	He2_21 = He2([2,1],nu)
    
    	;;; Compute the linear component of the pdf
    	probDensLin = EXP(-0.5D*quadForm)/(2.D*!DPI*kappa_2*SQRT(lambda_Det))
    
    	;;; Add the nonlinear correction
    	probDens = probDensLin $
    		*((1.D/6.D)*(  1.D*lambda_3*He2_30 $
    					 + 8.D*lambda_3*He2_03 $
    					 + 6.D*lambda_21*He2_21 $
    					 +12.D*lambda_12*He2_12 ))
    
    	RETURN,probDens
    
    END
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;;; Function to compute slope probability density function, for scalar xi1 
    ;;; and vector xi2. Since prob2D_xi() only accepts scalars, we must construct 
    ;;; a vector of values over xi2 for a single value of xi1.
    
    FUNCTION prob2D_12_xi_int, xi1, xi2
    
    	prob_xi_Return = DBLARR(N_ELEMENTS(xi2))
    	FOR i=0,N_ELEMENTS(xi2)-1 DO prob_xi_Return[i]=prob2D_12_xi(xi1,xi2[i])
    	RETURN,prob_xi_Return
    END