ROOT logo
/*************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// AliCDMesonUtils
// for
// AliAnalysisTaskCDMeson
//
//
//  Author:
//  Xianguo Lu <lu@physi.uni-heidelberg.de>
//  continued by
//  Felix Reidt <Felix.Reidt@cern.ch>

#ifndef ALICDMESONUTILS_H
#define ALICDMESONUTILS_H

#include <THnSparse.h> // forward declaration not possible


#define STD_ALIROOT
// if this is defined the code should run with a standard aliroot


class TH1;
class TH2;
class TLorentzVector;
class TParticle;
class TVector3;
class TObjArray;

class AliVEvent;
class AliESDEvent;
class AliAODEvent;
class AliESDtrack;
class AliESDtrackCuts;
class AliVTrack;
class AliPIDResponse;

class AliCDMesonTracks;

class AliCDMesonUtils
{
public:
	enum{
		kInnerPixel = 0,
		kOuterPixel,
		kIPA,
		kIPC,
		kOPA,
		kOPC
	};

	// ESD only
	//---------

	// cuts for ESD analysis
	static Bool_t CutEvent(const AliESDEvent *ESDEvent, TH1 *hspd, TH1 *hpriv,
	                       TH1* hpriVtxPos, TH1* hpriVtxDist, TH2 *hfo,
	                       TH1* hfochans, Int_t &kfo, Int_t &nip, Int_t &nop,
	                       TH1* hpriVtxX, TH1* hpriVtxY, TH1* hpriVtxZ);

	// V0-AND/OR
	static Bool_t V0AND(const AliESDEvent *ESDEvent) {
		// were both V0 detectors A/C firing?
		// (4 = AliCDMesonBase::kBinNG)
		return (GetV0(ESDEvent) == 4);
	}

	static Bool_t V0OR(const AliESDEvent *ESDEvent) {
		// did one of the V0 detectors fire?
		// (1-4 => single or both detectors active)
		return (GetV0(ESDEvent) > 0);
	}

	// VZERO study
	static void DoVZEROStudy(const AliESDEvent *ESDEvent, TObjArray* hists,
	                         Int_t run);

	// gap determination
	static Int_t GetGapConfig(const AliESDEvent *ESDEvent, TH2 *hitMapSPDinner,
	                          TH2 *hitMapSPDouter, TH2 *hitMapSPDtrklt,
	                          TH2 *hitMapFMDa, TH2 *hitMapFMDc,
	                          TH1 **fmdSums, TH2 *TPCGapDCAaSide,
	                          TH2 *TPCGapDCAcSide);

	static Int_t GetFastORmultiplicity(const AliESDEvent *ESDEvent);

	static void GetSPDTrackletMult(const AliESDEvent *ESDEvent, Int_t& sum,
	                               Int_t& forwardA, Int_t& forwardC,
	                               Int_t& central);

	static void SPDLoadGeom(Int_t run); // only needed for ESDs, not in AODs

	// functions needed for the empty event study (ESD only)
	static Int_t GetEventType(const AliESDEvent *ESDEvent);
	static void GetMultFMD(const AliESDEvent *ESDEvent, Int_t& fmdA,
	                       Int_t& fmdC, Float_t *fmdSums);
	static void GetMultSPD(const AliESDEvent *ESDEvent, Int_t& spdIA,
	                       Int_t& spdIC, Int_t& spdOA, Int_t& spdOC);


	// AOD only
	//---------
	static Bool_t CutEvent(const AliAODEvent *AODEvent, TH1 *hpriv, TH1* hpriVtxX,
	                       TH1* hpriVtxY, TH1* hpriVtxZ, TH1* hpriVtxPos,
	                       TH1* hpriVtxDist);


	// independent
	//------------
	static void FillEtaPhiMap(const AliVEvent *event,
	                          const AliCDMesonTracks* tracks, TH2 *map,
	                          TH2 *map_c);
	static void SwapTrack(const AliVTrack *trks[]);
	static Int_t GetCombCh(const AliVTrack *trks[]);
	static Int_t GetCombPID(AliPIDResponse *pid, const AliVTrack *trks[],
	                        Int_t mode, TH2 *comb2trkPID = 0x0);
	static Int_t GetCombPID(const TParticle* particles[], TH2 *comb2trkPID = 0x0);
	static void GetMassPtCtsOA(Int_t pid, const TVector3* momenta[],
	                           Double_t& mass, Double_t& pt, Double_t& cts,
	                           Double_t& oa);
	static void GetPWAinfo(Int_t pid, const AliVTrack *trks[],
	                       Float_t& theta, Float_t& phi, Float_t& mass,
	                       Float_t momentum[]);
	static void FillSPDtrkltMap(const AliVEvent *event, TH2 *hitMapSPDtrklt);

private:
	// ESD only
	//---------

	// Gap determination functions
	static Int_t GetV0(const AliESDEvent *ESDEvent);
	static Int_t GetFMD(const AliESDEvent *ESDEvent, TH2 *hitMapFMDa,
	                    TH2 *hitMapFMDc, TH1** fmdSums);
	static Int_t GetSPD(const AliESDEvent *ESDEvent, TH2 *hitMapSPDinner,
	                    TH2 *hitMapSPDouter, TH2 *hitMapSPDtrklt);
	static Int_t GetTPC(const AliESDEvent *ESDEvent, TH2 *TPCGapDCAaSide,
	                    TH2 *TPCGapDCAcSide);
	static Int_t GetZDC(const AliESDEvent *ESDEvent); // not used so far

#ifdef STD_ALIROOT
	// helpers for the FMD gap determination
	static Int_t FMDHitCombinations(const AliESDEvent* ESDEvent, Int_t side);
#endif

	// helpers for the SPD gap determination
	static Bool_t SPDLoc2Glo(Int_t id, const Double_t *loc, Double_t *glo);
	static Int_t CheckChipEta(Int_t chipKey, TString scut,
	                          const Double_t vtxPos[], TH2 *hitMapSPDinner,
	                          TH2 *hitMapSPDouter);
	static void GetNFO(const AliESDEvent *ESDEvent, TString etacut,
	                   Int_t ctr[], TH2 *hitMapSPDinner, TH2 *hitMapSPDouter);

	// AOD only
	//---------


	// independent
	//----------
	static Int_t GetPID(AliPIDResponse *pid, const AliVTrack *trk,
	                    Int_t mode = 0);
	static Int_t GetPID(Int_t pdgCode);
	static Int_t CombinePID(const Int_t pid[]);

	static TLorentzVector GetKinematics(const Double_t *pa, const Double_t *pb,
	                                    Double_t ma, Double_t mb,
	                                    Double_t & cts);
	static Double_t GetOA(const Double_t *pa, const Double_t *pb);
};

#endif
 AliCDMesonUtils.h:1
 AliCDMesonUtils.h:2
 AliCDMesonUtils.h:3
 AliCDMesonUtils.h:4
 AliCDMesonUtils.h:5
 AliCDMesonUtils.h:6
 AliCDMesonUtils.h:7
 AliCDMesonUtils.h:8
 AliCDMesonUtils.h:9
 AliCDMesonUtils.h:10
 AliCDMesonUtils.h:11
 AliCDMesonUtils.h:12
 AliCDMesonUtils.h:13
 AliCDMesonUtils.h:14
 AliCDMesonUtils.h:15
 AliCDMesonUtils.h:16
 AliCDMesonUtils.h:17
 AliCDMesonUtils.h:18
 AliCDMesonUtils.h:19
 AliCDMesonUtils.h:20
 AliCDMesonUtils.h:21
 AliCDMesonUtils.h:22
 AliCDMesonUtils.h:23
 AliCDMesonUtils.h:24
 AliCDMesonUtils.h:25
 AliCDMesonUtils.h:26
 AliCDMesonUtils.h:27
 AliCDMesonUtils.h:28
 AliCDMesonUtils.h:29
 AliCDMesonUtils.h:30
 AliCDMesonUtils.h:31
 AliCDMesonUtils.h:32
 AliCDMesonUtils.h:33
 AliCDMesonUtils.h:34
 AliCDMesonUtils.h:35
 AliCDMesonUtils.h:36
 AliCDMesonUtils.h:37
 AliCDMesonUtils.h:38
 AliCDMesonUtils.h:39
 AliCDMesonUtils.h:40
 AliCDMesonUtils.h:41
 AliCDMesonUtils.h:42
 AliCDMesonUtils.h:43
 AliCDMesonUtils.h:44
 AliCDMesonUtils.h:45
 AliCDMesonUtils.h:46
 AliCDMesonUtils.h:47
 AliCDMesonUtils.h:48
 AliCDMesonUtils.h:49
 AliCDMesonUtils.h:50
 AliCDMesonUtils.h:51
 AliCDMesonUtils.h:52
 AliCDMesonUtils.h:53
 AliCDMesonUtils.h:54
 AliCDMesonUtils.h:55
 AliCDMesonUtils.h:56
 AliCDMesonUtils.h:57
 AliCDMesonUtils.h:58
 AliCDMesonUtils.h:59
 AliCDMesonUtils.h:60
 AliCDMesonUtils.h:61
 AliCDMesonUtils.h:62
 AliCDMesonUtils.h:63
 AliCDMesonUtils.h:64
 AliCDMesonUtils.h:65
 AliCDMesonUtils.h:66
 AliCDMesonUtils.h:67
 AliCDMesonUtils.h:68
 AliCDMesonUtils.h:69
 AliCDMesonUtils.h:70
 AliCDMesonUtils.h:71
 AliCDMesonUtils.h:72
 AliCDMesonUtils.h:73
 AliCDMesonUtils.h:74
 AliCDMesonUtils.h:75
 AliCDMesonUtils.h:76
 AliCDMesonUtils.h:77
 AliCDMesonUtils.h:78
 AliCDMesonUtils.h:79
 AliCDMesonUtils.h:80
 AliCDMesonUtils.h:81
 AliCDMesonUtils.h:82
 AliCDMesonUtils.h:83
 AliCDMesonUtils.h:84
 AliCDMesonUtils.h:85
 AliCDMesonUtils.h:86
 AliCDMesonUtils.h:87
 AliCDMesonUtils.h:88
 AliCDMesonUtils.h:89
 AliCDMesonUtils.h:90
 AliCDMesonUtils.h:91
 AliCDMesonUtils.h:92
 AliCDMesonUtils.h:93
 AliCDMesonUtils.h:94
 AliCDMesonUtils.h:95
 AliCDMesonUtils.h:96
 AliCDMesonUtils.h:97
 AliCDMesonUtils.h:98
 AliCDMesonUtils.h:99
 AliCDMesonUtils.h:100
 AliCDMesonUtils.h:101
 AliCDMesonUtils.h:102
 AliCDMesonUtils.h:103
 AliCDMesonUtils.h:104
 AliCDMesonUtils.h:105
 AliCDMesonUtils.h:106
 AliCDMesonUtils.h:107
 AliCDMesonUtils.h:108
 AliCDMesonUtils.h:109
 AliCDMesonUtils.h:110
 AliCDMesonUtils.h:111
 AliCDMesonUtils.h:112
 AliCDMesonUtils.h:113
 AliCDMesonUtils.h:114
 AliCDMesonUtils.h:115
 AliCDMesonUtils.h:116
 AliCDMesonUtils.h:117
 AliCDMesonUtils.h:118
 AliCDMesonUtils.h:119
 AliCDMesonUtils.h:120
 AliCDMesonUtils.h:121
 AliCDMesonUtils.h:122
 AliCDMesonUtils.h:123
 AliCDMesonUtils.h:124
 AliCDMesonUtils.h:125
 AliCDMesonUtils.h:126
 AliCDMesonUtils.h:127
 AliCDMesonUtils.h:128
 AliCDMesonUtils.h:129
 AliCDMesonUtils.h:130
 AliCDMesonUtils.h:131
 AliCDMesonUtils.h:132
 AliCDMesonUtils.h:133
 AliCDMesonUtils.h:134
 AliCDMesonUtils.h:135
 AliCDMesonUtils.h:136
 AliCDMesonUtils.h:137
 AliCDMesonUtils.h:138
 AliCDMesonUtils.h:139
 AliCDMesonUtils.h:140
 AliCDMesonUtils.h:141
 AliCDMesonUtils.h:142
 AliCDMesonUtils.h:143
 AliCDMesonUtils.h:144
 AliCDMesonUtils.h:145
 AliCDMesonUtils.h:146
 AliCDMesonUtils.h:147
 AliCDMesonUtils.h:148
 AliCDMesonUtils.h:149
 AliCDMesonUtils.h:150
 AliCDMesonUtils.h:151
 AliCDMesonUtils.h:152
 AliCDMesonUtils.h:153
 AliCDMesonUtils.h:154
 AliCDMesonUtils.h:155
 AliCDMesonUtils.h:156
 AliCDMesonUtils.h:157
 AliCDMesonUtils.h:158
 AliCDMesonUtils.h:159
 AliCDMesonUtils.h:160
 AliCDMesonUtils.h:161
 AliCDMesonUtils.h:162
 AliCDMesonUtils.h:163
 AliCDMesonUtils.h:164
 AliCDMesonUtils.h:165
 AliCDMesonUtils.h:166
 AliCDMesonUtils.h:167
 AliCDMesonUtils.h:168
 AliCDMesonUtils.h:169
 AliCDMesonUtils.h:170
 AliCDMesonUtils.h:171
 AliCDMesonUtils.h:172
 AliCDMesonUtils.h:173
 AliCDMesonUtils.h:174
 AliCDMesonUtils.h:175
 AliCDMesonUtils.h:176
 AliCDMesonUtils.h:177
 AliCDMesonUtils.h:178
 AliCDMesonUtils.h:179
 AliCDMesonUtils.h:180
 AliCDMesonUtils.h:181
 AliCDMesonUtils.h:182
 AliCDMesonUtils.h:183