ROOT logo
#ifndef ALIDIELECTRONTRACKROTATOR_H
#define ALIDIELECTRONTRACKROTATOR_H

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

//#############################################################
//#                                                           # 
//#         Class AliDielectronTrackRotator                   #
//#                                                           #
//#  Authors:                                                 #
//#   Anton     Andronic, GSI / A.Andronic@gsi.de             #
//#   Ionut C.  Arsene,   GSI / I.C.Arsene@gsi.de             #
//#   Julian    Book,     Uni Ffm / Julian.Book@cern.ch       #
//#   Frederick Kramer,   Uni Ffm, / Frederick.Kramer@cern.ch #
//#   Magnus    Mager,    CERN / Magnus.Mager@cern.ch         #
//#   WooJin J. Park,     GSI / W.J.Park@gsi.de               #
//#   Jens      Wiechula, Uni HD / Jens.Wiechula@cern.ch      #
//#                                                           #
//#############################################################

#include <TNamed.h>

#include <AliKFParticle.h>

class TObjArray;
class AliVTrack;
class AliVEvent;

class AliDielectronTrackRotator : public TNamed {
public:
  enum ERotationType {kRotatePositive, kRotateNegative, kRotateBothRandom};
  
  AliDielectronTrackRotator();
  AliDielectronTrackRotator(const char*name, const char* title);

  virtual ~AliDielectronTrackRotator();

  void SetTrackArrays(const TObjArray * const arrP, const TObjArray * const arrN) {fkArrTracksP=arrP;fkArrTracksN=arrN;}
  void Reset();
  Bool_t NextCombination();

  //Setters
  void SetIterations(UInt_t niter)         { fIterations=niter;  }
  void SetRotationType(ERotationType type) { fRotationType=type; }
  void SetStartAnglePhi(Double_t phi)      { fStartAnglePhi=phi; }
  void SetConeAnglePhi(Double_t phi)       { fConeAnglePhi=phi;  }

  //Getters
  Int_t GetIterations() const           { return fIterations;    }
  ERotationType GetRotationType() const { return fRotationType;  }
  Double_t GetStartAnglePhi() const     { return fStartAnglePhi; }
  Double_t GetConeAnglePhi() const      { return fConeAnglePhi;  }

  void SetEvent(AliVEvent * const ev)   { fEvent = ev;           }
  void SetPdgLegs(Int_t pdfLeg1, Int_t pdfLeg2) { fPdgLeg1=pdfLeg1; fPdgLeg2=pdfLeg2; }

  const AliKFParticle& GetKFTrackP() const {return fTrackP;}
  const AliKFParticle& GetKFTrackN() const {return fTrackN;}

  AliVTrack* GetVTrackP() const {return fVTrackP;}
  AliVTrack* GetVTrackN() const {return fVTrackN;}
  
private:
  UInt_t   fIterations;             // number of iterations

  ERotationType fRotationType;      // which track to rotate
  
  Double_t fStartAnglePhi;          // starting angle for rotation
  Double_t fConeAnglePhi;           // opening angle in phi for multiple rotation

  const TObjArray *fkArrTracksP;    //! array of positive tracks
  const TObjArray *fkArrTracksN;    //! array of negative tracks

  UInt_t   fCurrentIteration;       //! current iteration step
  Int_t    fCurrentTackP;           //! current positive track in array
  Int_t    fCurrentTackN;           //! current negative track in array

  AliVEvent *fEvent;                //! current event
  
  AliKFParticle fTrackP;            //! Positive track
  AliKFParticle fTrackN;            //! Negative track
  
  AliVTrack *fVTrackP;              //! Positive track
  AliVTrack *fVTrackN;              //! Negative track
  
  Int_t fPdgLeg1;                   //! pdg code leg1
  Int_t fPdgLeg2;                   //! pdg code leg2
  

  Bool_t RotateTracks();
  
  AliDielectronTrackRotator(const AliDielectronTrackRotator &c);
  AliDielectronTrackRotator &operator=(const AliDielectronTrackRotator &c);

  
  ClassDef(AliDielectronTrackRotator,1)         // Dielectron TrackRotator
};



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