ROOT logo
#ifndef AliMFTAnalysisTools_H
#define AliMFTAnalysisTools_H

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

//====================================================================================================================================================
//
//      Support class for various common operation on MFT objects
//
//      Contact author: antonio.uras@cern.ch
//
//====================================================================================================================================================

#include "TObject.h"
#include "AliAODTrack.h"
#include "AliAODDimuon.h"
#include "TLorentzVector.h"
#include "AliMFTConstants.h"
#include "TDatabasePDG.h"
#include "TMath.h"
#include "AliLog.h"
#include "TMatrixD.h"
#include "TClonesArray.h"
#include "AliAODMCHeader.h"
#include "AliGenEventHeader.h"
#include "AliAODMCParticle.h"

//====================================================================================================================================================

class AliMFTAnalysisTools : public TObject {

public:

  AliMFTAnalysisTools() : TObject() {;}
  virtual ~AliMFTAnalysisTools() {;}

  // In principle, the first two methods should be replaced by the third one
  static Bool_t ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2]);
  static Bool_t ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2], TLorentzVector &kinem);
  static Bool_t ExtrapAODMuonToZ(AliAODTrack *muon, Double_t z, Double_t xy[2], TLorentzVector &kinem, TMatrixD &cov);

  static Bool_t ExtrapAODMuonToXY(AliAODTrack *muon, Double_t xy[2], Double_t &zFinal, TLorentzVector &kinem, TMatrixD &cov);

  static Bool_t GetAODMuonOffset(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset);
  static Bool_t GetAODMuonWeightedOffset(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset);

  static Bool_t GetAODMuonOffsetZ(AliAODTrack *muon, Double_t xv, Double_t yv, Double_t zv, Double_t &offset);

  static Bool_t CalculatePCA(AliAODDimuon *dimuon, Double_t *pca, Double_t &pcaQuality, TLorentzVector &kinem);
  static Bool_t CalculatePCA(TObjArray *muons, Double_t *pca, Double_t &pcaQuality, TLorentzVector &kinem);
  static Double_t GetDistanceBetweenPoints(TVector3 **points, Int_t nPoints);

  static Double_t GetPseudoProperDecayTimeXY(Double_t xVtx, Double_t yVtx, Double_t xDimu, Double_t yDimu, Double_t mDimu, Double_t ptDimu);
  static Double_t GetPseudoProperDecayTimeZ(Double_t zVtx, Double_t zDimu, Double_t mDimu, Double_t pzDimu);

  static Bool_t PlaneExists(AliAODTrack *muon, Int_t iPlane) { return muon->GetMFTClusterPattern() & (1<<iPlane); }

  static Bool_t IsWrongCluster(AliAODTrack *muon, Int_t iPlane) { 
    if (!PlaneExists(muon, iPlane)) return kFALSE;
    else return !(muon->GetMFTClusterPattern() & (1<<(iPlane+AliMFTConstants::fNMaxPlanes)));
  }

  static Bool_t IsCorrectMatch(AliAODTrack *muon);

  static TString GetGenerator(Int_t label, AliAODMCHeader* header);
  static void GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen);
  static Bool_t IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC);

  static void ConvertCovMatrixMUON2AOD(const TMatrixD& covMUON, Double_t covAOD[21]);
  static const TMatrixD ConvertCovMatrixAOD2MUON(AliAODTrack *muon);

  static Bool_t TranslateMuon(AliAODTrack *muon, Double_t vtxInitial[3], Double_t vtxFinal[3]);
  static Bool_t TranslateMuonToOrigin(AliAODTrack *muon, Double_t vtx[3]);

  static Bool_t IsPDGCharm(Int_t pdgCode);
  static Bool_t IsPDGBeauty(Int_t pdgCode);
  static Bool_t IsPDGResonance(Int_t pdgCode);
  
  ClassDef(AliMFTAnalysisTools,1)
    
};

//====================================================================================================================================================

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