New features preliminary description
====================================
Some remarks about IO in makers.
================================
Maker StTreeMaker provides I/O in postMDC2 format.
It is based on StTree class.
1. All the data is split into different branches.
2. Branches can be grouped several to a file, but by default
one branch - one file.
3. Each branch has its own I/O mode:
"r"=ReadOnly;
"w"=WriteOnly;
"u"=ReadWrite;
"0"=Do nothing
Let us write the data
StTreeMaker *treeMk = new
StTreeMaker("tree","psc0049_08_40evts.root","bfcTree");
// "tree" here is arbitrary name assigned to maker instance
// "psc0049_08_40evts.fzd" is the name of input file for run.
// Only the part "psc0049_08_40evts" is used by the maker
// to construct default output file names.
// The directory path and extension is ignored
// "bfcTree" is the name of tree. By default it is bfcTree which is used
// for main STAR output stream. But user can define his own
stream
// with different name
treeMk->SetIOMode("w"); //define write mode
treeMk->SetDebug(); //debug is ON
// Now define different branches.
// define branch with name "dstBranch" which will be filled
// by dataset with name "dst"
treeMk->IntoBranch("dstBranch","dst");
treeMk->IntoBranch("ftpc_rawBranch","ftpc_raw/.data");
// trgBranch will be filled by ctf mwc trg structures
treeMk->IntoBranch("trgBranch","ctf mwc trg");
// Default output files for these branches will be:
// dstBranch: psc0049_08_40evts.dst.root
// ftpc_rawBranch: psc0049_08_40evts.ftpc_raw.root
// trgBranch: psc0049_08_40evts.trg.root
// So you see, the word "Branch" is removed from file name
// NOW, redefine output file for trgBranch
treeMk->SetBranch("trgBranch","my_trg_data.root");
// NOW, redefine output file for "trgBranch" & "ftpc_rawBranch"
// and send them in one file
treeMk->SetBranch("dstBranch", "myFile.root")
treeMk->SetBranch("ftpc_rawBranch","myFile.root")
// OK, let us put all the branches in ONE file
treeMk->SetBranch("*", "All.root")
// SPECIAL hist(ogram) or hist(ory) branch
//If name of branch is started from "hist" it is a special branch.
//It is filled only at the end of run, and apart of user defined information
//it is filled by all histograms from all makers
treeMk->IntoBranch("histBranch","someParams someConst geant/.data/geom
");
HOW TO READ BRANCHES
====================
StTreeMaker *treeReadMk = new StTreeMaker("treeRead",
"psc0049_08_40evts.root","myTree");
StTreeMaker *treeWriteMk = new
StTreeMaker("treeWrite","psc0049_08_40evts.root","myTree");
treeWriteMk->IntoBranch("newBranch","name1 name2 ");
// treeRead maker will read existing tree
// treeWrite maker will add new branches and will write them
HOW to READ OLD FORMATS
New maker StIOMaker was developed.
1. This maker does not read anything itself. It supervises other I/O makers.
2. It loads needed makers itself, depending on input file
3. It can read XDF,MDC2 and current StTree formats
4. All I/O makers now inherit from one abstract StIOInterFace I/O maker class
which allows StIOMaker to treat other makers in a similar way
5. All the I/O makers including StIOMaker support all methods of StTreeMaker
6. All formats will be accessible via this maker. All detailis
are hidden from the user.
7. StIOMaker can handle multiple input files via very simple StFile class
StFile *setFile = new StFile();
setFile->AddFile("/disk00001/..../file1.root");
setFile->AddFile("/disk00001/..../file2.xdf");
setFile->AddFile("/disk00001/..../file3.root");
setFile->AddFile("/disk00001/abc/*.root");
// Input Tree
StIOMaker *IOMk = new StIOMaker("IO","r",setFile);
//StIOMaker *IOMk = new StIOMaker("IO","r",MainFile);
IOMk->SetIOMode("r");
IOMk->SetBranch("*",0,"0"); //deactivate all branches
IOMk->SetBranch("dstBranch",0,"r"); // activate only dstBranch
NEW FEATURES of DB maker
========================
As before DB supports period of validity. The time stamp of start validity
is presented in the file name of ROOT macros
tcc_params.2001022.234021.C
or in symbolic form
tcc_params.YYYYMMDD.HHMMSS.C
If there is no time-stamp 19950101.000000 is assumed
In addition some aliases for validities are allowed
sd97 19970101.000000
sd98 19980101.000000
year_1a 19990101.000000
year_1b 19990501.000000
year_1c 19991001.000000
year_1d 19991101.000000
year_1e 19991210.000000
year_2a 20000101.000000
So file name tcc_params.year_1a.C == tcc_params.19990101.000000.C
Now we do not have real time-stamp on simulation data you can
define special DB time at the beginning
St_db_Maker *dbMk = new St_db_Maker("db",mainDB);
dbMk->SetDateTime(19990101,000000);
OR equivalent
dbMk->SetDateTime("year_1a");
After this only macros with appropriate validity will be loaded.
OUR database, based on UNIX directories and CINT macros
is rather primitive. It can handle only one key == time-stamp
Sometimes it is not enough. If 2 CINT macros create the same
type of structure, a clash is inevitable.
Let us say we have
Trs.C
TrsTestData.C
With the same structure, but only one must be used.
We can now select which we want
dbMk->SetOff("params/tpc/trspars/Trs*") Off all Trs
dbMk->SetOn ("params/tpc/trspars/TrsTest") On TrsTest
Now only TrsTest.C will be loaded.