(57)【要約】      （修正有）【課題】分子生物学の研究者が遺伝子配列を変更する場合に、配列自体の変更にあわせて自動的にアノテーションを更新し、利用者がスムーズに実験計画を立案することができる遺伝子配列の編集方法を提供する。【解決手段】各種指示を入力するとともに使用者が配列を編集するための入力部１０１と、配列情報を格納しているデータベース１０４と、全体を制御するためのデータ処理部１０３と、配列およびアノテーションを表示する表示部１０２とから構成され、データ処理部１０３は、データベース１０４内の情報を元に、配列の実体（文字列）と配列情報から抽出したアノテーション（特定の領域）をグラフィカルに表示部１０２に表示する表示制御を含む各種制御を行い、入力部１０１から、配列上の任意の位置の文字が編集（追加および削除、置換）されると、データ処理部１０３は、その入力に応じて処理を開始する。【選択図】図１
2009054039.tif 000002
【特許請求の範囲】
【請求項１】
遺伝子配列を編集する操作を受け付けた後、配列変更履歴バッファおよびアノテーション変更履歴バッファの内容を確定するタイミングを判断するためのフラグとして利用される変更中フラグを確認するステップと、
変更中フラグがＦＡＬＳＥ（Ｆ）の場合に、配列変更履歴バッファとアノテーション変更履歴バッファとにそれぞれ行を追加し、要素ＩＤを採番するステップと、
変更中フラグがＴＲＵＥ（Ｔ）の場合に、変更履歴バッファの変更は行わないで、入力装置における操作が、配列となる文字列を入力した操作であるか、それ以外の編集操作であるかを判定し、配列となる文字列を入力した操作である場合は、変更中フラグの値をＴＲＵＥに変更し、それ以外の編集操作である場合は、変更中フラグの値をＦＡＬＳＥに変更し、バッファインデックスが示す要素ＩＤに対応する変更バッファの要素に対して、変更の内容を更新し、変更中フラグの内容を確認し、ＦＡＬＳＥ（Ｆ）の場合、バッファインデックスが示す要素IDに対応する変更履歴バッファの要素の内容を確定し、バッファインデックスをインクリメントし、ＴＲＵＥ（Ｔ）の場合、変更バッファの内容を確定せずに変更内容にあわせて配列の実体データを更新し、変更内容にあわせてアノテーションの実体データを更新し、受付処理に戻るステップと、
を有することを特徴とする遺伝子配列の編集方法。
【請求項２】
前記入力装置からの入力を受け付けると、編集の種類を確認するステップであって、編集操作ではない場合は、前記変更中フラグの値をＦＡＬＳＥに変更し、前記バッファインデックスが示す要素ＩＤのひとつ少ない値を算出し、求めた要素ＩＤに対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素に記録してある情報を元に、配列データ管理部の配列の実体データおよびアノテーション管理部のアノテーションの実体データを更新し、前記バッファインデックスの値をデクリメントし、
編集操作であった場合は、前記変更中フラグの値をＴＲＵＥに変更し、前記バッファインデックスが示す要素ＩＤ以降に対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素の内容を削除するステップと
を有することを特徴とする請求項１に記載の遺伝子配列の編集方法。
【請求項３】
前記入力装置からの入力を受け付けると、操作をやり直すステップであって、
編集の種類を確認した結果、
編集操作ではない場合は、前記変更中フラグの値をＦＡＬＳＥに変更し、前記バッファインデックスが示す要素ＩＤに対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素に記録してある情報を元に配列の実体データおよびアノテーションの実体データを更新し、前記バッファインデックスの値をインクリメントし、
編集操作であった場合は、前記変更中フラグの値をＴＲＵＥに変更し、前記バッファインデックスが示す要素ＩＤ以降に対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素の内容を削除するステップを有することを特徴とする請求項１又は２に記載の遺伝子配列の編集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分子生物学の実験によって得られた遺伝子配列の編集技術に関する。
【背景技術】
【０００２】
ゲノムプロジェクトによって推進された遺伝子情報の蓄積に伴い、NCBI（National Center for Biotechnology Information <http://www.ncbi.nlm.nih.gov/>）などの公共データベースに登録されている配列情報は非常に充実してきている。これらの情報は、一般的な研究者でも無料で利用することが可能であり、多くの研究者が実験方法を計画する上で利用している。
【０００３】
以前より、配列情報として配列の並び自体ではなく、機能を持つ領域（タンパク質に変換される領域、分子と結合性のある領域、遺伝子発現の調節を行っている領域、立体構造の形成に関与する領域、他の機能を有する配列と類似している領域など）が重要視されている。以下、機能を持つ領域をアノテーションと表記する。配列情報中のアノテーションをグラフィカルに表示するアプリケーションも普及してきている。
【０００４】
本発明に関連する公知技術文献としては下記特許文献１・２があげられる。
【０００５】
【特許文献１】特開２００６−２５２２０８号公報
【特許文献２】特開２００６−２５２５４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
配列情報は、特定の配列および領域（アノテーション）に目印をつけて表示することで理解しやすくなる。しかしながら、研究者が配列自体を編集した場合、従来のアプリケーションでは目印として表示している図形を更新しないため、配列と目印に不整合が発生するという問題があった。従来のアプリケーションの中には、特定の領域に目印をつけ、領域の開始位置と終了位置を編集する機能を持つものもあるが、配列自体を編集した場合に、自動的に目印の位置を変更する機能を提供しているものはない。これは、機能を持つ領域の種類によって、部分的に変更しても意味を損なわない場合と意味を損なってしまう場合があるためである。
【０００７】
この点に関しては、編集後の配列自体が編集前の配列と同様に機能を持つ領域であることを検証することで補うことができる。
【０００８】
しかしながら、公共データベースで提供されている配列情報のアノテーションは、実験に基づく結果と予測プログラムにより予想した結果とが同じように登録されており、根拠となる検証手法の参照先は示されているものの、詳細な方法や手段までは示していない。
【０００９】
そのため、公共データベースからダウンロードした情報から根拠となる手法を探し出し、再び検証することは困難であった。さらに、検証する手法自体は無数に存在し、全ての手法を用いて検証することは現実的でない。また、生物学的な機構が明確になっていない場合に、実験条件や環境により特定の領域として機能を持つか否かの法則は明らかではない。
【００１０】
研究者が必要としている情報は、厳密な意味での機能を持つ領域ばかりではなく、実験方法を計画する上で参考とするための情報である場合も多い。そのため、根拠が十分には明確ではない場合であっても、機能を持つと予測される領域を表示することが好ましい。
【００１１】
本発明の目的は、分子生物学の研究者が遺伝子配列を変更する場合に、配列自体の変更にあわせて自動的にアノテーションを更新し、利用者がスムーズに実験計画を立案することができる遺伝子配列の編集方法を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明の配列の編集にあわせて自動的にアノテーションを変更可能な遺伝子配列の編集方法は、遺伝子配列を編集した操作履歴を管理する手段と、遺伝子配列の編集と同時にアノテーションを編集する手段と、アノテーションの変更履歴を管理する手段と、履歴を元に配列とアノテーションを元に戻す手段を設けたものである。
【００１３】
本発明の一観点によれば、遺伝子配列を編集する操作を受け付けた後、配列変更履歴バッファおよびアノテーション変更履歴バッファの内容を確定するタイミングを判断するためのフラグとして利用される変更中フラグを確認するステップと、変更中フラグがＦＡＬＳＥ（Ｆ）の場合に、配列変更履歴バッファとアノテーション変更履歴バッファとにそれぞれ行を追加し、要素ＩＤを採番し、変更中フラグがＴＲＵＥ（Ｔ）の場合に、変更履歴バッファの変更は行わないで、入力装置における操作が、配列となる文字列を入力した操作であるか、それ以外の編集操作であるかを判定し、配列となる文字列を入力した操作である場合は、変更中フラグの値をTRUEに変更し、それ以外の編集操作である場合は、変更中フラグの値をＦＡＬＳＥに変更し、バッファインデックスが示す要素ＩＤに対応する変更バッファの要素に対して、変更の内容を更新し、変更中フラグの内容を確認するステップと、ＦＡＬＳＥ（Ｆ）の場合、バッファインデックスが示す要素IDに対応する変更履歴バッファの要素の内容を確定し、バッファインデックスをインクリメントし、ＴＲＵＥ（Ｔ）の場合、変更バッファの内容を確定せずに変更内容にあわせて配列の実体データを更新し、変更内容にあわせてアノテーションの実体データを更新し、受付処理に戻るステップと、を有することを特徴とする遺伝子配列の編集方法が提供される。
【００１４】
また、前記入力装置からの入力を受け付けると、編集の種類を確認するステップであって、編集操作ではない場合は、前記変更中フラグの値をＦＡＬＳＥに変更し、前記バッファインデックスが示す要素ＩＤのひとつ少ない値を算出し、求めた要素ＩＤに対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素に記録してある情報を元に、配列データ管理部の配列の実体データおよびアノテーション管理部のアノテーションの実体データを更新し、前記バッファインデックスの値をデクリメントし、編集操作であった場合は、前記変更中フラグの値をＴＲＵＥに変更し、前記バッファインデックスが示す要素ＩＤ以降に対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素の内容を削除するステップと、を有することが好ましい。変更バッファの内容を削除するのは、操作履歴に分岐が生じないようにするためである。
【００１５】
また、前記入力装置からの入力を受け付けると、操作をやり直すステップであって、編集の種類を確認した結果、編集操作ではない場合は、前記変更中フラグの値をＦＡＬＳＥに変更し、前記バッファインデックスが示す要素ＩＤに対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素に記録してある情報を元に配列の実体データおよびアノテーションの実体データを更新し、前記バッファインデックスの値をインクリメントし、編集操作であった場合は、前記変更中フラグの値をＴＲＵＥに変更し、前記バッファインデックスが示す要素ＩＤ以降に対応する前記配列変更履歴バッファおよび前記アノテーション変更履歴バッファの要素の内容を削除するステップを有することが好ましい。
尚、変更バッファの内容を削除するのは、操作履歴に分岐が生じないようにするためである。
【発明の効果】
【００１６】
以下のように本発明の配列の編集にあわせて自動的にアノテーションを変更可能な遺伝子配列の編集方法によれば、次のような効果がある。
【００１７】
遺伝子配列の編集にあわせて自動的にアノテーションを編集することができ、個別にアノテーションを編集する作業を省略することができる。
【００１８】
遺伝子配列の編集操作を取り消した場合に自動的にアノテーションを編集することができ、個別にアノテーションを編集する作業を省略することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の一実施の形態による遺伝子配列情報の編集技術について図面を参照しながら説明を行う。
【００２０】
図１は、配列情報をグラフィカルに表示するためのアプリケーションシステムの概要を示す機能ブロック図であり、各種の指示を入力するとともに使用者が配列を編集するための入力部１０１、配列情報を格納しているデータベース１０４、全体を制御するためのデータ処理部１０３、配列およびアノテーションを表示する表示部１０２を有している。一般的に、配列情報１０５はテキスト形式で提供されている。データ処理部１０３は、データベース１０４内の情報を元に、配列の実体（文字列）と配列情報から抽出したアノテーション（特定の領域）をグラフィカルに表示部２に表示する表示制御を含む各種制御を行う。キーボードなどの入力装置１から、配列上の任意の位置の文字が編集（追加および削除、置換）されると、データ処理部１０３は、その入力に応じて処理を開始する。
【００２１】
尚、配列情報１０５は、システム内ではなく、インターネット等を介して各種研究期間などの公開している配列情報の図示しないデータベースなどに格納されている情報を取得してデータベース１０４に格納する。この際、データベース１０４は、上記配列情報のうち、入力部１０１を介して指定された情報を格納するように構成されている。データベース１０４内の情報テーブル１０４ａは、配列の識別情報である配列ＩＤと、配列データと、アノテーション（注釈）と、を含むテーブルである。
【００２２】
尚、配列ＩＤと配列データは１対１であり、配列ＩＤとアノテーション全体が１対１でとなっているのが好ましい。アノテーションを部分ごとに分割するテーブルにすると、配列ＩＤとアノテーションとは１対多になる。また、アノテーションに関しては、配列情報１０５に元々含まれているものを利用する場合と、入力装置１０１から入力されることで後から付けられる場合と、がある。部分配列３０５は、編集作業によって変更した配列の実体（文字列）である。このドキュメントでは、アノテーションは、「配列の実体上の位置と説明（注釈）」として定義される。
図３に示す部分配列は入力装置において操作された配列の範囲である。
【００２３】
図２は、図１に示すデータ処理部１０３の一構成例を示す図である。図２に示すように、本実施の形態によるデータ処理部（１０３）は、配列の変更状態を示すフラグを格納する変更中フラグ格納部２０１と、配列及びアノテーションの変更履歴のインデックスを格納するバッファインデックス２０２と、配列自体の変更履歴を示す配列変更履歴を格納する配列変更履歴バッファ２０３と、アノテーションの変更履歴を示すアノテーション変更履歴を格納するアノテーション変更履歴バッファ２０４と、配列自体を編集、表示するための管理を行う配列データ管理部２０５と、アノテーションを編集、表示するための管理を行うアノテーション管理部２０６と、変更履歴に関する情報を管理する変更履歴バッファ管理部２０７と、を有している。
【００２４】
変更中フラグ格納部２０１には、図１の入力部１０１からの入力操作に基づいて、配列を変更中であるか否かを示すフラグを格納される。例えば、変更中フラグ格納部２０１は、キーボードから配列となる文字列を入力した場合TRUEのフラグを格納し、コピーやペーストなどの配列の入力とは異なる操作の場合FALSEのフラグを格納する。これは、キーボードから入力した変更を、操作の取り消し（Undo）により取り消した場合、変更をひとまとめに取り消す（１文字ずつ取り消す必要がないようにする）ために使用する。
【００２５】
画面を表示するクライアントアプリケーションを作成した場合、キーボードから配列となる文字を１文字入力するたびに、１つの処理（イベント）が発生する。入力した文字を１文字ごとに変更履歴バッファに登録し内容を確定する場合、キーボードから配列となる文字を１０回入力すると、変更履歴バッファには１０回分の操作が登録される。そのため、操作の取り消し（Undo）を１回実行すると１回分の変更操作が取り消され、９回目の文字を入力した後の状態となる。
【００２６】
しかし、キーボードから連続して文字を入力する場合、入力の開始から終了までをひとまとめにして管理する方が好ましい。そのため、キーボードから配列となる文字列を入力し、処理（イベント）が発生した段階で、変更中フラグ格納部２０１にTRUEを格納し、変更操作が開始したことを記録する。変更中フラグ格納部２０１にTRUEが格納されている場合、キーボードから入力した文字を変更履歴バッファに追加するが、内容を確定しない。続けてキーボードから配列となる文字を９回入力すると、変更履歴バッファには、１つの要素に１０回分の操作が登録されているが確定していない状態となる。次に、配列の入力とは異なる操作を実行すると、変更中フラグ格納部２０１にFALSEが格納され、変更履歴バッファの内容が確定する。そのため、操作の取り消し（Undo）を１回実行すると１回分の変更操作が取り消され、１回目の文字を入力する前の状態となる。
【００２７】
バッファインデックス２０２は、操作の取り消し（Undo）や、やり直し（Redo）を行った場合に、何番目の操作まで戻したかを示すインデックスを操作と対応付けして格納する。
【００２８】
配列変更履歴バッファ２０３は、配列変更に関する操作の種類と、変更開始位置と変更対象となる配列長及びその部分配列の内容を、操作が行われた順番に格納する。詳細に関しては、図３を参照して説明する。
【００２９】
アノテーション変更履歴バッファ２０４は、データ配列の要素を決定する要素IDと、変更したアノテーションのIDと、変更直前のアノテーションの開始位置と終了位置と、を格納する。詳細に関しては、図４を参照して説明する。  配列データ管理部２０５は、配列データを管理し、変更された場合には、変更中フラグと、バッファインデックスと、文字列変更履歴と、を参照して、表示部１０２に、文字列を表示させる。配列データとして、配列のIDと配列の名称と配列長と配列文字列と、を管理する。配列データ管理部２０５は、データ格納領域からメモリ上に配列のIDと配列の名称と配列長と配列文字列を読み出し、配列の名称と配列文字列を表示部１０２に文字として表示する。表示部１０２に表示中は、利用者が配列の名称と配列文字列を編集できるように構成されており、編集操作と保存操作とに関するインターフェイスが提供される。
【００３０】
編集操作の受付中は、メモリ上のデータを更新し、保存操作時にデータ格納領域を更新する。表示部１０２に表示されている配列文字列上にカーソルを表示させ、入力部１０１から受け付けれ書き換えられた配列文字列の位置を取得する。入力部１０１が受け付けた配列データを編集する操作にあわせて、メモリ上の配列データと表示部１０２の表示とを更新する。
【００３１】
アノテーションデータ管理部２０６は、アノテーションデータを管理し、アノテーションデータが変更された場合には、変更中フラグと、バッファインデックスと、アノテーション変更履歴と、を参照して、表示部１０２に、アノテーションを表示させる。
【００３２】
アノテーションデータは、アノテーションIDと、アノテーション名称と、外部キーとなる配列IDと、複数の開始位置および終了位置と、を管理する。アノテーションデータ管理部２０６は、配列データ管理部２０５がメモリ上に読み出した配列IDと一致するアノテーションデータを検索し、データ格納領域からメモリ上にアノテーションIDとアノテーション名称と外部キーとなる配列IDと開始位置および終了位置とを読み出す。
【００３３】
表示部１０２には、配列データの配列長を表す横線を表示させ、横線の左端を座標の最小値、右端を座標の最大値となる。座標の最大値は、画面上の表示サイズと画面の解像度により決めることができる。座標の最小値を配列の１文字目に相当する位置とし、座標の最大値を配列の最終文字に相当する位置とする。次に、アノテーションの開始位置から終了位置に相当する座標を算出し、アノテーションの名称とアノテーションを表す開始位置から終了位置に向けた矢印を表示する。利用者が配列文字列を編集する操作にあわせて、図８から図１４までにおいて説明する処理にしたがって、メモリ上のアノテーションデータと表示部１０２の表示とを更新する。さらに、変更履歴バッファ２０３およびアノテーション変更履歴バッファ２０４を変更する処理を行う変更履歴バッファ管理部２０７が設けられている。
【００３４】
尚、変更中フラグ２０１とバッファインデックス２０２は、実際にはBool値と数値になる。実装する場合には、変更履歴バッファ管理部２０７のプログラム内の変数になる。
【００３５】
図３は、図２で示した配列自体の変更履歴バッファ２０３内のデータ構成例を示す図である。図３に示すように、配列変更履歴バッファ２０３には、データ配列の要素を決定する要素IDを格納する領域３０１、編集操作の種類を格納する領域３０２、配列上の変更開始位置を格納する領域３０３、配列上の変更した長さを格納する領域３０４、変更した部分配列を格納する領域３０５を備える。図２で示したバッファインデックス（202）は、操作の取り消し（Undo）や、やり直し（Redo）を行う場合に、何番目の操作まで戻したかを示すインデックス３０６として使用される。
【００３６】
要素ID３０１は、データ内でユニークになり、重複しないように採番する。操作の種類３０２は、配列編集の操作により、「切り取り（＝Cut）」、「貼り付け（＝Paste）」、「挿入（＝Insert）」、「次の文字を削除（＝Delete）」、「前の文字を削除（＝Back Space）」、を記録する。変更開始位置３０３と配列長３０４とは、編集時点での配列上において、編集をおこなった開始位置とその長さを記録する。部分配列３０５は、操作の種類３０２により格納する情報が異なる。配列を追加する操作（Paste、Insert）の場合、追加した部分配列を格納する。配列を削除する操作（Cut、Delete、Back Space）の場合、削除した部分配列を格納する。
【００３７】
図４は、図２で示したアノテーション変更履歴バッファ２０４のデータ構成例を示す図である。アノテーション変更履歴バッファ２０４には、データ配列の要素を決定する要素IDを格納する領域４０１、変更した対象アノテーションのID４０２、変更直前のアノテーションの開始位置４０３と終了位置４０４とを備える。尚、アノテーションは、複数の部分に分割されている場合があるため、これに対応できるように、開始位置および終了位置に関して、複数組を格納できるようにしても良い。（４０５、４０６）
【００３８】
図２で示したバッファインデックス２０２は、操作の取り消し（Undo）や、やり直し（Redo）を行う場合に、何番目の操作まで戻したかを示すインデックス４０７として使用する。
【００３９】
要素ID４０１は、データ内でユニークになり、重複しないように採番し、図３の要素ID３０１と同じ値を使用する。アノテーション変更履歴バッファ２０４では、編集の種類にかかわらず編集直前のアノテーションのみを記録する。すなわち、編集前の状態のアノテーションを記録する。記録する項目は、要素ID４０１、対象アノテーション４０２、開始位置４０３、終了位置４０４（アノテーションが複数の部分に分割されている場合は、開始位置と終了位置も複数。）の全項目を記録する。
【００４０】
図５から図７までは、基本的に変更履歴バッファ管理部２０７における処理の内容を示すフローチャート図である。但し、配列データを更新する処理５１０、変更処理６０７、変更処理７０７は、配列データ管理部２０５の処理を呼び出す形になる。同様に、アノテーションデータを更新する処理５１１、変更処理６０７、変更処理７０７は、アノテーションデータ管理部２０６の処理を呼び出す処理になる。
【００４１】
図５は、配列編集時の処理の流れを示すフローチャート図である。図５に示すフローチャート図は、入力装置１０１が配列を編集する操作を受け付けた時点から開始され、配列を編集する操作が中止された時点で終了する。
【００４２】
入力装置１０１からの入力を受け付けた後、変更中フラグ２０１を確認する（ステップ５０１）。
【００４３】
次に、変更中フラグ２０１の内容を確認する。ここでＦＡＬＳＥ（Ｆ）の場合、配列変更履歴バッファ２０３とアノテーション変更履歴バッファ２０４とに対してそれぞれ行を追加し、要素IDを採番する（ステップ５０２）。尚、変更中フラグ２０１は、配列変更履歴バッファ２０３およびアノテーション変更履歴バッファ２０４の内容を確定するタイミングを判断するためのフラグとして利用され、独自の領域に記録される。
【００４４】
一方、ＴＲＵＥ（Ｔ）の場合は、配列変更履歴バッファ２０３の変更は行わないでステップ５０３に進む。ステップ５０３において、入力装置１０１からの操作が、配列となる文字列を入力した操作であるか、それ以外の編集操作であるかを判定する。配列となる文字列を入力した操作である場合（Ｔ）、ステップ５０４に進み、変更中フラグ２０１の値をＴＲＵＥに変更する。それ以外の編集操作である場合（Ｆ）、ステップ５０５に進み、変更中フラグ２０１の値をＦＡＬＳＥに変更する。
【００４５】
次に、バッファインデックス２０２が示す要素ＩＤに対応する変更履歴バッファ（２０３、２０４）の要素に対して、変更の内容を更新する（ステップ５０６）。次に、変更中フラグ２０１の内容を確認する。ＦＡＬＳＥ（Ｆ）の場合、ステップ５０８に進み、バッファインデックス２０２）が示す要素ＩＤに対応する変更履歴バッファ（２０３、２０４）の要素の内容を確定し（ステップ５０８）、バッファインデックス２０２をインクリメントする（ステップ５０９）。ステップ５０７でＴＲＵＥ（Ｔ）の場合、変更バッファの内容を確定しない。
【００４６】
次に、変更内容にあわせて配列データ管理部２０５の配列の実体データを更新する（ステップ５１０）。次に、変更内容にあわせてアノテーション管理部２０６のアノテーションの実体データを更新し（ステップ５１１）、ステップ５０１に戻る。
【００４７】
尚、アノテーションの更新方法については、図８から図１４までを参照して説明する。図６は、操作の取り消し（Ｕｎｄｏ）実行時の処理の流れを示すフローチャート図である。図６に示すフローチャート図は、入力装置１０１における操作を取り消す操作（Ｕｎｄｏ）を行った時点から開始され、配列を編集する操作が開始された時点で終了する。
【００４８】
入力装置１０１からの入力を受け付けると、編集の種類を確認する（ステップ６０１）。
【００４９】
ここで、編集操作ではない場合は、ステップ６０２において変更中フラグ２０１の値をＦＡＬＳＥに変更し、バッファインデックス２０２が示す要素ＩＤのひとつ少ない値を算出し（ステップ６０３）、求めた要素ＩＤに対応する変更履歴バッファ２０３、２０４の要素に記録してある情報を元に配列データ管理部２０５の配列の実体データおよびアノテーション管理部２０６のアノテーションの実体データを更新し、バッファインデックス２０２の値をデクリメントする（ステップ６０４）。
【００５０】
次に、編集操作であった場合に（Ｔ）、ステップ６０５において編集中フラグの値をＴＲＵＥに変更し、バッファインデックス２０２が示す要素ＩＤ以降に対応する変更履歴バッファ（２０３、２０４）の要素の内容を削除し（ステップ６０６）、フローチャート（図５）に従って変更処理を行う。（ステップ６０７）。尚、ステップ６０６において変更バッファの内容を削除するのは、操作履歴に分岐が生じないようにするためである。
【００５１】
図７は、操作のやり直し（Ｒｅｄｏ）実行時の処理の流れを示すフローチャート図である。図７に示すフローチャート図は、入力装置１０１からの入力を受け付けると、操作をやり直す操作（Ｒｅｄｏ）を行った時点から開始し、使用者が配列を編集する操作を開始した時点で終了するものとする。
【００５２】
入力装置１０１からの入力を受け付けた後に、編集の種類を確認する（ステップ７０１）。
【００５３】
編集操作ではない場合（Ｆ）、ステップ７０２において変更中フラグ２０１の値をＦＡＬＳＥに変更し、バッファインデックス２０２が示す要素ＩＤに対応する変更履歴バッファ２０３、２０４の要素に記録してある情報を元に配列の実体データ２０５およびアノテーションの実体データ２０６を更新し（ステップ７０３）、バッファインデックス２０２の値をインクリメントする（ステップ７０４）。
【００５４】
次に、編集操作であった場合（Ｔ）、ステップ７０５において編集中フラグの値をＴＲＵＥに変更し、ステップ７０６において、バッファインデックス２０２が示す要素ＩＤ以降に対応する変更履歴バッファ２０３、２０４）の要素の内容を削除し、フローチャート（図５）に従って変更処理を行う。（ステップ７０７）。尚、ステップ７０６で変更履歴バッファ２０３、２０４の内容を削除するのは、操作履歴に分岐が生じないようにするためである。
【００５５】
図８は、アノテーションの開始位置にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、キャレットがポジション４と５の間にあるとする（801）。尚、アノテーションとは、矢印で示された領域、すなわち、配列の範囲を指す。また、キャレットとは、カーソルのことである。
【００５６】
「切り取り（＝Cut）」を実行した場合、配列自体に変更はないため、アノテーションも変更しない（８０２）。
【００５７】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション４と５の間に文字を挿入し、ポジション５〜１８の文字はポジション７〜２０に移動する。このとき、アノテーションをポジション７〜１４に変更する（８０３）。
【００５８】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション４と５の間に文字を挿入し、ポジション５〜１８の文字はポジション６〜１９に移動する。このとき、アノテーションをポジション６〜１３に変更する（８０４）。
【００５９】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション５の文字を削除し、ポジション６〜１８がポジション５〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（８０５）。
【００６０】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合、配列自体はポジション４の文字を削除し、ポジション５〜１８がポジション４〜１７に移動する。このとき、アノテーションをポジション４〜１１に変更する（８０６）。
【００６１】
また、変更時にアノテーション変更履歴バッファ（２０４）に、編集前のアノテーション情報（ポジション５〜１２）を保存する。尚、図６を参照して説明したように、操作の取り消し（Ｕｎｄｏ）実行時に、アノテーションを復元するために使用する。すなわち、図６の説明中における、「求めた要素ＩＤに対応する変更履歴バッファ２０３、２０４の要素に記録してある情報を元に配列の実体データ２０５およびアノテーションの実体データ２０６を更新し」が該当する。
【００６２】
また、図７で説明した、操作のやり直し（Redo）実行時に、アノテーションを復元するために使用する。図７の説明文中では、「バッファインデックス（202）」が示す要素IDに対応する変更バッファ203、204」の要素に記録してある情報を元に配列の実体データ（205）およびアノテーションの実体データ（206）を更新し」が該当する。
【００６３】
図９は、アノテーションの開始位置を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、ポジション４〜５を選択している状態であるとする（901）。
【００６４】
「切り取り（＝Cut）」を実行した場合、配列自体はポジション４〜５の文字を削除し、ポジション６〜１８の文字がポジション４〜１６に移動する。このとき、アノテーションを１文字分短くし、ポジション４〜１０に変更する（902）。
【００６５】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション４〜５の文字を削除後、ポジション４と５の間に文字を挿入し、ポジションは変更しない。このとき、アノテーションを１文字分短くし、ポジション６〜１２に変更する（９０３）。ただし、選択している配列長と挿入する文字列長が異なる場合は、ポジションを移動させる。
【００６６】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション４〜５の文字を削除後、ポジション４と５の間に文字を挿入し、ポジション６〜１８の文字はポジション５〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（９０４）。
【００６７】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション４〜５の文字を削除し、ポジション６〜１８がポジション４〜１６に移動する。このとき、アノテーションを１文字分短くし、ポジション４〜１０に変更する（９０５）。
【００６８】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合は、「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合と同様である（９０６）。
【００６９】
また、変更時にアノテーション変更履歴バッファ２０４に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【００７０】
尚、図９の９０１で、ポジション４〜５の背景に色をつけているのは、範囲４〜５を選択していることを意味しています。そこで編集操作（例えば削除）を実行した場合、図３の「配列自体の変更履歴バッファ」に範囲４〜５に該当する配列「GA」を部分配列として登録します。矢印の範囲は図４の「アノテーションの変更履歴バッファ」に登録します。
【００７１】
図１０は、アノテーションの終了位置にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、キャレットがポジション１２と１３の間にあるとする（１００１）。
【００７２】
「切り取り（＝Cut）」を実行した場合、配列自体に変更はないため、アノテーションも変更しない（１００２）。
【００７３】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション１２と１３の間に文字を挿入し、ポジション１３〜１８の文字はポジション１５〜２０に移動する。このとき、アノテーションは変更しない（１００３）。
【００７４】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション４と５の間に文字を挿入し、ポジション５〜１８の文字はポジション６〜１９に移動する。このとき、アノテーションは変更しない（１００４）。
【００７５】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション１３の文字を削除し、ポジション１４〜１８がポジション１３〜１７に移動する。このとき、アノテーションは変更しない（１００５）。
【００７６】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合、配列自体はポジション１２の文字を削除し、ポジション１３〜１８がポジション１２〜１７に移動する。このとき、アノテーションをポジション５〜１１に変更する（１００６）。
【００７７】
また、変更時にアノテーション変更履歴バッファ２０４に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【００７８】
図１１は、アノテーションの終了位置を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、ポジション１２〜１３を選択している状態であるとする（１１０１）。
【００７９】
「切り取り（＝Cut）」を実行した場合、配列自体はポジション１２〜１３の文字を削除し、ポジション１４〜１８の文字がポジション１２〜１６に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１１０２）。
【００８０】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション１２〜１３の文字を削除後、ポジション１１と１２の間に文字を挿入し、ポジションは変更しない。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１１０３）。ただし、選択している配列長と挿入する文字列長が異なる場合は、ポジションを移動させる。
【００８１】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション１１〜１２の文字を削除後、ポジション１１と１２の間に文字を挿入し、ポジション１３〜１８の文字はポジション１２〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１１０４）。
【００８２】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション１１〜１２の文字を削除し、ポジション１３〜１８の文字がポジション１２〜１６に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１１０５）。
【００８３】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合は、「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合と同様である（１１０６）。
【００８４】
また、変更時にアノテーション変更履歴バッファ（２０４）に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【００８５】
図１２は、アノテーション上にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、キャレットがポジション７と８の間にあるとする（１２０１）。
【００８６】
「切り取り（＝Cut）」を実行した場合、配列自体に変更はないため、アノテーションも変更しない（１２０２）。
【００８７】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション７と８の間に文字を挿入し、ポジション８〜１８の文字はポジション１０〜２０に移動する。このとき、アノテーションはポジション５〜１４に変更する（１２０３）。
【００８８】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション７と８の間に文字を挿入し、ポジション８〜１８の文字はポジション９〜１９に移動する。このとき、アノテーションはポジション５〜１３に変更する（１２０４）。
【００８９】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション８の文字を削除し、ポジション９〜１８がポジション８〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１２０５）。
【００９０】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合、配列自体はポジション７の文字を削除し、ポジション８〜１８がポジション７〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１２０６）。
【００９１】
また、変更時にアノテーション変更履歴バッファ２０４に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【００９２】
図１３は、アノテーション上を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、ポジション８〜９を選択している状態であるとする（１３０１）。
【００９３】
「切り取り（＝Cut）」を実行した場合、配列自体はポジション８〜９の文字を削除し、ポジション１０〜１８の文字がポジション８〜１６に移動する。このとき、アノテーションを２文字分短くし、ポジション５〜１０に変更する（１３０２）。
【００９４】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション８〜９の文字を削除後、ポジション８と９の間に文字を挿入し、ポジションは変更しない。このとき、アノテーションは変更しない（１３０３）。ただし、選択している配列長と挿入する文字列長が異なる場合は、ポジションを移動させる。
【００９５】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション８〜９の文字を削除後、ポジション８と９の間に文字を挿入し、ポジション１０〜１８の文字はポジション９〜１７に移動する。このとき、アノテーションを１文字分短くし、ポジション５〜１１に変更する（１３０４）。
【００９６】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション８〜９の文字を削除し、ポジション１０〜１８の文字がポジション８〜１６に移動する。このとき、アノテーションを２文字分短くし、ポジション５〜１０に変更する（１３０５）。
【００９７】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合は、「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合と同様である（１３０６）。
【００９８】
また、変更時にアノテーション変更履歴バッファ２０４に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【００９９】
図１４は、アノテーション全体を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法である。編集前の状態では、配列の長さは１８であり、ポジション５〜１２にアノテーションがあり、ポジション４〜１３を選択している状態であるとする（１４０１）。
【０１００】
「切り取り（＝Cut）」を実行した場合、配列自体はポジション４〜１３の文字を削除し、ポジション１５〜１８の文字がポジション４〜８に移動する。このとき、アノテーションの位置情報は削除する（１４０２）。
【０１０１】
「貼り付け（＝Ｐａｓｔｅ）」を実行して、文字列「AA」を挿入した場合、配列自体はポジション４〜１３の文字を削除後、ポジション３と４の間に文字を挿入し、ポジション１４〜１８は、ポジション６〜１０に移動する。このとき、アノテーションの位置情報は削除する（１４０３）。
【０１０２】
「挿入（＝Ｉｎｓｅｒｔ）」を実行して、文字列「A」を挿入した場合、配列自体はポジション４〜１３の文字を削除後、ポジション３と４の間に文字を挿入し、ポジション１４〜１８の文字はポジション５〜９に移動する。このとき、アノテーションは削除する（１４０４）。
【０１０３】
「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合、配列自体はポジション４〜１３の文字を削除し、ポジション１５〜１８の文字がポジション４〜８に移動する。このとき、アノテーションの位置情報は削除する（１４０５）。
【０１０４】
「前の文字を削除（＝Ｂａｃｋ  Ｓｐａｃｅ）」を実行した場合は、「次の文字を削除（＝Ｄｅｌｅｔｅ）」を実行した場合と同様である（１４０６）。
【０１０５】
アノテーション全体を削除する場合、アノテーションの位置情報は削除するが、操作の取り消し（Ｕｎｄｏ）や、やり直し（Ｒｅｄｏ）を実行する場合に不整合が発生しないようにするため、ＩＤによる管理情報は削除しない。アプリケーションの終了時などの操作履歴をクリアするタイミングで、不要になったアノテーションのＩＤは削除する。
【０１０６】
また、位置情報を持たないアノテーションに対して、操作履歴には登録しない。
【０１０７】
変更時にアノテーション変更履歴バッファ２０４に、編集前のアノテーション情報（ポジション５〜１２）を保存する。
【０１０８】
以下のように、本実施の形態による、配列の編集にあわせて自動的にアノテーションを変更可能な遺伝子配列の編集方法によれば、以下のような効果がある。
【０１０９】
遺伝子配列の編集にあわせて自動的にアノテーションを編集することができ、個別にアノテーションを編集する作業を省略することができる。
【０１１０】
遺伝子配列の編集操作を取り消した場合に自動的にアノテーションを編集することができ、個別にアノテーションを編集する作業を省略することができる。
【０１１１】
尚、本発明は、上記に記載の方法の他に、方法の各ステップをコンピュータに実行させるためのプログラム、そのプログラムを記録するコンピュータ読みとり可能な記録媒体、上記方法をハードウェア又はソフトウェアにより処理することができる情報処理装置を含むものである。
【産業上の利用可能性】
【０１１２】
本発明は、配列の編集にあわせて自動的にアノテーションを変更可能な遺伝子配列の編集方法として利用可能である。
【図面の簡単な説明】
【０１１３】
【図１】本発明の一実施の形態による遺伝子配列の編集システムの一構成例を示す図である。
【図２】本実施の形態によるデータ管理部の機能ブロック図である。
【図３】本実施の形態による配列変更履歴バッファのデータ構成例を示す図である。
【図４】本実施の形態によるアノテーション変更履歴バッファのデータ構成例を示す図である。
【図５】本実施の形態による配列編集時の処理の流れを示すフローチャート図である。
【図６】本実施の形態による操作の取り消し（Undo）実行時の処理の流れを示すフローチャート図である。
【図７】本実施の形態による操作のやり直し（Redo）実行時の処理の流れを示すフローチャート図である。
【図８】アノテーションの開始位置にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図９】アノテーションの開始位置を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図１０】アノテーションの終了位置にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図１１】アノテーションの終了位置を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図１２】アノテーション上にキャレットが存在する状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図１３】アノテーション上を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【図１４】アノテーション全体を含む領域を選択した状態で、配列を編集した場合のアノテーションの変更方法を示す図である。
【符号の説明】
【０１１４】
１０１…入力部、１０２…表示部、１０３…データ処理部、１０４…データベース、１０４ａ…情報テーブル、１０５…配列情報。
【図１】
2009054039.tif 000003
【図２】
2009054039.tif 000004
【図３】
2009054039.tif 000005
【図４】
2009054039.tif 000006
【図５】
2009054039.tif 000007
【図６】
2009054039.tif 000008
【図７】
2009054039.tif 000009
【図８】
2009054039.tif 000010
【図９】
2009054039.tif 000011
【図１０】
2009054039.tif 000012
【図１１】
2009054039.tif 000013
【図１２】
2009054039.tif 000014
【図１３】
2009054039.tif 000015
【図１４】
2009054039.tif 000016