ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2014, 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.                  *
 **************************************************************************/
/*
 * Implementation of track selection in case the analysis runs on AODs
 * For the moment it uses the AliESDtrackCuts and converts AOD tracks to
 * ESD tracks, which might change in the future when an AOD track selection
 * framework becomes available.
 *
 * Author:
 *   Markus Fasel
 */
#include <TClonesArray.h>
#include <TObjArray.h>

#include <AliAODEvent.h>
#include <AliAODTrack.h>
#include <AliESDtrack.h>
#include <AliPicoTrack.h>
#include "AliEMCalPtTaskTrackSelectionAOD.h"

ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionAOD)

namespace EMCalTriggerPtAnalysis {

	//______________________________________________________________________________
	AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD() :
		AliEMCalPtTaskVTrackSelection(),
		fTrackCuts(NULL),
		fFilterBits(0)
	{
		/*
		 * Main constructor
		 */
	}

	//______________________________________________________________________________
	AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(AliESDtrackCuts* cuts, UInt_t filterbits):
		AliEMCalPtTaskVTrackSelection(),
		fTrackCuts(cuts),
		fFilterBits(filterbits)
	{
		/*
		 * Main Constructor, initalising also track cuts
		 *
		 * @param cuts: Inital track cut object
		 */
	}

	//______________________________________________________________________________
	AliEMCalPtTaskTrackSelectionAOD::AliEMCalPtTaskTrackSelectionAOD(const AliEMCalPtTaskTrackSelectionAOD& ref) :
		AliEMCalPtTaskVTrackSelection(ref),
		fTrackCuts(NULL),
		fFilterBits(ref.fFilterBits)
	{
		/*
		 * copy constructor
		 *
		 * @param ref: AOD track selection as basis for the copy
		 */
		if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
	}

	//______________________________________________________________________________
	AliEMCalPtTaskTrackSelectionAOD& AliEMCalPtTaskTrackSelectionAOD::operator=(const AliEMCalPtTaskTrackSelectionAOD& ref) {
		/*
		 * Assignment operator
		 *
		 * @param ref: AOD track selection as basis for the copy
		 * @return: reference to this cut object
		 */
		AliEMCalPtTaskVTrackSelection::operator=(ref);
		if(this != &ref){
			if(fTrackCuts) {
				delete fTrackCuts;
				fTrackCuts = NULL;
			}
			if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
		}
		return *this;
	}

	//______________________________________________________________________________
	AliEMCalPtTaskTrackSelectionAOD::~AliEMCalPtTaskTrackSelectionAOD() {
		/*
		 * Destructor, removes the track cuts
		 */
		if(fTrackCuts) delete fTrackCuts;
	}

	//______________________________________________________________________________
	TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const TClonesArray* const tracks) {
		/*
		 * Select tracks from a list (TClonesArray) of tracks. Internally, the tracks are converted
		 * to ESD tracks and processed by the underlying AliESDtrackCut object
		 *
		 * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
		 * @return: TObjArray of selected tracks
		 */
		if(!fListOfTracks) fListOfTracks = new TObjArray;
		else fListOfTracks->Clear();
		TIter trackIter(tracks);
		TObject *containerObject(NULL);
		AliPicoTrack *picoTrack(NULL);
		AliAODTrack *track(NULL);
		while((track = dynamic_cast<AliAODTrack *>(trackIter()))){
		  // Handle pico tracks
		  if((picoTrack = dynamic_cast<AliPicoTrack *>(containerObject)))
		    track = dynamic_cast<AliAODTrack *>(picoTrack->GetTrack());
		  else
		    track = dynamic_cast<AliAODTrack *>(containerObject);
			// First check filter bits
			if(fFilterBits && !track->TestFilterBit(fFilterBits)) continue;
			if(fTrackCuts){
				AliESDtrack copyTrack(track);
				if(fTrackCuts->AcceptTrack(&copyTrack)) fListOfTracks->AddLast(track);
			}
		}
		return fListOfTracks;
	}

	//______________________________________________________________________________
	TObjArray* AliEMCalPtTaskTrackSelectionAOD::GetAcceptedTracks(const AliVEvent* const event) {
		/*
		 * Select tracks from a list (TClonesArray) of tracks. Internally, the tracks are converted
		 * to ESD tracks and processed by the underlying AliESDtrackCut object
		 *
		 * @param tracks: TClonesArray of input tracks, under which we select the appropriate ones
		 * @return: TObjArray of selected tracks
		 */
		if(!fListOfTracks) fListOfTracks = new TObjArray;
		else fListOfTracks->Clear();
		const AliAODEvent *aod = dynamic_cast<const AliAODEvent *>(event);
		if(!aod){
			AliError("Event not of type AliAODEvent");
			return fListOfTracks;
		}
		AliAODTrack *track(NULL);
		for(int itrk = 0; itrk < event->GetNumberOfTracks(); itrk++){
			track = static_cast<AliAODTrack *>(event->GetTrack(itrk));
			// First check filter bits
			if(fFilterBits && !track->TestFilterBit(fFilterBits)) continue;
			if(fTrackCuts){
				AliESDtrack copyTrack(track);
				if(fTrackCuts->AcceptTrack(&copyTrack)) fListOfTracks->AddLast(track);
			}
		}
		return fListOfTracks;
	}

	//______________________________________________________________________________
	bool AliEMCalPtTaskTrackSelectionAOD::IsTrackAccepted(AliVTrack * const trk){
	  /*
	   * Check whether track is accepted
	   *
	   * @param trk: Track to check
	   * @return: true if selected, false otherwise
	   */
	  AliAODTrack *aodt = dynamic_cast<AliAODTrack *>(trk);
	  if(!aodt) return kFALSE;
	  if(fFilterBits && !aodt->TestFilterBit(fFilterBits)) return kFALSE;
	  AliESDtrack copyTrack(aodt);
	  return fTrackCuts->AcceptTrack(&copyTrack);
	}


} /* namespace EMCalTriggerPtAnalysis */

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