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 the track selection for the analysis on ESDs using
 * AliESDtrackCuts as underlying structure
 *
 * Author:
 * 		Markus Fasel
 */
#include <TClonesArray.h>
#include "AliEMCalPtTaskTrackSelectionESD.h"
#include <memory>

#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliESDtrackCuts.h"
#include "AliLog.h"
#include "AliPicoTrack.h"


ClassImp(EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD)

namespace EMCalTriggerPtAnalysis {

//______________________________________________________________________________
AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD():
		AliEMCalPtTaskVTrackSelection(),
		fTrackCuts(NULL)
{
	/*
	 * Default constructor
	 */
}

//______________________________________________________________________________
AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(AliESDtrackCuts* cuts):
		AliEMCalPtTaskVTrackSelection(),
		fTrackCuts(cuts)
{
	/*
	 * Constructor with cuts
	 */
}

//______________________________________________________________________________
AliEMCalPtTaskTrackSelectionESD::AliEMCalPtTaskTrackSelectionESD(
		const AliEMCalPtTaskTrackSelectionESD& ref):
		AliEMCalPtTaskVTrackSelection(ref),
		fTrackCuts(NULL)
{
	/*
	 * Copy constructor, creating a new cut object
	 */
	if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
}

//______________________________________________________________________________
AliEMCalPtTaskTrackSelectionESD& AliEMCalPtTaskTrackSelectionESD::operator=(
		const AliEMCalPtTaskTrackSelectionESD& ref)
{
	/*
	 * Assignment operator
	 */
	AliEMCalPtTaskVTrackSelection::operator=(ref);
	if(&ref != this){
		if(fTrackCuts) {
			delete fTrackCuts;
			fTrackCuts = NULL;
		}
		if(ref.fTrackCuts) fTrackCuts = new AliESDtrackCuts(*(ref.fTrackCuts));
	}
	return *this;
}

//______________________________________________________________________________
AliEMCalPtTaskTrackSelectionESD::~AliEMCalPtTaskTrackSelectionESD() {
	/*
	 * Destructor, deleting track cuts
	 */
	if(fTrackCuts) delete fTrackCuts;
}

//______________________________________________________________________________
TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(
		const TClonesArray* const tracks) {
	/*
	 * Select tracks from a TClonesArray of input tracks
	 *
	 * @param tracks: TClonesArray of tracks (must not be null)
	 * @return: TObjArray of selected tracks
	 */
	if(!fListOfTracks) fListOfTracks = new TObjArray;
	else fListOfTracks->Clear();
	if(!fTrackCuts){
		AliError("Track cuts not provided");
		return fListOfTracks;
	}
	TIter trackIter(tracks);
	AliESDtrack *track(NULL);
	AliPicoTrack *picoTrack(NULL);
	TObject *containerObject(NULL);
	while((containerObject = dynamic_cast<TObject *>(trackIter()))){
	  // Handle pico tracks
	  if((picoTrack = dynamic_cast<AliPicoTrack *>(containerObject)))
	    track = dynamic_cast<AliESDtrack *>(picoTrack->GetTrack());
	  else
	    track = dynamic_cast<AliESDtrack *>(containerObject);
		if(fTrackCuts->AcceptTrack(track)) fListOfTracks->AddLast(track);
	}
	return fListOfTracks;
}



//______________________________________________________________________________
TObjArray* AliEMCalPtTaskTrackSelectionESD::GetAcceptedTracks(const AliVEvent* const event) {
	/*
	 * Select tracks from a virtual event
	 *
	 * @param event: AliESDEvent, via interface of virtual event (must not be null)
	 * @return: TObjArray of selected tracks
	 */
	if(!fListOfTracks) fListOfTracks = new TObjArray;
	else fListOfTracks->Clear();
	if(!fTrackCuts){
		AliError("Track cuts not provided");
		return fListOfTracks;
	}
	const AliESDEvent *esd = dynamic_cast<const AliESDEvent *>(event);
	if(!esd){
		AliError("Event not of type AliESDEvent");
		return fListOfTracks;
	}
	std::auto_ptr<TObjArray> accepted(fTrackCuts->GetAcceptedTracks(esd));
	TIter trackIter(accepted.get());
	AliESDtrack *track(NULL);
	while((track = dynamic_cast<AliESDtrack *>(trackIter()))){
		fListOfTracks->AddLast(track);
	}
	return fListOfTracks;
}

//______________________________________________________________________________
bool AliEMCalPtTaskTrackSelectionESD::IsTrackAccepted(AliVTrack* const trk) {
  /*
   * Check whether track is accepted
   *
   * @param trk: Track to check
   * @return: true if selected, false otherwise
   */
  AliESDtrack *esdt = dynamic_cast<AliESDtrack *>(trk);
  if(!esdt){
    AliPicoTrack *picoTrack = dynamic_cast<AliPicoTrack *>(trk);
    if(picoTrack)
      esdt = dynamic_cast<AliESDtrack*>(picoTrack->GetTrack());
    else{
      AliError("Neither Pico nor ESD track");
      return kFALSE;
    }
  }
  return fTrackCuts->AcceptTrack(esdt);
}

} /* namespace EMCalTriggerPtAnalysis */

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