ROOT logo
#include <TEntryList.h>

#include "AliLog.h"
#include "AliAnalysisManager.h"
#include "AliMultiInputEventHandler.h"
#include "AliMixInputEventHandler.h"
#include "AliMCEventHandler.h"

#include "AliRsnEvent.h"
#include "AliRsnLoop.h"
#include "AliRsnInputHandler.h"

#include "AliRsnAnalysisTask.h"

ClassImp(AliRsnAnalysisTask)

//__________________________________________________________________________________________________
AliRsnAnalysisTask::AliRsnAnalysisTask() :
   AliAnalysisTaskSE(),
   fOutput(0),
   fRsnObjects(0),
   fInputEHMain(0),
   fInputEHMix(0),
   fBigOutput(kFALSE)
{
//
// Dummy constructor ALWAYS needed for I/O.
//
}

//__________________________________________________________________________________________________
AliRsnAnalysisTask::AliRsnAnalysisTask(const char *name) :
   AliAnalysisTaskSE(name),
   fOutput(0),
   fRsnObjects(0),
   fInputEHMain(0),
   fInputEHMix(0),
   fBigOutput(kFALSE)
{
//
// Default constructor.
// Define input and output slots here (never in the dummy constructor)
// Input slot #0 works with a TChain - it is connected to the default input container
// Output slot #1 writes into a TH1 container
//

   DefineOutput(1, TList::Class());
}

//__________________________________________________________________________________________________
AliRsnAnalysisTask::AliRsnAnalysisTask(const AliRsnAnalysisTask &copy) :
   AliAnalysisTaskSE(copy),
   fOutput(0),
   fRsnObjects(copy.fRsnObjects),
   fInputEHMain(copy.fInputEHMain),
   fInputEHMix(copy.fInputEHMix),
   fBigOutput(copy.fBigOutput)
{
//
// Copy constructor.
// Implemented as requested by C++ standards.
// Can be used in PROOF and by plugins.
//
}

//__________________________________________________________________________________________________
AliRsnAnalysisTask &AliRsnAnalysisTask::operator=(const AliRsnAnalysisTask &copy)
{
//
// Assignment operator.
// Implemented as requested by C++ standards.
// Can be used in PROOF and by plugins.
//
   AliAnalysisTaskSE::operator=(copy);
   if (this == &copy)
      return *this;
   fRsnObjects = copy.fRsnObjects;
   fInputEHMain = copy.fInputEHMain;
   fInputEHMix = copy.fInputEHMix;
   fBigOutput = copy.fBigOutput;

   return (*this);
}

//__________________________________________________________________________________________________
AliRsnAnalysisTask::~AliRsnAnalysisTask()
{
//
// Destructor.
// Clean-up the output list, but not the histograms that are put inside
// (the list is owner and will clean-up these histograms). Protect in PROOF case.
//

   if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
      delete fOutput;
   }
}

//__________________________________________________________________________________________________
void AliRsnAnalysisTask::AddLoop(AliRsnLoop *obj)
{
//
// Add new computation object
//

   fRsnObjects.Add(obj);
}

//__________________________________________________________________________________________________
void AliRsnAnalysisTask::UserCreateOutputObjects()
{
//
// Initialization of outputs.
// This is called once per worker node.
//

   // sets all Inuput Handler pointers
   InitInputHandlers();

   // create list and set it as owner of its content (MANDATORY)
   if (fBigOutput) OpenFile(1);
   fOutput = new TList();
   fOutput->SetOwner();

   // loop on computators and initialize all their outputs
   TObjArrayIter next(&fRsnObjects);
   AliRsnLoop *objLoop = 0x0;
   while ( (objLoop = (AliRsnLoop *)next()) ) {
      objLoop->Init(GetName(), fOutput);
   }

   if (fInputEHMain) {
      TObjArrayIter nextIH(fInputEHMain->InputEventHandlers());
      TObject *obj = 0x0;
      AliRsnInputHandler *rsnIH;
      AliRsnDaughterSelector *s;
      TClonesArray *c;
      AliRsnCutSet *cuts;
      while ( (obj = nextIH()) ) {
         if (obj->IsA() == AliRsnInputHandler::Class()) {
            rsnIH = (AliRsnInputHandler *) obj;
            s = rsnIH->GetSelector();
            s->InitActions(fOutput);
            c = s->GetCutSetC();
            for (Int_t is = 0; is < c->GetEntries(); is++) {
               cuts = (AliRsnCutSet *)c->At(is);
               cuts->Init(fOutput);
            }
         }
      }
   }


   // post data for ALL output slots >0 here, to get at least an empty histogram
   PostData(1, fOutput);
}

//__________________________________________________________________________________________________
void AliRsnAnalysisTask::UserExec(Option_t *)
{
//
// Main loop for single-event computations.
// It is called for each event and executes the 'DoLoop'
// function of all AliRsnLoop instances stored here.
//

   AliRsnEvent *evMain = 0x0;
   AliRsnInputHandler *rsnIH = 0x0;

   if (fInputEHMain) {
      TObjArrayIter next(fInputEHMain->InputEventHandlers());
      TObject *obj = 0x0;
      while ( (obj = next()) ) {
         if (obj->IsA() == AliRsnInputHandler::Class()) {
            rsnIH = (AliRsnInputHandler *)obj;
            //AliInfo(Form("Found object '%s' which is RSN input handler", obj->GetName()));
            evMain = rsnIH->GetRsnEvent();
            break;
         }
      }
   }

   if (!evMain) return;

   TObjArrayIter next(&fRsnObjects);
   AliRsnLoop *obj = 0x0;
   while ( (obj = (AliRsnLoop *)next()) ) {
      if (obj->IsMixed()) continue;
      obj->DoLoop(evMain, rsnIH->GetSelector());
   }

   PostData(1, fOutput);
}

//__________________________________________________________________________________________________
void AliRsnAnalysisTask::UserExecMix(Option_t *)
{
//
// Main loop for event-mixing computations
// It is called for each pair of matched events
// and executes the 'DoLoop' function of all AliRsnLoop instances stored here.
//

   AliRsnEvent *evMain = 0x0;
   AliRsnEvent *evMix  = 0x0;
   Int_t        id     = -1;
   AliRsnInputHandler *rsnIH = 0x0, *rsnMixIH = 0x0;

   if (fInputEHMain) {
      TObjArrayIter next(fInputEHMain->InputEventHandlers());
      TObject *obj = 0x0;
      while ( (obj = next()) ) {
         if (obj->IsA() == AliRsnInputHandler::Class()) {
            rsnIH = (AliRsnInputHandler *)obj;
            //AliInfo(Form("Found object '%s' which is RSN input handler", obj->GetName()));
            evMain = rsnIH->GetRsnEvent();
            id = fInputEHMain->InputEventHandlers()->IndexOf(obj);
            break;
         }
      }
   }

   if (!evMain) return;

   // gets first input handler form mixing buffer
   AliMultiInputEventHandler *ihMultiMix = dynamic_cast<AliMultiInputEventHandler *>(fInputEHMix->InputEventHandler(0));
   if (ihMultiMix) {
      rsnMixIH = dynamic_cast<AliRsnInputHandler *>(ihMultiMix->InputEventHandler(id));
      if (rsnMixIH) {
         evMix = rsnMixIH->GetRsnEvent();
         if (!evMix) return;

         TObjArrayIter next(&fRsnObjects);
         AliRsnLoop *obj = 0x0;
         while ( (obj = (AliRsnLoop *)next()) ) {
            if (!obj->IsMixed()) continue;
            obj->DoLoop(evMain, rsnIH->GetSelector(), evMix, rsnMixIH->GetSelector());
         }
      }
   }

   PostData(1, fOutput);
}

//________________________________________________________________________
void AliRsnAnalysisTask::Terminate(Option_t *)
{
//
// Draw result to screen, or perform fitting, normalizations
// Called once at the end of the query
//

   fOutput = dynamic_cast<TList *>(GetOutputData(1));
   if (!fOutput) { AliError("Could not retrieve TList fOutput"); return; }
}

//_____________________________________________________________________________
void AliRsnAnalysisTask::InitInputHandlers()
{
//
// Sets needed input handlers
//
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   fInputEHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
   if (fInputEHMain) {
      fInputEHMix = dynamic_cast<AliMixInputEventHandler *>(fInputEHMain->GetFirstMultiInputHandler());
   }
}

 AliRsnAnalysisTask.cxx:1
 AliRsnAnalysisTask.cxx:2
 AliRsnAnalysisTask.cxx:3
 AliRsnAnalysisTask.cxx:4
 AliRsnAnalysisTask.cxx:5
 AliRsnAnalysisTask.cxx:6
 AliRsnAnalysisTask.cxx:7
 AliRsnAnalysisTask.cxx:8
 AliRsnAnalysisTask.cxx:9
 AliRsnAnalysisTask.cxx:10
 AliRsnAnalysisTask.cxx:11
 AliRsnAnalysisTask.cxx:12
 AliRsnAnalysisTask.cxx:13
 AliRsnAnalysisTask.cxx:14
 AliRsnAnalysisTask.cxx:15
 AliRsnAnalysisTask.cxx:16
 AliRsnAnalysisTask.cxx:17
 AliRsnAnalysisTask.cxx:18
 AliRsnAnalysisTask.cxx:19
 AliRsnAnalysisTask.cxx:20
 AliRsnAnalysisTask.cxx:21
 AliRsnAnalysisTask.cxx:22
 AliRsnAnalysisTask.cxx:23
 AliRsnAnalysisTask.cxx:24
 AliRsnAnalysisTask.cxx:25
 AliRsnAnalysisTask.cxx:26
 AliRsnAnalysisTask.cxx:27
 AliRsnAnalysisTask.cxx:28
 AliRsnAnalysisTask.cxx:29
 AliRsnAnalysisTask.cxx:30
 AliRsnAnalysisTask.cxx:31
 AliRsnAnalysisTask.cxx:32
 AliRsnAnalysisTask.cxx:33
 AliRsnAnalysisTask.cxx:34
 AliRsnAnalysisTask.cxx:35
 AliRsnAnalysisTask.cxx:36
 AliRsnAnalysisTask.cxx:37
 AliRsnAnalysisTask.cxx:38
 AliRsnAnalysisTask.cxx:39
 AliRsnAnalysisTask.cxx:40
 AliRsnAnalysisTask.cxx:41
 AliRsnAnalysisTask.cxx:42
 AliRsnAnalysisTask.cxx:43
 AliRsnAnalysisTask.cxx:44
 AliRsnAnalysisTask.cxx:45
 AliRsnAnalysisTask.cxx:46
 AliRsnAnalysisTask.cxx:47
 AliRsnAnalysisTask.cxx:48
 AliRsnAnalysisTask.cxx:49
 AliRsnAnalysisTask.cxx:50
 AliRsnAnalysisTask.cxx:51
 AliRsnAnalysisTask.cxx:52
 AliRsnAnalysisTask.cxx:53
 AliRsnAnalysisTask.cxx:54
 AliRsnAnalysisTask.cxx:55
 AliRsnAnalysisTask.cxx:56
 AliRsnAnalysisTask.cxx:57
 AliRsnAnalysisTask.cxx:58
 AliRsnAnalysisTask.cxx:59
 AliRsnAnalysisTask.cxx:60
 AliRsnAnalysisTask.cxx:61
 AliRsnAnalysisTask.cxx:62
 AliRsnAnalysisTask.cxx:63
 AliRsnAnalysisTask.cxx:64
 AliRsnAnalysisTask.cxx:65
 AliRsnAnalysisTask.cxx:66
 AliRsnAnalysisTask.cxx:67
 AliRsnAnalysisTask.cxx:68
 AliRsnAnalysisTask.cxx:69
 AliRsnAnalysisTask.cxx:70
 AliRsnAnalysisTask.cxx:71
 AliRsnAnalysisTask.cxx:72
 AliRsnAnalysisTask.cxx:73
 AliRsnAnalysisTask.cxx:74
 AliRsnAnalysisTask.cxx:75
 AliRsnAnalysisTask.cxx:76
 AliRsnAnalysisTask.cxx:77
 AliRsnAnalysisTask.cxx:78
 AliRsnAnalysisTask.cxx:79
 AliRsnAnalysisTask.cxx:80
 AliRsnAnalysisTask.cxx:81
 AliRsnAnalysisTask.cxx:82
 AliRsnAnalysisTask.cxx:83
 AliRsnAnalysisTask.cxx:84
 AliRsnAnalysisTask.cxx:85
 AliRsnAnalysisTask.cxx:86
 AliRsnAnalysisTask.cxx:87
 AliRsnAnalysisTask.cxx:88
 AliRsnAnalysisTask.cxx:89
 AliRsnAnalysisTask.cxx:90
 AliRsnAnalysisTask.cxx:91
 AliRsnAnalysisTask.cxx:92
 AliRsnAnalysisTask.cxx:93
 AliRsnAnalysisTask.cxx:94
 AliRsnAnalysisTask.cxx:95
 AliRsnAnalysisTask.cxx:96
 AliRsnAnalysisTask.cxx:97
 AliRsnAnalysisTask.cxx:98
 AliRsnAnalysisTask.cxx:99
 AliRsnAnalysisTask.cxx:100
 AliRsnAnalysisTask.cxx:101
 AliRsnAnalysisTask.cxx:102
 AliRsnAnalysisTask.cxx:103
 AliRsnAnalysisTask.cxx:104
 AliRsnAnalysisTask.cxx:105
 AliRsnAnalysisTask.cxx:106
 AliRsnAnalysisTask.cxx:107
 AliRsnAnalysisTask.cxx:108
 AliRsnAnalysisTask.cxx:109
 AliRsnAnalysisTask.cxx:110
 AliRsnAnalysisTask.cxx:111
 AliRsnAnalysisTask.cxx:112
 AliRsnAnalysisTask.cxx:113
 AliRsnAnalysisTask.cxx:114
 AliRsnAnalysisTask.cxx:115
 AliRsnAnalysisTask.cxx:116
 AliRsnAnalysisTask.cxx:117
 AliRsnAnalysisTask.cxx:118
 AliRsnAnalysisTask.cxx:119
 AliRsnAnalysisTask.cxx:120
 AliRsnAnalysisTask.cxx:121
 AliRsnAnalysisTask.cxx:122
 AliRsnAnalysisTask.cxx:123
 AliRsnAnalysisTask.cxx:124
 AliRsnAnalysisTask.cxx:125
 AliRsnAnalysisTask.cxx:126
 AliRsnAnalysisTask.cxx:127
 AliRsnAnalysisTask.cxx:128
 AliRsnAnalysisTask.cxx:129
 AliRsnAnalysisTask.cxx:130
 AliRsnAnalysisTask.cxx:131
 AliRsnAnalysisTask.cxx:132
 AliRsnAnalysisTask.cxx:133
 AliRsnAnalysisTask.cxx:134
 AliRsnAnalysisTask.cxx:135
 AliRsnAnalysisTask.cxx:136
 AliRsnAnalysisTask.cxx:137
 AliRsnAnalysisTask.cxx:138
 AliRsnAnalysisTask.cxx:139
 AliRsnAnalysisTask.cxx:140
 AliRsnAnalysisTask.cxx:141
 AliRsnAnalysisTask.cxx:142
 AliRsnAnalysisTask.cxx:143
 AliRsnAnalysisTask.cxx:144
 AliRsnAnalysisTask.cxx:145
 AliRsnAnalysisTask.cxx:146
 AliRsnAnalysisTask.cxx:147
 AliRsnAnalysisTask.cxx:148
 AliRsnAnalysisTask.cxx:149
 AliRsnAnalysisTask.cxx:150
 AliRsnAnalysisTask.cxx:151
 AliRsnAnalysisTask.cxx:152
 AliRsnAnalysisTask.cxx:153
 AliRsnAnalysisTask.cxx:154
 AliRsnAnalysisTask.cxx:155
 AliRsnAnalysisTask.cxx:156
 AliRsnAnalysisTask.cxx:157
 AliRsnAnalysisTask.cxx:158
 AliRsnAnalysisTask.cxx:159
 AliRsnAnalysisTask.cxx:160
 AliRsnAnalysisTask.cxx:161
 AliRsnAnalysisTask.cxx:162
 AliRsnAnalysisTask.cxx:163
 AliRsnAnalysisTask.cxx:164
 AliRsnAnalysisTask.cxx:165
 AliRsnAnalysisTask.cxx:166
 AliRsnAnalysisTask.cxx:167
 AliRsnAnalysisTask.cxx:168
 AliRsnAnalysisTask.cxx:169
 AliRsnAnalysisTask.cxx:170
 AliRsnAnalysisTask.cxx:171
 AliRsnAnalysisTask.cxx:172
 AliRsnAnalysisTask.cxx:173
 AliRsnAnalysisTask.cxx:174
 AliRsnAnalysisTask.cxx:175
 AliRsnAnalysisTask.cxx:176
 AliRsnAnalysisTask.cxx:177
 AliRsnAnalysisTask.cxx:178
 AliRsnAnalysisTask.cxx:179
 AliRsnAnalysisTask.cxx:180
 AliRsnAnalysisTask.cxx:181
 AliRsnAnalysisTask.cxx:182
 AliRsnAnalysisTask.cxx:183
 AliRsnAnalysisTask.cxx:184
 AliRsnAnalysisTask.cxx:185
 AliRsnAnalysisTask.cxx:186
 AliRsnAnalysisTask.cxx:187
 AliRsnAnalysisTask.cxx:188
 AliRsnAnalysisTask.cxx:189
 AliRsnAnalysisTask.cxx:190
 AliRsnAnalysisTask.cxx:191
 AliRsnAnalysisTask.cxx:192
 AliRsnAnalysisTask.cxx:193
 AliRsnAnalysisTask.cxx:194
 AliRsnAnalysisTask.cxx:195
 AliRsnAnalysisTask.cxx:196
 AliRsnAnalysisTask.cxx:197
 AliRsnAnalysisTask.cxx:198
 AliRsnAnalysisTask.cxx:199
 AliRsnAnalysisTask.cxx:200
 AliRsnAnalysisTask.cxx:201
 AliRsnAnalysisTask.cxx:202
 AliRsnAnalysisTask.cxx:203
 AliRsnAnalysisTask.cxx:204
 AliRsnAnalysisTask.cxx:205
 AliRsnAnalysisTask.cxx:206
 AliRsnAnalysisTask.cxx:207
 AliRsnAnalysisTask.cxx:208
 AliRsnAnalysisTask.cxx:209
 AliRsnAnalysisTask.cxx:210
 AliRsnAnalysisTask.cxx:211
 AliRsnAnalysisTask.cxx:212
 AliRsnAnalysisTask.cxx:213
 AliRsnAnalysisTask.cxx:214
 AliRsnAnalysisTask.cxx:215
 AliRsnAnalysisTask.cxx:216
 AliRsnAnalysisTask.cxx:217
 AliRsnAnalysisTask.cxx:218
 AliRsnAnalysisTask.cxx:219
 AliRsnAnalysisTask.cxx:220
 AliRsnAnalysisTask.cxx:221
 AliRsnAnalysisTask.cxx:222
 AliRsnAnalysisTask.cxx:223
 AliRsnAnalysisTask.cxx:224
 AliRsnAnalysisTask.cxx:225
 AliRsnAnalysisTask.cxx:226
 AliRsnAnalysisTask.cxx:227
 AliRsnAnalysisTask.cxx:228
 AliRsnAnalysisTask.cxx:229
 AliRsnAnalysisTask.cxx:230
 AliRsnAnalysisTask.cxx:231
 AliRsnAnalysisTask.cxx:232
 AliRsnAnalysisTask.cxx:233
 AliRsnAnalysisTask.cxx:234
 AliRsnAnalysisTask.cxx:235
 AliRsnAnalysisTask.cxx:236
 AliRsnAnalysisTask.cxx:237
 AliRsnAnalysisTask.cxx:238
 AliRsnAnalysisTask.cxx:239
 AliRsnAnalysisTask.cxx:240
 AliRsnAnalysisTask.cxx:241
 AliRsnAnalysisTask.cxx:242
 AliRsnAnalysisTask.cxx:243
 AliRsnAnalysisTask.cxx:244
 AliRsnAnalysisTask.cxx:245
 AliRsnAnalysisTask.cxx:246
 AliRsnAnalysisTask.cxx:247
 AliRsnAnalysisTask.cxx:248
 AliRsnAnalysisTask.cxx:249
 AliRsnAnalysisTask.cxx:250
 AliRsnAnalysisTask.cxx:251
 AliRsnAnalysisTask.cxx:252
 AliRsnAnalysisTask.cxx:253
 AliRsnAnalysisTask.cxx:254
 AliRsnAnalysisTask.cxx:255
 AliRsnAnalysisTask.cxx:256
 AliRsnAnalysisTask.cxx:257
 AliRsnAnalysisTask.cxx:258
 AliRsnAnalysisTask.cxx:259
 AliRsnAnalysisTask.cxx:260
 AliRsnAnalysisTask.cxx:261
 AliRsnAnalysisTask.cxx:262
 AliRsnAnalysisTask.cxx:263
 AliRsnAnalysisTask.cxx:264
 AliRsnAnalysisTask.cxx:265
 AliRsnAnalysisTask.cxx:266
 AliRsnAnalysisTask.cxx:267
 AliRsnAnalysisTask.cxx:268
 AliRsnAnalysisTask.cxx:269