ROOT logo
#ifndef ALIDIELECTRONMIXINGHANDLER_H
#define ALIDIELECTRONMIXINGHANDLER_H

/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#############################################################
//#                                                           # 
//#         Class AliDielectronMixingHandler                  #
//#                                                           #
//#  Authors:                                                 #
//#   Jens Wiechula, Uni-Tübingen / Jens.Wiechula@cern.ch     #
//#                                                           #
//#############################################################

#include <TNamed.h>
#include <TObjArray.h>
#include <TClonesArray.h>

#include "AliDielectronVarManager.h"

class AliDielectron;
class AliVTrack;
class AliVEvent;

class AliDielectronMixingHandler : public TNamed {
public:
  enum { kMaxCuts=10 };
  enum EMixType {
    kOSonly=0,
    kOSandLS,
    kAll
  };
  AliDielectronMixingHandler();
  AliDielectronMixingHandler(const char*name, const char* title);

  virtual ~AliDielectronMixingHandler();

  void AddVariable(AliDielectronVarManager::ValueTypes type, Int_t nbins,
                   Double_t min, Double_t max, Bool_t log=kFALSE);
  void AddVariable(AliDielectronVarManager::ValueTypes type, const char* binLimitStr);
  void AddVariable(AliDielectronVarManager::ValueTypes type, TVectorD* const bins);

  void SetDepth(UShort_t depth) { fDepth=depth; }
  UShort_t GetDepth()     const { return fDepth; }

  void SetMixType(EMixType type) { fMixType=type; }
  EMixType GetMixType() const    { return fMixType; }

  void SetMixUncomplete(Bool_t mix) { fMixIncomplete=mix; }
  Bool_t GetMixUncomplete() const { return fMixIncomplete; }

  void SetMoveToSameVertex(Bool_t move) { fMoveToSameVertex=move; }
  Bool_t GetMoveToSameVertex() const { return fMoveToSameVertex; }

  void SetSkipFirstEvent(Bool_t skip) { fSkipFirstEvt=skip; }

  Int_t GetNumberOfBins() const;
  Int_t FindBin(const Double_t values[], TString *dim=0x0);
  void Fill(const AliVEvent *ev, AliDielectron *diele);

  Bool_t MixRemaining(AliDielectron *diele, Int_t ipool);

  void Init(const AliDielectron *diele=0x0);
  static void MoveToSameVertex(AliVTrack * const vtrack, const Double_t vFirst[3], const Double_t vMix[3]);

private:
  UShort_t     fDepth;     //Number of events per bin to start the merging
  TClonesArray fArrPools; //Array of events in bins

  UShort_t  fEventCuts[kMaxCuts]; //cut variables
  TObjArray fAxes;        //Axis descriptions of the event binning

  EMixType fMixType;      // which combinations to include in the mixing

  Bool_t fMixIncomplete;  // whether to mix uncomplete bins at the end of the processing
  Bool_t fMoveToSameVertex; //whether to move the mixed tracks to the same vertex position
  Bool_t fSkipFirstEvt;   //whether to skip the first event in the pool

  TProcessID *fPID;             //! internal PID for references to buffered objects
  
  void DoMixing(TClonesArray &pool, AliDielectron *diele);

  AliDielectronMixingHandler(const AliDielectronMixingHandler &c);
  AliDielectronMixingHandler &operator=(const AliDielectronMixingHandler &c);

  
  ClassDef(AliDielectronMixingHandler,1)         // Dielectron MixingHandler
};



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