Extract all previously selected events from the input file and write it to the output.
247 bool new_output =
false;
248 TBranch *br_in, *br_out;
264 ::printf(
"+++ Copy refs table to new output file:%s\n",
m_out->GetName() );
265 br_in =
m_ref_in->GetBranch(
"Databases" );
266 br_in->SetAddress( text );
267 br_out =
m_ref_out->GetBranch(
"Databases" );
268 br_out->SetAddress( text );
269 for (
int i = 0; i < br_in->GetEntries(); ++i ) {
270 br_in->GetEntry( i );
275 br_in =
m_ref_in->GetBranch(
"Containers" );
276 br_in->SetAddress( text );
277 br_out =
m_ref_out->GetBranch(
"Containers" );
278 br_out->SetAddress( text );
279 for (
int i = 0; i < br_in->GetEntries(); ++i ) {
280 br_in->GetEntry( i );
284 br_in =
m_ref_in->GetBranch(
"Links" );
285 br_in->SetAddress( text );
286 br_out =
m_ref_out->GetBranch(
"Links" );
287 br_out->SetAddress( text );
288 for (
int i = 0; i < br_in->GetEntries(); ++i ) {
289 br_in->GetEntry( i );
293 br_in =
m_ref_in->GetBranch(
"Params" );
294 br_in->SetAddress( text );
295 br_out =
m_ref_out->GetBranch(
"Params" );
296 br_out->SetAddress( text );
297 for (
int i = 0; i < br_in->GetEntries(); ++i ) {
298 br_in->GetEntry( i );
299 if (
strncmp( text,
"PFN=", 4 ) == 0 ) {
300 ::snprintf( text,
sizeof( text ),
"PFN=%s", br_out->GetFile()->GetName() );
301 ::printf(
"+++ PFN of the created output file is:%s\n", text );
302 }
else if (
strncmp( text,
"FID=", 4 ) == 0 ) {
303 static const char* fmt =
"FID=%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX";
305 unsigned char buf[16];
306 unsigned short sbuf[8];
307 unsigned int ibuf[4];
310 uuid.GetUUID( d.buf );
311 ::snprintf( text,
sizeof( text ), fmt, d.ibuf[0], d.sbuf[2], d.sbuf[3], d.buf[8], d.buf[9], d.buf[10],
312 d.buf[11], d.buf[12], d.buf[13], d.buf[14], d.buf[15] );
313 ::printf(
"+++ FID of the created output file is:%s\n", text );
321 while ( ( br_in = (TBranch*)
next() ) ) {
322 TString
name = br_in->GetName();
323 TClass* br_class = gROOT->GetClass( br_in->GetClassName(), kTRUE );
326 ::printf(
"+++ ERROR: Input and output event trees are incompatible. Selection not possible.\n" );
329 int out_num_entries = br_out->GetEntries();
332 const char* br_type =
"DataObject";
333 void* pObject = br_class->New();
334 br_in->SetAddress( &pObject );
335 br_out->SetAddress( &pObject );
336 int num_rd = br_in->GetEntry( num_evt );
338 ::printf(
"+++ ERROR: Failed to read data from branch:%s\n",
name.Data() );
341 if (
name.EndsWith(
"_R." ) ) {
343 for (
auto& ir : refs->
refs ) {
349 int num_wr = br_out->Fill();
351 ::printf(
"+++ ERROR: Failed to write data to extraction branch:%s " 352 "read:%d wrote:%d bytes [Length-mismatch]\n",
353 name.Data(), num_rd, num_wr );
356 ::printf(
"+++ Copied %8d bytes to %-10s branch %s(%d)\n", num_rd, br_type,
name.Data(), out_num_entries );
359 m_evt_out->SetEntries( br_out->GetEntries() + 1 );
Persistent reference object containing all leafs and links corresponding to a Gaudi DataObject.
int dbase
Data members to define object location in the persistent world.
Persistent reference object.
std::vector< RootRef > refs
The references corresponding to the next layer of items in the data store.