質問:
オープンソースライブラリを使用してFCSファイルを読み取るにはどうすればよいですか?
WYSIWYG
2017-06-30 15:37:39 UTC
view on stackexchange narkive permalink

FCSは、フローサイトメトリーデータの保存に使用される特許取得済みのデータ形式です。最新バージョンはFCS3.1です。フォーマットにはいくつかのドキュメントがありますが、これらのファイルの読み取り方法に関する情報はありません。 FCSファイルを読み取るためのRパッケージとMATLABコードがいくつかありますが、FCSコンソーシアムまたは他のグループによって開発された標準ライブラリを探しています。また、FCSが既存の標準データ形式のサブセットであり、任意のプログラミング言語を使用して標準ライブラリで読み取ることができるかどうかも知りたいです。

最後に、これらのファイルを読みやすい形式に変換したいと思います。 HDF5のように。

あなたが標準ライブラリを求めているのは奇妙だと思いますが、既存の標準ツールを除外しています。
@Llopis OPは標準ツールを拒否していません。それどころか、彼は標準ライブラリを探しています。
@terdon標準ライブラリがどのように決定されるかはわかりませんが、R / BioconductorパッケージまたはMATLABパッケージは非常に標準的なようです(もちろん、FCSコンソーシアムが提供する場合を除く)。
@Llopis標準では、これらのファイルの読み取りを可能にするOS /言語に依存しないインターフェイスがあります。さらに重要なのは、FCSファイルを一般的な言語で読み取る方法を知りたいということです。この目的のために、擬似コードのようなものを期待しています。
何が必要かはまだよくわかりません。リンク先のドキュメントは、一般的な擬似コードに限りなく近いものです。フォーマットの詳細で簡潔な仕様が含まれています。これは、擬似コードが伝達するのと同じ情報であり、データ形式を記述する従来の方法です(擬似コードは事実上これに使用されることはありません)。それは、一般的な分析言語(R、Python、Matlab)のライブラリーの存在に加えて、この形式で動作するのに十分なはずです。
@WYSIWYG Konradが言ったことに加えて、BioconductorのflowCoreは、Windows、iOS、およびLinuxで使用できます。
@KonradRudolph私が欲しいのは、これらのファイルをどのように読み取るかについての指示です。ドキュメントにはフォーマットが記載されていますが、擬似コードが意味するフォーマットを読み取るための一般的な手順を理解できませんでした。私がバイオコンダクターを**使用したくない**と仮定してください。これらのファイルをCで読みたいとしましょう。どうすればよいですか? FACSマシンは、FCSファイルの読み取り/書き込みに標準のメカニズム/ ioライブラリを使用しますか、それとも独自のコードを使用しますか?フォーマットがコンソーシアムによって定義されている場合、それらはrw操作の標準インターフェイスを提供すると思いました。
なぜ.fcsは特許取得済みのフォーマットだと言うのですか?リンクされたドキュメントの免責事項には、「この標準の実装には、特許権の対象となる主題の使用が必要になる可能性があることに注意が必要です」と記載されています。特許を取得することさえできない場合があります。https:// patentsを参照してください。 stackexchange.com/questions/11968/can-patents-on-computer-file-formats-be-obtained
三 答え:
bli
2017-06-30 17:51:15 UTC
view on stackexchange narkive permalink

数年前、FCSファイルをタブ区切り形式に変換するPythonスクリプトを作成しました。フォーマットの説明が提供するすべての可能性を処理することにはほど遠いものでしたが、少なくとも私たちのマシンの1つで生成されたファイルのいくつかでは機能しました: http://www.igh.cnrs.fr/equip/Seitz/ en_equipe-programmes.html

私が見つけたフォーマットドキュメントはデコードを有効にしましたが(あなたが言及したpdfのセクション3を参照)、バイナリモードでデータを読み取る必要があります。

この形式(および、おそらく他の多くのバイナリ形式)の一般的な考え方は、ファイルの先頭にヘッダーゾーンがあり、ファイルの残りの部分がどのように構成されているかを示す番号をエンコードするフィールドの数が定義されていることです。したがって、最初のフェーズは、フォーマットのドキュメントに記載されている説明に従って、このヘッダーを解析することです。ヘッダーから抽出された情報は、フォーマットのドキュメントに記載されているルールに従って、データの場所とエンコード方法を示します。

これが役立つ場合があります。記録としては、次のとおりです。上記のスクリプトからのコード(コメントを削除し、その一部はフォーマットドキュメントからコピーしただけで、いくつか追加した後):

  #!/ usr / bin / env python "" "このスクリプトは、FCSフローサイトメトリーデータを読み取ろうとします。ここにある情報に触発されたフォーマット解析:http://isac-net.org/Resources-for-Cytometrists/Data-Standards/ Data-File-Standards / Flow-Cytometry-Data-File-Format-Standards.aspx "" "import re#バイナリエンコードされたデータをデコードするにはimport structimport sysclass Parameter(object):" ""このオブジェクトは、次のようなパラメータータイプの1つを表します。 FCSファイルのDATAセグメントに存在します。 "" "__slots__ =(" p_name "、" p_bits "、" p_range "、" p_ampl "、" parser ")def __init __(self、p_name、p_bits、p_range、p_am pl):self.p_name = p_name self.p_bits = p_bits self.p_range = p_range self.p_ampl = p_ampl
#データセグメント内のパラメータの値を解析するための関数self.parser = None ################################ ###############ここで、他の部分がどこにあるかを示すヘッダー部分##の解析を開始します。 ############################################### f =オープン(sys.argv [1]、 "rb")#フォーマット名は6文字でエンコードされます#ASCII文字は1つのoctetfile_format = "" .join([f.read(1)for __ in range(6)でコード化されます])sys.stdout.write( "Format:%s \ n"%file_format)#フォーマットの説明では、スキップする4つのオクテットを予約しています= f.read(4)#8つのオクテットチャンクは、異なる部分の開始位置と終了位置をエンコードしますdatatext_start = int(f.read(8).strip( ""))text_end = int(f.read(8).strip( ""))data_start = int(f.read(8).strip( " "))data_end = int(f.read(8).strip(" "))analysis_start = int(f.read(8).strip(" "))analysis_end = int(f.read(8).strip( ""))if(analysis_start and analysis_end):sys.stderr.write( "FCSファイルのANALYSISセグメントを処理できません。\ n")################## ###################################ここで、「TEXT」部分##の解析を開始します。適切なデータは整理されています############################################# ######## f.seek(text_start)#最初の文字プライマリTEXTセグメントにはASCII区切り文字があります。sep= f.read(1)if sep not in ["_"、 "@"]:alt_sep = "_ @ _" elif sep not in ["_"、 " | "]:alt_sep =" _ | _ "else:sep not in [" + "、" | "] alt_sep =" + | + "text_segment = f.read(text_end --text_start)fields = text_segment.split(sep )info = {} i = 0while i < len(fields)-1:key = fields [i] i + = 1 val = fields [i] i + = 1#キーワードは大文字と小文字を区別せず、ファイルに書き込むことができます小文字、大文字、またはその2つの#混合。ただし、FCSファイルリーダーはキーワードの大文字小文字を無視する必要があります。キーワード値は、#小文字、大文字、またはその2つの組み合わせにすることができます。キーワード値では大文字と小文字が区別されます。 info [key.upper()] = val
「%sイベントが検出されました。」と出力します。 %info ["$ TOT"] print "各イベントは%sパラメータによって特徴付けられます"%info ["$ PAR"] if info ["$ NEXTDATA"]!= "0":sys.stderr.write( "その他データはファイルに存在しますが、解析されていません。\ n ")#L-リストモード。イベントごとに、各パラメーターの値は、#パラメーターが記述されている順序で保管されます。パラメータ1に予約されているビット数は、#$ P1Bキーワードを使用して記述されます。データセットごとにリストモードデータのセットは1つだけです。 $ DATATYPE#キーワードは、データ形式を記述します。モードCおよびモードUのデータはモードLのデータから作成できるため、これはフロー#サイトメトリーデータの保存に最も用途の広いモードです。assertinfo["$ MODE"] == "L" parameters = []#インデックスparametersp_indices = range(1、int(info ["$ PAR"])+ 1)for i in p_indices:p_name = info ["$ P%dN"%i] p_bits = info ["$ P%dB"%i] p_range = info ["$ P%dR"%i] p_ampl = info ["$ P%dE"%i] parameters.append(Parameter(p_name、p_bits、p_range、p_ampl))sys.stdout.write( "パラメーターare:\ n%s \ n "%" \ t ".join([パラメーターのパラメーターのpar.p_name]))#32ビットワードはどのように編成されますかif info [" $ BYTEORD "] ==" 4,3,2 、1 ":endianness =" > "else:endianness =" < "assert info [" $ BYTEORD "] ==" 1,2,3,4 "#ドキュメントの単なるコピーである長いコメントを削除しました#データのタイプ:ifinfo ["$ DATATYPE"] == "I":パラメーターのパラメーターの場合:nb_bits = int(par.p_bits)assert nb_bits%8 == 0 nb_bytes = nb_bits / 8#unpackiのフォーマット文字列を決定しますng(https://docs.python.org/2/library/struct.htmlを参照)if nb_bytes == 1:c_type = "B" #unsigned char elif nb_bytes == 2:c_type = "H" #unsigned short elif nb_bytes == 4:c_type = "L" #unsigned long elif nb_bytes == 8:c_type = "Q" #unsigned long long else:
ValueError、 "バイト数(%d)が整数に対して無効です(https://docs.python.org/2/library/struct.html#byte-order-size-and-alignmentを参照)。" %nb_bytes fmt = "%s%s"%(endianness、c_type)p_range = int(par.p_range)def parser(data):value = struct.unpack(fmt、data.read(nb_bytes))[0] try: AssertionErrorを除く値<p_rangeをアサートします:print "Value%s high than%d"%(str(value)、p_range)return value par.parser = parser passelse:raise NotImplementedError、 "これまでに実装されたのは整数値の解析のみです。 "out_file = open(sys.argv [2]、" w ")out_file.write("#増幅_types \ t "+" \ t ".join([par.p_ampl for par in parameters])+" \ n " )out_file.write( "parameters \ t" + "\ t" .join([par.p_name for par in parameters])+ "\ n")i = 1 ############# ##################################ここで、適切なデータの解析を開始します######## ####################################### f.seek(data_start)while f.tell( )< data_end:values = [] for par in parameters:values.append(par.parser(f))out_f ile.write( "%d \ t"%i + "\ t" .join(map(str、values))+ "\ n")i + = 1out_file.close()f.close() 
この形式(および、他の多くのバイナリ形式)の一般的な考え方は、ファイルの先頭にヘッダーゾーンがあり、ファイルの残りの部分がどのように構成されているかを示す番号をエンコードするフィールドの数が定義されていることです。そのため、フォーマットのドキュメントに記載されている説明に従って、このヘッダーを解析することから始めます。ヘッダーから抽出された情報は、フォーマットのドキュメントに記載されているルールに従って、データの場所とエンコード方法を教えてくれます。私は擬似コードを書くのが苦手ですが、Pythonコードにコメントを追加することはできます。
Fiver
2019-02-03 08:49:29 UTC
view on stackexchange narkive permalink

フローサイトメトリーデータ(FCSファイル)を操作するためのPythonライブラリをいくつか維持しています。最新の FlowKitは、イベントデータをNumPy配列、Pandas DataFrame、またはCSVテキストとしてエクスポートする機能を提供します。 h5py ライブラリを使用すると、 HDF5ファイルとしてエクスポートするのは簡単です

gringer
2017-06-30 16:56:45 UTC
view on stackexchange narkive permalink

R / Bioconductorには、さまざまなフローサイトメトリー処理パッケージがあります。サイトメトリーデータを高レベルから確認するための開始点の1つは、FCSの基本的な抽出と分析のためのツールの大規模なセットである openCyto(またはそのビネット)です。ファイル。

過去に、 flowCoreを使用してFCSファイルをR構造として調べました。単一のFCSファイルのロードは非常に簡単で、おなじみのRパターンに従います。

  file.name <- "/dir/file.fcs" x <- read.FCS(file.name、transformation = FALSE)summary(x) 

FCSファイルを「HDF5のような読みやすい形式」に変換することについて質問するのは正しい質問ではないようです。 HDF5はコンテナ形式であり、ファイルシステムと多くの類似点を共有しています。コンパクトで標準化されたバイナリ形式であるため、FCSファイルをそのままにしておくのが最善だと思いました。

HDF5は大きな問題ではありません(私はそれが好きです)。 `read.FCS`のようなものがどのように機能するのかまだ興味があります。 FCSが標準形式の場合、FCSファイルの読み取り/書き込み用の標準(非独占的)ライブラリが必要だと思います。今のところ、私はRまたはMatlabを使用することを余儀なくされています(それでもここにも標準ライブラリはありません。異なるグループ/個人によって作成された異なるパッケージ/プログラムがあると思います。単一の標準はありません)。 C、Fortran、Python(など)でFCSファイルを分析したい場合はどうすればよいですか?


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...