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"
37 ClassImp(AliCaloTrackESDReader)
39 //______________________________________________
40 AliCaloTrackESDReader::AliCaloTrackESDReader() :
41 AliCaloTrackReader(), fConstrainTrack(0),
42 fESDtrackCuts(0), fESDtrackComplementaryCuts(0)
46 //Initialize parameters
49 fReadAODMCParticles = kFALSE;
50 fConstrainTrack = kFALSE ; // constrain tracks to vertex
54 //_____________________________________________
55 AliCaloTrackESDReader::~AliCaloTrackESDReader()
59 //AliCaloTrackReader::~AliCaloTrackReader();
60 AliCaloTrackReader::DeletePointers();
63 delete fESDtrackComplementaryCuts;
66 //_________________________________________________________
67 Bool_t AliCaloTrackESDReader::CheckForPrimaryVertex() const
69 //Check if the vertex was well reconstructed, copy of conversion group
71 AliESDEvent * esdevent = dynamic_cast<AliESDEvent*> (fInputEvent);
72 if(!esdevent) return kFALSE;
74 if(esdevent->GetPrimaryVertex()->GetNContributors() > 0)
79 if(esdevent->GetPrimaryVertex()->GetNContributors() < 1)
82 if(esdevent->GetPrimaryVertexSPD()->GetNContributors() > 0)
87 if(esdevent->GetPrimaryVertexSPD()->GetNContributors() < 1)
97 //________________________________
98 void AliCaloTrackESDReader::Init()
100 //Init reader. Method to be called in AliAnaCaloTrackCorrMaker
102 AliCaloTrackReader::Init();
105 fESDtrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); //initialize with TPC only tracks
108 //______________________________________________________________________________
109 Bool_t AliCaloTrackESDReader::SelectTrack(AliVTrack* track, Double_t pTrack[3])
111 // Select ESD track using the cuts declared in fESDtrackCuts
112 // in case of hybrid tracks, 2 different sets of cuts defined.
114 AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (track);
116 if(!esdTrack) return kFALSE;
118 const AliExternalTrackParam* constrainParam = esdTrack->GetConstrainedParam();
120 if(fESDtrackCuts->AcceptTrack(esdTrack))
122 track->GetPxPyPz(pTrack) ;
126 if( !constrainParam ) return kFALSE;
128 esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
129 esdTrack->GetConstrainedPxPyPz(pTrack);
131 } // use constrained tracks
133 if(fSelectSPDHitTracks && !esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1))
134 return kFALSE ; // Not much sense to use with TPC only or Hybrid tracks
137 // Complementary track to global : Hybrids (make sure that the previous selection is for Global)
138 else if(fESDtrackComplementaryCuts && fESDtrackComplementaryCuts->AcceptTrack(esdTrack))
140 // constrain the track
141 if( !constrainParam ) return kFALSE;
143 esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
144 esdTrack->GetConstrainedPxPyPz(pTrack);
152 //_______________________________________________________________
153 void AliCaloTrackESDReader::SetTrackCuts(AliESDtrackCuts * cuts)
157 if(fESDtrackCuts) delete fESDtrackCuts ;
159 fESDtrackCuts = cuts ;
163 //____________________________________________________________________________
164 void AliCaloTrackESDReader::SetTrackComplementaryCuts(AliESDtrackCuts * cuts)
166 // Set Track cuts for complementary tracks (hybrids)
168 if(fESDtrackComplementaryCuts) delete fESDtrackComplementaryCuts ;
170 fESDtrackComplementaryCuts = cuts ;
174 //_________________________________________________________________
175 void AliCaloTrackESDReader::SetInputOutputMCEvent(AliVEvent* esd,
179 // Connect the data pointers
181 Bool_t tesd = kFALSE ;
183 if ( strcmp(esd->GetName(), "AliMixedEvent") == 0 )
185 AliMultiEventInputHandler* multiEH = dynamic_cast<AliMultiEventInputHandler*>((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
188 if (multiEH->GetFormat() == 0 )
195 printf("AliCaloTrackESDReader::SetInputOutputMCEvent() - MultiEventHandler is NULL");
199 if (strcmp(esd->GetName(),"AliESDEvent") == 0)
206 AliFatal(Form("AliCaloTrackESDReader::SetInputOutputMCEvent() - STOP ::Wrong reader, here only ESDs. Input name: %s != AliESDEvent \n",esd->GetName()));