品質管理で一般的に必要とされる同じ種類のサンプルの繰り返し分析は、面倒で時間がかかります。BeautifulJASONは、これらの作業を完全に自動化できるほど高速化するフレームワークを提供します。スチレンブタジエンゴム(SBR)のサンプル例で説明します。
SBRは最も広く使用されている合成ゴムで、ブタジエンとスチレンの共重合によって製造できます。スチレン/ブタジエンの比率はポリマーの特性に影響し、スチレン含有量が高いほど、ゴムは硬くなり、ゴムらしさが失われるます。したがって、この共重合体の組成を評価することが重要であり、NMRはこの作業に適しています。実際、ISO 21561-1には、溶液重合SBR中のブタジエンの微細構造とスチレンの含有量をプロトンNMRで定量的に決定する手順が説明されています。これは、図1および表1に示すように、SBRスペクトルから積分を抽出することを採用しています。
図1:SBR試料と積分範囲の例
表1: 信号統合エリアの定義
積分Cには溶媒も含まれるため、この方法ではブランクサンプルの溶媒の積分を取得し、積分Cから差し引くことを提案しています:
そして、ブタジエン部分の各微細構造成分(トランス、シス、ビニル)の含有量とスチレン含有量は、以下のように計算されます:
BeautifulJASONでは、このすべてを自動化することができます。スクリプトを実行するだけで自動的に積分して含量を計算し、レポートを生成することができます:
これを行うにはまず積分範囲を定義する必要があります。この場合、自動積分ではなく手動積分を実施します。JASONでデータセットを開き、iキーを押します(または、選択したスペクトルの左上にあるコンテキストツールバーの積分モードボタンを左クリックする)。次にマウスの左ボタンを押したまま、カーソルを水平にドラッグ&ドロップして積分領域を定義し、関心のある領域を積分します。これを各積分領域で繰り返します。積分バーをダブルクリックすると、積分プロパティダイアログが開き、積分領域をより正確に定義することができます。
積分定義の後、分析ルールを作成し、このルールがアクティブな状態でデータセットを開くと、常にこの積分が実行されるようにすることができます。
ISO 21561-1では、SBRのスペクトルに加えて、ブランクのスペクトルが必要であると示されていますが、ブランクがない場合の代替案はあるでしょうか?原理的には溶媒のピークをフィッティングし、フィッティングした溶媒ピークの面積を差し引くことができます。JASONでピークピッキングを行うと、自動的にピークがモデル化(波形分離)されます。設定 (NMRセクションのPeaksタブ)において、Refinementパラメータを変更することができます。このパラメータの設定値を増やすと実験データにより近いフィットが得られる可能性があり、ルールを設定する際にこのことが考慮されます。さらにJASONには溶媒検出アルゴリズムがあるので、溶媒を差し引くだけならピークを定義する必要もありません。
次に示すビデオでは、自動ピークピッキングを使用し、このようなデータを自動的に処理、積分、ピークピッキングするためのルールをどのように作成するかを紹介しています。
積分とピークを抽出するルールライブラリができたら、このライブラリを使用してデータを処理し、JASONによって抽出された積分とピークを取得し、必要な計算を行うスクリプトを作成することができます。このスクリプトはPythonで作成するので、まずPythonをダウンロードしてインストールする必要があります。コマンドラインにタイプします。
pip install beautifuljason
BeautifulJASONに関する詳しい情報は、以下のサイトをご覧ください。 https://pypi.org/project/beautifuljason/
スクリプトでは、まずBeautifulJASONライブラリをインポートします:
import beautifuljason as bjason
次に、生データの場所と使用するルールライブラリの名前を変数として作成します:
file1 = 'C:/Users/Botana.SERVDOMAIN2/Desktop/python_qc/SBR_proton-1-1.jdf'
rules_name = 'ISO_SBR'
これは例であり、代わりに、例えばargparseライブラリの機能を使用して、これらのパラメータをこのスクリプトに渡される引数として取得することができます。またライブライファイルが現在のコンピュータのJASONソフトウェアにすでにインストールされていると想定するのではなく、ライブラリファイルの場所を定義することもできます。
BeautifulJASONオブジェクトを作成し、指定のルールライブラリでデータを読み込みます:
with jason.create_document(file1, rules=rules_name) as doc: spec = doc.nmr_data[0]
Jsonドキュメントの最初のNMRデータセットはnmr_data[0]です。このデータセットから、各積分領域(マルチプレット、解析された場合はマルチプレットに関する情報も含まれます)から情報を抽出することができます。JASONで報告されている実際の積分値はvalue_hzパラメータで定義されています。4つの積分のそれぞれの積分値を抽出し、小数点以下2桁のみを表示して報告します:
multiplet1 = spec.multiplets[0] int_C_file1 = multiplet1.value_hz print('C Integral is : ', "{:.2f}".format(int_C_file1)) multiplet2 = spec.multiplets[1] int_B_file1 = multiplet2.value_hz print('B Integral is : ', "{:.2f}".format(int_B_file1)) multiplet3 = spec.multiplets[2] int_A_file1 = multiplet3.value_hz print('A Integral is : ', "{:.2f}".format(int_A_file1)) multiplet4 = spec.multiplets[3] int_TMS_file1 = multiplet4.value_hz print('TMS Integral is : ', "{:.2f}".format(int_TMS_file1))
もし減算したいピークだけを選択した場合は、スペクトルの最初のピーク(peaks[0])から面積を取得できます。この場合、いくつかのピークを選択した可能性があるので、各ピークを反復処理してNMR溶媒として特定された最初のピークを取得します:
solvent = None for peak in spec.peaks: if peak.classification == bjason.NMRPeak.PeakClassification.NMRSolvent: solvent = peak break int_solvent = solvent.area print('Solvent Integral is : ', "{:.2f}".format(solvent.area), ' at ', "{:.2f}".format(solvent.pos[0]), ' ppm')
複数のピークを持つ溶媒を扱う場合、溶媒として分類された各ピークの面積をforループ内でint_solventに加算し続ければよいです。if 条件を変更することで、他の分類のピークの面積を追加することもできます。このコードのif条件は次のコードと同等です。
if peak.classification == 2:
2がNMR溶媒のコードですが、ドキュメントのウェブページには、他に使用できるコードが示されています。:
https://www.jeoljason.com/beautifuljason/docs/source/beautifuljason.data.html
データから必要なものはすべて抽出できたので、あとはJASONドキュメントを保存して閉じることができます。:
doc.close() doc.copy('C:/Users/Botana.SERVDOMAIN2/Desktop/python_qc/simple_integral_example.jjh5')
次に必要な計算を実行します(ISOの手順とは異なり、ブランクのスケールされた積分Cを溶媒のピーク面積に置き換えていることに注意):
c_calib = int_C_file1 - int_solvent s_m = c_calib*104/5*100/(c_calib*104/5+(int_B_file1/2+int_A_file1/4)*54) v_ = int_A_file1/2*100/(int_B_file1/2+int_A_file1/4) tc_ = (int_B_file1/2-int_A_file1/4)/(int_B_file1/2+int_A_file1/4)*100
すべての計算が完了したら、テキストファイルに保存したり、他のスクリプトに送信したり、コマンドプロンプトで報告したりすることができます:
print(' Styrene content is : ', "{:.2f}".format(s_m), ' % mass') print(' Vinyl content of butadiene is : ', "{:.2f}".format(v_), ' % molar') print(' Trans and cis content of butadiene is : ', "{:.2f}".format(tc_), ' % molar')
ここで説明したPythonスクリプトは、以下のサイトで入手できます:
https://github.com/adolfobotana/Quality_control/blob/main/SBR_analysis_solventsubtraction.py.
ISO 21561-1で規定されているPythonスクリプトは、以下のサイトで入手できます:
https://github.com/adolfobotana/Quality_control/blob/main/SBR_analysis_with_blank_hdf5.py.
このスクリプトが異なる方法でコード化されていることを覚えておくと役に立ちます。すべての情報を取得するためにBeautifulJASONに頼るのではなく、標準的なHDF-5フォーマットでデータを処理、分析、保存するためだけにBeautifulJASONを使っています。このフォーマットは公開されていて図2に示すように、HDFViewのような無料のオープンソースのプログラムでデータセットの構造とそのすべての内容を見ることができます。そして、Pythonのライブラリh5pyを使ってその内容を読み取ります。これにより、JASONを使用してデータを分析して保存するとJASONを使用せずにレポートを再生成し、HDF5ファイルに保存されている値を直接取得することができます。
図2:HDFViewで表示したデータセットの例
JASONで使用されているHDF-5フォーマットの詳細については、ウェビナーをご覧ください:
Your data in JASON: file formats and external access’
BeautifulJASONを使ったサンプルのバッチ調査の詳細については、以前のブログ記事をご覧ください:
Batch processing with BeautifulJASON
Leave A Comment
You must be logged in to post a comment.