c言語でcfitsioを用い、fitsファイルの読み込み
c言語でcfitsioを用い、fitsファイルを読み込ませるプログラムについて紹介します。
まぁとりあえず結論から。
ヘッダーファイルは
#include <fitsio.h>
ですね。
int main(int argc, char *argv[])
{
int i,j,k,l;
fitsfile *fptr;
char card[FLEN_CARD];
int status=0,nkeys,ii;
int hdunum,hdutype,bitpix,naxis,maxdim,datatype,anynul;
long naxes[10],fpixel[2],nelements,NAXIS1x,NAXIS1y;
float nulval;
fpixel[0]=1;fpixel[1]=1;//スタートのピクセルをx,y軸共に「1」スタートと設定する。
fits_open_file (&fptr, argv[1], READONLY, &status);//fitsfileを開く
fits_get_num_hdus(fptr,&hdunum,&status);//ヘッダーを読み込む
fits_get_hdu_num(fptr,&hdunum);//ヘッダーの数を読み込む
fits_get_hdu_type(fptr,&hdutype,&status);//ヘッダーのタイプを読み込む
fits_get_img_type(fptr,&bitpix,&status);//「忘れた(笑)あんまり重要じゃなかった気がする。」
fits_get_img_dim(fptr,&naxis,&status);//軸の数を読み込む(普通は2次元画像なので「2」)
fits_get_img_size(fptr,naxis,&naxes[0],&status);//各軸のピクセル数を読み込む(軸の長さ)
NAXIS1x=naxes[0];//x軸の長さ
NAXIS1y=naxes[1];//y軸の長さ
nelements=NAXIS1x*NAXIS1y;//総ピクセル数を計算
float *array;
array=(float*)malloc(nelements*sizeof(float));
for(i=0;i<nelements;i++){
array[i]=0;
}//ここは、malloc関数を使って、仮想配列を作成
fits_read_pix(fptr,TFLOAT,&fpixel[0],nelements,&nulval,&array[0],&anynul,&status);//ピクセルの値を読み込む。
//「TFLOAT」がfloat型で読み込むということ。
//「fpixel[0]」が各軸の始点の設定。
//「nelements」が総ピクセル数。
//「&nulval」はとりあえず入れとく。
//「&array[0]」がピクセルの入るところ。
fits_close_file (fptr, &status);//fitsfileのクローズ
if (status)//もしstatusがあれば、
fits_report_error (stderr, status);//エラー番号を吐き出す。
float coodi1[NAXIS1x][NAXIS1y];
for(j=0;j<NAXIS1y;j++){
for(i=0;i<NAXIS1x;i++){
coodi1[i][j]=0;
coodi1[i][j]=array[i+j*NAXIS1y];
}
}
free(array);//mallocで作った関数のメモリ解放。
return 0;
}
がプログラムになります。
詳しいことはcfitsioのmanualがネットに転がっているので、それを見ていただきたいのですが、エッセンスとやっていることは各行の右側に載せています。
読み込んだ「array[ ]」は1次元です。(fitsfileは1次元だから)
なので、2次元にするために「coodi1[ ][ ]」に書き換えています。
これで、coodi1[0][0]をprintfしてやれば、fitsファイルの(1,1)の値が出ると思います。
(c言語なのでfor文を(0,0)スタートにしていることに注意。)
これで、fitsファイルをc言語の配列で自在に操ることができます!!
書き出しやヘッダー情報の読み込みはまた後日。
準備の大切さ
こんにちは。かずです。
ただいま、私は「修士論文」というものを書いています。
大学院には「修士課程」と「博士課程」というものがあり、それぞれ卒業を認めてもらうためには、論文を書かねばなりません。
それまでのその分野の歴史をイントロダクションとして記し、データや実験・解析方法をまとめます。死ぬ思いで出した結果をまとめると、そこから示唆されることや議論すべきことを書いて、ようやくサマリーを書きます。プラスで謝辞やリファレンスを書いて終わりです。
私の大学の先輩は短い人は50ページ程度ですが、長い人は150ページほど書いています。
解析や論文ゼミ、MTGにバイトを並行しながら最近書き始めたのですが、イントロの4/5くらい書いて既に25ページを超えています(笑)
もっと早くから論文を読み進め、準備をしておけばよかったと既に後悔。
これから書く後輩たちには、早め早めの準備をオススメします。
その前に自分が書き進めなければならないんですけどね(笑)
c言語でのtxtファイルの読み込み、コマンドライン引数
c言語でのtxtファイルの読み込み
数値計算や解析をするときに、計算速度の速いc言語を使いたいわけですが、まずc言語の配列にデータを読み込ませる必要があります。
今回はその部分を紹介します。
#include <stdio.h>
int main(int argc, char *argv)
{
char buf[100];
int i,j;
char name[100][100];
float sample[100]={};
int data[100]={};
FILE *fp;
if((fp=fopen(argv[1],"r"))==NULL){
printf("ファイル読み込めません\n");
}
for(i=0; fgets(buf,sizeof(buf),fp)!=NULL; i++){
fscanf(fp,"%s %f %d",name[i],&sample[i],&data[i]);
j+=1;
}
return 0;
}
普段使っているプログラムから抜粋して引用してきました。
includeは置いといて、まず知らない方が「???」となるのが、
int main(int argc, char *argv)
の部分でしょう。
int main
はいいとして、
(int argc, char *argv[])
ですよね。
これは「コマンドライン引数」と言いまして、プログラム書き上げて実行するときに、
「./jikkou」
と実行するわけですが、コマンドライン引数を使うと、
「./jikkou file.txt」
とすることで、「file.txt」をchar型の「argv[1]」にインプットしてくれるわけです。
これにより、いちいちファイル名を書き換えなくても良いのがメリットですね。
で、実際にファイルオープンのファイル名は「argv[1]」になっていますよね。
for(i=0; fgets(buf,sizeof(buf),fp)!=NULL; i++){
はファイルの一番下の行がNULL(空)になるまで1行ずつ読み込めという指示です。
fscanf(fp,"%s %f %d",name[i],&sample[i],&data[i]);
その行ごとにfscanfでtxtの内容を読み込みます。それぞれの型に合わせて%を設定し、intとfloatは&を使って配列に読み込ませます。
これで、txtをc言語の配列に読み込むことができます!!
量子力学のテキストランキング
物理学の勉強で参考になったテキスト(量子力学)
2巻セットになっていて、とてもわかりやすいです。
歴史には少し反対していますが、結構早い段階からシュレディンガー方程式を導入し、現代量子力学に重きをおいている印象です。
2位:岩波基礎物理学シリーズ 量子力学 (長岡さん)
一冊にまとまっているので、良いです。
よく教科書として使われているので、古典量子力学から現代量子力学まで幅広く網羅していますね。
買い物するときにこのサイトを経由すると、ポイントが貯まります!!
☆ ★ ☆ お小遣いサイト モッピー ☆ ★ ☆
累計600万人が利用しているポイントサイト!
貯めたポイントはAmazonギフトやiTunesギフト、現金等に交換できる!!
無料会員登録すると、どんどんポイントが貯まっちゃいます!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7
ネットショッピングするだけでポイント貯まる♪
楽天やAMAZONで買い物をするときに、モッピーを経由すると1%がポイントとして還元される!!
モッピーは1P=1円であらゆる交換先に対応!
貯めたポイントは現金や電子マネー(nanaco、楽天Edy、WAON)、ギフト券に交換できる!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7
最近買ったもので良かったものランキング(part1)
最近買ったもので良かったものランキング(part1)
1位:伊藤園 1日分の野菜48本入り
野菜ジュースを箱買いしておけば、朝の時間のないときに飲めて、野菜も摂れて一石二鳥!!
2位:ビスケット50枚入り×3
甘いカラメルビスケット。
コーヒーや紅茶のお供、日常でお世話になった人への簡単なお礼などにも使えます!!
3位:bluetoothイヤホン
bluetoothのイヤホンです。何がいいって急速充電なこととバッテリーの持ちが良いこと。普通に使ってて8時間は持ちます。
充電はmicro USBなので簡単ですし、イヤホンのコードが耳から伸びなくなるのが物凄い良い。
買い物するときにこのサイトを経由すると、ポイントが貯まります!!
☆ ★ ☆ お小遣いサイト モッピー ☆ ★ ☆
累計600万人が利用しているポイントサイト!
貯めたポイントはAmazonギフトやiTunesギフト、現金等に交換できる!!
無料会員登録すると、どんどんポイントが貯まっちゃいます!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7
ネットショッピングするだけでポイント貯まる♪
楽天やAMAZONで買い物をするときに、モッピーを経由すると1%がポイントとして還元される!!
モッピーは1P=1円であらゆる交換先に対応!
貯めたポイントは現金や電子マネー(nanaco、楽天Edy、WAON)、ギフト券に交換できる!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7
小遣い稼ぎ
今、私がお小遣い稼ぎで使っているポイントサイトを紹介します。
ちょっとしたスキマ時間にスマホをいじって、月2000円くらい稼いでいます。
飲食のバイトをするより楽チン!!
☆ ★ ☆ お小遣いサイト モッピー ☆ ★ ☆
累計600万人が利用しているポイントサイト!
貯めたポイントはAmazonギフトやiTunesギフト、現金等に交換できる!!
無料会員登録すると、どんどんポイントが貯まっちゃいます!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7
ネットショッピングするだけでポイント貯まる♪
楽天やAMAZONで買い物をするときに、モッピーを経由すると1%がポイントとして還元される!!
モッピーは1P=1円であらゆる交換先に対応!
貯めたポイントは現金や電子マネー(nanaco、楽天Edy、WAON)、ギフト券に交換できる!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7