60#define PAWC_SIZE 4000000
67# define hcbits hcbits_
68# define hcbook hcbook_
82extern "C" int quest[100];
85extern "C" int rzcl[11];
105# define hlimit hlimit_
107# define hropen hropen_
110# define hnoent hnoent_
112# define hgiven hgiven_
113# define hgnpar hgnpar_
119# define hdcofl hdcofl_
120# define hmaxim hmaxim_
121# define hminim hminim_
122# define hdelet hdelet_
123# define hntvar2 hntvar2_
124# define hntvar3 hntvar3_
125# define hbname hbname_
126# define hbnamc hbnamc_
138# define DEFCHAR const char*
139# define PASSCHAR(string) string
146# define hlimit HLIMIT
148# define hropen HROPEN
151# define hnoent HNOENT
153# define hgiven HGIVEN
154# define hgnpar HGNPAR
160# define hdcofl HDCOFL
161# define hmaxim HMAXIM
162# define hminim HMINIM
163# define hdelet HDELET
164# define hntvar2 HNTVAR2
165# define hntvar3 HNTVAR3
166# define hbname HBNAME
167# define hbnamc HBNAMC
177# define type_of_call _stdcall
178# define DEFCHAR const char*, const int
179# define PASSCHAR(string) string, strlen(string)
189 const int&,
const int&);
200 const int&,
const float&,
const float&,
const int&,
const int&);
210 const float&,
const float&);
215extern "C" void type_of_call hntvar2(
const int&,
const int&,
DEFCHAR,
DEFCHAR,
DEFCHAR,
int&,
int&,
int&,
int&,
int&,
fortran_charlen_t,
fortran_charlen_t,
fortran_charlen_t);
296 Error(
"THbookFile",
"Too many HbookFiles\n");
313 if (ier) printf (
" Error on hropen was %d \n", ier);
315 printf(
"Error cannot open input file: %s\n",fname);
317 if (ier ||
quest[0]) {
326 gROOT->GetListOfBrowsables()->Add(
this,fname);
330 for (
Int_t key=1;key<1000000;key++) {
334 if (
quest[13] & 8)
continue;
359 b->Add(
fKeys,
"IDs on disk");
369 Int_t nch = strlen(dirname);
381 for (
i=0;
i<512;
i++) cdir[
i] =
' ';
390 for (
i=510;
i>=0;
i--) {
391 if (cdir[
i] !=
' ')
break;
395 printf(
"fCurdir=%s\n",
fCurDir.Data());
408 gROOT->GetListOfBrowsables()->Remove(
this);
444 return fList->FindObject(obj);
453 for (
Int_t key=1;key<1000000;key++) {
457 if (
quest[13] & 8)
continue;
459 if (
id == idd)
break;
461 if (
id == 0)
return nullptr;
463 printf(
"Error cannot find ID = %d\n",idd);
473 printf(
"WARNING, previous ID=%d is replaced\n",
id);
480 printf(
"Error cannot read ID = %d\n",
id);
500 if (obj)
fList->Add(obj);
506 if (obj)
fList->Add(obj);
512 if (obj)
fList->Add(obj);
526 hgnf(
id,entry+1,
x[0],ier);
528 hgnt(
id,entry+1,ier);
542 hgntf(
id,entry+1,ier);
561 if (!formula)
return;
571 if (var == 1 &&
i == ncodes) last = 1;
618 Int_t nch = strlen(rootname);
621 rfile =
new char[nch+1];
622 strlcpy(rfile,rootname,nch+1);
625 rfile =
new char[nch+1];
626 strlcpy(rfile,
GetName(),nch+1);
627 char *dot = strrchr(rfile,
'.');
628 if (dot) strcpy(dot+1,
"root");
629 else strlcat(rfile,
".root",nch+1);
633 char *cmd =
new char[nch+1];
635 if (opt.
Contains(
"c")) strlcat (cmd,
" 0",nch+1);
636 if (opt.
Contains(
"l")) strlcat (cmd,
" 0",nch+1);
641 if (opt.
Contains(
"no")) {
delete [] rfile;
return nullptr;}
644 if (
f->IsZombie()) {
delete f;
f =
nullptr;}
657 int nsub,itype,isize,ielem;
659 float rmin[1000], rmax[1000];
671 chtag_out =
new char[nvar*
nchar+1];
678 chtag_out[nvar*
nchar]=0;
693 strlcpy(oldblock,
"OLDBLOCK",32);
694 Int_t oldischar = -1;
697 tree->SetHbookFile(
this);
700 char *bigbuf = tree->MakeX(500000);
711 for(
i=0;
i<nvar;
i++) {
714 memset(block,
' ',
sizeof(block));
715 block[
sizeof(block)-1] = 0;
716 memset(fullname,
' ',
sizeof(fullname));
717 fullname[
sizeof(fullname)-1]=0;
719 hntvar2(
id,
i+1,
PASSCHAR(
name),
PASSCHAR(fullname),
PASSCHAR(block),nsub,itype,isize,nbits,ielem,32,64,32);
726 if(golower)
name[j] = tolower(
name[j]);
729 if (golower == 2)
name[0] = tolower(
name[0]);
732 if(golower && fullname[j-1] !=
'[') fullname[j] = tolower(fullname[j]);
734 if (golower == 2) fullname[j] = tolower(fullname[j]);
735 if (fullname[j] ==
' ') fullname[j] = 0;
738 if (golower == 2) fullname[0] = tolower(fullname[0]);
740 if (block[j] ==
' ') block[j] = 0;
743 if (itype == 1 && isize == 4) strlcat(fullname,
"/F",64);
744 if (itype == 1 && isize == 8) strlcat(fullname,
"/D",64);
745 if (itype == 2) strlcat(fullname,
"/I",64);
746 if (itype == 3) strlcat(fullname,
"/i",64);
748 if (itype == 4) strlcat(fullname,
"/b",64);
749 if (itype == 5) strlcat(fullname,
"/C",64);
752 if (itype == 5) ischar = 1;
755 if (ischar != oldischar || strcmp(oldblock,block) != 0) {
757 strlcpy(oldblock,block,32);
760 Int_t lblock = strlen(block);
769 Int_t bufsize = 8000;
771 tree->GetListOfBranches()->Add(branch);
782 boolflag[
i] = bufpos;
785 bufpos += isize*ielem;
788 charflag[
i] = bufpos - 1;
789 lenchar[
i] = isize * ielem;
819 float rmin[1000], rmax[1000];
832 chtag_out =
new char[nvar*
nchar+1];
835 chtag_out[nvar*
nchar]=0;
843 char *
name = chtag_out;
846 tree->SetHbookFile(
this);
851 for(
i=0;
i<nvar;
i++) {
856 for (j=
nchar-2;j>0;j--) {
857 if(golower)
name[j] = tolower(
name[j]);
858 if (
name[j] ==
' ' && last == 0)
name[j] = 0;
861 if (golower == 2)
name[0] = tolower(
name[0]);
864 for (j=0;j<
nchar;j++) {
865 if (
name[j] !=
' ')
break;
868 Int_t bufsize = 8000;
873 tree->GetListOfBranches()->Add(branch);
901 hgive(
id,
chtitl,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb,80);
903 hgive(
id,
chtitl,80,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb);
912 const Int_t kCON1 = 9;
940 hgive(
id,
chtitl,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb,80);
942 hgive(
id,
chtitl,80,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb);
950 for (
i=0;
i<=
ncx;
i++) xbins[
i] =
q[lbins+
i+1];
960 h1->GetListOfFunctions()->Add(
gr);
965 x =
h1->GetBinCenter(
i);
973 h1->SetMaximum(yymax);
977 h1->SetMinimum(yymin);
992 hgive(
id,
chtitl,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb,80);
994 hgive(
id,
chtitl,80,
ncx,
xmin,
xmax,
ncy,
ymin,
ymax,
nwt,
idb);
1001 if (lw) h2->Sumw2();
1007 h2->Fill(
x+offsetx,
y+offsety,
hij(
id,
i,j));
1010 h2->SetBinError(
i,j,err2);
1023 Int_t nch = strlen(path);
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t nchar
R__EXTERN TSystem * gSystem
TObjArray * GetListOfLeaves()
Using a TBrowser one can browse all ROOT objects.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
A TGraph is an object made of two arrays X and Y with npoints each.
1-D histogram with a float per channel (see TH1 documentation)
virtual void SetBinError(Int_t bin, Double_t error)
Set the bin Error Note that this resets the bin eror option to be of Normal Type and for the non-empt...
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual void SetEntries(Double_t n)
2-D histogram with a float per channel (see TH1 documentation)
void SetAddress(void *addobj) override
Set address of this branch See important remark in the header of THbookTree.
void SetBlockName(const char *name)
This class is an interface to the Hbook objects in Hbook files.
void InitLeaves(Int_t id, Int_t var, TTreeFormula *formula)
This function is called from the first entry in TTreePlayer::InitLoop It analyzes the list of variabl...
TObject * Get(Int_t id)
import Hbook object with identifier idd in memory
void DeleteID(Int_t id)
remove id from file and memory
Int_t GetEntryBranch(Int_t entry, Int_t id)
Read in memory only the branch bname.
virtual void Close(Option_t *option="")
Close the Hbook file.
void ls(const char *path="") const override
List contents of Hbook directory.
virtual void SetBranchAddress(Int_t id, const char *bname, void *add)
Set branch address.
virtual Bool_t cd(const char *dirname="")
change directory to dirname
~THbookFile() override
destructor
THbookFile()
the constructor
TObject * FindObject(const char *name) const override
return object with name in fList in memory
virtual TObject * Convert1D(Int_t id)
Convert an Hbook 1-d histogram into a Root TH1F.
virtual TObject * ConvertProfile(Int_t id)
Convert an Hbook profile histogram into a Root TProfile.
virtual TFile * Convert2root(const char *rootname="", Int_t lrecl=0, Option_t *option="")
Convert this Hbook file to a Root file with name rootname.
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open.
virtual TObject * Convert2D(Int_t id)
Convert an Hbook 2-d histogram into a Root TH2F.
virtual TObject * ConvertCWN(Int_t id)
Convert the Column-Wise-Ntuple id to a Root Tree.
void Browse(TBrowser *b) override
to be implemented
Int_t GetEntry(Int_t entry, Int_t id, Int_t atype, Float_t *x)
Read in memory all columns of entry number of ntuple id from the Hbook file.
virtual TObject * ConvertRWN(Int_t id)
Convert the Row-Wise-Ntuple id to a Root Tree.
A wrapper class supporting Hbook ntuples (CWN and RWN).
A TLeaf for an Integer data type.
Int_t GetMaximum() const override
virtual void SetMaximum(Int_t max)
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
virtual TLeaf * GetLeafCount() const
If this leaf stores a variable-sized array or a multi-dimensional array whose last dimension has vari...
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
TObject * UncheckedAt(Int_t i) const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
TObject()
TObject constructor.
Int_t Fill(const Double_t *v)
void ToLower()
Change string to lower-case.
const char * Data() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Double_t Sqrt(Double_t x)
Returns the square root of x.