ROOT logo
#ifndef __CINT__
#include <AliAnalysisManager.h>
#include <AliMultiInputEventHandler.h>
#include <AliMixEventPool.h>
#include <AliMixEventCutObj.h>
#endif

void AddMixingHandler ( AliMultiInputEventHandler *multiInputHandler,AliAnalysisTaskSE *task, TString format = "esd", Bool_t useMC = kFALSE,Bool_t isRsnMini=kFALSE,const Int_t mixNum = 10, TString opts = "" ) {

   Bool_t valid = kTRUE;
   Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);

   if (isRsnMini) {
      AliRsnMiniAnalysisTask *taskRsn = (AliRsnMiniAnalysisTask *) task;

      // settings
      if (isPP) {
//         taskRsn->UseMultiplicity("TRACKS");
         taskRsn->UseMultiplicity("QUALITY");
         taskRsn->SetMaxDiffMult(1.0);
      } else {
         taskRsn->UseCentrality("V0M");
         taskRsn->SetMaxDiffMult(10.0);
      }
      // set mixing
      taskRsn->UseContinuousMix();
      //task->UseBinnedMix();
      taskRsn->SetNMix(mixNum);
      taskRsn->SetMaxDiffVz(1.0);
//      taskRsn->SetMaxDiffAngle(30.0 * TMath::DegToRad());
      

   } else {
      if ( !multiInputHandler ) return;

      AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
      const Int_t bufferSize = 1;
      AliMixInputEventHandler *mixHandler = new AliMixInputEventHandler ( bufferSize, mixNum );
      mixHandler->SetInputHandlerForMixing ( dynamic_cast<AliMultiInputEventHandler *> ( mgr->GetInputEventHandler() ) );
      AliMixEventPool *evPool = new AliMixEventPool();

      AliMixEventCutObj *multi = 0;

      if (isPP) {
         multi = new AliMixEventCutObj ( AliMixEventCutObj::kMultiplicity, 2, 102, 10 );
      } else {
         multi = new AliMixEventCutObj ( AliMixEventCutObj::kCentrality, 0, 100, 10, "V0M" );
      }
      AliMixEventCutObj *zvertex = new AliMixEventCutObj ( AliMixEventCutObj::kZVertex, -10, 10, 1 );

      evPool->AddCut(multi);
      evPool->AddCut ( zvertex );

      // adds event pool (comment it and u will have default mixing)
      mixHandler->SetEventPool ( evPool );

//    mixHandler->SelectCollisionCandidates(AliVEvent::kAny);

//    mixHandler->DoMixIfNotEnoughEvents(kFALSE);

      multiInputHandler->AddInputEventHandler ( mixHandler );

      // adds mixing info task
      RsnLoadMacroFromMixHandler( "AddAnalysisTaskMixInfo.C" );
      AddAnalysisTaskMixInfo (opts );

   }
}

Bool_t RsnLoadMacroFromMixHandler(TString macro,TString path="") {

   Bool_t valid;
   TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
   if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";

   if (!gSystem->AccessPathName(macro.Data())) {
      gROOT->LoadMacro(macro.Data());
      Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
      return kTRUE;
   }

   if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
      gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
      Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
      return kTRUE;
   }

   Printf("Error loading %s",macro.Data());

   return kFALSE;
}
 AddMixingHandler.C:1
 AddMixingHandler.C:2
 AddMixingHandler.C:3
 AddMixingHandler.C:4
 AddMixingHandler.C:5
 AddMixingHandler.C:6
 AddMixingHandler.C:7
 AddMixingHandler.C:8
 AddMixingHandler.C:9
 AddMixingHandler.C:10
 AddMixingHandler.C:11
 AddMixingHandler.C:12
 AddMixingHandler.C:13
 AddMixingHandler.C:14
 AddMixingHandler.C:15
 AddMixingHandler.C:16
 AddMixingHandler.C:17
 AddMixingHandler.C:18
 AddMixingHandler.C:19
 AddMixingHandler.C:20
 AddMixingHandler.C:21
 AddMixingHandler.C:22
 AddMixingHandler.C:23
 AddMixingHandler.C:24
 AddMixingHandler.C:25
 AddMixingHandler.C:26
 AddMixingHandler.C:27
 AddMixingHandler.C:28
 AddMixingHandler.C:29
 AddMixingHandler.C:30
 AddMixingHandler.C:31
 AddMixingHandler.C:32
 AddMixingHandler.C:33
 AddMixingHandler.C:34
 AddMixingHandler.C:35
 AddMixingHandler.C:36
 AddMixingHandler.C:37
 AddMixingHandler.C:38
 AddMixingHandler.C:39
 AddMixingHandler.C:40
 AddMixingHandler.C:41
 AddMixingHandler.C:42
 AddMixingHandler.C:43
 AddMixingHandler.C:44
 AddMixingHandler.C:45
 AddMixingHandler.C:46
 AddMixingHandler.C:47
 AddMixingHandler.C:48
 AddMixingHandler.C:49
 AddMixingHandler.C:50
 AddMixingHandler.C:51
 AddMixingHandler.C:52
 AddMixingHandler.C:53
 AddMixingHandler.C:54
 AddMixingHandler.C:55
 AddMixingHandler.C:56
 AddMixingHandler.C:57
 AddMixingHandler.C:58
 AddMixingHandler.C:59
 AddMixingHandler.C:60
 AddMixingHandler.C:61
 AddMixingHandler.C:62
 AddMixingHandler.C:63
 AddMixingHandler.C:64
 AddMixingHandler.C:65
 AddMixingHandler.C:66
 AddMixingHandler.C:67
 AddMixingHandler.C:68
 AddMixingHandler.C:69
 AddMixingHandler.C:70
 AddMixingHandler.C:71
 AddMixingHandler.C:72
 AddMixingHandler.C:73
 AddMixingHandler.C:74
 AddMixingHandler.C:75
 AddMixingHandler.C:76
 AddMixingHandler.C:77
 AddMixingHandler.C:78
 AddMixingHandler.C:79
 AddMixingHandler.C:80
 AddMixingHandler.C:81
 AddMixingHandler.C:82
 AddMixingHandler.C:83
 AddMixingHandler.C:84
 AddMixingHandler.C:85
 AddMixingHandler.C:86
 AddMixingHandler.C:87
 AddMixingHandler.C:88
 AddMixingHandler.C:89
 AddMixingHandler.C:90
 AddMixingHandler.C:91
 AddMixingHandler.C:92