[ROOT] cint + shared lib

From: Robert Probny (rob_probny@hotmail.com)
Date: Tue Feb 17 2004 - 13:56:20 MET


  Hello,
I am beginner in ROOT. Please help me with this problem:
I have small "MYClass" (see bellow). How create shared library  exam.so ? 
how write make file  and LinkDef.h file ? on my PC is root4.00.01 and gcc 
3.2

exam.h

#ifndef exam_h
#define exam_h
class exam {
private:
  TTree                        *fTree;
  static const Text_t  *fgPath;

  static const Int_t      fgMaxWires=48;
  UInt_t                        fNwires;
  UShort_t                   fWidth[fgMaxWires];
  UShort_t                   fWire[fgMaxWires];
public:
  exam(TTree *tree=0);
  virtual ~exam();
  void                  SetPath(const Text_t *path) { fgPath = path; }
  const Text_t  *GetPath() const { return fgPath; }
  void                 SetRun(const UShort_t run);
  void                 Init(TTree *tree);
  Int_t                 GetEntries() const { return fTree->GetEntries(); }
  void                 AnalyzeEntry(const Int_t entry);
};
#endif

exam.cxx

#include "exam.h"
//------------------------------
exam::exam(TTree *tree)
{
  if (tree == 0) return;
  Init(tree);
}
//------------------------------
exam::~exam()
{
  cout << "DESTRUCTOR" << endl;
  if (!fTree) return;
  if (fTree==0) return;
  delete fTree->GetCurrentFile();
}
//------------------------------
void exam::SetRun(const UShort_t run)
{
  Text_t fname[200];
  sprintf(fname,"%s/run%0.3u.root",GetPath(),run);
  TFile *f = new TFile(fname);
  TTree *mytree = (TTree*)f->Get("mytree");
  Init(mytree);
}
//------------------------------
void exam::Init(TTree *tree)
{
  if (tree == 0) return;
  fTree  = tree;
  fTree->SetBranchAddress("fNwires",&fNwires);
  fTree->SetBranchAddress("fWires.fWidth",fWidth);
  fTree->SetBranchAddress("fWires.fWire",fWire);
  fTree->SetBranchStatus("*",0);
  fTree->SetBranchStatus("fNwires",1);
  fTree->SetBranchStatus("fWires.fWidth",1);
  fTree->SetBranchStatus("fWires.fWire",1);

  cout << "Processing file: ";
  cout << fTree->GetCurrentFile()->GetName() << endl;
}
//------------------------------
void exam::AnalyzeEntry(const Int_t entry)
{
  if (fTree==0) return;
  fTree->GetEntry(entry);
  for (UShort_t i=0; i<fNwires; i++) {
    cout << "width = " << fWidth[i] << endl;
    cout << "wire = " << fWire[i] << endl;
  }
}

in root all working (for example):

root [0] .L exam.cxx
root [1] exam *ex1 = new exam
root [2] ex1->SetPath("/mypath")
root [3] ex1->SetRun(999)
root [4] ex1->AnalyzeEntry(99)
width = 1
wire = 10
width = 1
wire = 111
....

I test method .L exam.cxx+ but not working ...(errors, MyClass is wrong)

Regards Robert

_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE*  
http://join.msn.com/?page=features/junkmail



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET