NCFS-Pack
A generic (astro)particle physics analysis framework
 
Loading...
Searching...
No Matches
NcJob.cxx
Go to the documentation of this file.
1
31
33
132
133#include "NcJob.h"
134#include "Riostream.h"
135
136ClassImp(NcJob); // Class implementation to enable ROOT I/O
137
139NcJob::NcJob(const char* name,const char* title) : TTask(name,title)
140{
148
149 fMakefolder=0;
150 fMainObject=0;
151 fFolder=0;
152 fObjects=0;
153 fSelect=0;
154
155 // Introduce this NcJob based instance into the ROOT task list
156 TSeqCollection* tasks=gROOT->GetListOfTasks();
157 if (tasks) tasks->Add(this);
158
159 NcVersion version;
160 version.Data();
161}
162
164{
174
175 // Remove this NcJob based instance into the ROOT task list
176 TSeqCollection* tasks=gROOT->GetListOfTasks();
177 if (tasks) tasks->Remove(this);
178
179 if (fObjects)
180 {
181 delete fObjects;
182 fObjects=0;
183 }
184 if (fFolder)
185 {
186 TList* list=gROOT->GetListOfBrowsables();
187 if (list)
188 {
189 TFolder* top=(TFolder*)list->FindObject("NcJob-folders");
190 if (top) RecursiveRemove(fFolder);
191 }
192 delete fFolder;
193 fFolder=0;
194 }
195 if (fSelect)
196 {
197 delete fSelect;
198 fSelect=0;
199 }
200
201 // Remove the subtasks from the internal TTask list without deleting them
202 if (fTasks) fTasks->Clear();
203}
204
206{
212
213 cout << " ***" << endl;
214 cout << " *** Environment of job " << GetName() << " ***" << endl;
215 cout << " ***" << endl;
216 cout << " === Available (sub)tasks : " << endl;
217 ls();
218 if (fFolder)
219 {
220 cout << " === Current job-folder contents : " << endl;
221 fFolder->ls();
222 }
223 cout << endl;
224}
225
226void NcJob::ExecuteJob(Int_t mode)
227{
254
255 if (mode<0) fMakefolder=-1;
256 if (mode==1 || mode==11) fMakefolder=1;
257
258 gROOT->cd();
259 Exec(GetName());
260
261 if (abs(mode)>9)
262 {
263 CleanTasks();
264 ExecuteTasks(GetName());
265 }
266}
267
269{
279
280 if (!fMakefolder) fMakefolder=1;
281}
282
283TFolder* NcJob::GetFolder() const
284{
290
291 return fFolder;
292}
293
294TObject* NcJob::GetMainObject() const
295{
301
302 return fMainObject;
303}
304
305void NcJob::SetMainObject(TObject* obj)
306{
312
313 if (obj)
314 {
315 fMainObject=obj;
316 AddObject(obj);
317 }
318}
319
320void NcJob::AddObject(TObject* obj)
321{
327
328 if (!obj) return;
329
330 if (!fObjects) fObjects=new TObjArray();
331
332 if (fMakefolder>0 && !fFolder)
333 {
334 // Create the top level environment folder for all NcJobs if needed
335 TList* list=gROOT->GetListOfBrowsables();
336 if (list)
337 {
338 TFolder* top=(TFolder*)list->FindObject("NcJob-folders");
339 if (!top)
340 {
341 top=new TFolder("NcJob-folders","Environment for all NcJob derived tasks");
342 list->Add(top,"NcJob-folders");
343 }
344 // Create the task-specific folder as a sub-folder in the top folder
345 fFolder=top->AddFolder(GetName(),GetTitle());
346 }
347 }
348
349 // Add object pointer to array and folder if it doesn't already exist
350 Int_t exist=0;
351 for (Int_t i=0; i<fObjects->GetEntries(); i++)
352 {
353 if (obj==fObjects->At(i))
354 {
355 exist=1;
356 break;
357 }
358 }
359 if (!exist)
360 {
361 fObjects->Add(obj);
362 if (fFolder) fFolder->Add(obj);
363 }
364}
365
366void NcJob::AddObjects(TObjArray* arr)
367{
373
374 if (!arr) return;
375
376 TObject* obj=0;
377 for (Int_t i=0; i<arr->GetSize(); i++)
378 {
379 obj=arr->At(i);
380 if (obj) AddObject(obj);
381 }
382}
383
384void NcJob::RemoveObject(TObject* obj)
385{
393
394 if (!obj) return;
395
396 if (fObjects)
397 {
398 TObject* test=fObjects->Remove(obj);
399 if (test)
400 {
401 fObjects->Compress();
402 if (test==fMainObject) fMainObject=0;
403 }
404 }
405
406 if (fFolder) fFolder->Remove(obj);
407}
408
409void NcJob::RemoveObjects(const char* classname)
410{
418
419 if (!fObjects) return;
420
421 Int_t remove=0;
422 for (Int_t i=0; i<fObjects->GetEntries(); i++)
423 {
424 TObject* obj=fObjects->At(i);
425 if (obj->InheritsFrom(classname))
426 {
427 TObject* test=fObjects->Remove(obj);
428 if (test)
429 {
430 remove=1;
431 if (test==fMainObject) fMainObject=0;
432 }
433 if (fFolder) fFolder->Remove(obj);
434 }
435 }
436 if (remove) fObjects->Compress();
437}
438
439TObject* NcJob::GetObject(Int_t j) const
440{
447
448 if (!fObjects || j<1) return 0;
449
450 TObject* obj=0;
451
452 if (j<=fObjects->GetEntries()) obj=fObjects->At(j-1);
453 return obj;
454}
455
456TObject* NcJob::GetObject(const char* classname) const
457{
463
464 if (!fObjects) return 0;
465
466 TObject* obj=0;
467 for (Int_t i=0; i<fObjects->GetEntries(); i++)
468 {
469 TObject* obx=fObjects->At(i);
470 if (obx->InheritsFrom(classname))
471 {
472 obj=obx;
473 break;
474 }
475 }
476 return obj;
477}
478
479TObjArray* NcJob::GetObjects() const
480{
486
487 return fObjects;
488}
489
490TObjArray* NcJob::GetObjects(const char* classname)
491{
497
498 if (!fObjects) return 0;
499
500 if (fSelect)
501 {
502 fSelect->Clear();
503 }
504 else
505 {
506 fSelect=new TObjArray();
507 }
508
509 for (Int_t i=0; i<fObjects->GetEntries(); i++)
510 {
511 TObject* obj=fObjects->At(i);
512 if (obj->InheritsFrom(classname)) fSelect->Add(obj);
513 }
514 return fSelect;
515}
516
517void NcJob::ProcessObject(TObject* obj)
518{
537
538 if (!obj) return;
539
540 SetMainObject(obj);
541
542 gROOT->cd();
543 CleanTasks();
544 ExecuteTasks(GetName());
545
546 RemoveObject(obj);
547}
548
ClassImp(NcJob)
Base class for top level job in a task based procedure.
Definition NcJob.h:18
TObject * GetMainObject() const
Definition NcJob.cxx:294
void ExecuteJob(Int_t mode=0)
Definition NcJob.cxx:226
void ProcessObject(TObject *obj)
Definition NcJob.cxx:517
void SetMainObject(TObject *obj)
Definition NcJob.cxx:305
TObject * GetObject(const char *classname) const
Definition NcJob.cxx:456
Int_t fMakefolder
Definition NcJob.h:38
TFolder * fFolder
Definition NcJob.h:39
void AddObject(TObject *obj)
Definition NcJob.cxx:320
TObjArray * fObjects
Definition NcJob.h:41
void RemoveObject(TObject *obj)
Definition NcJob.cxx:384
TFolder * GetFolder() const
Definition NcJob.cxx:283
NcJob(const char *name="NcJob", const char *title="")
Definition NcJob.cxx:139
void MakeFolder()
Definition NcJob.cxx:268
TObjArray * fSelect
! Temp. array of pointers to user-selected stored objects
Definition NcJob.h:42
void AddObjects(TObjArray *arr)
Definition NcJob.cxx:366
TObject * fMainObject
Definition NcJob.h:40
void RemoveObjects(const char *classname)
Definition NcJob.cxx:409
virtual ~NcJob()
Definition NcJob.cxx:163
TObjArray * GetObjects() const
Definition NcJob.cxx:479
void ListEnvironment()
Definition NcJob.cxx:205
Facility to provide version information.
Definition NcVersion.h:12
virtual void Data() const