追記(2012.02.27):入力ファイルはカンマを含まないほうが読み込みが劇的に速くなるようです。あと、fprintfではなくC++らしくfstreamを使いましょう。fprintfは一度に12個くらいしか読み取れないし。
たとえばGeantで、
2.312,123,6643,7456,3554,3434.65,7346.45
1,2,3,4,5,6
426,432.6,767.9,3459.04,325.53,367.02
#include<fstream>
#include<TH1.h>
#include<TH2.h>
#include<TFile.h>
#include<TTree.h>
#include<TCanvas.h>
#include<parameter20111003.h>
#include<math.h>
//#include<iostream>
#include<iostream> using namespace std;
#include<stdio.h>
void geant_test(){
// gStyle->SetOptFit(0001);
gStyle->SetOptFit(0000);
char inname[100],outname[100];
sprintf(inname,"output.dat");//入力ファイル名
// sprintf(inname,"caf2-20111005-21.root");//入力ファイル名
sprintf(outname,"tree_geant.root");//出力ファイル名
//making TTree
TFile ftree(outname,"recreate");
TTree *tree2= new TTree("h40","Coincidence");
Float_t Naiadc[6],Naitdc[6];
tree2->Branch("Naiadc",&Naiadc,"Naiadc[6]/F");
tree2->Branch("Naitdc",&Naitdc,"Naitdc[6]/F");
// http://simd.jugem.jp/?eid=49
FILE *fp;
fp = fopen( inname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません¥n", fname );
return -1;
}
Float_t f1,f2,f3,f4,f5,f6;
while( ( ret = fscanf( fp, "%f,%f,%f,%f,%f,%f", &f1, &f2, &f3, &f4, &f5, &f6 ) ) != EOF ){
printf( "%f %f %f %f %f %f\n", f1, f2, f3, f4, f5, f6 );
Naiadc[0]=f1;
Naiadc[1]=f2;
Naiadc[2]=f3;
Naiadc[3]=f4;
Naiadc[4]=f5;
Naiadc[5]=f6;
tree2->Fill();
}
fclose( fp );
tree2->Write();
// tree2->Print();
// tree2->Show(200);
ftree.Close();
//ここまででROOTファイルが完成
//ついでにつくってTTreeからヒストグラムを生成してみる
//ヒストグラムの準備
TH1F *adc[6];
char histname[6][99],histtitle[6][99];
for (Int_t id=0; id<6; id++){
sprintf(histname[id],"h10%d",id+1);
sprintf(histtitle[id],"Geant Simulation for ADC %d",id+1);
adc[id] = new TH1F(histname[id],histtitle[id],2000,0,4000);
}
TFile *file1 = new TFile(outname);
Float_t Nadc[6];
h40->SetBranchAddress("Naiadc",&Nadc);
Int_t nevent =h40->GetEntries();
for (Int_t nev=1; nev<nevent; nev++){
printf("%dth loop out of%d events\n",nev,nevent);
h40->GetEntry(nev);
for (Int_t id=0;id<6;id++){
adc[id]->Fill(Nadc[id]);
}
}
TCanvas *c1 = new TCanvas();
c1->Divide(2,3);
c1_1->SetLogy();
c1_2->SetLogy();
c1_3->SetLogy();
c1_4->SetLogy();
c1_5->SetLogy();
c1_6->SetLogy();
for (Int_t id=0;id<6;id++){
c1->cd(id+1);
adc[id]->Draw();
}
c1->Print("geant_test.pdf");
}
最終更新:2012年02月27日 19:08