Implemented possibility to add global objects (like general parameters or cuts) in...
authoragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 14 Mar 2010 11:12:17 +0000 (11:12 +0000)
committeragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 14 Mar 2010 11:12:17 +0000 (11:12 +0000)
commit6cd44ee0910d5df9da0555df996a2eb3e6401a23
tree3590382c30c58b6ea319f31f65863fa800f5efe5
parentcb8a44fbdbdff8de558b8bcb91f77dbcfd0534fd
Implemented possibility to add global objects (like general parameters or cuts) in the output file(s) of an analysis task. The objects do not need to be mergeable and have to be created in methods running on the local client (ctor, LocalInit()). Typical usage:

header: if needed in UserExec, make sure the cuts/param object is a STREAMABLE data member so it can end up on workers, in case you need to use it for UserExec selections (i.e. no //! comment)
        if the object is not used in the analysis add a //! comment for its data member
steering macro: pC = mgr->CreateContainer(name, TList::Class(), AliAnalysisDataContainer::kParamContainer, FILENAME)
                mgr->ConnectOutput(myTask, n, pC);
NOTE: may be anything else, not only a TList; FILENAME may match the file for other output containers.

MyTask::MyTask(const char *name) : AliAnalysisTaskSE(name)
{
   DefineOutput(1, TList::Class);  // normal output slots
   ...
   DefineOutput(n, TList::Class);  // will contain cuts or local params
}

MyTask::LocalInit()
{
   // Create cuts/param objects and publish to slot
   fCuts = new TList();
   myCutsObj = new ...
   // Configure myCutsObj
   ...
   // Add to list
   fCuts->Add(myCutsObj);
   // Do the same for other param/cuts
   ...
   // Post Data (!!!)
   PostData(n, myCuts);
}

MyTask::UserCreateOutputObjects()
{
// DO NOT CREATE CUTS/PARAM OBJECTS HERE
}

MyTask::UserExec()
{
// DO NOT POST DATA FOR CUTS OBJECT SLOTS
// You MAY use fCuts object if this is streamable
}

MyTask::Terminate()
{
   // Get objects from output slots post-process them
   ...
   // Update or add objects to fCuts if needed
   fCuts->Add(some_other_object);
}

END:
This param/cuts object will end-up in the file:folder you requested when defining the container. Voila...
ANALYSIS/AliAnalysisManager.cxx
ANALYSIS/AliAnalysisManager.h