28-feb-2006 NvE Memberfunction ProcessObject() introduced in AliJob for convenience.
authornick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Feb 2006 11:47:32 +0000 (11:47 +0000)
committernick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Feb 2006 11:47:32 +0000 (11:47 +0000)
28-feb-2006 NvE Example macro anaroot.cc in sub-directory /macros updated to use the
                more convenient new ProcessObject() facility of AliJob.

RALICE/AliJob.cxx
RALICE/AliJob.h
RALICE/history.txt
RALICE/icepack/history.txt
RALICE/icepack/macros/anaroot.cc

index 5f9c49e..6a385f2 100644 (file)
 // main object structure (e.g. AliEvent for event-by-event processing).
 // The main object structure (if needed) may be specified by the derived
 // top level processor class and will be stored automatically in the
-// working environment (see below).  
+// working environment (see below).
+//
+// However, being designed as a base class for a user defined top level
+// processor, this class can also be used as a "hook" to specify
+// various sub-tasks in an (interactive) user environment.
+// Usage of the memberfunction ProcessObject() allows an (interactive)
+// event-by-event processing of the various specified subtasks.  
+//
 // This base class provides a working environment for the derived
 // (user defined) processor class and all of its subtasks.
 //
@@ -188,7 +195,9 @@ void AliJob::ExecuteJob(Int_t mode)
 // Exec() memberfunction.
 // The latter is convenient if an AliJob instance is used directly
 // by the user (e.g. in a ROOT macro) in order to provide a hook
-// for event-by-event processing of various subtasks.  
+// for event-by-event processing of various subtasks.
+// An even more convenient alternative to achieve this is invokation of the
+// memberfunction ProcessObject().  
 //
 // mode = -1 : Explicitly prohibit folder creation for the complete job
 //         0 : Folder creation selection steered by MakeFolder()
@@ -412,3 +421,31 @@ TObjArray* AliJob::GetObjects(const char* classname)
  return fSelect;
 }
 ///////////////////////////////////////////////////////////////////////////
+void AliJob::ProcessObject(TObject* obj)
+{
+// Invokation of all user defined sub-tasks for the specified object.
+// This facility is very convenient when performing a task based
+// event-by-event analysis in an (interactive) user application.
+//
+// Note :
+// ------
+// Before processing gROOT is set as the global working directory.
+// The specified object will be added to the job's object list
+// as main object before the processing starts.
+// This will allow the various sub-tasks to access the object in the
+// usual way.
+// After the processing of this object has been performed, the object
+// will be removed from the object list and the main object pointer will
+// be set to zero.
+
+ if (!obj) return;
+
+ SetMainObject(obj);
+
+ gROOT->cd(); 
+ CleanTasks();
+ ExecuteTasks(GetName());
+
+ RemoveObject(obj);
+}
+///////////////////////////////////////////////////////////////////////////
index e597b87..5664ad6 100644 (file)
@@ -28,6 +28,7 @@ class AliJob : public TTask
   TObject* GetObject(Int_t j) const;                      // Provide j-th stored object
   TObjArray* GetObjects() const;                          // Provide all stored object pointers
   TObjArray* GetObjects(const char* classname);           // Provide all objects inheriting from "classname" 
+  void ProcessObject(TObject* obj);                       // Process all sub-tasks for the specified object
 
  protected :
   Int_t fMakefolder;    // Flag to indicate creation of the folder structure
@@ -38,6 +39,6 @@ class AliJob : public TTask
 
   void SetMainObject(TObject* obj); // Store pointer to the main object structure
 
- ClassDef(AliJob,3) // Base class for top level job in a task based procedure 
+ ClassDef(AliJob,4) // Base class for top level job in a task based procedure 
 };
 #endif
index 86fef89..51bd0a2 100644 (file)
                 distance between a track and a certain position.
 12-dec-2005 NvE Track selection by name introduced in AliJet.
 23-feb-2006 NvE Support for automatic subtask(s) execution introduced in AliJob::ExecuteJob().
+28-feb-2006 NvE Memberfunction ProcessObject() introduced in AliJob for convenience.
index 4ae64d2..579f7a6 100644 (file)
@@ -44,4 +44,6 @@
                 Also anaroot.cc example macro introduced in /macros sub-directory.
                 This example macro shows how to analyse the IcePack event structures
                 from a chain of ROOT files using the task processor facilities.
+28-feb-2006 NvE Example macro anaroot.cc in sub-directory /macros updated to use the
+                more convenient new ProcessObject() facility of AliJob.
 
index 201d622..8353ba6 100644 (file)
@@ -69,9 +69,7 @@
   if (evt) evt->Reset();
   data.GetEntry(ient);
   evt->SetOwner();
-  q.AddObject(evt);
-  q.ExecuteJob(10);
-  q.RemoveObject(evt);
+  q.ProcessObject(evt);
   
   // Further inspection of the event data if needed
   evt->Data();