2 /**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 //_________________________________________________________________________
18 // Class for reading data (ESDs) in order to do prompt gamma
19 // or other particle identification and correlations
24 //*-- Author: Gustavo Conesa (LNF-INFN)
25 //////////////////////////////////////////////////////////////////////////////
28 //---- ANALYSIS system ----
29 #include "AliCaloTrackESDReader.h"
30 #include "AliAODEvent.h"
31 #include "AliMultiEventInputHandler.h"
32 #include "AliAnalysisManager.h"
33 #include "AliMixedEvent.h"
34 #include "AliESDEvent.h"
35 #include "AliESDtrackCuts.h"
38 ClassImp(AliCaloTrackESDReader)
40 //______________________________________________
41 AliCaloTrackESDReader::AliCaloTrackESDReader() :
42 AliCaloTrackReader(), fConstrainTrack(0),
43 fESDtrackCuts(0), fESDtrackComplementaryCuts(0)
47 //Initialize parameters
50 fReadAODMCParticles = kFALSE;
51 fConstrainTrack = kFALSE ; // constrain tracks to vertex
55 //_____________________________________________
56 AliCaloTrackESDReader::~AliCaloTrackESDReader()
60 //AliCaloTrackReader::~AliCaloTrackReader();
61 AliCaloTrackReader::DeletePointers();
64 delete fESDtrackComplementaryCuts;
67 //_________________________________________________________
68 Bool_t AliCaloTrackESDReader::CheckForPrimaryVertex() const
70 //Check if the vertex was well reconstructed, copy of conversion group
72 AliESDEvent * esdevent = dynamic_cast<AliESDEvent*> (fInputEvent);
73 if(!esdevent) return kFALSE;
75 if(esdevent->GetPrimaryVertex()->GetNContributors() > 0)
80 if(esdevent->GetPrimaryVertex()->GetNContributors() < 1)
83 if(esdevent->GetPrimaryVertexSPD()->GetNContributors() > 0)
88 if(esdevent->GetPrimaryVertexSPD()->GetNContributors() < 1)
98 //________________________________
99 void AliCaloTrackESDReader::Init()
101 //Init reader. Method to be called in AliAnaCaloTrackCorrMaker
103 AliCaloTrackReader::Init();
106 fESDtrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); //initialize with TPC only tracks
109 //______________________________________________________________________________
110 Bool_t AliCaloTrackESDReader::SelectTrack(AliVTrack* track, Double_t pTrack[3])
112 // Select ESD track using the cuts declared in fESDtrackCuts
113 // in case of hybrid tracks, 2 different sets of cuts defined.
115 AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (track);
117 if(!esdTrack) return kFALSE;
119 const AliExternalTrackParam* constrainParam = esdTrack->GetConstrainedParam();
121 if(fESDtrackCuts->AcceptTrack(esdTrack))
123 track->GetPxPyPz(pTrack) ;
127 if( !constrainParam ) return kFALSE;
129 esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
130 esdTrack->GetConstrainedPxPyPz(pTrack);
132 } // use constrained tracks
134 if(fSelectSPDHitTracks && !esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1))
135 return kFALSE ; // Not much sense to use with TPC only or Hybrid tracks
138 // Complementary track to global : Hybrids (make sure that the previous selection is for Global)
139 else if(fESDtrackComplementaryCuts && fESDtrackComplementaryCuts->AcceptTrack(esdTrack))
141 // constrain the track
142 if( !constrainParam ) return kFALSE;
144 esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
145 esdTrack->GetConstrainedPxPyPz(pTrack);
153 //_______________________________________________________________
154 void AliCaloTrackESDReader::SetTrackCuts(AliESDtrackCuts * cuts)
158 if(fESDtrackCuts) delete fESDtrackCuts ;
160 fESDtrackCuts = cuts ;
164 //____________________________________________________________________________
165 void AliCaloTrackESDReader::SetTrackComplementaryCuts(AliESDtrackCuts * cuts)
167 // Set Track cuts for complementary tracks (hybrids)
169 if(fESDtrackComplementaryCuts) delete fESDtrackComplementaryCuts ;
171 fESDtrackComplementaryCuts = cuts ;
175 //_________________________________________________________________
176 void AliCaloTrackESDReader::SetInputOutputMCEvent(AliVEvent* esd,
180 // Connect the data pointers
182 Bool_t tesd = kFALSE ;
184 if ( strcmp(esd->GetName(), "AliMixedEvent") == 0 )
186 AliMultiEventInputHandler* multiEH = dynamic_cast<AliMultiEventInputHandler*>((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
189 if (multiEH->GetFormat() == 0 )
196 AliFatal("MultiEventHandler is NULL");
200 if (strcmp(esd->GetName(),"AliESDEvent") == 0)
207 AliFatal(Form("STOP ::Wrong reader, here only ESDs. Input name: %s != AliESDEvent",esd->GetName()));