Back Midas Rome Roody Rootana
  Rome Analyzer Framework  Not logged in ELOG logo
Entry  21 Oct 2015, SUDESHNA GANGULY, Info, Adding Trees and Branches in ROME 
    Reply  22 Oct 2015, Ryu Sawada, Info, Adding Trees and Branches in ROME 
Message ID: 163     Entry time: 22 Oct 2015     In reply to: 162
Author: Ryu Sawada 
Topic: Info 
Subject: Adding Trees and Branches in ROME 
Dear Sudeshna Ganguly

It might be my misunderstanding, but do you mean that you want to add a new branch every time when you take one
event ? (namely, the number of branches n equals to the number of events ?)

In ROME, ( and I guess in most of user applications), each entry in the tree (instead of each branch) refers to one
event. Namely, the number of branches n is independent of the number of events; and the number of entries
increases as you take more events.

In the ROME applications, there is a one to one relation between,
- ROME Folder and Branch in Tree
- ROME Field in Folder and Leave in Tree
ROME folder and field are supposed to be defined in an XML file and the implementation (i.e. conversion to C++ code)
is done by ROMEBuilder.

Folders and fileds can be arrays.

I think, in your case, ROME folder could be like one of the followings depending on your data structure and preference,
Since I guess WFD stands for Wave Form Digitizer and guess has many numbers (instead of one), I expect you may use the 2nd or 3rd example,

1) A single variable 'WFD' is in five 'Data' folder instances
            <FolderName>Data</FolderName>
            <ArraySize>5</ArraySize>
            <Field>
                <FieldName>WFD</FieldName>
                <FieldType>Double_t</FieldType>
                <FieldComment>WFD Values</FieldComment>
            </Field>

2) A variable-length array 'WFD' is in five 'Data' folder instances
            <FolderName>Data</FolderName>
            <ArraySize>5</ArraySize>
            <Field>
                <FieldName>WFD</FieldName>
                <FieldType>Double_t</FieldType>
                <ArraySize>vector</ArraySize>
                <FieldComment>WFD Values</FieldComment>
            </Field>

3) A fixed-length array 'WFD' is in five 'Data' folder instances
            <FolderName>Data</FolderName>
            <ArraySize>5</ArraySize>
            <Field>
                <FieldName>WFD</FieldName>
                <FieldType>Double_t</FieldType>
                <ArraySize>1024</ArraySize>
                <FieldComment>WFD Values</FieldComment>
            </Field>

4) An array 'WFD' is in one 'Data' folder instance, and the array size of 'WFD' is five.
            <FolderName>Data</FolderName>
            <Field>
                <FieldName>WFD</FieldName>
                <FieldType>Double_t</FieldType>
                <ArraySize>5</ArraySize>
                <FieldComment>WFD Values</FieldComment>
            </Field>


Once you add a relation between the 'Data' folder and a branch in a tree (as shown <Tree> section of $ROMESYS/examples/midas/midas.xml),
The generated application,
- reads the tree and copies data in to the folder before every event (if the <DAQSystem> in config XML is rome)
- fills the tree with copying data from the folder

So you don't need to write code to read/write tees.
Instead you need to access the folders.

The access method depends on the folder structure. For the example above,

1)
   Int_t nCh = 5;
   for (Int_t iCh = 0; iCh < nCh; iCh++) {
      gAnalyzer->GetDataAt(iCh)->SetWFD(some_number);
   }

2)
   Int_t nCh = 5;
   for (Int_t iCh = 0; iCh < nCh; iCh++) {
      gAnalyzer->GetDataAt(iCh)->SetWFDSize(1024);
      Int_t wfdSize = gAnalyzer->GetDataAt(iCh)->GetWFDSize();
      for (Int_t i = 0; i < wfdSize; i++) {
         gAnalyzer->GetDataAt(iCh)->SetWFDAt(i, some_number);
      }
   }

3)
   Int_t nCh = 5;
   for (Int_t iCh = 0; iCh < nCh; iCh++) {
      for (Int_t i = 0; i < 1024; i++) {
         gAnalyzer->GetDataAt(iCh)->SetWFDAt(i, some_number);
      }
   }

4)
   Int_t nCh = 5;
   for (Int_t iCh = 0; iCh < nCh; iCh++) {
      gAnalyzer->GetData()->SetWFDAt(iCh, some_number);
   }

You can read the variables by using GetWFD (or GetWFDAt if WFD is an array) function.


You can find more example of the folder structure in $ROMESYS/examples/argus/folders/folderEntries.xml.

Ryu

> Hi,
>
> I need to add a tree, the tree will have n branches. Each branch will refer to
> one event. Now Each branch will have 5 leaves. Each leaf will have data from one
> WFD channel. There are data from total 5 WFD channels per event in our midas bank.
>
> I have seen some examples of trees and branches in ROME, but I don't know how I
> can loop over one channel to another channel and save those data into each leaf.
>
> Any help will be appreciated greatly.
>
> Sudeshna Ganguly
ELOG V3.1.4-2e1708b5