Thu, 10 Nov 2016 16:02:34 +0200
Initial commit during ACTRIS WP2 meeting in Barcelona.
ulalume3@0 | 1 | # This Python script will be executed from within the main calc_lidar_correction_parameters_G_H_K.py |
ulalume3@0 | 2 | # Probably it will be better in the future to let the main script rather read a conguration file, which might improve the portability of the code within an executable. |
ulalume3@0 | 3 | # Due to problems I had with some two letter variables, most variables are now with at least three letters mixed small and capital. |
ulalume3@0 | 4 | |
ulalume3@0 | 5 | # Header to identify the lidar system |
ulalume3@0 | 6 | # Values of DO, DT, and DR etc. from fit to lamp calibrations in Leipzig (LampCalib_2_invers_c_D0=0.opj) |
ulalume3@0 | 7 | EID = "oh" # Earlinet station ID |
ulalume3@0 | 8 | LID = "POLLY_XT_RALPH LampCalib_2_invers_c_DO=0.opj ver8c-7" # Additional lidar ID (short descriptive text) |
ulalume3@0 | 9 | # firet fit intern (FITLN1) => DO = 0, DT fixed -0.9998, eta and DR fitted, |
ulalume3@0 | 10 | # => internal calib with LinPol before the receiver |
ulalume3@0 | 11 | print(" Lidar system :", EID, ", ", LID) |
ulalume3@0 | 12 | |
ulalume3@0 | 13 | |
ulalume3@0 | 14 | # --- IL Laser IL and +-Uncertainty |
ulalume3@0 | 15 | bL = 1. #degree of linear polarization; default 1 |
ulalume3@0 | 16 | RotL, dRotL, nRotL = 90, 1., 0 #alpha; rotation of laser polarization in degrees; default 0 |
ulalume3@0 | 17 | # --- ME Emitter and +-Uncertainty |
ulalume3@0 | 18 | DiE, dDiE, nDiE = 0., 0.1, 0 # Diattenuation |
ulalume3@0 | 19 | TiE = 1. # Unpolarized transmittance |
ulalume3@0 | 20 | RetE, dRetE, nRetE = 0., 180.0, 0 # Retardance in degrees |
ulalume3@0 | 21 | RotE, dRotE, nRotE = 0., 1.0, 0 # beta: Rotation of optical element in degrees |
ulalume3@0 | 22 | |
ulalume3@0 | 23 | # --- MO Receiver Optics including telescope |
ulalume3@0 | 24 | DiO, dDiO, nDiO = 0.0, 0.0022, 0 |
ulalume3@0 | 25 | TiO = 1.0 |
ulalume3@0 | 26 | RetO, dRetO, nRetO = 0., 180.0, 0 |
ulalume3@0 | 27 | RotO, dRotO, nRotO = 0., 0.5, 0 #gamma |
ulalume3@0 | 28 | |
ulalume3@0 | 29 | # --- PBS MT transmitting path defined with (TS,TP); and +-Uncertainty |
ulalume3@0 | 30 | # --- Pol.Filter |
ulalume3@0 | 31 | ERaT, dERaT, nERaT = 0.0001, 0.0001, 1 # Extinction ratio |
ulalume3@0 | 32 | RotaT, dRotaT, nRotaT = 90., 2., 0 # Rotation of the pol.-filter in degrees |
ulalume3@0 | 33 | DaT = (1-ERaT)/(1+ERaT) |
ulalume3@0 | 34 | TaT = 0.5*(1+ERaT) |
ulalume3@0 | 35 | # --- PBS combined with Pol.Filter |
ulalume3@0 | 36 | TP, dTP, nTP = 0.512175, 0.0024, 1 |
ulalume3@0 | 37 | TS, dTS, nTS = 1-TP, 0.02, 0 |
ulalume3@0 | 38 | TiT = 0.5 * (TP + TS) |
ulalume3@0 | 39 | DiT = (TP-TS)/(TP+TS) |
ulalume3@0 | 40 | RetT, dRetT, nRetT = 0., 180., 0 # Retardance in degrees |
ulalume3@0 | 41 | |
ulalume3@0 | 42 | # --- PBS MR reflecting path defined with (RS,RP); and +-Uncertainty |
ulalume3@0 | 43 | # --- Pol.Filter |
ulalume3@0 | 44 | ERaR, dERaR, nERaR = 1, 0.003, 0 |
ulalume3@0 | 45 | RotaR, dRotaR, nRotaR = 0., 2., 0 |
ulalume3@0 | 46 | DaR = (1-ERaR)/(1+ERaR) |
ulalume3@0 | 47 | TaR = 0.5*(1+ERaR) |
ulalume3@0 | 48 | # --- PBS 50/50 |
ulalume3@0 | 49 | RP, dRP, nRP = 1-TP, 0.02, 0 |
ulalume3@0 | 50 | RS, dRS, nRS = 1-TS, 0.00, 0 |
ulalume3@0 | 51 | RetR, dRetR, nRetR = 0., 180., 0 |
ulalume3@0 | 52 | TiR = 0.5 * (RP + RS) |
ulalume3@0 | 53 | DiR = (RP-RS)/(RP+RS) |
ulalume3@0 | 54 | |
ulalume3@0 | 55 | # --- Parallel signal detected in the transmitted channel => Y = 1, or in the reflected channel => Y = -1 |
ulalume3@0 | 56 | Y = -1. |
ulalume3@0 | 57 | |
ulalume3@0 | 58 | # --- Calibrator Location |
ulalume3@0 | 59 | LocC = 3 #location of calibrator: 1 = behind laser; 2 = behind emitter; 3 = before receiver; 4 = before PBS |
ulalume3@0 | 60 | # --- Calibrator Type used; defined by matrix values below |
ulalume3@0 | 61 | TypeC = 3 #Type of calibrator: 1 = mechanical rotator; 2 = hwp rotator (fixed retardation); 3 = linear polarizer; 4 = qwp; 5 = circular polarizer; 6 = real HWP calibration +-22.5° |
ulalume3@0 | 62 | # --- MC Calibrator |
ulalume3@0 | 63 | if TypeC == 1: #mechanical rotator |
ulalume3@0 | 64 | DiC, dDiC, nDiC = 0., 0., 0 |
ulalume3@0 | 65 | TiC = 1. |
ulalume3@0 | 66 | RetC, dRetC, nRetC = 0., 0., 0 |
ulalume3@0 | 67 | RotC, dRotC, nRotC = 0., 0.1, 1 #constant calibrator offset epsilon |
ulalume3@0 | 68 | # Rotation error without calibrator: if False, then epsilon = 0 for normal measurements |
ulalume3@0 | 69 | RotationErrorEpsilonForNormalMeasurements = True # is in general True for TypeC == 1 calibrator |
ulalume3@0 | 70 | elif TypeC == 2: # HWP rotator |
ulalume3@0 | 71 | DiC, dDiC, nDiC = 0., 0., 0 |
ulalume3@0 | 72 | TiC = 1. |
ulalume3@0 | 73 | RetC, dRetC, nRetC = 180., 0., 0 |
ulalume3@0 | 74 | #NOTE: use here twice the HWP-rotation-angle |
ulalume3@0 | 75 | RotC, dRotC, nRotC = 0.0, 0.1, 1 #constant calibrator offset epsilon |
ulalume3@0 | 76 | RotationErrorEpsilonForNormalMeasurements = True # is in general True for TypeC == 2 calibrator |
ulalume3@0 | 77 | elif TypeC == 3: # linear polarizer calibrator |
ulalume3@0 | 78 | DiC, dDiC, nDiC = 0.9998, 0.0001, 1 # ideal 1.0 |
ulalume3@0 | 79 | TiC = 0.505 # ideal 0.5 |
ulalume3@0 | 80 | RetC, dRetC, nRetC = 0., 0., 0 |
ulalume3@0 | 81 | RotC, dRotC, nRotC = 0.0, 0.1, 1 #constant calibrator offset epsilon |
ulalume3@0 | 82 | RotationErrorEpsilonForNormalMeasurements = False # is in general False for TypeC == 3 calibrator |
ulalume3@0 | 83 | elif TypeC == 4: # QWP calibrator |
ulalume3@0 | 84 | DiC, dDiC, nDiC = 0.0, 0., 0 # ideal 1.0 |
ulalume3@0 | 85 | TiC = 1.0 # ideal 0.5 |
ulalume3@0 | 86 | RetC, dRetC, nRetC = 90., 0., 0 |
ulalume3@0 | 87 | RotC, dRotC, nRotC = 0.0, 0.1, 1 #constant calibrator offset epsilon |
ulalume3@0 | 88 | RotationErrorEpsilonForNormalMeasurements = False # is False for TypeC == 4 calibrator |
ulalume3@0 | 89 | elif TypeC == 6: # real half-wave plate calibration at +-22.5° => rotated_diattenuator_X22x5deg.odt |
ulalume3@0 | 90 | DiC, dDiC, nDiC = 0., 0., 0 |
ulalume3@0 | 91 | TiC = 1. |
ulalume3@0 | 92 | RetC, dRetC, nRetC = 180., 0., 0 |
ulalume3@0 | 93 | #Note: use real HWP angles here |
ulalume3@0 | 94 | RotC, dRotC, nRotC = 0.0, 0.1, 1 #constant calibrator offset epsilon -1.15 |
ulalume3@0 | 95 | RotationErrorEpsilonForNormalMeasurements = True # is in general True for TypeC == 6 calibrator |
ulalume3@0 | 96 | else: |
ulalume3@0 | 97 | print ('calibrator not implemented yet') |
ulalume3@0 | 98 | sys.exit() |
ulalume3@0 | 99 | |
ulalume3@0 | 100 | # --- LDRCal assumed atmospheric linear depolarization ratio during the calibration measurements (first guess) |
ulalume3@0 | 101 | LDRCal,dLDRCal,nLDRCal= 0.006, 0.02, 1 |
ulalume3@0 | 102 | |
ulalume3@0 | 103 | # ==================================================== |
ulalume3@0 | 104 | # NOTE: there is no need to change anything below. |
ulalume3@0 | 105 | |
ulalume3@0 | 106 | # --- LDRtrue for simulation of measurement => LDRsim |
ulalume3@0 | 107 | LDRtrue = 0.4 |
ulalume3@0 | 108 | LDRtrue2 = 0.004 |
ulalume3@0 | 109 | |
ulalume3@0 | 110 | # --- measured LDRm will be corrected with calculated parameters GHK |
ulalume3@0 | 111 | LDRmeas = 0.3 |
ulalume3@0 | 112 | |
ulalume3@0 | 113 | # --- this is just for correct transfer of the variables to the main file |
ulalume3@0 | 114 | RotL0, dRotL, nRotL = RotL, dRotL, nRotL |
ulalume3@0 | 115 | # Emitter |
ulalume3@0 | 116 | DiE0, dDiE, nDiE = DiE, dDiE, nDiE |
ulalume3@0 | 117 | RetE0, dRetE, nRetE = RetE, dRetE, nRetE |
ulalume3@0 | 118 | RotE0, dRotE, nRotE = RotE, dRotE, nRotE |
ulalume3@0 | 119 | # Receiver |
ulalume3@0 | 120 | DiO0, dDiO, nDiO = DiO, dDiO, nDiO |
ulalume3@0 | 121 | RetO0, dRetO, nRetO = RetO, dRetO, nRetO |
ulalume3@0 | 122 | RotO0, dRotO, nRotO = RotO, dRotO, nRotO |
ulalume3@0 | 123 | # Calibrator |
ulalume3@0 | 124 | DiC0, dDiC, nDiC = DiC, dDiC, nDiC |
ulalume3@0 | 125 | RetC0, dRetC, nRetC = RetC, dRetC, nRetC |
ulalume3@0 | 126 | RotC0, dRotC, nRotC = RotC, dRotC, nRotC |
ulalume3@0 | 127 | # PBS |
ulalume3@0 | 128 | TP0, dTP, nTP = TP, dTP, nTP |
ulalume3@0 | 129 | TS0, dTS, nTS = TS, dTS, nTS |
ulalume3@0 | 130 | RetT0, dRetT, nRetT = RetT, dRetT, nRetT |
ulalume3@0 | 131 | |
ulalume3@0 | 132 | ERaT0, dERaT, nERaT = ERaT, dERaT, nERaT |
ulalume3@0 | 133 | RotaT0,dRotaT,nRotaT= RotaT,dRotaT,nRotaT |
ulalume3@0 | 134 | |
ulalume3@0 | 135 | RP0, dRP, nRP = RP, dRP, nRP |
ulalume3@0 | 136 | RS0, dRS, nRS = RS, dRS, nRS |
ulalume3@0 | 137 | RetR0, dRetR, nRetR = RetR, dRetR, nRetR |
ulalume3@0 | 138 | |
ulalume3@0 | 139 | ERaR0, dERaR, nERaR = ERaR, dERaR, nERaR |
ulalume3@0 | 140 | RotaR0,dRotaR,nRotaR= RotaR,dRotaR,nRotaR |
ulalume3@0 | 141 | |
ulalume3@0 | 142 | LDRCal0,dLDRCal,nLDRCal=LDRCal,dLDRCal,nLDRCal |