ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoEventReaderESDChainKine - the reader class for the Alice ESD and   //
// the model Kinematics information tailored for the Task framework and the   //
// Reads in AliESDfriend to create shared hit/quality information             //
// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                             //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
#ifndef ALIFEMTOEVENTREADERESDCHAINKINE_H
#define ALIFEMTOEVENTREADERESDCHAINKINE_H

#include "AliFemtoEventReader.h"
#include "AliFemtoEnumeration.h"

#include <string>
#include <vector>
#include <TTree.h>
#include <AliESDEvent.h>
#include <AliESDfriend.h>
#include <AliStack.h>
#include <list>
#include <AliGenEventHeader.h>

#include "AliESDv0.h"
#include "AliFemtoV0.h"
#include "AliESDtrackCuts.h"

#include "AliESDpid.h"

class AliFemtoEvent;

class AliFemtoEventReaderESDChainKine : public AliFemtoEventReader
{
 public:
  enum TrackType {kGlobal=0, kTPCOnly=1, kITSOnly=2, kSPDTracklet=3};
  typedef enum TrackType ReadTrackType;

  enum EventMult {kCentrality=0, kGlobalCount=1, kReferenceITSTPC=2, kReferenceITSSA=3, kReferenceTracklets=4, kSPDLayer1=5, kVZERO=6, kCentralityTRK=7, kCentralityZNA=8, kCentralityCL1=9, kCentralityCND=10, kCentralityV0A=11, kCentralityV0C=12, kCentralityZNC=13, kCentralityCL0=14, kCentralityFMD=15, kCentralityTKL=16, kCentralityNPA=17};
  typedef enum EventMult EstEventMult;

  AliFemtoEventReaderESDChainKine();
  AliFemtoEventReaderESDChainKine(const AliFemtoEventReaderESDChainKine& aReader);
  ~AliFemtoEventReaderESDChainKine();

  AliFemtoEventReaderESDChainKine& operator=(const AliFemtoEventReaderESDChainKine& aReader);

  AliFemtoEvent* ReturnHbtEvent();
  AliFemtoString Report();
  void SetConstrained(const bool constrained);
  bool GetConstrained() const;
  void SetUseTPCOnly(const bool usetpconly);
  bool GetUseTPCOnly() const;
  void SetReadTPCInner(const bool readinner);
  bool GetReadTPCInner() const;

  void SetUseMultiplicity(EstEventMult aType);

  void SetReadTrackType(ReadTrackType aType);

  void SetESDSource(AliESDEvent *aESD);
  void SetStackSource(AliStack *aStack);
  void SetGenEventHeader(AliGenEventHeader *aGenHeader);
  void SetRotateToEventPlane(short dorotate);

  void SetESDPid(AliESDpid *esdPid) { fESDpid = esdPid; }

  void SetReadV0(bool a);
  void CopyESDtoFemtoV0(AliESDv0 *tESDv0, AliFemtoV0 *tFemtoV0, AliESDEvent *tESDevent);
  void GetGlobalPositionAtGlobalRadiiThroughTPC(AliESDtrack *track, Float_t bfield, Float_t globalPositionsAtRadii[9][3]);
  void SetMagneticFieldSign(int s);
  void SetKaonAnalysis(Bool_t);
  void SetProtonAnalysis(Bool_t);
  void SetPionAnalysis(Bool_t);
  void SetOnlyPrimaries(Bool_t);

 protected:

 private:
  string         fFileName;      // name of current ESD file
  bool           fConstrained;   // flag to set which momentum from ESD file will be use
  bool           fReadInner;     // flag to set if one wants to read TPC-only momentum
  bool           fUseTPCOnly;    // flog to set to read TPC only momentum instead of the full
  int            fNumberofEvent; // number of Events in ESD file
  int            fCurEvent;      // number of current event
  unsigned int   fCurFile;       // number of current file
  AliESDEvent*   fEvent;         // ESD event
  AliStack      *fStack;         // Kinematics stack pointer
  AliGenEventHeader *fGenHeader; // Link to the generator event header
  ReadTrackType  fTrackType;     // Type of track read
  EstEventMult   fEstEventMult;  // Type of the event multiplicity estimator

  short          fRotateToEventPlane; // Rotate the event so that event plane is at x=0

  Float_t GetSigmaToVertex(double *impact, double *covar);

  AliESDpid *fESDpid;
  Bool_t fIsPidOwner;

  int            fMagFieldSign;     // Magnetic field sign
  bool           fReadV0;
  Bool_t isKaonAnalysis; // switch for Kaon analysis
  Bool_t isProtonAnalysis; // switch for Proton analysis
  Bool_t isPionAnalysis; // switch for Pion analysis
  Bool_t fOnlyPrimaries; // switch to analyze only primaries

#ifdef __ROOT__
  ClassDef(AliFemtoEventReaderESDChainKine, 1)
#endif

    };

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