(57)【要約】  コンピュータによる分子設計方法は、与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築して記憶部に格納し、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で３次元分子構造をディスプレイの画面上に表示し、入力部により指定された原子又は結合軸に基づいて上記データ構造を用いて変更対象となる部分構造を決定し、変更対象となる部分構造に入力部により指定された変更操作を加えた３次元分子構造をディスプレイの画面上に表示し、入力部により指定された変更操作のやり直し又は再実行を上記データ構造を用いて行う。
2008096424.tif 000002
【特許請求の範囲】
【請求項１】
与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築して記憶部に格納するデータ構築工程と、
ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示する表示工程と、
入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定する決定工程と、
該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該ディスプレイの画面上に表示する変更工程と、
該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行うやり直し又は実行工程とを含み、
該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とする、コンピュータによる分子設計方法。
【請求項２】
該原子データ構造Ａにおいてはａを内部座標における原子順序番号からなる識別番号、Atomを元素記号からなる原子番号、ｎｂを元分子に任意の新規分子構造を追加することで変動する数値からなる結合軸数、ｂを結合軸数ｎｂに含まれる各結合軸の識別番号の集合データからなる結合軸の識別番号、eventFlagを削除操作、追加操作、置換操作、結合軸付加操作、原子付加操作を少なくとも含む分子構造構築ＧＵＩが有するイベント操作に対し、現在のイベント操作の種類を示すイベントフラグ、coordinateを各原子が存在する３次元空間内の位置を示すデータからなるｘｙｚ座標と定義すると、該原子データ構造ＡはＡ＝｛ａ，｛Atom｝，ｎｂ，｛ｂ〔ｎｂ〕｝，eventFlag，｛coordinate｝｝で表され、
該結合軸データ構造Ｂにおいてはｂを全ての結合軸を１対１に対応させるために必要な番号からなる識別番号、ａを結合軸の両末端に存在する原子の識別番号の集合データからなりる末端原子の識別番号、vectorを結合軸を３次元ベクトルと１対１に対応させたベクトル情報、lengthをベクトル情報vectorを単位ベクトルで表現する場合の結合軸長と定義すると、該結合軸データ構造Ｂは、Ｂ＝｛ｂ，｛ａ〔２〕｝，eventFlag，｛vector｝，length｝で表され、
該分子データ構造Ｍにおいてはｎａを原子データ数、ｎｂを結合軸データ数、ｎｅを総イベント操作数、ｎｕをやり直しイベント操作数、Ａを分子内の原子データ、Ｂを分子内の結合軸データと定義すると、該分子データ構造Ｍは、Ｍ＝｛ｎａ，ｎｂ，ｎｅ，ｎｕ，｛Ａ〔ｎａ〕｝，｛Ｂ〔ｎｂ〕｝｝で表され、
該補助データ構造ＤにおいてはmSelectを置換操作における置換後の原子設定情報や追加操作における追加部分構造に相当する分子設定情報、ａを追加操作で元の分子構造と結合する位置を識別するための追加原子の識別情報と定義すると、該補助データ構造Ｄは、Ｄ＝｛eventFlag，｛Atom｝，｛mSelect｝，ａ｝で表され、
該イベントデータ構造Ｅにおいてはｎａ'をイベント操作において操作位置を決定するために指定する原子の位置を示す選択原子数、イベント操作において操作位置を決定するために指定する結合軸の位置を示すを選択結合軸数、ｎａを追加操作に関する部分構造中の原子数を示す追加原子データ数、ｎｂを追加操作に関する部分構造中の結合軸数を示す追加結合軸データ数、Ａをイベント操作前の原子データ構造を示す処理前原子データ、Ｂをイベント操作前の結合軸データ構造を示す処理前結合軸データ、Ａ'をイベント操作後の原子データ構造を示す処理後原子データ、Ｂ'をイベント操作後の結合軸データ構造を示す処理後結合軸データと定義すると、該イベントデータ構造Ｅは、Ｅ＝｛eventFlag，ｎａ'，ｎｂ'，ｎａ，ｎｂ，｛Ａ〔ｎａ'〕｝，｛Ｂ〔ｎｂ'〕｝，｛Ａ'｝，｛Ｂ'｝｝で表されることを特徴とする、請求項１記載の分子設計方法。
【請求項３】
該変更工程は、分子構造変更操作が３次元分子構造から部分構造を削除する削除操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子或いは原子と結合軸、又は、スペースフィル形式の原子に基づいて、削除対象となる該部分構造を決定して該部分構造を削除した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項４】
該変更工程は、分子構造変更操作が３次元分子構造から部分構造を置換する置換操作の場合、該入力部により指定されたボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、置換対象となる部分構造を決定して該部分構造を置換した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項５】
該変更工程は、分子構造変更操作が３次元分子構造のある原子の位置にその原子と交換に部分構造を追加する追加操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、対象の部分構造を追加する位置を決定して元の分子構造に該対象の部分構造を追加した新規分子構造を該ディスプレイの表示画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項６】
該変更工程は、分子構造変更操作が３次元分子構造に結合軸を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式の２つの原子に基づいて、結合軸を付加する対象となる２つの原子の位置を決定して元の分子構造に結合軸を付加した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項７】
該変更工程は、分子構造変更操作が分子構造に原子を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式原子、又は、スペースフィル形式の原子に基づいて、新規原子を付加する対象となる原子の位置を決定して元の分子構造に原子を付加した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項８】
入力部を有するコンピュータに分子設計支援機能を持たせるプログラムであって、
該コンピュータに、与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築させて記憶部に格納させるデータ構築手順と、
該コンピュータに、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示させる表示手順と、
該コンピュータに、該入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定させる決定手順と、
該コンピュータに、該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該表示手順により該ディスプレイの画面上に表示させる変更手順と、
該コンピュータに、該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行わせるやり直し又は実行手順とを含み、
該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とする、プログラム。
【請求項９】
該原子データ構造Ａにおいてはａを内部座標における原子順序番号からなる識別番号、Atomを元素記号からなる原子番号、ｎｂを元分子に任意の新規分子構造を追加することで変動する数値からなる結合軸数、ｂを結合軸数ｎｂに含まれる各結合軸の識別番号の集合データからなる結合軸の識別番号、eventFlagを削除操作、追加操作、置換操作、結合軸付加操作、原子付加操作を少なくとも含む分子構造構築ＧＵＩが有するイベント操作に対し、現在のイベント操作の種類を示すイベントフラグ、coordinateを各原子が存在する３次元空間内の位置を示すデータからなるｘｙｚ座標と定義すると、該原子データ構造ＡはＡ＝｛ａ，｛Atom｝，ｎｂ，｛ｂ〔ｎｂ〕｝，eventFlag，｛coordinate｝｝で表され、
該結合軸データ構造Ｂにおいてはｂを全ての結合軸を１対１に対応させるために必要な番号からなる識別番号、ａを結合軸の両末端に存在する原子の識別番号の集合データからなりる末端原子の識別番号、vectorを結合軸を３次元ベクトルと１対１に対応させたベクトル情報、lengthをベクトル情報vectorを単位ベクトルで表現する場合の結合軸長と定義すると、該結合軸データ構造Ｂは、Ｂ＝｛ｂ，｛ａ〔２〕｝，eventFlag，｛vector｝，length｝で表され、
該分子データ構造Ｍにおいてはｎａを原子データ数、ｎｂを結合軸データ数、ｎｅを総イベント操作数、ｎｕをやり直しイベント操作数、Ａを分子内の原子データ、Ｂを分子内の結合軸データと定義すると、該分子データ構造Ｍは、Ｍ＝｛ｎａ，ｎｂ，ｎｅ，ｎｕ，｛Ａ〔ｎａ〕｝，｛Ｂ〔ｎｂ〕｝｝で表され、
該補助データ構造ＤにおいてはmSelectを置換操作における置換後の原子設定情報や追加操作における追加部分構造に相当する分子設定情報、ａを追加操作で元の分子構造と結合する位置を識別するための追加原子の識別情報と定義すると、該補助データ構造Ｄは、Ｄ＝｛eventFlag，｛Atom｝，｛mSelect｝，ａ｝で表され、
該イベントデータ構造Ｅにおいてはｎａ'をイベント操作において操作位置を決定するために指定する原子の位置を示す選択原子数、イベント操作において操作位置を決定するために指定する結合軸の位置を示すを選択結合軸数、ｎａを追加操作に関する部分構造中の原子数を示す追加原子データ数、ｎｂを追加操作に関する部分構造中の結合軸数を示す追加結合軸データ数、Ａをイベント操作前の原子データ構造を示す処理前原子データ、Ｂをイベント操作前の結合軸データ構造を示す処理前結合軸データ、Ａ'をイベント操作後の原子データ構造を示す処理後原子データ、Ｂ'をイベント操作後の結合軸データ構造を示す処理後結合軸データと定義すると、該イベントデータ構造Ｅは、Ｅ＝｛eventFlag，ｎａ'，ｎｂ'，ｎａ，ｎｂ，｛Ａ〔ｎａ'〕｝，｛Ｂ〔ｎｂ'〕｝，｛Ａ'｝，｛Ｂ'｝｝で表されることを特徴とする、請求項８記載のプログラム。
【請求項１０】
該変更手順は、該コンピュータに、分子構造変更操作が３次元分子構造から部分構造を削除する削除操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子或いは原子と結合軸、又は、スペースフィル形式の原子に基づいて、削除対象となる該部分構造を決定させて該部分構造を削除した新規分子構造を該ディスプレイの画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１１】
該変更手順は、該コンピュータに、分子構造変更操作が３次元分子構造から部分構造を置換する置換操作の場合、該入力部により指定されたボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、置換対象となる部分構造を決定させて該部分構造を置換した新規分子構造を該ディスプレイの画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１２】
該変更手順は、該コンピュータに、分子構造変更操作が３次元分子構造のある原子の位置にその原子と交換に部分構造を追加する追加操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、対象の部分構造を追加する位置を決定させて元の分子構造に該対象の部分構造を追加した新規分子構造を該ディスプレイの表示画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１３】
該変更手順は、該コンピュータに、分子構造変更操作が３次元分子構造に結合軸を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式の２つの原子に基づいて、結合軸を付加する対象となる２つの原子の位置を決定させて元の分子構造に結合軸を付加した新規分子構造を該ディスプレイの画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１４】
該変更手順は、該コンピュータに、分子構造変更操作が分子構造に原子を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式原子、又は、スペースフィル形式の原子に基づいて、新規原子を付加する対象となる原子の位置を決定させて元の分子構造に原子を付加した新規分子構造を該ディスプレイの画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１５】
請求項８又は９記載のプログラムを格納したことを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分子設計方法、プログラム及び記憶媒体に係り、特に分子構造の３次元表示を行い分子構造構築操作を行う分子設計方法、コンピュータにそのような分子構造構築操作を行わせるプログラム、及びそのようなプログラムを格納したコンピュータ読み取り可能な記憶媒体に関する。【０００２】
本発明のプログラム及び記憶媒体は、グラフィカルユーザインタフェース（ＧＵＩ）及び分子設計支援ツールをも包含する。
【背景技術】
【０００３】
コンピュータシステムの高性能化に伴い、ドラッグデザイン等の先端研究における分子軌道計算、分子動力学計算等の理論化学計算のニーズが高まっている。これらの理論化学計算を実行するためには、計算方法のみならず計算対象となる分子の構造を入力データに用いる必要がある。ドラッグデザイン等の先端研究では、分極率等の想定している物性の効果が従来以上に向上され得る新規分子構造の探索を行う必要が多々生じることから、任意の分子構造を構築する必要性が増している。このようなニーズから、分子構造構築の作業効率を向上させることを目的として、グラフィック表示機能を利用した分子設計システムが特許文献１，２や非特許文献１等にて提案されている。
【特許文献１】特開平５−１７４１０９号公報
【特許文献２】特開平５−１２８２１８号公報
【非特許文献１】http://software.fujitsu.com/jp/products/indust11.html， WinMOPAC（富士通株式会社）、CAChe（富士通株式会社）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来から提案されている分子構造の変更手法では、変更後の分子構造を元に戻す操作（以下、Undo操作と言う）と、分子構造を元に戻した後に再度変更を実行する操作（以下、Redo操作と言う）が可能な回数にかなり制限があり、このような変更操作は１回のみ又は多くても数回しか実行することができなかった。Undo操作及びRedo操作を実行できる回数が制限される理由は、このような変更操作に伴う記憶容量の使用量が非常に大きいためである。このため、従来の分子構造の変更手法では、分子構造の任意の変更を容易に実行することは難しいという問題があった。【０００５】
そこで、本発明は、上記の問題を解決することが可能な分子設計方法、プログラム及び記憶媒体を提供することを概括的目的とする。【０００６】
本発明のより具体的な目的は、任意の分子構造変更操作を容易に実行することが可能な分子設計方法、プログラム及び記憶媒体を提供することにある。
【課題を解決するための手段】
【０００７】
上記の課題は、与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築して記憶部に格納するデータ構築工程と、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示する表示工程と、該入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定する決定工程と、該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該ディスプレイの画面上に表示する変更工程と、該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行うやり直し又は実行工程とを含み、該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とするコンピュータによる分子設計方法によって達成できる。【０００８】
上記の課題は、入力部を有するコンピュータに分子設計支援機能を持たせるプログラムであって、該コンピュータに、与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築させて該記憶部に格納させるデータ構築手順と、該コンピュータに、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示させる表示手順と、該コンピュータに、該入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定させる決定手順と、該コンピュータに、該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該表示手順により該ディスプレイの画面上に表示させる変更手順と、該コンピュータに、該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行わせるやり直し又は実行手順とを含み、該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とするプログラムによって達成できる。【０００９】
上記の課題は、上記プログラムを格納したことを特徴とする記憶媒体によって達成できる。
【発明の効果】
【００１０】
本発明によれば、任意の分子構造変更操作を容易に実行することが可能な分子設計方法、プログラム及び記憶媒体を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】データ構造を説明する図である。
【図２】データ構造がどのように設定されるかを蟻酸（ＨＣＯＯＨ）の場合を例に説明する図である。
【図３】ハーフベクタ形式の表示を説明する図である。
【図４】ボールアンドスティック形式の表示を説明する図である。
【図５】スペースフィル形式の表示を説明する図である。
【図６】分子構造変更操作前の分子構造の状態を示す図である。
【図７】分子構造変更操作後の分子構造の状態を示す図である。
【図８】本発明が適用されるコンピュータシステムを示す斜視図である。
【図９】コンピュータシステムの本体部内の要部の構成を説明するブロック図である。
【図１０】イベント操作とイベントフラグeventFlagとの関係を示す図である。
【図１１】イベント操作が可能なアイテムと削除フラグDeleteとの関係を示す図である。
【図１２】Undo操作及びRedo操作とイベント数との関係を示す図である。
【図１３】初期データ構造の構築を説明するフローチャートである。
【図１４】削除イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図１５】図１４に示す削除イベントに関連するUndo操作の構築を説明する図である。
【図１６】図１５に示すUndo操作に関連するRedo操作の構築を説明する図である。
【図１７】削除イベントの処理を説明するフローチャートである。
【図１８】削除イベントの処理を説明するフローチャートである。
【図１９】削除イベントによる構造変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図２０】削除イベント前の分子構造の表示状態を示す図である。
【図２１】削除イベント後の分子構造の表示状態を示す図である。
【図２２】削除イベントのUndo操作を説明するフローチャートである。
【図２３】Undo操作後の分子構造の表示状態を示す図である。
【図２４】削除イベントのRedo操作を説明するフローチャートである。
【図２５】Redo操作後の分子構造の表示状態を示す図である。
【図２６】置換イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図２７】図２６に示す置換イベントに関連するUndo操作の構築を説明する図である。
【図２８】図２７に示すUndo操作に関連するRedo操作の構築を説明する図である。
【図２９】置換イベントの処理を説明するフローチャートである。
【図３０】置換イベントの処理を説明するフローチャートである。
【図３１】置換イベントによる構造変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図３２】置換イベント前の分子構造の表示状態を示す図である。
【図３３】置換イベント後の分子構造の表示状態を示す図である。
【図３４】置換イベントのUndo操作を説明するフローチャートである。
【図３５】Undo操作後の分子構造の表示状態を示す図である。
【図３６】置換イベントのRedo操作を説明するフローチャートである。
【図３７】Redo操作後の分子構造の表示状態を示す図である。
【図３８】追加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図３９】図３８に示す追加イベントに関連するUndo操作の構築を説明する図である。
【図４０】図３９に示すUndo操作に関連するRedo操作の構築を説明する図である。
【図４１】追加イベントの処理を説明するフローチャートである。
【図４２】追加イベントの処理を説明するフローチャートである。
【図４３】追加イベントによる構造変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図４４】追加イベント前の分子構造の表示状態を示す図である。
【図４５】追加イベント後の分子構造の表示状態を示す図である。
【図４６】追加イベントのUndo操作を説明するフローチャートである。
【図４７】Undo操作後の分子構造の表示状態を示す図である。
【図４８】追加イベントのRedo操作を説明するフローチャートである。
【図４９】Redo操作後の分子構造の表示状態を示す図である。
【図５０】結合軸付加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図５１】図５０に示す結合軸付加イベントに関連するUndo操作の構築を説明する図である。
【図５２】図５１に示すUndo操作に関連するRedo操作の構築を説明する図である。
【図５３】結合軸付加イベントの処理を説明するフローチャートである。
【図５４】結合軸付加イベントの処理を説明するフローチャートである。
【図５５】結合軸付加イベントによる構造変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図５６】結合軸付加イベント前の分子構造の表示状態を示す図である。
【図５７】結合軸付加イベント後の分子構造の表示状態を示す図である。
【図５８】結合軸付加イベントのUndo操作を説明するフローチャートである。
【図５９】Undo操作後の分子構造の表示状態を示す図である。
【図６０】結合軸付加イベントのRedo操作を説明するフローチャートである。
【図６１】Redo操作後の分子構造の表示状態を示す図である。
【図６２】原子付加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図６３】図６２に示す削除イベントに関連するUndo操作の構築を説明する図である。
【図６４】図６３に示すUndo操作に関連するRedo操作の構築を説明する図である。
【図６５】原子付加イベントの処理を説明するフローチャートである。
【図６６】原子付加イベントによる構造変化例を蟻酸（ＨＣＯＯＨ）の場合について示す図である。
【図６７】原子付加イベント前の分子構造の表示状態を示す図である。
【図６８】原子付加イベント後の分子構造の表示状態を示す図である。
【図６９】原子付加イベントのUndo操作を説明するフローチャートである。
【図７０】Undo操作後の分子構造の表示状態を示す図である。
【図７１】原子付加イベントのRedo操作を説明するフローチャートである。
【図７２】Redo操作後の分子構造の表示状態を示す図である。
【図７３】実施例と従来例とのデータ構成の比較をする図である。
【図７４】実施例と従来例との効果の比較をする図である。
【符号の説明】
【００１２】
１００      コンピュータシステム
１０１      本体部
１０２      ディスプレイ
１０２ａ      表示画面
１０３      キーボード
１０４      マウス
１０５      モデム
１０６      記録媒体
１１０      ディスク
２００      バス
２０１      ＣＰＵ
２０２      メモリ部
２０３      ディスクドライブ
２０４      ハードディスクドライブ
【発明を実施するための最良の形態】
【００１３】
本発明では、分子構造変更操作を行う場合に、図１に示す如く定義されたデータ構造、即ち、原子に関する原子データ構造Ａ，Ａ'、結合軸に関する結合軸データ構造Ｂ，Ｂ'、分子に関する分子データ構造Ｍ、補助データ構造Ｄ及びイベントデータ構造Ｅのデータを用いる。図１に示すデータ構造では、原子データ構造Ａ，Ａ'と結合軸データ構造Ｂ，Ｂ'とが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、イベント用フラグ（以下、単にイベントフラグと言う）と識別用フラグ（以下、単に識別フラグと言う）を含む。又、イベント情報データからなるイベントデータ構造Ｅの他に、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄを有し、分子データ構造ＭにはUndo操作数を含む。更に、各データ構造Ａ，Ａ'，Ｂ，Ｂ'，Ｍ，Ｄ，Ｅは、イベントのフラグを含む。尚、図１中、各データ構造Ａ，Ａ'，Ｂ，Ｂ'，Ｍ，Ｄ，Ｅの構成要素（又は、アイテム）には番号１，２，３，...が付されて、〔〕内のデータは必須ではないことを示す。【００１４】
原子データ構造Ａ，Ａ'においては、識別番号ａは内部座標における原子順序番号からなり、原子番号Atomは元素記号からなる。又、結合軸数ｎｂは、元分子に任意の新規分子構造を追加することで変動する数値からなる。結合軸数ｎｂの初期値は、入力構造からファンデルワールス半径を元に原子対を構成していると推定された結合数を示す。結合軸の識別番号ｂは、結合軸数ｎｂに含まれる各結合軸の識別番号の集合データからなる。イベントフラグeventFlagは、削除操作、追加操作、置換操作、結合軸付加操作、原子付加操作等の分子構造構築ＧＵＩが有するイベント操作に対し、現在のイベント操作の種類を示す。識別フラグは、意図しない構造に陥ることを防ぐために、環構造を有するか否かをチェックするためのものであり、省略可能である。ｘｙｚ座標coordinateは、デカルト座標（Cartesian座標）であり、各原子が存在する３次元空間内の位置を示すデータからなる。例えば、原子データ構造ＡはＡ＝｛ａ，｛Atom｝，ｎｂ，｛ｂ〔ｎｂ〕｝，eventFlag，｛coordinate｝｝で表される。【００１５】
結合軸データ構造Ｂ，Ｂ'においては、識別番号ｂは全ての結合軸を１対１に対応させるために必要な番号からなる。結合の型は、１重結合、２重結合等の結合軸のタイプを識別するためのデータからなる。任意の分子構造を構築する場合、結合の型は必ずしも必要ではない。末端原子の識別番号ａは、結合軸の両末端に存在する原子の識別番号の集合データからなり、データ数は２である。イベントフラグeventFlag及び識別フラグは、原子データ構造Ａ，Ａ'のイベントフラグeventFlag及び識別フラグと同じである。ベクトル情報vectorは、結合軸を３次元ベクトルと１対１に対応させたものである。ベクトル情報vectorを単位ベクトルで表現する場合には、結合軸の長さを示す結合軸長lengthも結合時期データ構造Ｂ，Ｂ'に含める必要となる。例えば、結合軸データ構造Ｂは、Ｂ＝｛ｂ，｛ａ〔２〕｝，eventFlag，｛vector｝，length｝で表される。【００１６】
分子データ構造Ｍは、相互にデータを保持し合う原子データ構造Ａ，Ａ'と結合軸データ構造Ｂ，Ｂ'の両方を含み、分子データ構造Ｍにおいては、削除操作及び追加操作にも対応するために、原子データ数ｎａ、結合軸データ数ｎｂ、イベント情報データ等を有する。分子データ構造Ｍは、Undo操作とRedo操作を効率良く実行するための手段として、総イベント操作数ｎｅ及びUndoイベント操作数ｎｕを有する。又、分子データ構造Ｍは、分子内の原子データＡと、分子内の結合軸データＢも有する。例えば、分子データ構造Ｍは、Ｍ＝｛ｎａ，ｎｂ，ｎｅ，ｎｕ，｛Ａ〔ｎａ〕｝，｛Ｂ〔ｎｂ〕｝｝で表される。【００１７】
補助データ構造Ｄは、原子データ構造Ａ，Ａと同様のイベントフラグeventFlag、原子番号Atom及び置換操作における置換後の原子設定情報や追加操作における追加部分構造に相当する分子設定情報mSelectを含み、補助データ構造Ｄにおいては、識別情報ａは追加操作で元の分子構造と結合する位置を識別するための追加原子の識別情報である。補助データ構造Ｄは、Ｄ＝｛eventFlag，｛Atom｝，｛mSelect｝，ａ｝で表される。【００１８】
イベントデータ構造Ｅは、原子データ構造Ａ，Ａと同様のイベントフラグeventFlag、選択原子数ｎａ'、選択結合軸数ｎｂ'、処理後原子データＡ'及び処理後結合軸データＢ'を含み、イベントデータ構造Ｅにおいては、原子データ数ｎａは追加原子データ数、結合軸データ数ｎｂは追加結合軸データ数、原子データＡは処理前原子データ、結合軸データＢは処理前結合軸データである。選択原子数ｎａ'及び選択結合軸数ｎｂ'は、イベント操作において操作位置を決定するために指定する原子と結合軸の位置を示す。追加原子データ数ｎａ及び追加結合軸データ数ｎｂは、追加操作に関する部分構造中の原子数及び結合軸数を示す。処理前原子データＡ及び処理前結合軸データＢは、置換等のイベント操作前の原子データ構造と結合軸データ構造を示す。処理後原子データＡ'及び処理後結合軸データＢ'は、置換等のイベント操作後の原子データ構造と結合軸データ構造を示す。イベントデータ構造Ｅは、Ｅ＝｛eventFlag，ｎａ'，ｎｂ'，ｎａ，ｎｂ，｛Ａ〔ｎａ'〕｝，｛Ｂ〔ｎｂ'〕｝，｛Ａ'｝，｛Ｂ'｝｝で表される。【００１９】
分子構造のデータが与えられたとき、図１に示すデータ構造がどのように設定されるかについて、蟻酸（ＨＣＯＯＨ）の場合を例にとって図２と共に説明する。図２において、「Ａ〔  〕」は原子データ構造Ａ、「Ｂ〔  〕」は結合軸データ構造Ｂ、「Ｍ〔  〕」は分子データ構造Ｍ、「Ｄ〔  〕」は補助データ構造Ｄ、「Ｅ〔  〕」はイベントデータ構造Ｅを示す。従って、「Ｍ〔１〕」は蟻酸の分子データ構造、「Ｍ〔１〕」→Ａは蟻酸の原子データ構造、Ｂは蟻酸の結合軸データ構造である。又、Ｍ〔２〕は、Ｄ→mSelect＝｛ＣＨ４｝に設定されているメタン分子構造を示し、Ｍ〔２〕→ＡとＭ〔２〕→Ｂは夫々メタン分子中の原子と結合軸を示す。【００２０】
分子構造の部分構造を削除、置換、追加、付加等する分子構造変更操作を行う場合、例えばディスプレイの画面上に作業用のメインウィンドウを表示し、メインウィンドウ上に３次元分子構造を図３に示すハーフベクタ形式又は図４に示すボールアンドスティック形式又は図５に示すスペースフィル形式で表示する。そして、ポインティングデバイスのクリックやドラッグアンドドロップ操作、キーボードの操作等の入力部からの操作により、メインウィンドウ上で原子や結合軸を指定することで変更対象となる部分構造を決定する。【００２１】
分子構造変更操作が分子構造から部分構造を削除する削除操作の場合、ハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子或いは必要であれば結合軸、又は、スペースフィル形式の原子を指定することで、図６に示す如き削除対象となる部分構造を決定し、図７に示す如き部分構造を削除した新規分子構造をメインウィンドウ上に表示する。そして、上記データ構造を用いることにより、操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を、実施例と共に後述するように必要とされる記憶容量の消費量を抑えて連続して実行する。【００２２】
分子構造変更操作が分子構造から部分構造を置換する置換操作の場合、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子を指定することで、図６に示す如き置換対象となる部分構造を決定し、図７に示す如き部分構造を置換した新規分子構造をメインウィンドウ上に表示する。そして、上記データ構造を用いることにより、操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を、実施例と共に後述するように必要とされる記憶容量の消費量を抑えて連続して実行する。【００２３】
分子構造変更操作が分子構造のある原子の位置にその原子と交換に部分構造を追加する追加操作の場合、ハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子を指定することで、図６に示す如き対象の部分構造を追加する位置を決定し、元の分子構造に図７に示す如き対象の部分構造を追加した新規分子構造をメインウィンドウ上に表示する。そして、上記データ構造を用いることにより、操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を、実施例と共に後述するように必要とされる記憶容量の消費量を抑えて連続して実行する。【００２４】
この場合、ボールアンドスティック形式又はスペースフィル形式にて表示される３次元分子構造のうち、指定した原子Ａ１が有する結合軸Ｂ１と結合軸Ｂ２に関し、結合軸Ｂ１から原子Ａ１以外の末端原子Ａ２に移行し、更に同様の手順を続けて原子を辿り結合軸Ｂ２に移行可能な場合、分子構造変更操作に制限を加えるようにしても良い。【００２５】
分子構造変更操作が分子構造に結合軸を付加する付加操作の場合、ボールアンドスティック形式の２つの原子を指定することで、図６に示す如き結合軸を付加する対象となる２つの原子の位置を決定し、元の分子構造に結合軸を付加した図７に示す如き新規分子構造をメインウィンドウ上に表示する。そして、上記データ構造を用いることにより、操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を、実施例と共に後述するように必要とされる記憶容量の消費量を抑えて連続して実行する。【００２６】
分子構造変更操作が分子構造に原子を付加する付加操作の場合、ボールアンドスティック形式原子、又は、スペースフィル形式の原子を指定することで、図６に示す如き新規原子を付加する対象となる原子の位置を決定し、元の分子構造に原子を付加した図７に示す如き新規分子構造をメインウィンドウ上に表示する。そして、上記データ構造を用いることにより、操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を、実施例と共に後述するように必要とされる記憶容量の消費量を抑えて連続して実行する。【００２７】
従って、任意の分子構造変更操作を、必要とされる記憶容量の消費量（即ち、メモリ容量）を抑えて、容易に実行することが可能である。
【実施例】
【００２８】
本発明の分子設計方法の一実施例は、本発明のプログラムの一実施例を実行することでコンピュータにより行われる。本実施例では、本発明がコンピュータシステムに適用されており、本発明が適用されたコンピュータシステムは分子設計支援装置を構成する。図８は、本実施例において本発明が適用されるコンピュータシステムを示す斜視図である。【００２９】
図８に示すコンピュータシステム１００は、ＣＰＵやディスクドライブ等を内蔵した本体部１０１、本体部１０１からの指示により表示画面１０２ａ上に分子形成シミュレーションにより形成される分子等の画像を表示するディスプレイ１０２、コンピュータシステム１００に種々の情報を入力するためのキーボード１０３、ディスプレイ１０２の表示画面１０２ａ上の任意の位置を指定するマウス１０４及び外部のデータベース等にアクセスして他のコンピュータシステムに記憶されているプログラム等をダウンロードするモデム１０５を有する。【００３０】
ディスク１１０等の可搬型記録媒体に格納されるか、モデム１０５等の通信装置を使って他のコンピュータシステムの記録媒体１０６からダウンロードされる、コンピュータシステム１００に少なくとも分子設計支援機能を持たせるプログラム（分子設計支援ソフトウェア）の本実施例は、コンピュータシステム１００に入力されてコンパイルされる。プログラムの本実施例は、コンピュータシステム１００（即ち、後述するＣＰＵ２０１）を分子設計支援機能を有する分子設計支援装置（又は、シミュレーションシステム）として動作させる。プログラムの本実施例は、例えばディスク１１０等のコンピュータ読み取り可能な記録媒体に格納されていても良い。コンピュータ読み取り可能な記録媒体は、ディスク１１０、ＩＣカードメモリ、フロッピー（登録商標）ディスク等の磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ等の可搬型記録媒体に限定されるものではなく、モデム１０５やＬＡＮ等の通信装置や通信手段を介して接続されるコンピュータシステムでアクセス可能な各種記録媒体を含む。【００３１】
図９は、コンピュータシステム１００の本体部１０１内の要部の構成を説明するブロック図である。同図中、本体部１０１は、バス２００により接続されたＣＰＵ２０１、ＲＡＭやＲＯＭ等からなるメモリ部２０２、ディスク１１０用のディスクドライブ２０３及びハードディスクドライブ（ＨＤＤ）２０４からなる。本実施例では、ディスプレイ１０２、キーボード１０３及びマウス１０４も、バス２００を介してＣＰＵ２０１に接続されているが、これらは直接ＣＰＵ２０１に接続されていても良い。又、ディスプレイ１０２は、入出力画像データの処理を行う周知のグラフィックインタフェース（図示せず）を介してＣＰＵ２０１に接続されていても良い。【００３２】
コンピュータシステム１００において、キーボード１０３やマウス１０４は分子設計支援装置の入力部を構成する。ディスプレイ１０２は、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で３次元分子構造を画面１０２ａ上に表示する。ＣＰＵ２０１は、分子構造のうち、入力部により指定された結合軸に基づいて、少なくとも該指定された結合軸に対して座標変更の対象となる側を決定する決定工程又は手順と、指定された結合軸周りの回転又は指定された結合軸の伸縮を含む分子構造の変更を入力部からの指定に基づいて行う変更工程又は手順と、決定工程又は手順の決定及び変更工程又は手順の変更に基づいて変更された分子構造をディスプレイ１０２の画面１０２ａ上に表示する表示工程又は手順を実行する。【００３３】
尚、コンピュータシステム１００の構成は図８及び図９に示す構成に限定されるものではなく、代わりに各種周知の構成を使用しても良い。【００３４】
本実施例では、分子構造の部分構造を削除、置換、追加等する分子構造変更操作を行う場合、例えばディスプレイ１０２の画面１０２ａ上に作業用のメインウィンドウを表示し、メインウィンドウ上に３次元分子構造を図３に示すハーフベクタ形式又は図４に示すボールアンドスティック形式又は図５に示すスペースフィル形式で表示する。そして、マウス１０４等のポインティングデバイスのクリックやドラッグアンドドロップ操作、キーボード１０３の操作等の入力部からの操作により、メインウィンドウ上で原子や結合軸を指定することで変更対象となる部分構造を決定する。又、分子構造変更操作に連続して、入力部からの操作により、分子構造変更操作を元に戻すやり直し操作であるUndo操作及び削除の再実行であるRedo操作を行うことができる。【００３５】
Undo操作及びRedo操作と実際のイベント操作とは、図１に示すデータ構造について、図１０〜図１２に示す関連性を有する。図１０は、イベント操作とイベントフラグeventFlagとの関係を示す図である。図１１は、イベント操作が可能なアイテムと削除フラグDeleteとの関係を示す図である。図１２は、Undo操作及びRedo操作とイベント数との関係を示す図である。【００３６】
図１３は、初期データ構造の構築を説明するフローチャートである。図１３に示す処理は、ＣＰＵ２０１により実行される。【００３７】
図１３において、ステップＳ１は、図１に示す如き原子データ構造Ａを有する原子データ構造体、結合軸データ構造Ｂを有する結合軸データ構造体及び補助データ構造Ｄを有する補助データ構造体を宣言し、ステップＳ２は、図１に示す如き分子データ構造Ｍを有する分子データ構造体及びイベントデータ構造Ｅを有するイベントデータ構造体を、原子データ構造体及び結合軸データ構造体を含む構造体として宣言する。ステップＳ３は、イベントフラグeventFlagやイベント数等の初期値を設定する。【００３８】
ステップＳ４は、Cartesian（ｘｙｚ座標）又はZ-matrix座標データを記憶部内のファイルから読み込み、原子数を分子データ構造Ｍのｎａに格納する。記憶部は、コンピュータシステム１００内のメモリ部２０２、ディスクドライブ２０３又はＨＤＤ２０４であっても、コンピュータシステム１００外部の記録媒体１０６等で構成される。ステップＳ５は、読み込まれた座標データがZ-matrix座標データの場合にはCartesian座標に変換し、原子データ構造Ａのｘｙｚ座標と原子番号に格納すると共に、識別番号ａを格納順に設定する。ステップＳ６は、原子座標を用いて全ての原子間結合距離を計算する。【００３９】
ステップＳ７は、任意に設定した閾値以下の距離にある原子間に結合軸を形成する。ステップＳ８は、結合軸データ構造Ｂの識別番号ｂを形成順に設定し、結合軸数を分子データ構造Ｍのｎｂに格納する。ステップＳ９は、結合軸のベクトルを結合軸データ構造Ｂに格納する。ステップＳ１０は、結合軸に関与する２つの原子の識別番号を結合軸データ構造Ｂの識別番号ａ〔１〕，ａ〔２〕に格納する。ステップＳ１１は、各原子に関連する結合軸の識別番号を抽出すると共に、原子データ構造Ａに識別番号ｂと結合軸の数（総数）ｎｂを格納し、処理は終了する。これにより、与えられた分子構造のデータに対して、図１に示す如き原子データ構造Ａ、結合軸データ構造Ｂ、分子データ構造Ｍ、補助データ構造Ｄ及びイベントデータ構造Ｅからなる初期データ構造が構築されて記憶部に格納される。【００４０】
次に、各イベント操作とUndo操作及びRedo操作との関係を説明する。【００４１】
１．削除（Delete）イベント操作とUndo操作及びRedo操作との関係：
図１３に示す処理により構築された図１に示す如きデータ構造に対して、ユーザが結合軸アイテム又は原子アイテムをマウス１０４のクリック等により選択すると、選択された結合軸アイテム又は原子アイテムのイベントフラグeventFlagにセレクトビットSelectを立てる（即ち、セットする）。この処理は、Ｍ→Ｂ→eventFlag=Select又はＭ→Ａ→eventFlag=Selectで表される。ここで、補助データ構造ＤのイベントフラグeventFlagに削除ビットDeleteを立てると、図２の例の場合、図１４に示すように削除イベントが実行される。図１４は、削除イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示しており、削除イベント前の状態、ユーザ入力、削除イベント操作及び削除イベント後の状態を示す。尚、補助データ構造ＤのイベントフラグeventFlagは、予め立てられていても良い。【００４２】
先ず、セレクトビットSelectが立っているアイテムに削除ビットDeleteを立てる。又、セレクトビットSelectが立っている原子データに含まれる結合軸情報に該当する結合軸データにも削除ビットDeleteを立てる。次に、Ｍ→ｎｅ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により現在のイベント総数を更新し、Ｍ→ｎｕ＝０によりUndo操作数を初期化する。イベント総数を更新したら、Ｅ〔ｎ>＝Ｍ→ｎｅ〕＝Nullによりそれ以降のイベントデータを初期化し、Ｅ〔Ｍ→ｎｅ〕→eventFlag=Delete， ...， etc.により現在のイベントに削除イベント用データを代入する。削除イベントの場合、イベントデータの処理前の結合軸データと処理前の原子データに削除ビットDeleteの立っている原子アイテムの情報及び結合軸情報を登録し、夫々の数も登録する。この時、イベントデータの処理前の結合軸データと処理前の原子データについては、削除ビットDeleteやセレクトビットSelectを下げておく（即ち、リセットしておく）。イベントデータへの代入が終了した後は、分子データの原子数情報と結合軸情報を更新し、必要であれば原子アイテムの原子データに含まれる結合軸情報を更新する。最後に、イベントデータの処理後の結合軸データと処理後の原子データに、削除ビットDeleteが立っているアイテム情報を登録する。【００４３】
削除イベント操作は、上記の如きデータ更新後に、削除ビットDeleteの立ててあるアイテムをメインウィンドウ上の表示内容から除外するように分子構造を再表示することにより完了する。【００４４】
図１４に示す削除イベントに関連するUndo操作は、図１５に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにUndoビットが立つと、Ｍ→ｎｕ＝Ｍ→ｎｕ＋１により先ずUndo操作数が更新される。そして、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１によりイベント総数とUndo操作数によって該当するイベント番号を設定し、該当するイベントデータの処理前のデータを現在の分子データに代入する。Undo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【００４５】
図１５に示すUndo操作に関連するRedo操作は、図１６に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにRedoビットが立つと、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により先ずイベント総数とUndo操作数によって該当するイベント番号が設定される。そして、Ｍ→ｎｕ＝Ｍ→ｎｕ−１によりUndo操作数を更新し、該当するイベントデータの処理後のデータを現在の分子データに代入する。Redo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【００４６】
図１７及び図１８は、削除イベントの処理を説明するフローチャートである。【００４７】
先ず、図１７において、ステップＳ２１はユーザの入力部からの設定により、Ｄ→eventFlag=Delete、即ち、補助データ構造ＤのイベントフラグeventFlagに削除ビットDeleteを立てる。ステップＳ２２はユーザの入力部からの選択により、Ｍ〔１〕→ＡＢ１〜Ｂｍ→eventFlag=Select， Ｍ〔１〕→ＢＡ１〜Ａｌ→eventFlag=Select、即ち、分子データＭ〔１〕の原子ｍ個（ＡＢ１〜ＡＢｍ）及び結合軸ｌ個（ＢＡ１〜ＢＡｌ）への対応アイテムｍ＋ｌ個を選択する。この例では、Ｍ〔１〕→Ａ〔３〕→eventFlag=Selectにより原子アイテムＡ〔３〕を選択する。続いて、ステップＳ２３はＭ〔１〕→ｎｅ＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１，Ｍ〔１〕→ｎｕ＝０，Ｅ〔ｎ〕＝Null（Ｍ〔１〕→ｎｅ<＝ｎ<＝MaxEvent）により、Ｍ〔１〕→ｎｅを決定してＥ〔ｉ：ｉ>＝Ｍ〔１〕→ｎｅ〕の記憶部を解放する。つまり、Ｍ〔１〕のイベント数ｎｅを決定し、Ｍ〔１〕→ｎｅ番目以降のイベントデータについては記憶部を解放する。ステップＳ２４は、Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｂ〔１〜Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｎｂ〕＝Ｍ〔１〕→ＢＡｊ（１<＝ｊ<＝ｎ）→ｂであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２５へ進む。ステップＳ２５は、Ｍ〔１〕→ＢＡ１→eventFlag=Select， ...，Ｍ〔１〕→ＢＡｎ→eventFlag=Selectにより、ＡＢ１〜ＡＢｍに連なる全ての結合軸と結合軸ＢＡ１〜ＢＡｌの計ｎ個（ＢＡ１〜ＢＡｎ）について、イベントフラグeventFlagにセレクトビットSelectを立てる。ステップＳ２６は、Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag=Ｄ→eventFlag， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ'＝２ｎ， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ'＝ｎにより、セレクトビットSelectが立てられた結合軸数ｎとその両端原子数２ｎ及びＤ→eventFlagの設定をイベントデータに格納する。ステップＳ２７はＭ〔１〕→Ｂ→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２８へ進む。【００４８】
ステップＳ２８は、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〕＝Ｍ〔１〕→ＡＢ１，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔２ｎ〕＝Ｍ〔１〕→ＡＢ２ｎ， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〕＝Ｍ〔１〕→ＢＡ１，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔ｎ〕＝Ｍ〔１〕→ＢＡｎ， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〕→eventFlag=Null， Ｅ〔Ｍ〔１〕→ｎｅ〕→B〔１〕→eventFlag=Null，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔ｎ〕→eventFlag=Nullにより、セレクトビットSelectが立てられたＭ〔１〕→ＢＡｎ（ｎ個）及びその両端原子Ｍ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔１〕〕＝Ｍ〔１〕→ＡＢ２ｎ−１， Ｍ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔２〕〕＝Ｍ〔１〕→ＡＢ２ｎ（２ｎ個）をＥ〔Ｍ〔１〕→ｎｅ〕のＢとＡに格納し、セレクトビットSelectを解除する。ステップＳ２８の後、処理は図１８に示すステップＳ２９へ進む。【００４９】
このように、この例では、Ｍ〔１〕→Ａ〔３〕→ｂ〔〕に含まれる結合軸情報２，４について、Ｍ〔１〕→Ｂ〔２〕→eventFlag=Select， Ｍ〔１〕→Ｂ〔４〕→eventFlag=Selectにより該当する結合軸Ｂ〔２〕とＢ〔４〕を選択する。又、セレクトビットSelectが立てられた原子数はＢ〔２〕とＢ〔４〕の２個であり、Ｂ〔２〕とＢ〔４〕の末端原子（又は、両端原子）は１，３，３，５と４個であるため、Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ'＝２， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ'＝２， Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag=Ｄ→eventFlag=Deleteとして、イベントデータに必要なデータをイベントデータ構造Ｅに代入する。更に、イベントデータに含まれる処理前の原子データに、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〕＝Ｍ〔１〕→Ａ〔１〕，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔４〕＝Ｍ〔１〕→Ａ〔５〕としてデータを代入し、イベントデータに含まれる処理前の結合軸データに、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〕＝Ｍ〔１〕→Ｂ〔２〕， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔２〕＝Ｍ〔１〕→Ｂ〔４〕としてデータを代入する。ここで、Ｅ〔Ｍ〔１〕→ｎｅ〕の原子データと結合軸データについては、イベントフラグeventFlagをNullに設定する。【００５０】
イベントデータへのデータの代入後は、図１８に示すように実際に分子データＭ〔１〕からの削除操作に入る。ステップＳ２９は、Ｍ〔１〕→Ｂ→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ３０へ進む。ステップＳ３０は、Ｍ〔１〕→ＡＢ１→ｂ〜＝Ｍ〔１〕→ＢＡ１→ｂ， Ｍ〔１〕→ＡＢ２→ｂ〜＝Ｍ〔１〕→ＢＡ１→ｂ，...， Ｍ〔１〕→ＡＢ２ｎ−１→ｂ〜＝Ｍ〔１〕→ＢＡｎ→ｂ， Ｍ〔１〕→ＡＢ２ｎ→ｂ〜＝Ｍ〔１〕→ＢＡｎ→ｂ， Ｍ〔１〕→ＡＢ１→ｎｂ＝Ｍ〔１〕→ＡＢ１→ｎｂ−１，...， Ｍ〔１〕→ＡＢ２ｎ→ｎｂ＝Ｍ〔１〕→ＡＢ２ｎ→ｎｂ−１により、セレクトビットSelectが立てられた結合軸Ｍ〔１〕→ＢＡｎの両端原子Ｍ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔１〕〕＝Ｍ〔１〕→ＡＢ２ｎ−１及びＭ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔２〕〕＝Ｍ〔１〕→ＡＢ２ｎについて配列｛Ｍ〔１〕→Ａ→ｂ｝から要素Ｍ〔１〕→ＢＡｎ→ｂを削除してＭ〔１〕→Ａ→ｎｂから１を引く操作を行う。この例では、Ｍ〔１〕→Ａ〔１〕→ｂ｛１，２｝から要素２を削除してＭ〔１〕→Ａ〔１〕→ｎｂから１を引き、Ｍ〔１〕→Ａ〔３〕→ｂ｛２，４｝から要素２，４を削除してＭ〔１〕→Ａ〔３〕→ｎｂから２を引き、Ｍ〔１〕→Ａ〔５〕→ｂ｛４｝から要素４を削除してＭ〔１〕→Ａ〔５〕→ｎｂから１を引く操作を行う。ステップＳ３１は、Ｍ〔１〕→Ａ（Ｂ）→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ３２へ進む。ステップＳ３２は、Ｍ〔１〕→ＡＢ１→eventFlag=Delete， Ｍ〔１〕→ＢＡ１→eventFlag=Delete，...， Ｍ〔１〕→ＢＡｎ→eventFlag=Deleteにより、立てられているセレクトビットSelectを削除ビットDeleteに変更する。これにより、イベントフラグeventFlagにセレクトビットSelectが立っている原子アイテムと結合軸アイテムについては、イベントフラグeventFlagに削除ビットDeleteを立てる変更を行う。【００５１】
ステップＳ３３は、Ｍ〔１〕→Ｂ→eventFlag=Deleteであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ３４へ進む。ステップＳ３４は、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔１〕＝Ｍ〔１〕→ＡＢ１，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔２ｎ〕＝Ｍ〔１〕→ＡＢ２ｎ， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〕＝Ｍ〔１〕→ＢＡ１，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔ｎ〕＝Ｍ〔１〕→ＢＡｎにより、削除ビットDeleteが立てられたＭ〔１〕→ＢＡｎ（ｎ個）及びその両端原子Ｍ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔１〕〕＝Ｍ〔１〕→ＡＢ２ｎ−１， Ｍ〔１〕→Ａ〔Ｍ〔１〕→ＢＡｎ→ａ〔２〕〕＝Ｍ〔１〕→ＡＢ２ｎ（２ｎ個）をＥ〔Ｍ〔１〕→ｎｅ〕のＢ'とＡ'に格納する。これにより、削除ビットDeleteが立てられた結合軸Ｂ〔２〕，Ｂ〔４〕及びこれらの末端原子Ａ〔１〕，Ａ〔３〕，Ａ〔５〕は、イベントデータにＥ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔１〕＝Ｍ〔１〕→Ａ〔１〕，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔２〕＝Ｍ〔１〕→Ａ〔３〕， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔３〕＝Ｍ〔１〕→Ａ〔５〕， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〕＝Ｍ〔１〕→Ｂ〔２〕， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔２〕＝Ｍ〔１〕→Ｂ〔４〕のように代入される。【００５２】
最後に、ステップＳ３５は、分子データＭ〔１〕について、削除ビットDeleteが立てられている以外の原子Ａのアイテムと結合軸Ｂのアイテムを画面１０２ａ上に表示することで一連の操作が終了する。【００５３】
図１９は削除イベントによる構造変化例を蟻酸（ＣＯＯＣＨ）の場合について示す図である。図１９において、左側は分子データＭ〔１〕の削除前と削除後の画面１０２ａ上の分子構造の表示状態を示し、右側は分子データＭ〔１〕の削除前と削除後の構造データの変化を示す。図１９では、選択された原子Ａ〔３〕が削除される様子が示されている。【００５４】
図２０は削除イベント前の画面１０２ａ上の分子構造の表示状態を示す図であり、図２１は削除イベント後の画面１０２ａ上の分子構造の表示状態を示す図である。図２０に示す削除イベント前の状態では、Undo操作及びRedo操作は行えないが、図２１に示す削除イベント後の状態では、Undo操作を行うことができRedo操作を行うことはできない。【００５５】
図２２は削除イベントのUndo操作を説明するフローチャートである。Undo操作が開始されると、ステップＳ４１はユーザの入力部からの設定により、Ｄ→eventFlag=Undoにより、補助データのイベントフラグeventFlagをUndoに設定する。ステップＳ４２は、Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ＋１，Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１により、Ｍ〔１〕→ｎｕを決定してUndo操作後のイベント番号Ｅ１を決定する。ステップＳ４３は、Ｅ〔Ｅ１〕→eventFlag=Deleteであるか否かを判定し、判定結果がＮＯであるとステップＳ４４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ４３の判定結果がＹＥＳであると、処理はステップＳ４５へ進む。【００５６】
ステップＳ４５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ〔１〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ〔１〕，...， Ｍ〔１〕→Ａ〔ｎ１〕＝Ｅ〔Ｅ１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ〔１〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ〔１〕，...， Ｍ〔１〕→Ｂ〔ｎ２〕＝Ｅ〔Ｅ１〕→Ｂ〔Ｅ〔Ｅ１〕→ｎｂ'〕により、Ｅ〔Ｅ１〕→ｎａ'（ｎ１）個のＥ〔Ｅ１〕→ＡをＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｎ２）個のＥ〔Ｅ１〕→ＢをＭ〔１〕→Ｂに反映させる。又、ステップＳ４６は、分子Ｍ〔１〕について削除ビットDeleteが立てられている以外の原子Ａのアイテムと結合軸Ｂのアイテムを画面１０２ａ上に表示して、Undo操作は終了する。【００５７】
図２３は、図２２に示す如きUndo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図２３に示すUndo操作後の状態では、Undo操作を行うことができないが、Redo操作は行うことができる。【００５８】
図２４は削除イベントのRedo操作を説明するフローチャートである。Redo操作が開始されると、ステップＳ５１はユーザの入力部からの設定により、Ｄ→eventFlag=Redoにより、補助データのイベントフラグeventFlagをRedoに設定する。ステップＳ５２は、Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１， Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ−１により、Redo操作後のイベント番号Ｅ１を決定し、Ｍ〔１〕→ｎｕを決定する。ステップＳ５３は、Ｅ〔Ｅ１〕→eventFlag=Deleteであるか否かを判定し、判定結果がＮＯであるとステップＳ５４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ５３の判定結果がＹＥＳであると、処理はステップＳ５５へ進む。【００５９】
ステップＳ５５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ'〔１〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ'〔１〕，...， Ｍ〔１〕→Ａ〔ｎ１〕＝Ｅ〔Ｅ１〕→Ａ'〔Ｅ〔Ｅ１〕→ｎａ'〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ'〔１〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ'〔１〕，...， Ｍ〔１〕→Ｂ〔ｎ２〕＝Ｅ〔Ｅ１〕→Ｂ'〔Ｅ〔Ｅ１〕→ｎｂ'〕により、Ｅ〔Ｅ１〕→ｎａ'（ｎ１）個のＥ〔Ｅ１〕→Ａ'をＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｎ２）個のＥ〔Ｅ１〕→Ｂ'をＭ〔１〕→Ｂに反映させる。又、ステップＳ５６は、分子Ｍ〔１〕について削除ビットDeleteが立てられている以外の原子Ａのアイテムと結合軸Ｂのアイテムを画面１０２ａ上に表示して、Redo操作は終了する。【００６０】
図２５は、図２４に示す如きRedo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図２５に示すRedo操作後の状態では、Undo操作を行うことができるが、Redo操作を行うことはできない。【００６１】
２．置換（Substitute）イベント操作とUndo操作及びRedo操作との関係：
図１３に示す処理により構築された図１に示す如きデータ構造に対して、ユーザが原子アイテムをマウス１０４のクリック等により選択すると、選択された原子アイテムのイベントフラグeventFlagにセレクトビットSelectを立てる（即ち、セットする）。この処理は、Ｍ→Ｂ→eventFlag=Select又はＭ→Ａ→eventFlag=Selectで表される。ここで、補助データ構造ＤのイベントフラグeventFlagに置換ビットSubstituteを立てると、図２の例の場合、図２６に示すように置換イベントが実行される。図２６は、置換イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示しており、置換イベント前の状態、ユーザ入力、置換イベント操作及び置換イベント後の状態を示す。尚、補助データ構造ＤのイベントフラグeventFlagは、予め立てられていても良い。【００６２】
先ず、セレクトビットSelectが立っている原子アイテムとその原子データに含まれる結合軸情報に該当する結合軸データに置換ビットSubstitute及びセレクトビットSelectを立てる。ただし、アルゴリズムによっては、セレクトビットSelectのみを立てるようにしても良い。次に、Ｍ→ｎｅ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により現在のイベント総数を更新し、Ｍ→ｎｕ＝０によりUndo操作数を初期化する。イベント総数を更新したら、Ｅ〔ｎ>＝Ｍ→ｎｅ〕＝Nullによりそれ以降のイベントデータを初期化し、Ｅ〔Ｍ→ｎｅ〕→eventFlag=Substitute， ...， etc.により現在のイベントに置換イベント用データを代入する。置換イベントの場合、イベントデータの処理前の結合軸データと処理前の原子データに置換ビットSubstitute又はセレクトビットSelectの立っている原子アイテムの情報及び結合軸情報を登録し、夫々の数も登録する。この時、イベントデータの処理前の結合軸データと処理前の原子データについては、置換ビットSubstituteやセレクトビットSelectを下げておく（即ち、リセットしておく）。イベントデータへの代入が終了した後は、分子データの原子数情報と結合軸情報を更新し、必要であれば原子アイテムの原子データに含まれる結合軸情報を更新する。この時、置換後の原子種はＭ→Ａ→Atom＝Ｄ→Atomにより補助データの原子設定情報に変更される。又、更に必要であれば、結合軸データのベクトル情報も原子種に合致するように更新する。最後に、イベントデータの処理後の結合軸データと処理後の原子データに、置換ビットSubstitute又はセレクトビットSelectが立っているアイテム情報を登録する。この際、イベントデータの処理後の結合軸データ及び処理後の原子データの置換ビットSubstituteやセレクビットSelectは下げておく。【００６３】
置換イベント操作は、上記の如きデータ更新後に、置換ビットSubstitute又はセレクトビットSelectの立ててあるアイテムを置換するように分子構造をメインウィンドウ上に再表示することにより完了する。【００６４】
図２６に示す置換イベントに関連するUndo操作は、図２７に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにUndoビットが立つと、Ｍ→ｎｕ＝Ｍ→ｎｕ＋１により先ずUndo操作数が更新される。そして、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１によりイベント総数とUndo操作数によって該当するイベント番号を設定し、該当するイベントデータの処理前のデータを現在の分子データに代入する。Undo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【００６５】
図２７に示すUndo操作に関連するRedo操作は、図２８に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにRedoビットが立つと、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により先ずイベント総数とUndo操作数によって該当するイベント番号が設定される。そして、Ｍ→ｎｕ＝Ｍ→ｎｕ−１によりUndo操作数を更新し、該当するイベントデータの処理後のデータを現在の分子データに代入する。Redo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【００６６】
図２９及び図３０は、置換イベントの処理を説明するフローチャートである。【００６７】
先ず、図２９において、ステップＳ１２１はユーザの入力部からの設定により、Ｄ→eventFlag=Substitute、即ち、補助データ構造ＤのイベントフラグeventFlagに置換ビットSubstituteを立てる。ステップＳ１２２はユーザの入力部からの選択により、Ｍ〔１〕→ＡＢ１〜Ｂｍ→eventFlag=Select、即ち、分子データＭ〔１〕の原子ｍ個（ＡＢ１〜ＡＢｍ）への対応アイテムｍ個を選択する。この例では、Ｍ〔１〕→Ａ〔３〕→eventFlag=Selectにより原子アイテムＡ〔３〕を選択する。続いて、ステップＳ１２３はＭ〔１〕→ｎｅ＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１，Ｍ〔１〕→ｎｕ＝０，Ｅ〔ｎ〕＝Null（Ｍ〔１〕→ｎｅ<＝ｎ<＝MaxEvent）により、Ｍ〔１〕→ｎｅを決定してＥ〔ｉ：ｉ>＝Ｍ〔１〕→ｎｅ〕の記憶部を解放する。つまり、Ｍ〔１〕のイベント数ｎｅを決定し、Ｍ〔１〕→ｎｅ番目以降のイベントデータについては記憶部を解放する。ステップＳ１２４は、Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｂ〔１〜Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｎｂ〕＝Ｍ〔１〕→ＢＡｊ（１<＝ｊ<＝ｎ）→ｂであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１２５へ進む。ステップＳ１２５は、Ｍ〔１〕→ＢＡ１→eventFlag=Select， ...，Ｍ〔１〕→ＢＡｎ→eventFlag=Selectにより、ＡＢ１〜ＡＢｍに連なる全ての結合軸と結合軸ＢＡ１〜ＢＡｌの計ｎ個（ＢＡ１〜ＢＡｎ）について、イベントフラグeventFlagにセレクトビットSelectを立てる。ステップＳ１２６は、Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag=Ｄ→eventFlag， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ'＝ｍ， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ'＝ｎにより、セレクトビットSelectが立てられた結合軸数ｎとその両端原子数ｍ及びＤ→eventFlagの設定をイベントデータに格納する。ステップＳ１２７はＭ〔１〕→Ｂ→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１２８へ進む。【００６８】
ステップＳ１２８は、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〕＝Ｍ〔１〕→ＡＢ１，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〕→eventFlag=Null，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔ｍ〕＝Ｍ〔１〕→ＡＢｍ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔ｍ〕→eventFlag=Null，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〕＝Ｍ〔１〕→ＢＡ１， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〕→eventFlag=Null，...，Ｅ〔Ｍ〔１〕→ｎｅ〕→B〔ｎ〕＝Ｍ〔１〕→ＢＡｎ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔ｎ〕→eventFlag=Nullにより、セレクトビットSelectが立てられたＭ〔１〕→ＢＡ１〜Ａｎ（ｎ個）及びその原子Ｍ〔１〕→ＡＢ１〜Ｂｍ（ｍ個）をＥ〔Ｍ〔１〕→ｎｅ〕のＢとＡに格納し、セレクトビットSelectを解除する。ステップＳ１２８の後、処理は図３０に示すステップＳ１２９へ進む。【００６９】
イベントデータへのデータの代入後は、図３０に示すように実際に分子データＭ〔１〕に対する置換操作に入る。ステップＳ１２９は、Ｍ〔１〕→Ａ→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１３０へ進む。ステップＳ１３０は、Ｍ〔１〕→ＡＢ１→Atom＝Ｄ→Atom，...，Ｍ〔１〕→ＡＡｍ→Atom＝Ｄ→Atomにより、セレクトビットSelectが立てられた原子Ｍ〔１〕→ＡについてＭ〔１〕→Ａ→AtomにＤ→Atomを反映させる。ステップＳ１３１は、Ｍ〔１〕→Ｂ→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１３２へ進む。ステップＳ１３２は、Ｍ〔１〕→ＢＡ１→vector=｛x'BA1， y'BA1， z'BA1｝，Ｍ〔１〕→ＢＡ１→length=length'_ＢＡ１，...， Ｍ〔１〕→ＢＡｎ→vector=｛x'BAｎ， y'BAｎ， z'BAｎ｝，Ｍ〔１〕→ＢＡｎ→length=length'_ＢＡｎにより、セレクトビットSelectが立てられている結合軸Ｍ〔１〕→ＢについてＭ〔１〕→Ａ〔Ｍ〔１〕→Ｂ→ａ〔１〜２〕〕→Atomの情報をＭ〔１〕→Ｂ→vectorとＭ〔１〕→Ｂ→lengthに反映させる。【００７０】
ステップＳ１３３は、Ｍ〔１〕→A（Ｂ）→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１３４へ進む。ステップＳ１３４は、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔１〜ｍ〕＝Ｍ〔１〕→ＡＢ１〜Ｂｍ， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔１〜ｍ〕→eventFlag=Null，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〜ｎ〕＝Ｍ〔１〕→ＢＡ１〜Ａｎ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〜ｎ〕→eventFlag=Nullにより、選択ビットSelectが立てられたＭ〔１〕→ＡをＥ〔Ｍ〔１〕→ｎｅ〕→Ａ'に、Ｍ〔１〕→ＢをＥ〔Ｍ〔１〕→ｎｅ〕→Ｂ'に格納すると共に、セレクトビットSelectを下げる。ステップＳ１３５は、Ｍ〔１〕→Ａ〔ｉ〕→coordinate=｛x'i， y'i， z'i｝（ただし、１<＝ｉ<＝Ｍ〔１〕→ｎａ）， Ｍ〔１〕→Ａ〔ｉ〕→eventFlag〜＝Select（ただし、１<＝ｉ<＝Ｍ〔１〕→ｎａ）， Ｍ〔１〕→Ｂ〔ｊ〕→eventFlag〜＝Select（ただし、１<＝ｊ<＝Ｍ〔１〕→ｎｂ）より、Ｍ〔１〕の結合軸ベクトルを用いてＭ〔１〕→Ａ→coordinateを更新し、原子と結合軸の全てのセレクトビットSelectを下げる。【００７１】
最後に、ステップＳ１３６は、分子データＭ〔１〕について、削除ビットDeleteが立てられている以外の原子Ａのアイテムと結合軸Ｂのアイテムを画面１０２ａ上に表示することで一連の操作が終了する。【００７２】
図３１は置換イベントによる構造変化例を蟻酸（ＣＯＯＣＨ）の場合について示す図である。図３１において、左側は分子データＭ〔１〕の置換前と置換後の画面１０２ａ上の分子構造の表示状態を示し、右側は分子データＭ〔１〕の置換前と置換後の構造データの変化を示す。図３１では、Ｏで示される酸素原子Ａ〔３〕がＣで示される炭素原子Ａ〔３〕に置換される様子が示されている。【００７３】
図３２は置換イベント前の画面１０２ａ上の分子構造の表示状態を示す図であり、図３３は置換イベント後の画面１０２ａ上の分子構造の表示状態を示す図である。図３２に示す置換イベント前の状態では、Undo操作及びRedo操作は行えないが、図３３に示す置換イベント後の状態では、Undo操作を行うことができRedo操作を行うことはできない。【００７４】
図３４は置換イベントのUndo操作を説明するフローチャートである。Undo操作が開始されると、ステップＳ１４１はユーザの入力部からの設定により、Ｄ→eventFlag=Undoにより、補助データのイベントフラグeventFlagをUndoに設定する。ステップＳ１４２は、Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ＋１，Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１により、Ｍ〔１〕→ｎｕを決定してUndo操作後のイベント番号Ｅ１を決定する。ステップＳ１４３は、Ｅ〔Ｅ１〕→eventFlag=Substituteであるか否かを判定し、判定結果がＮＯであるとステップＳ１４４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ１４３の判定結果がＹＥＳであると、処理はステップＳ１４５へ進む。【００７５】
ステップＳ１４５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ〔１〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ〔１〕，...， Ｍ〔１〕→Ａ〔ｎ１〕＝Ｅ〔Ｅ１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ〔１〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ〔１〕，...， Ｍ〔１〕→Ｂ〔ｎ２〕＝Ｅ〔Ｅ１〕→Ｂ〔Ｅ〔Ｅ１〕→ｎｂ'〕により、Ｅ〔Ｅ１〕→ｎａ'（ｎ１）個のＥ〔Ｅ１〕→ＡをＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｎ２）個のＥ〔Ｅ１〕→ＢをＭ〔１〕→Ｂに反映させる。又、ステップＳ１４６は、Ｍ〔１〕→Ａ→coordinateをＭ〔１〕→Ｂ→vectorで更新すると共に、削除ビットDeleteが立てられている以外の原子のアイテムＭ〔１〕→Ａと結合軸ＢのアイテムＭ〔１〕→Ｂを画面１０２ａ上に表示して、Undo操作は終了する。【００７６】
図３５は、図３４に示す如きUndo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図３５に示すUndo操作後の状態では、Undo操作を行うことはできないが、Redo操作を行うことはできる。【００７７】
図３６は置換イベントのRedo操作を説明するフローチャートである。Redo操作が開始されると、ステップＳ１５１はユーザの入力部からの設定により、Ｄ→eventFlag=Redoにより、補助データのイベントフラグeventFlagをRedoに設定する。ステップＳ１５２は、Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１， Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ−１により、Redo操作後のイベント番号Ｅ１を決定し、Ｍ〔１〕→ｎｕを決定する。ステップＳ１５３は、Ｅ〔Ｅ１〕→eventFlag=Substituteであるか否かを判定し、判定結果がＮＯであるとステップＳ１５４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ１５３の判定結果がＹＥＳであると、処理はステップＳ１５５へ進む。【００７８】
ステップＳ１５５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ'〔１〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ'〔１〕，...， Ｍ〔１〕→Ａ〔ｎ１〕＝Ｅ〔Ｅ１〕→Ａ'〔Ｅ〔Ｅ１〕→ｎａ'〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ'〔１〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ'〔１〕，...， Ｍ〔１〕→Ｂ〔ｎ２〕＝Ｅ〔Ｅ１〕→Ｂ'〔Ｅ〔Ｅ１〕→ｎｂ'〕により、Ｅ〔Ｅ１〕→ｎａ'（ｎ１）個のＥ〔Ｅ１〕→Ａ'をＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｎ２）個のＥ〔Ｅ１〕→Ｂ'をＭ〔１〕→Ｂに反映させる。又、ステップＳ１５６は、Ｍ〔１〕→Ａ→coordinateをＭ〔１〕→Ｂ→vectorで更新すると共に、削除ビットDeleteが立てられている以外の原子のアイテムＭ〔１〕→Ａと結合軸ＢのアイテムＭ〔１〕→Ｂを画面１０２ａ上に表示して、Redo操作は終了する。【００７９】
図３７は、図３６に示す如きRedo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図３７に示すRedo操作後の状態では、Undo操作を行うことができるが、Redo操作を行うことはできない。【００８０】
３．追加（Add）イベント操作とUndo操作及びRedo操作との関係：
図１３に示す処理により構築された図１に示す如きデータ構造に対して、ユーザが原子アイテムをマウス１０４のクリック等により選択すると、選択された原子アイテムのイベントフラグeventFlagにセレクトビットSelectを立てる（即ち、セットする）。この処理は、Ｍ→Ｂ→eventFlag=Select又はＭ→Ａ→eventFlag=Selectで表される。ここで、補助データ構造ＤのイベントフラグeventFlagに追加ビットAddを立てると、図２の例の場合、図３８に示すように追加イベントが実行される。図３８は、追加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示しており、追加イベント前の状態、ユーザ入力、追加イベント操作及び追加イベント後の状態を示す。尚、補助データ構造ＤのイベントフラグeventFlagは、予め立てられていても良い。図３８はＨＣＯＯＨが追加イベントによりＣＨ３ＣＯＯＨに変化する場合を示す。【００８１】
先ず、セレクトビットSelectが立っている原子アイテムとその原子データに含まれる結合軸情報に該当する結合軸データに追加ビットAdd及びセレクトビットSelectを立てる。ただし、アルゴリズムによっては、セレクトビットSelectのみを立てるようにしても良い。次に、Ｍ→ｎｅ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により現在のイベント総数を更新し、Ｍ→ｎｕ＝０によりUndo操作数を初期化する。イベント総数を更新したら、Ｅ〔ｎ>＝Ｍ→ｎｅ〕＝Nullによりそれ以降のイベントデータを初期化し、Ｅ〔Ｍ→ｎｅ〕→eventFlag=Add， ...， etc.により現在のイベントに追加イベント用データを代入する。追加イベントの場合、イベントデータの処理前の結合軸データと処理前の原子データに追加ビットAdd又はセレクトビットSelectの立っている原子アイテムの情報及び結合軸情報を登録し、夫々の数も登録する。この時、イベントデータの処理前の結合軸データと処理前の原子データについては、追加ビットAddやセレクトビットSelectを下げておく（即ち、リセットしておく）。ここで追加する部分構造は、補助データに含まれる分子設定情報を用いて例えば記憶部からロードされる。イベントデータへの代入が終了した後は、ロードした部分構造データを追加する形式で分子データの原子数情報、結合軸情報、原子データ、結合軸データを更新し、必要であれば結合軸データのベクトル情報も追加イベント操作により置換された原子種に合致するように更新する。置換後の原子データとそれに関与する結合軸データについては、イベントデータに含まれる処理後の原子データと処理後の結合軸データに代入する。【００８２】
追加イベント操作は、上記の如きデータ更新後に、追加ビットAdd又はセレクトビットSelectの立ててあるアイテムを追加するように分子構造をメインウィンドウ上に再表示することにより完了する。【００８３】
図３８に示す追加イベントに関連するUndo操作は、図３９に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにUndoビットが立つと、Ｍ→ｎｕ＝Ｍ→ｎｕ＋１により先ずUndo操作数が更新される。そして、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１によりイベント総数とUndo操作数によって該当するイベント番号を設定し、現在の分子データの原子数と結合軸数から該当するイベントデータに含まれる部分構造の原子数と結合軸数を引く。又、該当するイベントデータの処理前のデータを現在の分子データに代入する。Undo操作は、最後にメインウィンドウ上の分子構造に、分子データの原子数と結合軸数に合致するアイテムのみを再表示することにより完了する。【００８４】
図３９に示すUndo操作に関連するRedo操作は、図４０に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにRedoビットが立つと、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により先ずイベント総数とUndo操作数によって該当するイベント番号が設定される。そして、Ｍ→ｎｕ＝Ｍ→ｎｕ−１によりUndo操作数を更新し、該当するイベントデータに含まれる部分構造の原子数と結合軸数を加えると共に、該当するイベントデータの処理後のデータを現在の分子データに代入する。Redo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【００８５】
図４１及び図４２は、追加イベントの処理を説明するフローチャートである。【００８６】
先ず、図４１において、ステップＳ２２１はユーザの入力部からの設定により、Ｄ→eventFlag=Add、即ち、補助データ構造ＤのイベントフラグeventFlagに追加ビットAddを立てる。ステップＳ２２２はユーザの入力部からの選択により、Ｍ〔１〕→ＡＢ１〜Ｂｍ→eventFlag=Select、即ち、分子データＭ〔１〕の原子ｍ個（ＡＢ１〜ＡＢｍ）への対応アイテムｍ個を選択する。この例では、Ｍ〔１〕→Ａ〔４〕→eventFlag=Selectにより原子アイテムＡ〔４〕を選択する。続いて、ステップＳ２２３はＭ〔１〕→Ａ→Atom=｛Ｈ｝、且つ、Ｍ〔１〕→Ａ→ｎｂ＝１であるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２２４へ進む。ステップＳ２２４は、Ｍ〔１〕→ＡＢ１〜Ｂｎ→eventFlag=Selectにより条件に合うＭ〔１〕→ＡＢ１〜ＢｎのイベントフラグeventFlagにセレクトビットSelectを立てる。ステップＳ２２５はＭ〔１〕→ｎｅ＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１，Ｍ〔１〕→ｎｕ＝０，Ｅ〔ｎ〕＝Null（Ｍ〔１〕→ｎｅ<＝ｎ<＝MaxEvent）により、Ｍ〔１〕→ｎｅを決定してＥ〔ｉ：ｉ>＝Ｍ〔１〕→ｎｅ〕の記憶部を解放する。つまり、Ｍ〔１〕のイベント数ｎｅを決定し、Ｍ〔１〕→ｎｅ番目以降のイベントデータについては記憶部を解放する。ステップＳ２２６は、Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｂ〔１〜Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｎｂ〕＝Ｍ〔１〕→ＢＡｊ（１<＝ｊ<＝ｎ）→ｂであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２２７へ進む。ステップＳ２２７は、Ｍ〔１〕→ＢＡ１〜Ａｎ→eventFlag=Selectにより、ＡＢ１〜ＡＢｍに連なる全ての結合軸と結合軸ＢＡ１〜ＢＡｌの計ｎ個（ＢＡ１〜ＢＡｎ）について、イベントフラグeventFlagにセレクトビットSelectを立てる。ステップＳ２２８は、Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag=Ｄ→eventFlag， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ＝Ｍ〔２〕→ｎａ， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ＝Ｍ〔２〕→ｎｂ，Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎ， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ'＝ｎにより、セレクトビットSelectが立てられた結合軸数ｎとその両端原子数ｍ、Ｄ→eventFlag及び追加分子の結合軸数と原子数をイベントデータ（ＥＭ〔１〕→ｎｅ）に格納する。ステップＳ２２９はＭ〔１〕→Ａ（Ｂ）→eventFlag=Selectであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２３０へ進む。【００８７】
ステップＳ２３０は、Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〜ｎ〕＝Ｍ〔１〕→ＡＢ１〜Ｂｎ，...， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ〔１〜ｎ〕→eventFlag=Null， Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〜ｎ〕＝Ｍ〔１〕→ＢＡ１〜Ａｎ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ〔１〜ｎ〕→eventFlag=Null，Ｍ〔１〕→ＡＢ１〜Ｂｎ→eventFlag=Delete，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ａ'〔１〜ｎ〕＝Ｍ〔１〕→ＡＢ１〜Ｂｎにより、セレクトビットSelectが立てられたＭ〔１〕→ＢをＥ〔Ｍ〔１〕→ｎｅ〕→Ｂに格納してＥ→ＢのセレクトビットSelectを解除すると共に、セレクトビットSelectが立てられたＭ〔１〕→ＡをＥ〔Ｍ〔１〕→ｎｅ〕→Ａに格納してＥ→ＡのセレクトビットSelectを解除し、更に、Ｍ〔１〕→Ａの立てられているセレクトビットSelectを削除ビットDeleteに変更してＥ〔Ｍ〔１〕→ｎｅ〕→Ａ'に格納する。ステップＳ２３０の後、処理は図４２に示すステップＳ２３１へ進む。【００８８】
イベントデータへのデータの代入後は、図４２に示すように実際に分子データＭ〔１〕に対する追加操作に入る。ステップＳ２３１はＭ〔２〕→Ａ→ａ＝Ｄ→ａ、且つ、Ｍ〔２〕→Ｂ〔Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕〕→ａ〔１〕＝Ｄ→ａであるか否かを判定し、判定結果がＮＯであると処理はステップＳ２３２−１へ進み、判定結果がＹＥＳであると処理はステップＳ２３２−２へ進む。ステップＳ２３２−１はｍａ＝Ｍ〔２〕→Ｂ〔Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕〕→ａ〔１〕とし、処理はステップＳ２３３へ進む。ステップＳ２３２−２はｍａ＝Ｍ〔２〕→Ｂ〔Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕〕→ａ〔２〕とし、処理はステップＳ２３３へ進む。ステップＳ２３３はＭ〔２〕→Ｂ〔Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕〕→eventFlag=Deleteとし、処理はステップＳ２３４へ進む。【００８９】
ステップＳ２３４は、Ｍ〔１〕→ＢＡ１〜Ａｎ→ａ〔１〕＝Ｍ〔１〕→ＡＢ１〜Ｂｎ→ａであるか否かを判定し、判定結果がＮＯであると処理はステップＳ２３５−１へ進み、判定結果がＹＥＳであると処理はステップＳ２３５−２へ進む。ステップＳ２３５−１はｍａ'＝Ｍ〔１〕→ＢＡ１〜Ａｎ→ａ〔１〕とし、処理はステップＳ２３６へ進む。ステップＳ２３５−２はｍａ'＝Ｍ〔１〕→ＢＡ１〜Ａｎ→ａ〔２〕とし、処理はステップＳ２３３へ進む。ステップＳ２３３はＭ〔１〕→ＢＡｉ（１<＝ｉ<＝ｎ）→ａ＝｛ｍａ，ｍａ'｝，Ｍ〔１〕→ＢＡｉ→vector=｛x'BAi， y'BAi， z'BAi｝，Ｍ〔１〕→ＢＡｉ→length=length'_ＢＡｉにより、Ｍ〔１〕→ＢＡ１〜Ａｎ→ａ、Ｍ〔１〕→ＢＡ１〜Ａｎ→vector及びＭ〔１〕→ＢＡ１〜Ａｎ→lengthをｍａに合致するように更新する。【００９０】
ステップＳ２３７はＭ〔２〕→Ａ〔ｍａ〕→ｂ〔ｊ：１<＝ｊ<＝Ｍ〔２〕→Ａ〔ｍａ〕→ｎｂ〕＝Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕であるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ２３８へ進む。ステップＳ２３８は１<＝ｋｂ<＝Ｍ〔２〕→ｎｂ， １<＝ｋａ<＝Ｍ〔２〕→ｎａ，１<＝ｉ<＝ｎ，Ｍ〔１〕→ｎｂ＋Ｍ〔２〕→ｎｂ＊（ｉ−１）＋ｋｂ＝ｍ， Ｍ〔１〕→ｎａ＋Ｍ〔２〕→ｎａ＊（ｉ−１）＋ｋａ＝ｍ'， Ｍ〔１〕→ｎａ＋Ｍ〔２〕→ｎａ＊（ｊ−１）＋ｋａ＝ｍｊ，Ｍ〔１〕→Ｂ〔ｍ〕＝Ｍ〔２〕→Ｂｋｂ，Ｍ〔１〕→Ｂ〔ｍ〕→vector=Ｍ〔２〕→Ｂｋｂ→｛x'i， y'i， z'i｝， Ｍ〔１〕→Ａ〔ｍ'〕＝Ｍ〔２〕→Ａｋａ， Ｍ〔１〕→Ａ〔ｍｊ〕→ｂ〔ｊ〕＝Ｍ〔１〕→ＢＡｉ→ｂ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〜ｎ〕→eventFlag=Nullにより、Ｍ〔１〕にＭ〔２〕→Ｍ〔Ｍ〔２〕→Ａ〔Ｄ→ａ〕→ｂ〔１〕〕→vectorとＭ〔１〕→ＢＡ１〜Ａｎ→vectorとの方向が同じになるようにＭ〔２〕を追加し、Ｍ〔２〕→Ａ〔ｍａ〕→ｂ〔ｊ〕の変更も反映させ、Ｍ〔２〕→Ａ〔ｍａ〕→ｂ〔ｊ〕＝Ｍ〔１〕→ＢＡ１〜Ａｎ→ｂとする。【００９１】
ステップＳ２３９はＭ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ＋Ｍ〔２〕→ｎａ＊ｎ， Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋Ｍ〔２〕→ｎｂ＊ｎ，Ｅ〔Ｍ〔１〕→ｎｅ〕→Ｂ'〔１〜ｎ〕＝Ｍ〔１〕→ＢＡ１〜Ａｎにより、Ｍ〔１〕→ｎａ（ｎｂ）を更新してＥにＭ〔１〕→ＢＡ１〜Ａｎを格納する。【００９２】
最後に、ステップＳ２４０は、分子データＭ〔１〕について、Ｍ〔１〕→Ａ→coordinateをＭ〔１〕→Ｂ→vectorで更新し、削除ビットDeleteが立てられている以外のＭ〔１〕→ＡとＭ〔１〕→Ｂのアイテムを画面１０２ａ上に表示することで一連の操作が終了する。【００９３】
図４３は追加イベントによる構造変化例を蟻酸（ＣＯＯＣＨ）の場合について示す図である。図４３において、左側は分子データＭ〔１〕の追加前と追加後の画面１０２ａ上の分子構造の表示状態を示し、右側は分子データＭ〔１〕の追加前と追加後の構造データの変化を示す。図４３では、水素原子Ａ〔４〕に炭素原子Ａ〔１〕及び水素原子Ａ〔２〕〜Ａ〔５〕が追加される様子が示されている。ここでは、炭素原子に繋がっている水素原子がメタンの炭素原子に置換され、全体としては元の分子構造にメチル基が追加された構造に変更される場合を示す。尚、メタンからメチル基に変更される際、削除される水素原子の番号はＤ→ａに登録されている。【００９４】
図４４は追加イベント前の画面１０２ａ上の分子構造の表示状態を示す図であり、図４５は追加イベント後の画面１０２ａ上の分子構造の表示状態を示す図である。図４４に示す追加イベント前の状態では、Undo操作及びRedo操作は行えないが、図４５に示す追加イベント後の状態では、Undo操作を行うことができRedo操作を行うことはできない。【００９５】
図４６は追加イベントのUndo操作を説明するフローチャートである。Undo操作が開始されると、ステップＳ２４１はユーザの入力部からの設定により、Ｄ→eventFlag=Undoにより、補助データのイベントフラグeventFlagをUndoに設定する。ステップＳ２４２は、Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ＋１，Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１により、Ｍ〔１〕→ｎｕを決定してUndo操作後のイベント番号Ｅ１を決定する。ステップＳ２４３は、Ｅ〔Ｅ１〕→eventFlag=Addであるか否かを判定し、判定結果がＮＯであるとステップＳ２４４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ２４３の判定結果がＹＥＳであると、処理はステップＳ２４５へ進む。【００９６】
ステップＳ２４５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ〔１〜ｉ〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ〔１〜ｉ〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ〔１〜ｊ〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ〔１〜ｊ〕，Ｍ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ−Ｅ〔Ｅ１〕→ｎａ＊Ｅ〔Ｅ１〕→ｎａ'， Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ−Ｅ〔Ｅ１〕→ｎｂ＊Ｅ〔Ｅ１〕→ｎｂ'，により、Ｅ〔Ｅ１〕→ｎａ'（ｉ）個のＥ〔Ｅ１〕→ＡをＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｊ）個のＥ〔Ｅ１〕→ＢをＭ〔１〕→Ｂに反映させると共に、Ｍ〔１〕→ｎａとＭ〔１〕→ｎｂを更新する。又、ステップＳ２４６は、Ｍ〔１〕→Ａ→coordinateをＭ〔１〕→Ｂ→vectorで更新すると共に、削除ビットDeleteが立てられている以外のアイテムＭ〔１〕→ｎａまでの原子ＡとアイテムＭ〔１〕→ｎｂまでの結合軸Ｂを画面１０２ａ上に表示して、Undo操作は終了する。【００９７】
図４７は、図４６に示す如きUndo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図４７に示すUndo操作後の状態では、Undo操作を行うことはできないが、Redo操作を行うことはできる。【００９８】
図４８は追加イベントのRedo操作を説明するフローチャートである。Redo操作が開始されると、ステップＳ２５１はユーザの入力部からの設定により、Ｄ→eventFlag=Redoにより、補助データのイベントフラグeventFlagをRedoに設定する。ステップＳ２５２は、Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１， Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ−１により、Redo操作後のイベント番号Ｅ１を決定し、Ｍ〔１〕→ｎｕを決定する。ステップＳ２５３は、Ｅ〔Ｅ１〕→eventFlag=Addであるか否かを判定し、判定結果がＮＯであるとステップＳ２５４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ２５３の判定結果がＹＥＳであると、処理はステップＳ２５５へ進む。【００９９】
ステップＳ２５５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→Ａ〔１〜ｉ〕→ａ〕＝Ｅ〔Ｅ１〕→Ａ'〔１〜ｉ〕， Ｍ〔１〕→Ｂ〔Ｅ〔Ｅ１〕→Ｂ〔１〜ｊ〕→ｂ〕＝Ｅ〔Ｅ１〕→Ｂ'〔１〜ｊ〕，Ｍ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ＋Ｅ〔Ｅ１〕→ｎａ＊Ｅ〔Ｅ１〕→ｎａ'， Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋Ｅ〔Ｅ１〕→ｎｂ＊Ｅ〔Ｅ１〕→ｎｂ'，により、Ｅ〔Ｅ１〕→ｎａ'（ｉ）個のＥ〔Ｅ１〕→Ａ'をＭ〔１〕→Ａに反映させ、Ｅ〔Ｅ１〕→ｎｂ'（ｊ）個のＥ〔Ｅ１〕→Ｂ'をＭ〔１〕→Ｂに反映させると共に、Ｍ〔１〕→ｎａとＭ〔１〕→ｎｂを更新する。又、ステップＳ２５６は、Ｍ〔１〕→Ａ→coordinateをＭ〔１〕→Ｂ→vectorで更新すると共に、削除ビットDeleteが立てられている以外のアイテムＭ〔１〕→ｎａまでの原子ＡとアイテムＭ〔１〕→ｎｂまでの結合軸Ｂを画面１０２ａ上に表示して、Redo操作は終了する。【０１００】
図４９は、図４８に示す如きRedo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図４９において、サブウィンドウは図４５の場合と同様である。図４９に示すRedo操作後の状態では、Undo操作を行うことができるが、Redo操作を行うことはできない。【０１０１】
４．結合軸付加（NewBond）イベント操作とUndo操作及びRedo操作との関係：
図１３に示す処理により構築された図１に示す如きデータ構造に対して、ユーザが２個の原子アイテムをマウス１０４のクリック等により選択すると、選択された原子アイテムのイベントフラグeventFlagにセレクトビットSelectを立てる（即ち、セットする）。この処理は、Ｍ→Ａ→eventFlag=Selectで表される。ここで、補助データ構造ＤのイベントフラグeventFlagに結合軸付加ビットNewBondを立てると、図２の例の場合、図５０に示すように結合軸付加イベントが実行される。図５０は、結合軸付加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示しており、結合軸付加イベント前の状態、ユーザ入力、結合軸付加イベント操作及び結合軸付加イベント後の状態を示す。尚、補助データ構造ＤのイベントフラグeventFlagは、予め立てられていても良い。【０１０２】
先ず、Ｍ→ｎｅ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により現在のイベント総数を更新し、Ｍ→ｎｕ＝０によりUndo操作数を初期化する。イベント総数を更新したら、Ｅ〔ｎ>＝Ｍ→ｎｅ〕＝Nullによりそれ以降のイベントデータを初期化し、Ｅ〔Ｍ→ｎｅ〕→eventFlag=NewBond， ...， etc.により現在のイベントに結合軸付加イベント用データを代入する。結合軸付加イベントの場合、イベントデータの原子数データと結合軸データに原子数と結合軸の代わりとして２つの原子番号を登録する。イベントデータへの代入が済んだ後は、分子データの結合軸数に１を加えて更新し、最大の結合軸番号に該当する結合軸データを分子データに追加する。この結合軸データに関与する原子情報は、セレクトビットSelectが立っている原子情報に設定し、長さとベクトルについてもセレクトビットSelectが立っている２原子間距離と距離ベクトルに設定する。又、セレクトビットSelectが立っている原子データには、新規結合軸情報を追加する。【０１０３】
結合軸付加イベント操作は、上記の如きデータ更新後に、結合軸が付加された分子構造をメインウィンドウ上に再表示することにより完了する。【０１０４】
図５０に示す結合軸付加イベントに関連するUndo操作は、図５１に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにUndoビットが立つと、Ｍ→ｎｕ＝Ｍ→ｎｕ＋１により先ずUndo操作数が更新される。そして、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１によりイベント総数とUndo操作数によって該当するイベント番号を設定し、該当するイベントデータに含まれる原子番号情報に該当する原子データについて、結合軸情報を更新する。具体的には、結合軸数から１を引き、含有結合軸番号から分子データの結合軸数に相当する番号を削除する。最後に、現在の分子データの結合軸数から１を引く。Undo操作は、最後にメインウィンドウ上の分子構造に、分子データの原子数と結合軸数に合致するアイテムのみを再表示することにより完了する。【０１０５】
図５１に示すUndo操作に関連するRedo操作は、図５２に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにRedoビットが立つと、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により先ずイベント総数とUndo操作数によって該当するイベント番号が設定される。そして、Ｍ→ｎｕ＝Ｍ→ｎｕ−１によりUndo操作数を更新し、現在の分子データの結合軸数に１を加える。又、該当するイベントデータに含まれる原子番号情報に該当する原子データについて、結合軸情報を更新する。具体的には、結合軸数に１を加え、分子データの結合軸数に相当する番号を追加する。Redo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【０１０６】
図５３及び図５４は、結合軸付加イベントの処理を説明するフローチャートである。【０１０７】
先ず、図５３において、ステップＳ３２１はユーザの入力部からの設定により、Ｄ→eventFlag=NewBond、即ち、補助データ構造ＤのイベントフラグeventFlagに結合軸付加ビットNewBondを立てる。ステップＳ３２２はユーザの入力部からの選択により、Ｍ〔１〕→Ａ１及びＭ〔１〕→Ａ２の対応アイテムを選択する。この例では、Ｍ〔１〕→Ａ〔３〕及びＭ〔１〕→Ａ〔２〕により原子アイテムＡ〔３〕及びＡ〔２〕を選択する。続いて、ステップＳ３２３はＭ〔１〕→Ａ１→ｂ〔ｉ：１<＝ｉ<＝Ｍ〔１〕→Ａ１→ｎｂ〕、且つ、Ｍ〔１〕→Ａ２→ｂ〔ｊ：１<＝ｊ<＝Ｍ〔１〕→Ａ２→ｎｂ〕であるか否かを判定し、判定結果がＹＥＳであると処理は終了する。他方、ステップＳ３２３の判定結果がＮＯであると、処理はステップＳ３２４へ進む。ステップＳ３２４は、Ｍ〔１〕→Ａ１→eventFlag=Select及びＭ〔１〕→Ａ２→eventFlag=Selectにより条件に合うＭ〔１〕→Ａ１，Ａ２のイベントフラグeventFlagにセレクトビットSelectを立てる。ステップＳ３２５はＭ〔１〕→ｎｅ＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１，Ｍ〔１〕→ｎｕ＝０，Ｅ〔ｎ〕＝Null（Ｍ〔１〕→ｎｅ<＝ｎ<＝MaxEvent）により、Ｍ〔１〕→ｎｅを決定してＥ〔ｉ：ｉ>＝Ｍ〔１〕→ｎｅ〕の記憶部を解放する。つまり、Ｍ〔１〕のイベント数ｎｅを決定し、Ｍ〔１〕→ｎｅ番目以降のイベントデータについては記憶部を解放する。ステップＳ３２６は、Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｂ〔１〜Ｍ〔１〕→ＡＢ１〜Ｂｍ→ｎｂ〕＝Ｍ〔１〕→ＢＡｊ（１<＝ｊ<＝ｎ）→ｂであるか否かを判定し、判定結果がＹＥＳであると処理はステップＳ３２７へ進む。ステップＳ３２７は、Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag＝Ｄ→eventFlag， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ'＝Ｍ〔１〕→Ａ１→ａ， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎｂ'＝Ｍ〔１〕→Ａ２→ａにより、セレクトビットSelectが立てられている原子識別番号を選択原子数と結合軸数と仮定し、Ｄ→eventFlagと共にＥ〔Ｍ〔１〕→ｎｅ〕に格納する。ステップＳ３２８は、Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋１，Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ｂ＝Ｍ〔１〕→ｎｂ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ａ〔１〕＝Ｍ〔１〕→Ａ１→ａ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ａ〔２〕＝Ｍ〔１〕→Ａ２→ａ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→eventFlag=Null， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→vector＝Ｍ〔１〕→Ａ１→coordinate−Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→length=sqrt（Ｂ２），（Ｂ＝Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→vector）により、セレクトビットSelectが立てられている原子情報を用いて結合軸を１個追加する。ステップＳ３２９は、Ｍ〔１〕→Ａ１→ｎｂ＝Ｍ〔１〕→Ａ１→ｎｂ＋１， Ｍ〔１〕→Ａ２→ｎｂ＝Ｍ〔１〕→Ａ２→ｎｂ＋１， Ｍ〔１〕→Ａ１→ｂ〔Ｍ〔１〕→Ａ１→ｎｂ〕＝Ｍ〔１〕→ｎｂ， Ｍ〔１〕→Ａ２→ｂ〔Ｍ〔１〕→Ａ２→ｎｂ〕＝Ｍ〔１〕→ｎｂにより、結合軸情報からセレクトビットSelectが立てられている原子情報を更新する。ステップＳ３２９の後、処理は図５４に示すステップＳ３３０へ進む。【０１０８】
図５４において、ステップＳ３３０はＭ〔１〕→Ａ１→eventFlag=Null， Ｍ〔１〕→Ａ２→eventFlag=Nullにより、セレクトビットSelectを下げる。最後に、ステップＳ３３１は、分子データＭ〔１〕について、削除ビットDeleteが立てられている以外のＭ〔１〕→ＡとＭ〔１〕→Ｂのアイテムを画面１０２ａ上に表示することで一連の操作が終了する。【０１０９】
図５５は結合軸付加イベントによる構造変化例を蟻酸（ＣＯＯＣＨ）の場合について示す図である。図５５において、左側は分子データＭ〔１〕の結合軸付加前と結合軸付加後の画面１０２ａ上の分子構造の表示状態を示し、右側は分子データＭ〔１〕の結合軸付加前と結合軸付加後の構造データの変化を示す。図５５では、結合軸Ｂ〔５〕が付加される様子が示されている。【０１１０】
図５６は結合軸付加イベント前の画面１０２ａ上の分子構造の表示状態を示す図であり、図５７は結合軸付加イベント後の画面１０２ａ上の分子構造の表示状態を示す図である。図５６に示す結合軸付加イベント前の状態では、Undo操作及びRedo操作は行えないが、図５７に示す結合軸付加イベント後の状態では、Undo操作を行うことができRedo操作を行うことはできない。【０１１１】
図５８は結合軸付加イベントのUndo操作を説明するフローチャートである。Undo操作が開始されると、ステップＳ３４１はユーザの入力部からの設定により、Ｄ→eventFlag=Undoにより、補助データのイベントフラグeventFlagをUndoに設定する。ステップＳ３４２は、Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ＋１，Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１により、Ｍ〔１〕→ｎｕを決定してUndo操作後のイベント番号Ｅ１を決定する。ステップＳ３４３は、Ｅ〔Ｅ１〕→eventFlag=NewBondであるか否かを判定し、判定結果がＮＯであるとステップＳ３４４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ３４３の判定結果がＹＥＳであると、処理はステップＳ３４５へ進む。【０１１２】
ステップＳ３４５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕→ｎｂ−１， Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕→ｎｂ−１，Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ−１により、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕とＭ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕からＭ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕の情報を除いて結合軸数を減らす。又、ステップＳ３４６は、１〜Ｍ〔１〕→ｎａ番までの原子と１〜Ｍ〔１〕→ｎｂ番までの結合軸について、削除ビットDeleteが立てられている以外のアイテムの原子Ａと結合軸Ｂを画面１０２ａ上に表示して、Undo操作は終了する。【０１１３】
図５９は、図５８に示す如きUndo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図５９に示すUndo操作後の状態では、Undo操作を行うことはできないが、Redo操作を行うことはできる。【０１１４】
図６０は結合軸付加イベントのRedo操作を説明するフローチャートである。Redo操作が開始されると、ステップＳ３５１はユーザの入力部からの設定により、Ｄ→eventFlag=Redoにより、補助データのイベントフラグeventFlagをRedoに設定する。ステップＳ３５２は、Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１， Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ−１により、Redo操作後のイベント番号Ｅ１を決定し、Ｍ〔１〕→ｎｕを決定する。ステップＳ３５３は、Ｅ〔Ｅ１〕→eventFlag=NewBondであるか否かを判定し、判定結果がＮＯであるとステップＳ３５４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ３５３の判定結果がＹＥＳであると、処理はステップＳ３５５へ進む。【０１１５】
ステップＳ３５５は、Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋１，Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕→ｎｂ＋１， Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕→ｎｂ＋１により、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕とＭ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕にＭ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕の情報を追加して結合軸数を増やす。又、ステップＳ３５６は、１〜Ｍ〔１〕→ｎａ番までの原子と１〜Ｍ〔１〕→ｎｂ番までの結合軸について、削除ビットDeleteが立てられている以外のアイテムの原子Ａと結合軸Ｂを画面１０２ａ上に表示して、Redo操作は終了する。【０１１６】
図６１は、図６０に示す如きRedo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図６１に示すRedo操作後の状態では、Undo操作を行うことができるが、Redo操作を行うことはできない。【０１１７】
５．原子付加（NewAtom）イベント操作とUndo操作及びRedo操作との関係：
図１３に示す処理により構築された図１に示す如きデータ構造に対して、ユーザが２個の原子アイテムをマウス１０４のクリック等により選択すると、選択された原子アイテムのイベントフラグeventFlagにセレクトビットSelectを立てる（即ち、セットする）。この処理は、Ｍ→Ａ→eventFlag=Selectで表される。ここで、補助データ構造ＤのイベントフラグeventFlagに原子付加ビットNewAtomを立てると、図２の例の場合、図６２に示すように原子付加イベントが実行される。図６２は、原子付加イベントにおけるデータ変化例を蟻酸（ＨＣＯＯＨ）の場合について示しており、原子付加イベント前の状態、ユーザ入力、原子付加イベント操作及び原子付加イベント後の状態を示す。尚、補助データ構造ＤのイベントフラグeventFlagは、予め立てられていても良い。図６２はＨＣＯＯＨが原子付加イベントによりＣＨ３ＣＯＯＨに変化する場合を示す。【０１１８】
先ず、Ｍ→ｎｅ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により現在のイベント総数を更新し、Ｍ→ｎｕ＝０によりUndo操作数を初期化する。イベント総数を更新したら、Ｅ〔ｎ>＝Ｍ→ｎｅ〕＝Nullによりそれ以降のイベントデータを初期化し、Ｅ〔Ｍ→ｎｅ〕→eventFlag=NewAtom， ...， etc.により現在のイベントに原子付加イベント用データを代入する。原子付加イベントの場合、イベントデータの原子数にセレクトビットSelectが立っている原子の原子番号情報を登録する。イベントデータへの代入が済んだ後は、分子データの原子数と結合軸数に１を加えて更新し、最大の原子番号と結合軸番号に該当する原子データと結合軸データを分子データに追加する。新規の結合軸データに関する距離情報は、例えば追加される原子データを水素原子のみに限定することにより、定数を指定することが可能である。又、ベクトル情報については、他の結合軸と重ならないような工夫を導入しても良い。追加される原子データについは、追加後に置換イベント操作を行うと任意の原子データに変更することが可能である。【０１１９】
原子付加イベント操作は、上記の如きデータ更新後に、結合軸が付加された分子構造をメインウィンドウ上に再表示することにより完了する。【０１２０】
図６２に示す原子付加イベントに関連するUndo操作は、図６３に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにUndoビットが立つと、Ｍ→ｎｕ＝Ｍ→ｎｕ＋１により先ずUndo操作数が更新される。そして、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１によりイベント総数とUndo操作数によって該当するイベント番号を設定し、該当するイベントデータに含まれる原子番号情報に該当する原子データについて、結合軸情報を更新する。具体的には、結合軸数から１を引く。最後に、現在の分子データの原子数と結合軸数から１を引く。Undo操作は、最後にメインウィンドウ上の分子構造に、分子データの原子数と結合軸数に合致するアイテムのみを再表示することにより完了する。【０１２１】
図６３に示すUndo操作に関連するRedo操作は、図６４に示すように構築される。つまり、補助データ構造ＤのイベントフラグeventFlagにRedoビットが立つと、ｎ＝Ｍ→ｎｅ−Ｍ→ｎｕ＋１により先ずイベント総数とUndo操作数によって該当するイベント番号が設定される。そして、Ｍ→ｎｕ＝Ｍ→ｎｕ−１によりUndo操作数を更新し、現在の分子データの原子数と結合軸数に１を加える。又、該当するイベントデータに含まれる原子番号情報に該当する原子データについて、結合軸情報を更新する。具体的には、結合軸数に１を加える。Redo操作は、最後にメインウィンドウ上の分子構造を再表示することにより完了する。【０１２２】
図６５は、原子付加イベントの処理を説明するフローチャートである。【０１２３】
先ず、図６５において、ステップＳ４２１はユーザの入力部からの設定により、Ｄ→eventFlag=NewAtom、即ち、補助データ構造ＤのイベントフラグeventFlagに原子付加ビットNewAtomを立てる。ステップＳ４２２はユーザの入力部からの選択により、Ｍ〔１〕→Ａ０eventFlag=Selectによって、Ｍ〔１〕→Ａ０の対応アイテムを選択する。この例では、Ｍ〔１〕→Ａ〔３〕により原子アイテムＡ〔３〕を選択する。続いて、ステップＳ４２３は、Ｍ〔１〕→ｎｅ＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１，Ｍ〔１〕→ｎｕ＝０，Ｅ〔ｎ〕＝Null（Ｍ〔１〕→ｎｅ<＝ｎ<＝MaxEvent）により、Ｍ〔１〕→ｎｅを決定してＥ〔ｉ：ｉ>＝Ｍ〔１〕→ｎｅ〕の記憶部を解放する。つまり、Ｍ〔１〕のイベント数ｎｅを決定し、Ｍ〔１〕→ｎｅ番目以降のイベントデータについては記憶部を解放する。ステップＳ４２４は、Ｅ〔Ｍ〔１〕→ｎｅ〕→eventFlag＝Ｄ→eventFlag， Ｅ〔Ｍ〔１〕→ｎｅ〕→ｎａ'＝Ｍ〔１〕→Ａ０→ａにより、セレクトビットSelectが立てられている原子識別番号とＤ→eventFlagの情報をＥ〔Ｍ〔１〕→ｎｅ〕に格納する。ステップＳ４２５は、Ｍ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ＋１，Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕→ａ＝Ｍ〔１〕→ｎａ， Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕→eventFlag=Null， Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕→coordinate＝｛x，y，z｝により、新しい原子の位置を決定して原子データを作成する。ステップＳ４２６は、Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋１，Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ｂ＝Ｍ〔１〕→ｎｂ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→eventFlag=Null， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ａ〔１〕＝Ｍ〔１〕→Ａ０→ａ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→ａ〔２〕＝Ｍ〔１〕→ｎａ， Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→vector＝Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕→coordinate−Ｍ〔１〕→Ａ０→coordinate，Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→length=sqrt（（Ｍ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕→vector）＊＊２）により、Ｍ〔１〕→Ａ０とＭ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕の情報を用いて夫々の原子を結ぶ結合軸データを作成する。ステップＳ４２７は、Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕＋１， Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕→ｂｊ＝Ｍ〔１〕→ｎｂにより、Ｍ〔１〕→Ａ〔Ｍ〔１〕→ｎａ〕に結合軸情報を追加する。ステップＳ４２８は、Ｍ〔１〕→Ａ１→eventFlag=Null， Ｍ〔１〕→Ａ２→eventFlag=Nullにより、セレクトビットSelectを下げる。最後に、ステップＳ４２９は、分子データＭ〔１〕について、削除ビットDeleteが立てられている以外のＭ〔１〕→Ａ〔１〜Ｍ〔１〕→ｎａ〕とＭ〔１〕→Ｂ〔１〜Ｍ〔１〕→ｎｂ〕のアイテムを画面１０２ａ上に表示することで一連の操作が終了する。【０１２４】
図６６は原子付加イベントによる構造変化例を蟻酸（ＣＯＯＣＨ）の場合について示す図である。図６６において、左側は分子データＭ〔１〕の原子付加前と原子付加後の画面１０２ａ上の分子構造の表示状態を示し、右側は分子データＭ〔１〕の原子付加前と原子付加後の構造データの変化を示す。図６６では、原子Ａ〔６〕が付加される様子が示されている。【０１２５】
図６７は原子付加イベント前の画面１０２ａ上の分子構造の表示状態を示す図であり、図６８は原子付加イベント後の画面１０２ａ上の分子構造の表示状態を示す図である。図６７に示す原子付加イベント前の状態では、Undo操作及びRedo操作は行えないが、図６８に示す原子付加イベント後の状態では、Undo操作を行うことができRedo操作を行うことはできない。【０１２６】
図６９は原子付加イベントのUndo操作を説明するフローチャートである。Undo操作が開始されると、ステップＳ４４１はユーザの入力部からの設定により、Ｄ→eventFlag=Undoにより、補助データのイベントフラグeventFlagをUndoに設定する。ステップＳ４４２は、Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ＋１，Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１により、Ｍ〔１〕→ｎｕを決定してUndo操作後のイベント番号Ｅ１を決定する。ステップＳ４４３は、Ｅ〔Ｅ１〕→eventFlag=NewAtomであるか否かを判定し、判定結果がＮＯであるとステップＳ４４４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ４４３の判定結果がＹＥＳであると、処理はステップＳ４４５へ進む。【０１２７】
ステップＳ４４５は、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕→ｎｂ−１， Ｍ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ−１， Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ−１により、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕とＭ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕からＭ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕の情報を除いて結合軸数を減らす。又、ステップＳ４４６は、１〜Ｍ〔１〕→ｎａ番までの原子と１〜Ｍ〔１〕→ｎｂ番までの結合軸について、削除ビットDeleteが立てられている以外のアイテムの原子Ａと結合軸Ｂを画面１０２ａ上に表示して、Undo操作は終了する。【０１２８】
図７０は、図６９に示す如きUndo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図７０に示すUndo操作後の状態では、Undo操作を行うことはできないが、Redo操作を行うことはできる。【０１２９】
図７１は原子付加イベントのRedo操作を説明するフローチャートである。Redo操作が開始されると、ステップＳ４５１はユーザの入力部からの設定により、Ｄ→eventFlag=Redoにより、補助データのイベントフラグeventFlagをRedoに設定する。ステップＳ４５２は、Ｅ１＝Ｍ〔１〕→ｎｅ−Ｍ〔１〕→ｎｕ＋１， Ｍ〔１〕→ｎｕ＝Ｍ〔１〕→ｎｕ−１により、Redo操作後のイベント番号Ｅ１を決定し、Ｍ〔１〕→ｎｕを決定する。ステップＳ４５３は、Ｅ〔Ｅ１〕→eventFlag=NewAtomであるか否かを判定し、判定結果がＮＯであるとステップＳ４５４は本発明の要旨とは直接関係のない別処理へ進む。他方、ステップＳ４５３の判定結果がＹＥＳであると、処理はステップＳ４５５へ進む。【０１３０】
ステップＳ４５５は、Ｍ〔１〕→ｎａ＝Ｍ〔１〕→ｎａ＋１，Ｍ〔１〕→ｎｂ＝Ｍ〔１〕→ｎｂ＋１， Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕→ｎｂ＋１により、Ｍ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎａ'〕とＭ〔１〕→Ａ〔Ｅ〔Ｅ１〕→ｎｂ'〕にＭ〔１〕→Ｂ〔Ｍ〔１〕→ｎｂ〕の情報を追加して結合軸数を増やす。又、ステップＳ４５６は、１〜Ｍ〔１〕→ｎａ番までの原子と１〜Ｍ〔１〕→ｎｂ番までの結合軸について、削除ビットDeleteが立てられている以外のアイテムの原子Ａと結合軸Ｂを画面１０２ａ上に表示して、Redo操作は終了する。【０１３１】
図７２は、図７１に示す如きRedo操作後の画面１０２ａ上の分子構造の表示状態を示す図である。図７２に示すRedo操作後の状態では、Undo操作を行うことはできるが、Redo操作を行うことはできない。【０１３２】
図７３は、本実施例と従来例とのデータ構成の比較をする図である。同図からも明らかなように、本実施例では図１に示す如き本発明のデータ構造、即ち、原子データ構造Ａ、結合軸データ構造Ｂ、分子データ構造Ｍ、補助データ構造Ｄ及びイベントデータ構造Ｅを用いる点で、従来手法と大きく異なる。【０１３３】
図７４は、本実施例と従来例との効果の比較をする図である。ここでは便宜上、初期原子数をｎ、初期結合軸数をｎｂ、原子球用の記憶部（ＧＵＩ用メモリ）の容量をｘバイト、結合軸用の記憶部（ＧＵＩ用メモリ）の容量をｙバイトとし、本実施例及び従来例は夫々図７３に示すデータ構造を用いるものとした。又、原子アイテムや結合軸アイテムに必要となる記憶部（ＧＵＩ用メモリ）の容量は無視し、原子数を1000、結合軸数を1000、Undo操作とRedo操作が可能な原子付加イベントを1000回繰り返すものと仮定した。更に、原子球及び結合軸用の記憶部の容量ｘ，ｙをゼロ、その他に必要となる定数ａ，ｂ，ｃについてもゼロとして、Undo操作とRedo操作が可能な原子追加イベントに必要な記憶容量を算出した。この結果、本発明のデータ構造を用いることにより必要とされる記憶部の容量が従来手法の場合の約１／７７６のサイズで良いことが確認された。つまり、従来手法に比べて極めて小さい記憶容量を用いてUndo操作とRedo操作を行えることが確認された。
【産業上の利用可能性】
【０１３４】
本発明は、ドラッグデザイン等の先端研究における分子軌道計算、分子動力学計算等の理論化学計算に適用可能である。【０１３５】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図１】
2008096424.tif 000003
【図２】
2008096424.tif 000004
【図３】
2008096424.tif 000005
【図４】
2008096424.tif 000006
【図５】
2008096424.tif 000007
【図６】
2008096424.tif 000008
【図７】
2008096424.tif 000009
【図８】
2008096424.tif 000010
【図９】
2008096424.tif 000011
【図１０】
2008096424.tif 000012
【図１１】
2008096424.tif 000013
【図１２】
2008096424.tif 000014
【図１３】
2008096424.tif 000015
【図１４】
2008096424.tif 000016
【図１５】
2008096424.tif 000017
【図１６】
2008096424.tif 000018
【図１７】
2008096424.tif 000019
【図１８】
2008096424.tif 000020
【図１９】
2008096424.tif 000021
【図２０】
2008096424.tif 000022
【図２１】
2008096424.tif 000023
【図２２】
2008096424.tif 000024
【図２３】
2008096424.tif 000025
【図２４】
2008096424.tif 000026
【図２５】
2008096424.tif 000027
【図２６】
2008096424.tif 000028
【図２７】
2008096424.tif 000029
【図２８】
2008096424.tif 000030
【図２９】
2008096424.tif 000031
【図３０】
2008096424.tif 000032
【図３１】
2008096424.tif 000033
【図３２】
2008096424.tif 000034
【図３３】
2008096424.tif 000035
【図３４】
2008096424.tif 000036
【図３５】
2008096424.tif 000037
【図３６】
2008096424.tif 000038
【図３７】
2008096424.tif 000039
【図３８】
2008096424.tif 000040
【図３９】
2008096424.tif 000041
【図４０】
2008096424.tif 000042
【図４１】
2008096424.tif 000043
【図４２】
2008096424.tif 000044
【図４３】
2008096424.tif 000045
【図４４】
2008096424.tif 000046
【図４５】
2008096424.tif 000047
【図４６】
2008096424.tif 000048
【図４７】
2008096424.tif 000049
【図４８】
2008096424.tif 000050
【図４９】
2008096424.tif 000051
【図５０】
2008096424.tif 000052
【図５１】
2008096424.tif 000053
【図５２】
2008096424.tif 000054
【図５３】
2008096424.tif 000055
【図５４】
2008096424.tif 000056
【図５５】
2008096424.tif 000057
【図５６】
2008096424.tif 000058
【図５７】
2008096424.tif 000059
【図５８】
2008096424.tif 000060
【図５９】
2008096424.tif 000061
【図６０】
2008096424.tif 000062
【図６１】
2008096424.tif 000063
【図６２】
2008096424.tif 000064
【図６３】
2008096424.tif 000065
【図６４】
2008096424.tif 000066
【図６５】
2008096424.tif 000067
【図６６】
2008096424.tif 000068
【図６７】
2008096424.tif 000069
【図６８】
2008096424.tif 000070
【図６９】
2008096424.tif 000071
【図７０】
2008096424.tif 000072
【図７１】
2008096424.tif 000073
【図７２】
2008096424.tif 000074
【図７３】
2008096424.tif 000075
【図７４】
2008096424.tif 000076
【手続補正書】
【提出日】平成21年7月31日(2009.7.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築して記憶部に格納するデータ構築工程と、
ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示する表示工程と、
入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定する決定工程と、
該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該ディスプレイの画面上に表示する変更工程と、
該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行うやり直し又は実行工程とを含み、
該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とする、コンピュータによる分子設計方法。
【請求項２】
該原子データ構造Ａにおいてはａを内部座標における原子順序番号からなる識別番号、Atomを元素記号からなる原子番号、ｎｂを元分子に任意の新規分子構造を追加することで変動する数値からなる結合軸数、ｂを結合軸数ｎｂに含まれる各結合軸の識別番号の集合データからなる結合軸の識別番号、eventFlagを削除操作、追加操作、置換操作、結合軸付加操作、原子付加操作を少なくとも含む分子構造構築ＧＵＩが有するイベント操作に対し、現在のイベント操作の種類を示すイベントフラグ、coordinateを各原子が存在する３次元空間内の位置を示すデータからなるｘｙｚ座標と定義すると、該原子データ構造ＡはＡ＝｛ａ，｛Atom｝，ｎｂ，｛ｂ〔ｎｂ〕｝，eventFlag，｛coordinate｝｝で表され、
該結合軸データ構造Ｂにおいてはｂを全ての結合軸を１対１に対応させるために必要な番号からなる識別番号、ａを結合軸の両末端に存在する原子の識別番号の集合データからなりる末端原子の識別番号、vectorを結合軸を３次元ベクトルと１対１に対応させたベクトル情報、lengthをベクトル情報vectorを単位ベクトルで表現する場合の結合軸長と定義すると、該結合軸データ構造Ｂは、Ｂ＝｛ｂ，｛ａ〔２〕｝，eventFlag，｛vector｝，length｝で表され、
該分子データ構造Ｍにおいてはｎａを原子データ数、ｎｂを結合軸データ数、ｎｅを総イベント操作数、ｎｕをやり直しイベント操作数、Ａを分子内の原子データ、Ｂを分子内の結合軸データと定義すると、該分子データ構造Ｍは、Ｍ＝｛ｎａ，ｎｂ，ｎｅ，ｎｕ，｛Ａ〔ｎａ〕｝，｛Ｂ〔ｎｂ〕｝｝で表され、
該補助データ構造ＤにおいてはmSelectを置換操作における置換後の原子設定情報や追加操作における追加部分構造に相当する分子設定情報、ａを追加操作で元の分子構造と結合する位置を識別するための追加原子の識別情報と定義すると、該補助データ構造Ｄは、Ｄ＝｛eventFlag，｛Atom｝，｛mSelect｝，ａ｝で表され、
該イベントデータ構造Ｅにおいてはｎａ’をイベント操作において操作位置を決定するために指定する原子の位置を示す選択原子数、ｎｂ’をイベント操作において操作位置を決定するために指定する結合軸の位置を示すを選択結合軸数、ｎａを追加操作に関する部分構造中の原子数を示す追加原子データ数、ｎｂを追加操作に関する部分構造中の結合軸数を示す追加結合軸データ数、Ａをイベント操作前の原子データ構造を示す処理前原子データ、Ｂをイベント操作前の結合軸データ構造を示す処理前結合軸データ、Ａ’をイベント操作後の原子データ構造を示す処理後原子データ、Ｂ’をイベント操作後の結合軸データ構造を示す処理後結合軸データと定義すると、該イベントデータ構造Ｅは、Ｅ＝｛eventFlag，ｎａ’，ｎｂ’，ｎａ，ｎｂ，｛Ａ〔ｎａ’〕｝，｛Ｂ〔ｎｂ’〕｝，｛Ａ’｝，｛Ｂ’｝｝で表されることを特徴とする、請求項１記載の分子設計方法。
【請求項３】
該変更工程は、分子構造変更操作が３次元分子構造から部分構造を削除する削除操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子或いは原子と結合軸、又は、スペースフィル形式の原子に基づいて、削除対象となる該部分構造を決定して該部分構造を削除した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項４】
該変更工程は、分子構造変更操作が３次元分子構造から部分構造を置換する置換操作の場合、該入力部により指定されたボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、置換対象となる部分構造を決定して該部分構造を置換した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項５】
該変更工程は、分子構造変更操作が３次元分子構造のある原子の位置にその原子と交換に部分構造を追加する追加操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、対象の部分構造を追加する位置を決定して元の分子構造に該対象の部分構造を追加した新規分子構造を該ディスプレイの表示画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項６】
該変更工程は、分子構造変更操作が３次元分子構造に結合軸を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式の２つの原子に基づいて、結合軸を付加する対象となる２つの原子の位置を決定して元の分子構造に結合軸を付加した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項７】
該変更工程は、分子構造変更操作が分子構造に原子を付加する付加操作の場合、該入力部により指定されたボールアンドスティック形式原子、又は、スペースフィル形式の原子に基づいて、新規原子を付加する対象となる原子の位置を決定して元の分子構造に原子を付加した新規分子構造を該ディスプレイの画面上に表示することを特徴とする、請求項１又は２記載の分子設計方法。
【請求項８】
入力部を有するコンピュータに分子設計支援機能を持たせるプログラムであって、
該コンピュータに、与えられた３次元分子構造のデータに対して、原子に関する原子データ構造Ａ、結合軸に関する結合軸データ構造Ｂ、分子に関する分子データ構造Ｍ、分子構造変更操作を含むイベント操作を補助するための補助データ構造Ｄ及びイベント情報データに関するイベントデータ構造Ｅからなるデータ構造を構築させて記憶部に格納させるデータ構築手順と、
該コンピュータに、ハーフベクタ形式又はボールアンドスティック形式又はスペースフィル形式で該３次元分子構造をディスプレイの画面上に表示させる表示手順と、
該コンピュータに、該入力部により指定された原子又は結合軸に基づいて、該データ構造を用いて変更対象となる部分構造を決定させる決定手順と、
該コンピュータに、該変更対象となる部分構造に該入力部により指定された変更操作を加えた該３次元分子構造を該表示手順により該ディスプレイの画面上に表示させる変更手順と、
該コンピュータに、該入力部により指定された該変更操作のやり直し又は再実行を該データ構造を用いて行わせるやり直し又は実行手順とを含み、
該データ構造では、該原子データ構造Ａと該結合軸データ構造Ｂとが、夫々全ての原子と結合軸に対して１対１対応のデータを含み、該分子データ構造Ｍはやり直し操作数を含み、各データ構造Ａ，Ｂ，Ｍ，Ｄ，Ｅはイベントのフラグを含むことを特徴とする、プログラム。
【請求項９】
該原子データ構造Ａにおいてはａを内部座標における原子順序番号からなる識別番号、Atomを元素記号からなる原子番号、ｎｂを元分子に任意の新規分子構造を追加することで変動する数値からなる結合軸数、ｂを結合軸数ｎｂに含まれる各結合軸の識別番号の集合データからなる結合軸の識別番号、eventFlagを削除操作、追加操作、置換操作、結合軸付加操作、原子付加操作を少なくとも含む分子構造構築ＧＵＩが有するイベント操作に対し、現在のイベント操作の種類を示すイベントフラグ、coordinateを各原子が存在する３次元空間内の位置を示すデータからなるｘｙｚ座標と定義すると、該原子データ構造ＡはＡ＝｛ａ，｛Atom｝，ｎｂ，｛ｂ〔ｎｂ〕｝，eventFlag，｛coordinate｝｝で表され、
該結合軸データ構造Ｂにおいてはｂを全ての結合軸を１対１に対応させるために必要な番号からなる識別番号、ａを結合軸の両末端に存在する原子の識別番号の集合データからなりる末端原子の識別番号、vectorを結合軸を３次元ベクトルと１対１に対応させたベクトル情報、lengthをベクトル情報vectorを単位ベクトルで表現する場合の結合軸長と定義すると、該結合軸データ構造Ｂは、Ｂ＝｛ｂ，｛ａ〔２〕｝，eventFlag，｛vector｝，length｝で表され、
該分子データ構造Ｍにおいてはｎａを原子データ数、ｎｂを結合軸データ数、ｎｅを総イベント操作数、ｎｕをやり直しイベント操作数、Ａを分子内の原子データ、Ｂを分子内の結合軸データと定義すると、該分子データ構造Ｍは、Ｍ＝｛ｎａ，ｎｂ，ｎｅ，ｎｕ，｛Ａ〔ｎａ〕｝，｛Ｂ〔ｎｂ〕｝｝で表され、
該補助データ構造ＤにおいてはmSelectを置換操作における置換後の原子設定情報や追加操作における追加部分構造に相当する分子設定情報、ａを追加操作で元の分子構造と結合する位置を識別するための追加原子の識別情報と定義すると、該補助データ構造Ｄは、Ｄ＝｛eventFlag，｛Atom｝，｛mSelect｝，ａ｝で表され、
該イベントデータ構造Ｅにおいてはｎａ’をイベント操作において操作位置を決定するために指定する原子の位置を示す選択原子数、イベント操作において操作位置を決定するために指定する結合軸の位置を示すを選択結合軸数、ｎａを追加操作に関する部分構造中の原子数を示す追加原子データ数、ｎｂを追加操作に関する部分構造中の結合軸数を示す追加結合軸データ数、Ａをイベント操作前の原子データ構造を示す処理前原子データ、Ｂをイベント操作前の結合軸データ構造を示す処理前結合軸データ、Ａ’をイベント操作後の原子データ構造を示す処理後原子データ、Ｂ’をイベント操作後の結合軸データ構造を示す処理後結合軸データと定義すると、該イベントデータ構造Ｅは、Ｅ＝｛eventFlag，ｎａ’，ｎｂ’，ｎａ，ｎｂ，｛Ａ〔ｎａ’〕｝，｛Ｂ〔ｎｂ’〕｝，｛Ａ’｝，｛Ｂ’｝｝で表されることを特徴とする、請求項８記載のプログラム。
【請求項１０】
該変更手順は、該コンピュータに、分子構造変更操作が３次元分子構造のある原子の位置にその原子と交換に部分構造を追加する追加操作の場合、該入力部により指定されたハーフベクタ形式の結合軸、又は、ボールアンドスティック形式の原子、又は、スペースフィル形式の原子に基づいて、対象の部分構造を追加する位置を決定させて元の分子構造に該対象の部分構造を追加した新規分子構造を該ディスプレイの表示画面上に表示させることを特徴とする、請求項８又は９記載のプログラム。
【請求項１１】
請求項８又は９記載のプログラムを格納したことを特徴とするコンピュータ読み取り可能な記憶媒体。
【国際調査報告】
2008096424.tif 000077
2008096424.tif 000078