Data Classes¶
ProfilesData¶
The ProfilesData
class contains profile data information. Most of the information can be found in the data
attribute, which is an xarray.Dataset
. Detection and retrieval methods might add information as additional xarray.DataArray
.
ProfilesData
¶
Base class representing profiles data returned by (aprofiles.reader.ReadProfiles):.
Source code in aprofiles/profiles.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 |
|
data
property
writable
¶
Data attribute (instance of (xarray.Dataset):)
clouds(time_avg=1, zmin=0, thr_noise=5.0, thr_clouds=4.0, min_snr=0.0, verbose=False)
¶
Calls :meth:aprofiles.detection.clouds.detect_clouds()
.
Source code in aprofiles/profiles.py
393 394 395 396 397 |
|
desaturate_below(var='attenuated_backscatter_0', z=4000.0, inplace=False)
¶
Remove saturation caused by clouds at low altitude which results in negative values above the maximum. The absolute value of the signal is returned below the prescribed altitude.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
var
|
str
|
variable of the :class: |
'attenuated_backscatter_0'
|
z
|
float
|
Altitude (in m, AGL) below which the signal is unsaturated. |
4000.0
|
inplace
|
bool
|
if True, replace the instance of the (ProfilesData):. |
False
|
Todo
Refine method to desaturate only saturated areas.
Returns:
Type | Description |
---|---|
ProfilesData): object with additional attribute `desaturate` for the processed (xarray.DataArray
|
. |
.. warning:: For now, absolute values are returned everywhere below the prescribed altitude.
Example
import aprofiles as apro
# read example file
path = "examples/data/E-PROFILE/L2_0-20000-001492_A20210909.nc"
reader = apro.reader.ReadProfiles(path)
profiles = reader.read()
# desaturation below 4000m
profiles.desaturate_below(z=4000., inplace=True)
profiles.data.attenuated_backscatter_0.desaturated
True
Source code in aprofiles/profiles.py
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
|
extrapolate_below(var='attenuated_backscatter_0', z=150, method='cst', inplace=False)
¶
Method for extrapolating lowest layers below a certain altitude. This is of particular intrest for instruments subject to After Pulse effect, with saturated signal in the lowest layers. We recommend to use a value of zmin=150m due to random values often found below that altitude which perturbs the clouds detection.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
var
|
str
|
variable of the :class: |
'attenuated_backscatter_0'
|
z
|
float
|
Altitude (in m, AGL) below which the signal is extrapolated. |
150
|
method
|
{cst, lin}
|
Method to be used for extrapolation of lowest layers. |
'cst'
|
inplace
|
bool
|
if True, replace the instance of the (ProfilesData): class. |
False
|
Returns:
Type | Description |
---|---|
ProfilesData
|
object with additional attributes:
|
Example
import aprofiles as apro
# read example file
path = "examples/data/E-PROFILE/L2_0-20000-001492_A20210909.nc"
reader = apro.reader.ReadProfiles(path)
profiles = reader.read()
# desaturation below 4000m
profiles.extrapolate_below(z=150., inplace=True)
profiles.data.attenuated_backscatter_0.extrapolation_low_layers_altitude_agl
150
Source code in aprofiles/profiles.py
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
|
foc(method='cloud_base', var='attenuated_backscatter_0', z_snr=2000.0, min_snr=2.0, zmin_cloud=200.0)
¶
Calls :meth:aprofiles.detection.foc.detect_foc()
.
Source code in aprofiles/profiles.py
387 388 389 390 391 |
|
gaussian_filter(sigma=0.25, var='attenuated_backscatter_0', inplace=False)
¶
Applies a 2D gaussian filter in order to reduce high frequency noise.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sigma
|
scalar or sequence of scalars
|
Standard deviation for Gaussian kernel. The standard deviations of the Gaussian filter are given for each axis as a sequence, or as a single number, in which case it is equal for all axes. |
0.25
|
var
|
str
|
variable name of the Dataset to be processed. |
'attenuated_backscatter_0'
|
inplace
|
bool
|
if True, replace the instance of the (ProfilesData): class. |
False
|
Returns:
Type | Description |
---|---|
ProfilesData): object with additional attributes `gaussian_filter` for the processed (xarray.DataArray
|
. |
Example
import aprofiles as apro
# read example file
path = "examples/data/E-PROFILE/L2_0-20000-001492_A20210909.nc"
reader = apro.reader.ReadProfiles(path)
profiles = reader.read()
# apply gaussian filtering
profiles.gaussian_filter(sigma=0.5, inplace=True)
profiles.data.attenuated_backscatter_0.attrs.gaussian_filter
0.50
Source code in aprofiles/profiles.py
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
|
inversion(time_avg=1, zmin=4000.0, zmax=6000.0, min_snr=0.0, under_clouds=False, method='forward', apriori={'lr': 50.0, 'mec': False, 'use_cfg': False}, remove_outliers=False, mass_conc=True, mass_conc_method='mortier_2013', verbose=False)
¶
Calls :meth:aprofiles.retrieval.extinction.inversion()
to calculate extinction profiles.
Calls :meth:aprofiles.retrieval.mass_conc.mec()
to calculate Mass to Extinction coefficients if mass_conc
is true (Default).
Source code in aprofiles/profiles.py
405 406 407 408 409 410 411 412 413 414 415 |
|
pbl(time_avg=1, zmin=100.0, zmax=3000.0, wav_width=200.0, under_clouds=True, min_snr=2.0, verbose=False)
¶
Calls :meth:aprofiles.detection.pbl.detect_pbl()
.
Source code in aprofiles/profiles.py
399 400 401 402 403 |
|
plot(var='attenuated_backscatter_0', datetime=None, zref='agl', zmin=None, zmax=None, vmin=None, vmax=None, log=False, show_foc=False, show_pbl=False, show_clouds=False, cmap='coolwarm', show_fig=True, save_fig=None, **kwargs)
¶
Plotting method.
Depending on the variable selected, this method will plot an image, a single profile or a time series of the requested variable.
See also :ref:Plotting
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
var
|
str
|
Variable to be plotted. |
'attenuated_backscatter_0'
|
datetime
|
class: |
None
|
|
zref
|
{agl, asl}
|
Base reference for the altitude axis. |
'agl'
|
zmin
|
float
|
Minimum altitude AGL (m). |
None
|
zmax
|
float
|
Maximum altitude AGL (m). |
None
|
vmin
|
float
|
Minimum value. |
None
|
vmax
|
float
|
Maximum value. |
None
|
log
|
bool
|
Use logarithmic scale. |
False
|
show_foc
|
bool
|
Show fog or condensation retrievals. |
False
|
show_pbl
|
bool
|
Show PBL height retrievals. |
False
|
show_clouds
|
bool
|
Show clouds retrievals. |
False
|
cmap
|
str
|
Matplotlib colormap. |
'coolwarm'
|
show_fig
|
bool
|
Show Figure. |
True
|
save_fig
|
str
|
Path of the saved figure. |
None
|
Source code in aprofiles/profiles.py
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 |
|
range_correction(var='attenuated_backscatter_0', inplace=False)
¶
Method that corrects the solid angle effect (1/z2) which makes that the backscatter beam is more unlikely to be detected with the square of the altitude.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
var
|
str
|
variable of the Dataset to be processed. |
'attenuated_backscatter_0'
|
inplace
|
bool
|
if True, replace the instance of the (ProfilesData): class. |
False
|
Returns:
Type | Description |
---|---|
ProfilesData
|
|
.. warning:: Make sure that the range correction is not already applied to the selected variable.
Source code in aprofiles/profiles.py
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 |
|
snr(var='attenuated_backscatter_0', step=4, verbose=False)
¶
Method that calculates the Signal to Noise Ratio.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
var
|
str
|
Variable of the DataArray to calculate the SNR from. |
'attenuated_backscatter_0'
|
step
|
int
|
Number of steps around we calculate the SNR for a given altitude. |
4
|
verbose
|
bool
|
Verbose mode. |
False
|
Returns:
Type | Description |
---|---|
ProfilesData): object with additional (xarray.DataArray
|
|
Example
import aprofiles as apro
# read example file
path = "examples/data/E-PROFILE/L2_0-20000-001492_A20210909.nc"
reader = apro.reader.ReadProfiles(path)
profiles = reader.read()
# snr calculation
profiles.snr()
# snr image
profiles.plot(var='snr',vmin=0, vmax=3, cmap='Greys_r')
Source code in aprofiles/profiles.py
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
|
time_avg(minutes, var='attenuated_backscatter_0', inplace=False)
¶
Rolling median in the time dimension.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
minutes
|
float
|
Number of minutes to average over. |
required |
var
|
str
|
variable of the Dataset to be processed. |
'attenuated_backscatter_0'
|
inplace
|
bool
|
if True, replace the instance of the (ProfilesData): class. |
False
|
Returns:
Type | Description |
---|---|
ProfilesData
|
|
Source code in aprofiles/profiles.py
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
|
write(base_dir=Path('examples', 'data', 'V-Profiles'), verbose=False)
¶
Calls :meth:aprofiles.io.write_profiles.write()
.
Source code in aprofiles/profiles.py
461 462 463 464 465 |
|
Aeronet¶
Not implemented yet.
AeronetData
¶
Base class representing profiles data returned by (aprofiles.io.reader.ReadAeronet):.
Source code in aprofiles/aeronet.py
5 6 7 8 9 10 11 |
|
Rayleigh¶
The RayleighData
class is used for producing Rayleigh profiles in a standard atmosphere.
RayleighData
¶
Class for computing rayleigh profile in a standard atmosphere.
This class calls the :func:get_optics_in_std_atmo()
method, which produces profiles of backscatter
and extinction
coefficients.
Attributes:
Name | Type | Description |
---|---|---|
altitude |
array - like
|
array of altitude ASL to be used to compute the rayleigh profile, in m. |
wavelength |
float
|
Wavelength of the Rayleigh profile to be computed, in nm. |
T0 |
float
|
Temperature at ground level, in K. |
P0 |
float
|
Pressure at ground level, in hPa. |
Example
# some imports
import aprofiles as apro
import numpy as np
# creates altitude array
altitude = np.arange(15,15000,15)
wavelength = 1064.
# produce rayleigh profile
rayleigh = apro.rayleigh.RayleighData(altitude, wavelength, T0=298, P0=1013);
# checkout the instance attributes
rayleigh.__dict__.keys()
dict_keys(['altitude', 'T0', 'P0', 'wavelength', 'cross_section', 'backscatter', 'extinction'])
Source code in aprofiles/rayleigh.py
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
|
get_optics_in_std_atmo()
¶
Function that returns backscatter and extinction profiles [#]_ for an instance of a (RayleighData): class.
.. [#] Bucholtz, A. (1995). Rayleigh-scattering calculations for the terrestrial atmosphere. Applied optics, 34(15), 2765-2773.
Returns:
Type | Description |
---|---|
RayleighData
|
object with additional attributes:
|
Source code in aprofiles/rayleigh.py
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
|
plot(show_fig=True)
¶
Plot extinction profile of an instance of the (RayleighData): class.
Example
# some imports
import aprofiles as apro
import numpy as np
# creates altitude array
altitude = np.arange(15,15000,15)
wavelength = 1064.
# produce rayleigh profile
rayleigh = apro.rayleigh.RayleighData(altitude, wavelength, T0=298, P0=1013);
# plot profile
rayleigh.plot()
.. figure:: ../../docs/assets/images/rayleigh.png :scale: 80 % :alt: rayleigh profile
Rayleigh extinction profile for a standard atmosphere.
Source code in aprofiles/rayleigh.py
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
|
Size Distribution¶
The size distribution module is used to produce volume and number size distributions of a population of particles for a given type. The values describing the size distribution for different aerosol types are taken from the literature:
Aerosol properties are defined in config/aer_properties.json
SizeDistributionData
¶
Class for computing size distributions for a given aerosol type.
This class calls the aprofiles.size_distribution.SizeDistributionData.get_sd
: method, which calculates VSD (Volume Size Distribution) and NSD (Number Size Distribution).
Attributes:
Name | Type | Description |
---|---|---|
`aer_type` |
{dust, volcanic_ash, biomass_burning, urban}
|
aerosol type. |
`aer_properties` |
dict
|
dictionnary describing the optical and microphophysical properties of the prescribed aerosol (read from aer_properties.json) |
Example
# some imports
import aprofiles as apro
sd = apro.size_distribution.SizeDistributionData('urban')
# checkout the instance attributes
apro.size_distribution.SizeDistributionData('dust').__dict__.keys()
dict_keys(['aer_type', 'aer_properties', 'radius', 'vsd', 'nsd'])
Source code in aprofiles/size_distribution.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
|
get_sd()
¶
Returns the Volume and Number Size Distributions arrays from an instance of the (SizeDistributionData): class .
Returns:
Type | Description |
---|---|
SizeDistribData
|
object with additional attributes:
|
Source code in aprofiles/size_distribution.py
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
|
plot(show_fig=True)
¶
Plot Size Distributions of an instance of the (SizeDistributionData): class.
Example
# import aprofiles
import aprofiles as apro
# get size distribution for urban particles
sd = apro.size_distribution.SizeDistribData('urban');
# plot profile
sd.plot()
Source code in aprofiles/size_distribution.py
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
|
Mass to Extinction Coefficient¶
The MECData
class is used for computing a Mass to Extinction Coefficient for a given aerosol type.
MECData
¶
Class for computing the Mass to Extinction Coefficient for a given aerosol type.
This class calls the get_mec()
method.
Attributes:
Name | Type | Description |
---|---|---|
`aer_type` |
{dust, volcanic_ash, biomass_burning, urban}
|
aerosol type. |
`wavelength` |
int or float
|
wavelength, in mm. |
`method` |
{mortier_2013, literature}
|
method to retrieve or compute |
`aer_properties` |
dict
|
dictionary describing the optical and micro-physical properties of the prescribed aerosol (read from aer_properties.json) |
Example
#some imports
import aprofiles as apro
mec_data = MECData('volcanic_ash', 532.)
mec_data.__dict__.keys()
dict_keys(['aer_type', 'wavelength', 'aer_properties', 'nsd', 'vsd', 'radius', 'qext', 'conv_factor', 'mec'])
print(f'{mec_data.conv_factor:.2e} m {mec_data.mec):.2e} m2.g-1')
6.21e-07 m 0.62 m2.g-1
Source code in aprofiles/mec.py
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
|
get_mec()
¶
Calculates the Extinction to Mass Coefficient for a given type of particles, assuming a prescribed size distribution shape (with unknown amplitude), density, and using Mie theory to calculate the extinction efficiency.
Returns: (MECData): with additional attributes:
- `nsd` (1D Array): Number Size Distribution
- `vsd` (1D Array): Volume Size Distribution
- `radius` (1D Array): Radius in µm
- `x` (1D Array): Size parameter (unitless)
- `conv_factor` (float): Conversion factor in m
- `mec` (float): Extinction to Mass Coefficient in m².g⁻¹
Note
For a population of particles, the extinction coefficient \(\sigma_{ext}\) (m⁻¹) can be written as follows:
$$ \sigma_{ext} = \int_{r_{min}}^{r_{max}} N(r) Q_{ext}(m, r, \lambda) \pi r^2 dr $$
where \(Q_{ext}\) is the extinction efficiency
and \(N(r)\) is the Number Size Distribution
(NSD).
\(Q_{ext}\) varies with the refractive index, \(m\), the wavelength, \(\lambda\), and can be calculated for spherical particles using Mie theory.
The total aerosol mass concentration \(M_0\) (µg.m⁻³) can be expressed as:
$$ M_0 = \int_{r_{min}}^{r_{max}} M(r) dr $$
where \(M(r)\) is the mass size distribution (MSD).
This can be rewritten in terms of NSD and MSD as:
$$ M_0 = \int_{r_{min}}^{r_{max}} \frac{4\pi r^3}{3} \rho N(r) dr $$
where \(\rho\) is the particle density (kg.m⁻³).
By normalizing the NSD with respect to the fine mode (\(N(r) = N_0 N_1(r)\)), we arrive at:
$$ M_0 = \sigma_{ext} \rho \frac{4}{3} \frac{\int_{r_{min}}^{r_{max}} N_1(r) r^3 dr}{\int_{r_{min}}^{r_{max}} N_1(r) Q_{ext}(m, r, \lambda) r^2 dr} $$
We define the conversion factor
(in m) as:
$$ c_v = \frac{4}{3} \frac{\int_{r_{min}}^{r_{max}} N_1(r) r^3 dr}{\int_{r_{min}}^{r_{max}} N_1(r) Q_{ext}(m, r, \lambda) r^2 dr} $$
Thus, the equation simplifies to:
$$ M_0 = \sigma_{ext} \rho c_v $$
Finally, the Extinction to Mass Coefficient
(MEC, also called mass extinction cross section
, usually in m².g⁻¹) is defined as:
$$ MEC = \frac{\sigma_{ext}}{M_0} = \frac{1}{\rho c_v} $$
with \(\rho\) expressed in g.m⁻³.
Aerosol Type | Conversion Factor (µm) | MEC (m².g⁻¹) | ||
---|---|---|---|---|
532 nm | 1064 nm | 532 nm | 1064 nm | |
Urban | 0.31 | 1.92 | 1.86 | 0.31 |
Desert dust | 0.68 | 1.04 | 0.58 | 0.38 |
Biomass burning | 0.26 | 1.28 | 3.30 | 0.68 |
Volcanic ash | 0.62 | 0.56 | 0.62 | 0.68 |
Source code in aprofiles/mec.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
|
plot(show_fig=True)
¶
Plot main information of an instance of the MECData
class.
Example
#import aprofiles
import aprofiles as apro
#compute mec for biomas burning particles at 532 nm
mec = apro.mec.MECData('volcanic_ash', 532.);
#plot information
mec.plot()
Source code in aprofiles/mec.py
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
|
-
Dubovik, O., Holben, B., Eck, T. F., Smirnov, A., Kaufman, Y. J., King, M. D., ... & Slutsker, I. (2002). Variability of absorption and optical properties of key aerosol types observed in worldwide locations. Journal of the Atmospheric Sciences, 59(3), 590-608. ↩
-
Mortier, A., Goloub, P., Podvin, T., Deroo, C., Chaikovsky, A., Ajtai, N., ... & Derimian, Y. (2013). Detection and characterization of volcanic ash plumes over Lille during the Eyjafjallajökull eruption. Atmospheric Chemistry and Physics, 13(7), 3705-3720. ↩