c语言调用fortran数组,fortran调用C++ (4.数组直接写到ROOT文件)

功能介绍:fortran调用C++  实现数组的传递,同时写到ROOT文件,

多次调用的数据可以连续写到同一个ROOT文件

使用说明:g++ -c mycpp.cpp -I`root-config --incdir`

`root-config --glibs` `root-config --libs`

gfortran -c

myfort.f90

gfortran

myfort.o mycpp.o -lstdc++ -o test -I`root-config

--incdir` `root-config --glibs` `root-config --libs`

./test

fortran代码,文件名:myfort.f90

program

main

integer

i,num,j

parameter(num=1000000)

real

arr(4,num)

do j=1,5

do

i=1,num

call

random_number(arr(2,i))

call

random_number(arr(3,i))

arr(1,i)=i

end do

arr(4,:)=j

call

gotoc(num,arr,j)

end do

end

program

C++代码,文件名:mycpp.cpp

#include

#include

#include

#include

#include

#include

#include

#include

#include

//获取时间信息的头文件

using namespace

std;

extern "C" void

gotoc_(int *num,float arr[][4], int *jj)

{

float

v1,v2,v3,v4;

float

start,end,time;

TFile

*f;

TTree

*t2;

start=clock();//开始时间

if(*jj==1)

{//为了更新数据,要在第一次写的时候新建ROOT文件

f= new

TFile("test.root","recreate");//新建文件

t2= new

TTree("t2","test");//新建TREE

t2->Branch("v1",&v1,"v1/F");

t2->Branch("v2",&v2,"v2/F");

t2->Branch("v3",&v3,"v3/F");

t2->Branch("v4",&v4,"v4/F");//新建BRANCH,定义名称和数据类型

}else{

f = new

TFile("test.root","update");//非第一次写入的时候,使用UPDATE连续写入

t2 =

(TTree*)f->Get("t2");//读取TREE

t2->SetBranchAddress("v1",&v1);

t2->SetBranchAddress("v2",&v2);

t2->SetBranchAddress("v3",&v3);

t2->SetBranchAddress("v4",&v4);//指定BRANCH地址

}

for(int

i=0;i<=*num-1;i++)//循环数组

{

v1=arr[i][0];

v2=arr[i][1];

v3=arr[i][2];

v4=arr[i][3];

t2->Fill();//写入数据

}

t2->Write("",

TObject::kOverwrite);//把数据从内存写到文件,同时保存最新的数据

f->Close();

delete

f;

end=clock();//结束时间

time=(end-start)/CLOCKS_PER_SEC;//计算时间

单位S

cout

<< "time:"

<< time

<< endl;

}

运行结果:

生成test.root文件

其中 event

5000000个(循环5次)

4个BRANCH

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值