Hey Good People!!
I am trying to fill a root tree while acquiring data from a drs4 board.
When i use many channels - so i have more data to save - my rate is going down because of the slowness of the tree->Fill function. How can I speed up?
// acquiring data for deltaT time
while ((time(0) - t0) < cset.deltaT) {
/* start board (activate domino wave) */
b->StartDomino();
while (b->IsBusy());
/* read all waveforms */
b->TransferWaves(0, 8);
for (int ch = 0; ch < maxchan; ch++) {
ev.eventID = totevents;
b->GetTime(0, 2 * ch, b->GetTriggerCell(0), ev.time_array[ch]);
/* decode waveform (Y) array of first channel in mV */
b->GetWave(0, 2 * ch, ev.wave_array[ch]);
}
tree->Fill(); //<< this is slowing down my rate
totevents++;
}
This is my tree definition:
TTree * tree;
tree = (TTree*) new TTree("t1", "title");
TBranch * b_eventId = tree->Branch("eventID", &ev.eventID, "eventID/I");
sprintf(branchDef, "time_array[%d][1024]/F", SANTA_MAX);
TBranch * b_time_array = tree->Branch("time_array", &ev.time_array[0][0], branchDef);
sprintf(branchDef, "wave_array[%d][1024]/F", SANTA_MAX);
TBranch * b_wave_array = tree->Branch("wave_array", &ev.wave_array[0][0], branchDef);
If i don’t fill the tree i get about 50k events in 100 seconds, if i do fill the tree i get about 10k in same time. Thank you