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 |