<?xml version="1.0" encoding="utf-8"?>
<ul>
  <li>I’ve recently prepared a talk on our new project: Urban Breathing. It’s a hybrid HPC-AI digital twin designed for high-resolution air quality modelling in Greater Manchester.

You can view the interactive slides below, or click here to open them in full screen.



The script and source files can also be found in the repository.
</li>
  <li>On 12th December 2022, I took the position of a Senior Research Scientist in Data Science and Analytics in Atmospheric Air Pollution, at The National Centre for Atmospheric Science (NCAS) based in the Department of Earth and Environmental Science, the University of Manchester.

 
</li>
  <li>Combine CCN data

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import os
from pandas.plotting import scatter_matrix
from scipy import stats, integrate
import seaborn as sns
from pylab import savefig
%matplotlib inline


os.chdir(r'XXX')
Filenames=[];
for files in os.listdir('.'):
    if files.startswith('CCN 100 data'):
        Filenames.append(files)

def Getfile(fnombre):
  df=pd.read_csv(fnombre,skiprows=4)
  df['Date']=pd.read_csv(fnombre,nrows=2).iloc[0,1]
  df.columns=list(pd.Series(list(df.columns)).str.strip(' '))
  df['Datetime']=pd.to_datetime(df['Date'].astype('str')+' '+df['Time'].astype('str'))
  del df['Date']
  del df['Time']
  return df
df_list=[Getfile(fname) for fname in Filenames];
big_df=pd.concat(df_list)


big_df=big_df.rename(columns={'Datetime':'Time'})
big_df['Time']=big_df['Time'].dt.strftime('%Y-%m-%d %H:%M:%S')
big_df=big_df.set_index('Time')
big_df.index=pd.to_datetime(big_df.index)
big_df=big_df.sort_index()
big_df.to_csv('CCNdata.csv',encoding='utf-8')


Dropping the first 5-min data for each supersaturation

import time, datetime
from datetime import datetime, timedelta
dfa=big_df[['Current SS','CCN Number Conc']]
dfa['SS']=dfa['Current SS'].shift(+1)
dfa['SS_Delta']=dfa['Current SS']-dfa['SS']
dfad=dfa.copy()
dfac=dfa[dfa['SS_Delta']!=0]
for i in np.arange(len(dfac)):
    a=dfac.index[i]
    b=a+timedelta(minutes = 5)
    dfad=dfad[~((dfad.index&gt;=a)&amp;(dfad.index&lt;=b))]


dfad=dfad[['Current SS','CCN Number Conc']]
dfad.reset_index().pivot_table(index='Time',columns='Current SS',aggfunc='mean')['CCN Number Conc'].resample('5min').mean().to_csv('CCN_5min.csv')
dfad.reset_index().pivot_table(index='Time',columns='Current SS',aggfunc='mean')['CCN Number Conc'].resample('1H').mean().to_csv('CCN_1H.csv')

</li>
  <li>Data and codes will be available in this post shortly upon acceptance of the manuscript.
</li>
  <li>Install the Hysplit model into the computer

  
    Install TCL: https://www.ready.noaa.gov/HYSPLIT_util.php
  
  
    Install HYSPLIT: https://www.ready.noaa.gov/HYSPLIT_hytrial.php
  
  
    Using TCL to open HYSPLIT
  


Using R codes to run HYSPLIT
library (openair)
library(lubridate)
library(latticeExtra)
dataDir="D:\\Hysplit"
setwd(dataDir)  ### Set the working directory

hy.path&lt;-"c:\\hysplit4\\"         ### Install the Hysplit model into the computer
read.files &lt;- function(hours = 96, hy.path) {
  ## find tdump files
  files &lt;- Sys.glob("tdump*")
  output &lt;- file('Rcombined.txt', 'w')
  ## read through them all, ignoring 1st 7 lines
  for (i in files){
    input &lt;- readLines(i)
    input &lt;- input[-c(1:7)] # delete header
    writeLines(input, output)
  }
  close(output)
    traj &lt;- read.table(paste0(hy.path, "working\\Rcombined.txt"), header = FALSE)
  traj &lt;- subset(traj, select = -c(V2, V7, V8))
  traj &lt;- rename(traj, c(V1 = "receptor", V3 = "year", V4 = "month", V5 = "day",
                         V6 = "hour", V9 = "hour.inc", V10 = "lat", V11 = "lon",
                         V12 = "height", V13 = "pressure"))
  ## hysplit uses 2-digit years ...
  year &lt;- traj$year[1]
  if (year &lt; 50) traj$year &lt;- traj$year + 2000 else traj$year &lt;- traj$year + 1900
  traj$date2 &lt;- with(traj, ISOdatetime(year, month, day, hour, min = 0, sec = 0,
                                       tz = "GMT"))
  ## arrival time
  traj$date &lt;- traj$date2 - 3600 * traj$hour.inc
  traj
}


add.met &lt;- function(month, Year, met, bat.file) {
  ## if month is one, need previous year and month = 12
  if (month == 0) {
    month &lt;- 12
    Year &lt;- as.numeric(Year) - 1
  }
  if (month &lt; 10) month &lt;- paste("0", month, sep = "")
  ## add first line
  write.table(paste("echo", met, " &gt;&gt;CONTROL"),
              bat.file, col.names = FALSE,
              row.names = FALSE, quote = FALSE, append = TRUE)
  x &lt;- paste("echo RP", Year, month, ".gbl &gt;&gt;CONTROL", sep = "")
  write.table(x, bat.file, col.names = FALSE,
              row.names = FALSE, quote = FALSE, append = TRUE)
}


procTraj &lt;- function(lat = 48.9, lon = 2.2, year = 2019, name = "paris",
                     met = "D:\\Hysplit\\TrajData\\", out = "D:\\Hysplit\\TrajProc\\",
                     hours = 24, height = 100, hy.path = "C:\\hysplit4\\") {
  ## hours is the back trajectory time e.g. 96 = 4-day back trajectory
  ## height is start height (m)
  lapply(c("openair", "plyr", "reshape2"), require, character.only = TRUE)
  ## function to run 12 months of trajectories
  ## assumes 96 hour back trajectories, 1 receptor
  setwd(paste0(hy.path, "working\\"))
  ## remove existing "tdump" files
  path.files &lt;- paste0(hy.path, "working\\")
  bat.file &lt;- paste0(hy.path, "working\\test.bat") ## name of BAT file to add to/run
  files &lt;- list.files(path = path.files, pattern = "tdump")
  lapply(files, function(x) file.remove(x))
  start &lt;- paste(year, "-01-01", sep = "")
  end &lt;- paste(year, "-12-31 23:00", sep = "")
  dates &lt;- seq(as.POSIXct(start, "GMT"), as.POSIXct(end, "GMT"), by = "1 hour")
  for (i in 1:length(dates)) {
    year &lt;- format(dates[i], "%y")
    Year &lt;- format(dates[i], "%Y") # long format
    month &lt;- format(dates[i], "%m")
    day &lt;- format(dates[i], "%d")
    hour &lt;- format(dates[i], "%H")
    x &lt;- paste("echo", year, month, day, hour, " &gt;CONTROL")
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE)
    x &lt;- "echo 1 &gt;&gt;CONTROL"
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    x &lt;- paste("echo", lat, lon, height, " &gt;&gt;CONTROL")
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    x &lt;- paste("echo ", "-", hours, " &gt;&gt;CONTROL", sep = "")
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    x &lt;- "echo 0 &gt;&gt;CONTROL
    echo 10000.0 &gt;&gt;CONTROL
    echo 3 &gt;&gt;CONTROL"
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    ## processing always assumes 3 months of met for consistent tdump files
    months &lt;- as.numeric(unique(format(dates[i], "%m")))
    months &lt;- c(months, months + 1:2)
    months &lt;- months - 1 ## to make sure we get the start of the previous year
    months &lt;- months[months &lt;= 12]
    if (length(months) == 2) months &lt;- c(min(months) - 1, months)
    for (i in 1:3)
      add.met(months[i], year, met, bat.file)
    x &lt;- "echo ./ &gt;&gt;CONTROL"
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    x &lt;- paste("echo tdump", year, month, day, hour, " &gt;&gt;CONTROL", sep = "")
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    x &lt;- "C:\\hysplit4\\exec\\hyts_std"
    write.table(x, bat.file, col.names = FALSE,
                row.names = FALSE, quote = FALSE, append = TRUE)
    ## run the file
    system(paste0(hy.path, 'working\\test.bat'))
  }
  ## combine files and make data frame
  traj &lt;- read.files(hours, hy.path)
  ## write R object to file
  file.name &lt;- paste(out, name, Year, ".RData", sep = "")
  save(traj, file = file.name)
}


for (i in 2009:2020) {    ### Change the date in
  procTraj(lat = 51.5, lon = -0.2, year = i,
           name = "London", hours = 72,height = 100,
           met = "D:\\Hysplit\\TrajData\\", out = "D:\\Hysplit\\TrajProc\\",
           hy.path = "C:\\hysplit4\\") }


Useful links


  https://bookdown.org/david_carslaw/openair/appendix-hysplit.html

</li>
  <li>Meteorological Data for HYSPLIT

  Gridded Meteorological Data archives: https://www.ready.noaa.gov/archives.php
  Archived Model Graphics: https://www.ready.noaa.gov/READYamet.php
  NOAA/ESRL Radiosonde Database: https://ruc.noaa.gov/raobs/
  FTP address: ftp://arlftp.arlhq.noaa.gov/archives/


# R codes
library (openair)
dataDir="xxx" ### Your working directory
setwd(dataDir)  ### Set the working directory
workingDirectory&lt;-dataDir  ### Shortcut for the working directory
getMet &lt;- function (year = 2021:2022, month = 1:12, path_met = dataDir) {
  for (i in seq_along(year)) {
    for (j in seq_along(month)) {
      download.file(url = paste0("ftp://arlftp.arlhq.noaa.gov/archives/reanalysis/RP",
                                 year[i], sprintf("%02d", month[j]), ".gbl"),
                    destfile = paste0(path_met, "RP", year[i],
                                      sprintf("%02d", month[j]), ".gbl"), mode = "wb")}}}
getMet(year = 2022:2022, month = 1:12, path_met = dataDir) ### GET data for sepecific time


Hourly/Sub-Hourly Observations Data

  GIS Platform: https://www.ncei.noaa.gov/maps/hourly/
  FTP address: ftp://ftp.ncdc.noaa.gov/pub/data/noaa/


# R codes
library(worldmet)
dataDir="xxx" ### Your working directory
setwd(dataDir)
info &lt;- getMeta(lat = 40, lon = 116.9) ### Set the position of interest
dat &lt;- importNOAA(code = "545110-99999", year = 2015:2019) ## Find the code of the meteorological station and datetime ranges
write.csv(dat,'BeijingMet.csv') ### Set filename


ERA5 hourly data on single levels from 1959 to present

  Website: https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=overview


# python codes
import netCDF4 as nc
from netCDF4 import Dataset
import pandas as pd
import numpy as np
import os
dataDir="xxx" ### specify working Directory
xn="ERA5_renalysis.nc" ### specify filename of the .nc file
os.chdir(dataDir)


# python codes
f=Dataset(xn)
for i in f.variables.keys():
    print(i)


# python codes
def closest(lst, K):  
     lst = np.asarray(lst)
     idx = (np.abs(lst - K)).argmin()
     return lst[idx]


# python codes
av=closest(list(f.variables['latitude'][:]),51.15) ###latitude is 51.15
bv=closest(list(f.variables['longitude'][:]),-1.44) ###longitude is -1.44
a=list(f.variables['latitude'][:]).index(av)
b=list(f.variables['longitude'][:]).index(bv)


# python codes
timezone=0
dtime = netCDF4.num2date(f.variables['time'][:],f.variables['time'].units,calendar=f.variables['time'].calendar)
nptimes = dtime.astype('datetime64[ns]')
atm=pd.DataFrame(index=np.array(dtime),
                 data={'ssr':f.variables['ssr'][:,:,a,b][~f.variables['ssr'][:,:,a,b].mask],
                              'tp':f.variables['tp'][:,:,a,b][~f.variables['tp'][:,:,a,b].mask]})
atm['blh']=np.nan
atm['tcc']=np.nan
atm['sp']=np.nan
atm['blh'].iloc[:-2]=f.variables['blh'][:,:,a,b][~f.variables['blh'][:,:,a,b].mask] ## Check number of NAN values for the last records [:-2]
atm['tcc'].iloc[:-2]=f.variables['tcc'][:,:,a,b][~f.variables['tcc'][:,:,a,b].mask]
atm['sp'].iloc[:-2]=f.variables['sp'][:,:,a,b][~f.variables['sp'][:,:,a,b].mask]
atm.index.name='date'
atm.index=atm.index.astype('datetime64[ns]')
atm=atm.sort_index()
atm.to_csv("NETCDF_data.csv")

The data can be four dimension: f.variables[‘blh’][:,:,a,b] or three dimension: f.variables[‘blh’][:,a,b]

Useful links

  https://github.com/sonnymetvn/Basic-Python-for-Meteorology/tree/main/notebook
  https://cran.r-project.org/web/packages/ecmwfr/
  https://cran.r-project.org/web/packages/ecmwfr/vignettes/cds_vignette.html

</li>
  <li>Chemicals


  
    
      Instrument
      Container
      Chemical list
      Check
    
  
  
    
      CPC
      Bham Leeds BAS
      2.5L Butanol (CAS 71-36-3) for each container
      ✅ ❌
    
    
      HONO-LOPAP
      BAS
      2L HCL (CAS 7647-01-0)
       
    
    
       
       
      0.5kg NaOH (CAS 1310-73-2)
       
    
    
       
       
      1L HNO3 (CAS 7697-37-2)
       
    
    
       
       
      0.5kg sulfanilamide (CAS 63-74-1)
       
    
    
       
       
      10g Azo dye
       
    
    
       
       
      1 nitrate standard (CAS 14797-55-8)
       
    
    
       
       
      40L DIW
       
    
    
      HCHO monitor
      Leeds
      Ammonium acetate (CAS 631-61-8) (Analytical purity+, 1000g/month)
       
    
    
       
       
      Acetic acid (64-19-7) (Analytical purity, 40ml/month)
       
    
    
       
       
      Acetylacetone (123-54-6) (Analytical purity,30ml/month)
       
    
    
       
       
      Concentrated sulfuric acid (CAS 7664-93-9) (Analytical purity, 60ml/month)
       
    
    
       
       
      Formaldehyde (CAS 107-21-1)) stock solution/standard solution
       
    
    
       
       
      Potassium hydroxide (CAS 1310-58-3)
       
    
    
       
       
      Alcohol (CAS 64-17-5)
       
    
    
      Api-ToF
      Bham
      Reagent grade nitric acid (CAS 7697-37-2, 70% w/w concentration or thereabouts, around 10 mL)
       
    
    
      PSM
      Bham
      Diethylene Glycol (CAS 111-46-6), about 500 mL.  butanol (for CPC)
       
    
    
      AiRRmonia
      Outside container
      20g Sodium hydroxide (CAS 1310-73-2, ACS reagent or AR grade; pellets)
       
    
    
       
       
      20g Ammonium sulphate (NH4)2SO4 (CAS 7783-20-2, ACS reagent grade)
       
    
    
      HR-ToF-AMS
      Bham
      NH4NO3 (CAS 6484-52-2, product ID:22249-100G，2 bottles)
       
    
    
       
       
      (NH4)2SO4 (CAS 7783-20-2, product ID:59845-25G,1 bottle)
       
    
    
       
       
      NaCl (CAS 7647-14-5, product ID: PHR1321-5G, 1 bottle)
       
    
    
       
       
      MSA (CAS 75-75-2, product ID:59510-1ML, 1 bottle) produced by Sigma
       
    
    
      PINE
      Leeds
      HPLC-grade water
       
    
    
       
       
      Isopropanol (CAS 67-63-0)
       
    
    
       
       
      Butanol (CAS 71-36-3)
       
    
    
       
       
      Acetone (67-64-1)
       
    
    
       
       
      Silicone oil
       
    
    
       
       
      3M Novec 7500 Engineered Fluid (fluorinated oil)
       
    
    
       
       
      Sphere Fluidics Pico-Surf surfactant (5% w/w in Novec 7500 fluorinated oil)
       
    
    
       
       
      Drierite with indicator
       
    
    
       
       
      Silica gel (orange indicating)
       
    
    
       
       
      ATC Hexid A4 heat transfer fluid (containing water
       
    
    
       
       
      propylene glycol (CAS 57-55-6)
       
    
    
       
       
      fluorescein (trace, CAS 2321-07-5) and biocide (trace, CAS 25314-61-8) for a recirculating chiller
       
    
    
      Incubation
      OUC
      KH2PO4 (CAS 7778-77-0)
       
    
    
       
       
      FeCl3 (CAS 7705-08-0)
       
    
    
       
       
      ZnCl2 (CAS 7646-85-7)
       
    
    
       
       
      HCl (CAS 7647-01-0)
       
    
    
       
       
      C10H9O6P (CAS 3368-04-5)
       
    
    
       
       
      NaCl (CAS 7647-14-5)
       
    
    
       
       
      NaHCO3 (CAS 144-55-8)
       
    
    
       
       
      Na2CO3 (CAS 497-19-8)
       
    
    
       
       
      Na2B4O7·10H2O (CAS 1303-96-4)
       
    
    
       
       
      glutaral (CAS 111-30-8)
       
    
    
       
       
      8%parafomaldehyde (CAS 30525-89-4)
       
    
    
       
       
      acetone (CAS 67-64-1)
       
    
    
       
       
      OPA (CAS 643-79-8)
       
    
    
       
       
      Anhydrous ethanol (CAS 64-17-5)
       
    
    
       
       
      Na2SO3 (CAS 7757-83-7)
       
    
    
       
       
      (NH4)2SO4 (CAS 7783-20-2)
       
    
  


Gas bottles


  
    
      Instrument
      Container
      Gas bottles
    
  
  
    
      AMOF CO analyzer
      Bham
      2500ppm CO2 in high purity argon
    
    
       
       
      nitrogen research grade
    
    
       
       
      a working standard for calibrations
    
    
      AMOF NOx analyser
      Bham
      a working standard for calibrations
    
    
       
       
      nitrogen research grade
    
    
      PTR-Qi-ToF
      Leeds
      PTR-MS gas standards, Apel-Riemer Environmental
    
    
       
       
      Nitrogen?
    
    
      Api-ToF
      Bham
      N5 (ultrapure) nitrogen gas. 3 ccm/min, a small cylinder
    
    
      HONO - LOPAP
      BAS
      2 cylinders (N5 purity, size L)
    
    
      HCHO and N2O5 monitors
      Leeds
      6 * 40L (100bar) nitrogen
    
    
       
       
      4L Helium
    
    
       
       
      2 * 8L NO
    
    
      iDirac
      BAS
      2 * 10L nitrogen cylinders (outside container)
    
    
       
       
      2 * 0.5 L cal gas bottles (insider container next to the iDirac)
    
    
      Nephelometer
      Bham
      4L CO2
    
    
      SO2 analyzer
      BAS
      3 * big (50L) zero air cylinders
    
    
       
       
      2 small (5L) 1 ppm SO2 standards.
    
    
      Incubation
      OUC
      liquid nitrogen
    
  

</li>
  <li>Instruments from Peking University during the SEANA Cruise


  
    
       
      HCHO
      N2O5
      j-values
    
  
  
    
      Size
      45×15×56cm(fits in 19” std standard cabinet)
      90×43×26cm
      45×15×50 cm(put a table in the container)
    
    
      Weight
      10kg
      ＜30kg
      10 kg
    
    
      Sampling flow
      1 L/min
      1-5L/min
       
    
    
      Sampling tube
      1/4inch, PTFE  Length is determined to local situation
      PFA, 1/4inch，&lt;3mneeds to be filtered(we will supply filter head and filter membrane)
      An UV receptor (needs to be installed appropriately)
    
    
      Power
      220V, 150 W
      220V,150W
      220V, 100 W
    
    
      Reagent needed
      - Ammonium acetate( Analytical purity+, 1kg/month)   - Acetic acid(Analytical purity, 40ml/month)   - Acetylacetone(Analytical purity,30ml/month)  - Concentrated sulfuric acid(Analytical purity, 60ml/month)
      None
      None
    
  


甲醛仪所需药品估算方法


  以观测40天计算，每六天更换R1吸收液，防止损耗，以10次估算。
  每12-14天更换反应液，并标定一次，以5次估算。


化学试剂/ Chemicals


  浓硫酸（分析纯），15 mL/次*10次=150ml
  醋酸铵（分析纯及以上），385 g/次*5次=1935g，我们使用的是西格玛的
  冰醋酸（分析纯），12.5 mL/次*5次=62.6ml，我们使用的是TCI的
  乙酰丙酮（分析纯，避光保存），10 mL/次*5次=50ml，我们使用的是TCI的
  10.3mg/L HCHO甲醛原液/标准溶液 1ml/次，下图标准溶液瓶是2ml一瓶，拆开后只能用一次，即需要5瓶标准甲醛溶液。

  1mol/L氢氧化钾: 清洗，10-40ml（使用注射器）
  酒精（甲醛仪、CEAS、浊度计清洗需要，1-2瓶就够了）


气体/ Gas


  
    氮气：

    甲醛仪：1L/min，每日走30-40分钟空白，共需要2000L（按采样50天，一天走40分钟空白计算）。
 CEAS：200ml/min，共需要14400L（按采样50天计算）如40L一瓶（10MPa=100bar）则需要5瓶，CEAS的氮气用量比较大，能否用液氮供氮气。
  
  CEAS - 氦气：4L
  CEAS - NO：10ml/l, 需要两瓶8L的NO
  Nephelometer - 二氧化碳：4L


设备/ Equipment


  甲醛仪需要冰箱存放5L反应液R2，冰箱需要放在甲醛仪的边上。
  大超声波清洗器
  超纯水发生系统
  CEAS需要单独的进样口，进样管最好不超过1.5m；仪器开盖运行，温度不可过高


配件工具/ Tools


  电子天平

  气体流量校准仪
  针式过滤器+采样过滤膜，3-5个？针式过滤器和采样过滤膜需按照当地污染状况确定，&gt;3-5。
  蠕动泵管 备用1套？每月更换一次是换管子还是换一段？准备一套，每月更换一根新的管子。
  扳手（6、7号）
  内六角扳手（3mm, 1.5mm）、内球六角扳手
  卡套接头

  验漏瓶


耗材/ Consumables


  
    
      名称
      用途
      规格
      数量
      备注
    
  
  
    
      移液枪或移液管
      配制溶液
      200μl、1ml、5ml
      3
      各1
    
    
      棕色容量瓶
      配制溶液
      棕色100mL
      8
      　
    
    
      气体流量计
      标定气体流量
      0—10L/min
      1
      　
    
    
      烧杯（塑料）
      配制溶液，日常维护
      50ml、100ml、200ml
      2
      　
    
    
      电子天平
      配置溶液
      1台，1-500g
      1
      　
    
    
      注射器
      日常维护，清洗
      5mL、20ml
      若干
      　
    
    
      药匙
      溶液配制
      大号20cm
      2
      　
    
    
      封口膜
      密封瓶口、管口等
       
      若干
      　
    
    
      铝箔
      封口
       
      若干
      　
    
    
      无粉尘的手套口罩/酒精/
      防护
       
      若干
      　
    
  


仪器功率/ Power consumption

甲醛仪
电    源：供电电源：220VAC
重    量：10kg（不包括药剂） 
尺    寸：550mm * 430mm * 280mm



  English version


The estimation method of the chemicals required for the formaldehyde (HCHO) monitor:

  Based on 40-days observations, the R1 uptake solution is replaced every six days to prevent loss. Thus, it is estimated as 10 times.
  Change the reaction solution every 12-14 days and calibrate once, estimated as 5 times.


Chemicals

  Concentrated sulfuric acid (analytical purity) 15 mL/time * 10 times = 150 ml
  Ammonium acetate (analyzed pure and above) 385 g/time * 5 times = 1935g, We are using sigma
  Glacial acetic acid (pure for analysis) 12.5 mL/time * 5 times = 62.6 ml, We are using TCI
  Acetylacetone (assay pure, protected from light) 10 mL / time * 5 times = 50 ml, We are using TCI
  10.3mg/L HCHO formaldehyde stock solution/standard solution 1ml/time, the standard solution bottle in the following figure is 2ml bottle, which can only be used once after disassembly, that is, 5 bottles of standard formaldehyde solution are required.
  1mol/L potassium hydroxide: wash, 10-40ml (using a syringe)
  Alcohol (formaldehyde monitor, CEAS, turbidity meter cleaning needs, 1-2 bottles are enough)


Gas

  
    nitrogen:

    HCHO monitor: 1L/min, 30-40 minutes of blank space per day, a total of 2000L is required (calculated by sampling 50 days, 40 minutes of blank space a day).
 CEAS: 200ml/min, a total of 14400L (calculated by sampling 50 days) such as 40L requires 5 bottles, CEAS nitrogen dosage is relatively large, can use liquid nitrogen to supply nitrogen.
  
  CEAS - Helium: 4L
  CEAS - NO: 10 ml/l, two bottles of NO of 8L are required
  Nephelometer - Carbon dioxide: 4L


Equipment

  The formaldehyde meter needs to store 5L of the reaction liquid R2 in the refrigerator, and the refrigerator needs to be placed on the side of the formaldehyde meter.
  Large ultrasonic cleaner
  Ultrapure water generation system
  CEAS requires a separate inlet, the inlet tube is preferably not more than 1.5m; the instrument is operated with the lid open and the temperature should not be too high


Tools

  Electronic balances
  Gas flow calibrator
  Needle filter + sampling filter membrane, qty 3-5? Needle filters and sampling filter membranes need to be determined according to local contamination conditions, &gt;3-5.
  Peristaltic pump tube Spare, 1 set? Is it a tube change or a section to change once a month? Prepare a set and replace a new tube every month.
  Wrenches (Size 6, 7)
  Hex wrench (3mm, 1.5mm), hex wrench
  Ferrule connector
  Leak detection bottles


Consumables


  
    
      Item
      Function
      Specification
      Qty
      Note
    
  
  
    
      Pipette or pipette
      Prepare the solution
      200μl,1ml,5ml
      3
      1 for each
    
    
      Brown volumetric flask
      Prepare the solution
      Brown 100mL
      8
       
    
    
      Barometer
      Calibration gas flow
      0—10L/min
      1
       
    
    
      Beaker (plastic)
      Preparation of solutions, routine maintenance
      50ml,100ml,200ml
      2
       
    
    
      Electronic balance
      Placement solution
      1 unit, 1-500g
      1
       
    
    
      Syringe
      Daily maintenance, cleaning
      5mL、20ml
      Some
       
    
    
      Medicine spoon
      Solution preparation
      Large 20cm
      2
       
    
    
      Parafilm
      Seal bottle mouth, tube, etc.
       
      Some
       
    
    
      Aluminum foil
      Seal
       
      some
       
    
    
      Power free gloves/mask/alcohol/
      Protection
       
      Some
       
    
  


Power consumption
HCHO monitor: 
Power supply: power supply: 220VAC 
Weight: 10kg (excluding agents) 
Size: 550mm * 430mm * 280mm
</li>
  <li> 

  可解释的机器学习技术量化灰霾污染的驱动因素

  Revealing Drivers of Haze Pollution by Explainable Machine Learning

  


南开大学冯银厂教授团队：ES&amp;T Letters; 通讯作者：戴启立, 南开大学

作者：Linlu Hou (侯林璐), Qili Dai (戴启立), Congbo Song (宋从波), Bowen Liu (刘博文), Fangzho Guo (郭方舟), Tianjiao Dai (戴天骄), Linxuan Li (李林璇), Baoshuang Liu (刘保双), Xiaohui Bi (毕晓辉), Yufen Zhang (张裕芬), Yinchang Feng (冯银厂)

环境空气中颗粒物浓度的生消变化受污染源排放和气象条件（扩散、传输、化学转化和沉降等多理化过程）的共同影响。量化这些驱动因素对重污染过程形成的贡献可为消除重污染天气、制定环境空气*质量达标规划提供科学依据。由于气象和污染之间存在复杂的非线性关系，解决这一科学问题在技术方法上依然具有挑战性。
利用化学传输模式进行情景模拟和过程分析是研究这一问题的常用方法，但通常受排放清单等的不确定性影响较大，尤其在政策干预（如新冠疫情）以及节日效应（节日烟花新增排放等）导致排放源强发生较大变化时，物理模型难以准确重现污染物的观测结果。另一研究思路是基于观测数据的分析方法进行污染来源和成因推断，如基于颗粒物理化性质观测数据的受体模型源解析研究等。随着高时间分辨率环境空气污染物监测数据的积累，利用拟合性能强大、计算高效快速、可处理复杂非线性问题的机器学习算法开展污染物预测的研究日益增多。尽管机器学习算法具有高鲁棒性的预测能力，但大多数算法的“黑箱”特点导致其不可解释或模型的可解释性不足。

研究基础：
近年来，一种基于机器学习算法的气象标准化技术，被广泛用以量化污染排放变化对污染物环境浓度的贡献。南开大学冯银厂教授团队联合英国伯明翰大学地理地球与环境科学系、美国罗彻斯特大学等机构学者进一步提高了该方法的可靠性，并应用于评估我国31个主要城市环境空气质量对疫情封城的响应（Geophys. Res. Lett. 48(11), e2021GL093403,2021）。2020年初疫情封城后我国华北地区发生多次重污染过程，引起广泛关注。研究团队联合天津市环境气象中心对疫情前后发生在天津的五次重污染过程成因及来源进行了跟踪研究（Environ. Sci. Tech., 54, 9917−9927, 2020; Sci. Total Environ., 759, 143548, 2021; J. Environ. Sci., 109, 45-56, 2021; Environ. Pollu., 286, 117252, 2021），多个研究结果表明这些污染过程中的气象条件和排放源贡献具有显著差异。

研究方法：
以上述五个污染过程为研究对象，研究团队通过利用更多与污染相关的变量信息构建了一个准确性得到显著提升的PM2.5随机森林预测模型（r2=0.906），应用气象标准化技术评估了上述五次污染过程中排放和气象对PM2.5环境浓度的贡献，发现无论是常态下还是疫情管控期间，污染源排放贡献的PM2.5浓度始终居于高位，是重污染形成的主因。同时，研究团队尝试利用基于沙普利值（Shapley）的特征归因算法（SHAP，一种解决合作博弈问题的用以估算解释变量在模型每个预测过程中的贡献的方法）估算了污染过程中气象因子、化学作用等导致的PM2.5环境浓度的变化，以及影响PM2.5中硫酸盐和硝酸盐生成的关键因子（形成机制），并量化了不同影响因素之间的交互作用。



图1 五次污染过程中解释变量对气象引起的PM2.5浓度的随机森林预测模型中的贡献


总结展望：
通过与大量相关文献中的结果进行对比，本研究估算的气象因子、传输、化学作用等驱动要素对污染过程的贡献与基于观测分析和传统化学传输模式计算结果基本一致。相比于化学传输模式，应用本研究中的技术方法（基于机器学习的气象标准化技术耦合解释模型）解析污染成因简单、快捷、高效，适用于追踪污染源强发生明显变化的干预场景，在方法学上可与化学传输模式互为补充，具有较大的应用潜力。当然机器学习有其优势，亦有不足，详见论文中的讨论。

相关论文发表在Environ. Sci. Technol. Letters上，南开大学硕士研究生侯林璐为文章的第一作者，南开大学助理研究员戴启立为通讯作者（daiql@nankai.edu.cn）。

致谢：

本研究受国家自然科学基金项目（42177085）、天津市科技计划项目（PTZWHZ00120）以及中国工程院院地合作项目（2020C0-0002）资助。

出版信息：
Environ. Sci. Technol. Letters. 2022, ASAP
Publication Date: January 4, 2022
&lt;https://doi.org/10.1021/acs.estlett.1c00865&gt;
Copyright © 2022 American Chemical Society


原文链接：https://pubs.acs.org/doi/abs/10.1021/acs.estlett.1c00865
</li>
  <li>




</li>
  <li>安装Jekyll并开启本地服务


  打开terminal，进入repo文件夹里：cd /Documents/GitHub/"repo name"/
  检查是否有Ruby 2.1.0 以上版本：ruby -v
  如果没有Ruby的话可以打开这个链接安装ruby
  然后安装Bundle：gem install bundler
  Pages主题文件里面应该有Gemfile文件。如果将来需要安装什么Jekyll的插件，可以在这个文件里加入：gem “plugin_name”。
  然后安装Jekyll：bundle install


生成网页


  在repo文件夹里运行：bundle exec Jekyll serve来在本地生成你的网页。
  可以在浏览器里面输入localhost:4000浏览网页。


参考

https://dlsong.com/tech/jekyll/
</li>
  <li>
https://www.mdpi.com/si/105493

Dear Colleagues,

Air pollution ranked the fourth largest risk factor in terms of human health according to the Global Burden of Disease Study in 2019. Largest increase in risk exposure has been seen for particulate matter (PM) pollution. In addition to health implications, aerosols acting as cloud condensation nuclei (CCN) or ice nuclei particles (INP) can interact with clouds thus affecting the global climate. To understand the role of aerosols in both public health and climate, we propose the Special Issue ‘Physical and Chemical Properties, Emission Characteristics and Sources of Atmospheric Aerosols’ to encourage researchers to share recent advances in such topic. This topic focuses on sources and processes of aerosols collected from traffic, urban, rural or marine atmosphere. Both natural (e.g., sea spray aerosols, mineral dust, biomass burning and biogenic aerosols, etc.) and anthropogenic (e.g., on-road vehicles, industrial, shipping, residential solid fuel burning, etc.) sources can contribute to the aerosol burden in the atmosphere. We welcome papers contributing to the characterization (e.g., chemical composition, size distribution, etc.) of source emissions from both laboratory studies and field measurements. Research on evolving/aging processes from source to receptor, physical and chemical properties and source apportionment of aerosols using online/ offline measurements are all welcome. Authors are also encouraged to include a section on the implications for future aerosols research, air quality improvement and possible abatement strategies, etc.

Topics of interest for the Special Issue include but are not limited to:

  Investigation of ambient aerosols’ physical and chemical properties
  Aerosol emission flux measurements
  Physical and chemical properties of aerosol source emissions
  Aerosol source apportionment
  Method development of PM-related organic compounds analysis
  Comparison of different source apportionment methods


Dr. Jingsha Xu
Dr. Congbo Song
Dr. Qili Dai
Dr. Deepchandra Srivastava
Guest Editors
</li>
</ul>