Dear Rooters, I try to link a fortran code(herasy.f) to the c++ code. The fortran code by itself works fine but if it link to this c++ code, one of subroutine of the fortran code dosen't give a right answer. Have you ever met same problem? If you did, please give me some suggestion as soon as possible. (I suspicious that I didn't put correct flag when I complie these two code. what I did is following: f77 -c herfasy.f *.f g++ -c acceptance.cxx g++ herfasy.o *.o acceptance.o -L/lib -l* -lg2c) Thanks, wang Here is the acceptance.cxx #include <stdio.h> #include <iostream.h> // ROOT include #include "TROOT.h" #include "TFile.h" #include "TNtuple.h" #include "TMath.h" extern "C" void herfasy_(double &,double &, double &,double &); int main() { TROOT accept("accept","accept"); TFile *f = new TFile("/work/halla/e95001-2/wangxu/hbook/eq05/gmn_1pass_21067.root"); TNtuple *h1 = (TNtuple*) f->Get("h1"); Float_t asyt,thetat, yt, phit, deltat; double Enbeam,omega,thetas,asytt; Int_t nbytes; Enbeam=1.727; Float_t Eset=1.453; Float_t thed = 25.80; // Set branch addresses h1->SetBranchAddress("Ethetat", &thetat); // in mr h1->SetBranchAddress("Ephit", &phit); // in mr h1->SetBranchAddress("Eyt", &yt); // in mm h1->SetBranchAddress("Edelta", &deltat); // in % TFile *acceptance = new TFile("acceptance.root", "RECREATE"); TNtuple *ntuple = new TNtuple("ntuple", "Asymetry Study", "Ethetat:Ephit:Eyt:Edelta:asyt"); // Total event number //Int_t nentries = (Int_t) h1->GetEntries(); Int_t nentries=1; for(Int_t i=0; i<nentries; i++) { nbytes += h1->GetEvent(i); thetas=acos(cos(thed*3.1415926/180+phit/1000)*cos(thetat/1000)); thetas= thetas*180/3.1415926; omega=Enbeam-Eset*(1+deltat/100); herfasy_(Enbeam,thetas,omega,asytt); asyt=asytt; printf("%f\n",asyt); ntuple->Fill(thetat,phit,deltat,asyt); } ntuple->Write(); f->Close(); acceptance->Close(); return(0); }
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:41 MET