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言語の配列に読み込むことができます!!

量子力学のテキストランキング

物理学の勉強で参考になったテキスト(量子力学)

1位:裳華房 量子力学1 2 (江沢さん)

2巻セットになっていて、とてもわかりやすいです。

歴史には少し反対していますが、結構早い段階からシュレディンガー方程式を導入し、現代量子力学に重きをおいている印象です。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

◆◆量子力学 1 / 江沢洋/著 小出昭一郎/監修 阿部竜蔵/監修 / 裳華房
価格:2808円(税込、送料別) (2018/11/23時点)

楽天で購入
[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

【送料無料】 量子力学 2 / 江沢洋 【本】
価格:2592円(税込、送料無料) (2018/11/23時点)

楽天で購入

 

2位:岩波基礎物理学シリーズ 量子力学 (長岡さん) 

一冊にまとまっているので、良いです。

よく教科書として使われているので、古典量子力学から現代量子力学まで幅広く網羅していますね。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

岩波基礎物理シリーズ(5) 量子力学 [ 長岡洋介 ]
価格:3564円(税込、送料無料) (2018/11/23時点)

楽天で購入

 

 

買い物するときにこのサイトを経由すると、ポイントが貯まります!!

 

☆ ★ ☆ お小遣いサイト モッピー ☆ ★ ☆

累計600万人が利用しているポイントサイト!
貯めたポイントはAmazonギフトやiTunesギフト、現金等に交換できる!!

無料会員登録すると、どんどんポイントが貯まっちゃいます!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7

 

ネットショッピングするだけでポイント貯まる♪
楽天AMAZONで買い物をするときに、モッピーを経由すると1%がポイントとして還元される!!

 

モッピーは1P=1円であらゆる交換先に対応!

貯めたポイントは現金や電子マネー(nanaco楽天EdyWAON)、ギフト券に交換できる!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7

最近買ったもので良かったものランキング(part1)

最近買ったもので良かったものランキング(part1)

 

1位:伊藤園 1日分の野菜48本入り

野菜ジュースを箱買いしておけば、朝の時間のないときに飲めて、野菜も摂れて一石二鳥!!

 

2位:ビスケット50枚入り×3

甘いカラメルビスケット。

コーヒーや紅茶のお供、日常でお世話になった人への簡単なお礼などにも使えます!!

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ロータス カラメルビスケット 50枚入×3【1six】
価格:1890円(税込、送料無料) (2018/11/23時点)

楽天で購入

 

3位:bluetoothイヤホン

bluetoothのイヤホンです。何がいいって急速充電なこととバッテリーの持ちが良いこと。普通に使ってて8時間は持ちます。

充電はmicro USBなので簡単ですし、イヤホンのコードが耳から伸びなくなるのが物凄い良い。

 

 

買い物するときにこのサイトを経由すると、ポイントが貯まります!!

 

☆ ★ ☆ お小遣いサイト モッピー ☆ ★ ☆

累計600万人が利用しているポイントサイト!
貯めたポイントはAmazonギフトやiTunesギフト、現金等に交換できる!!

無料会員登録すると、どんどんポイントが貯まっちゃいます!!
http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7

 

ネットショッピングするだけでポイント貯まる♪
楽天AMAZONで買い物をするときに、モッピーを経由すると1%がポイントとして還元される!!

 

モッピーは1P=1円であらゆる交換先に対応!

貯めたポイントは現金や電子マネー(nanaco楽天EdyWAON)、ギフト券に交換できる!!
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楽天EdyWAON)、ギフト券に交換できる!!


http://pc.moppy.jp/entry/invite.php?invite=Ms8Ke1f7

 

メルカリでの販売

学部時代の共通教育などのいらない教科書を売ろうと思ったが、ブックオフへの持ちこみは安く買い叩かれる。

そこで、メルカリへ出品して見ると、もちろんすぐには売れないが、そこそこの値段で買ってくれる人がいるみたいだ。

 

教科書だけでなくもの珍しい本なども売れる模様。

 

送料と手数料との相談だが。