ROOT logo
#ifndef ALIMCTRACKINGTESTTASK_H
#define ALIMCTRACKINGTESTTASK_H

// ROOT includes
#include <TList.h>
#include <TH1.h>
#include <TH2.h>

// AliRoot includes
#include <AliAnalysisTask.h>
#include <AliESDEvent.h>
#include <AliESDfriend.h>
#include <AliESDtrack.h>
#include <AliESDfriendTrack.h>
#include <AliTPCseed.h>
#include <TString.h>
class AliGenInfoMaker;
class TTreeSRedirector;
class AliMCEventHadnler;
class TParticle;
class AliMCInfo;
class AliESDRecInfo;
class AliESDEvent;
class AliMCEvent;
class AliComparisonObject;
class AliTrackComparison;

class AliMCTrackingTestTask : public AliAnalysisTask {
 public:
 AliMCTrackingTestTask();
 AliMCTrackingTestTask(const char *name);
  virtual ~AliMCTrackingTestTask();
  
  virtual void   ConnectInputData(Option_t *);
  virtual void   CreateOutputObjects();
  virtual void   Exec(Option_t *option);
  virtual void   Terminate(Option_t *);
  virtual void FinishTaskOutput();
  void         SetDebugOuputhPath(const char * name){fDebugOutputPath=name;}

  //
  void           ProcessMCInfo();
  void           ProcessRefTracker(AliTrackReference* refIn, AliTrackReference* refOut, TParticle*part, Int_t type);
  
  void           FitTrackRefs(TParticle * part, TClonesArray * trefs);

  Bool_t         IsFindable(Int_t label, Float_t minTrackLength);
  Bool_t         AddComparisonObject(AliTrackComparison* comp);
  //
  // debug streamer part
  //
  TTreeSRedirector *GetDebugStreamer();
  void       SetStreamLevel(Int_t streamLevel){fStreamLevel=streamLevel;}
  void       SetDebugLevel(Int_t level) {fDebugLevel = level;}
  Int_t      GetStreamLevel() const {return fStreamLevel;}
  Int_t      GetDebugLevel() const {return fDebugLevel;}
  //
  static AliExternalTrackParam * MakeTrack(const AliTrackReference* ref, TParticle*part);
  static Bool_t  PropagateToPoint(AliExternalTrackParam *param, Double_t *xyz, Double_t mass,  Float_t step);
 protected:
  void RegisterDebugOutput();
  AliMCTrackingTestTask(const AliMCTrackingTestTask& /*info*/);
  AliMCTrackingTestTask& operator=(const AliMCTrackingTestTask& /*info*/) { return *this;}
  AliMCEvent  * fMCinfo;          //! MC event handler
  AliESDEvent * fESD;             //! current esd event
  
  Int_t         fCurrentRun;      //  current run number

  //
  //
  //
  TTreeSRedirector *fDebugStreamer;     //! debug streamer
  Int_t  fStreamLevel;                  //  debug stream level 
  Int_t  fDebugLevel;                   //  debug level
  TString      fDebugOutputPath; // debug output path

  TList* fOutList;
  TIterator *fPitList;        //! iterator over the output objetcs  
  TList *fCompList; 

  ClassDef(AliMCTrackingTestTask, 1); // Analysis task base class for tracks
};

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