#include "AliVEventHandler.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
+#include "AliESDtrackCuts.h"
ClassImp(AliAnalysisTaskCaloFilter)
AliAnalysisTaskSE(), //fCuts(0x0),
fCaloFilter(0), fCorrect(kFALSE),
fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEAR"),
- fEMCALRecoUtils(new AliEMCALRecoUtils)
+ fEMCALRecoUtils(new AliEMCALRecoUtils),
+ fESDtrackCuts(0), fTrackMultEtaCut(0.9)
{
// Default constructor
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
}
//__________________________________________________
AliAnalysisTaskSE(name), //fCuts(0x0),
fCaloFilter(0), fCorrect(kFALSE),
fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEAR"),
- fEMCALRecoUtils(new AliEMCALRecoUtils)
+ fEMCALRecoUtils(new AliEMCALRecoUtils),
+ fESDtrackCuts(0), fTrackMultEtaCut(0.9)
{
// Constructor
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
}
//__________________________________________________
//Destructor.
if(fEMCALGeo) delete fEMCALGeo;
- if(fEMCALRecoUtils) delete fEMCALRecoUtils ;
-
+ if(fEMCALRecoUtils) delete fEMCALRecoUtils;
+ if(fESDtrackCuts) delete fESDtrackCuts;
}
//__________________________________________________
//Magic line to write events to file
AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
-
Bool_t bAOD = kFALSE;
if(!strcmp(event->GetName(),"AliAODEvent")) bAOD=kTRUE;
Bool_t bESD = kFALSE;
if(!strcmp(event->GetName(),"AliESDEvent")) bESD=kTRUE;
-
+
+ //Get track multiplicity
+ Int_t trackMult = 0;
+ if(bESD){
+ Int_t nTracks = InputEvent()->GetNumberOfTracks() ;
+ for (Int_t itrack = 0; itrack < nTracks; itrack++) {////////////// track loop
+ AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(itrack) ; // retrieve track from esd
+ if(!fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
+ //Count the tracks in eta < 0.9
+ if(TMath::Abs(track->Eta())< fTrackMultEtaCut) trackMult++;
+ }
+ }
+
// set arrays and pointers
Float_t posF[3];
Double_t pos[3];
header->SetPeriodNumber(event->GetPeriodNumber());
header->SetEventType(event->GetEventType());
header->SetMuonMagFieldScale(-999.); // FIXME
- header->SetCentrality(-999.); // FIXME
-
+ //printf("Track Multiplicity for eta < %f: %d \n",fTrackMultEtaCut,trackMult);
+ header->SetCentrality((Double_t)trackMult); // FIXME
+ //printf("Centrality %f\n",header->GetCentrality());
header->SetTriggerMask(event->GetTriggerMask());
header->SetTriggerCluster(event->GetTriggerCluster());
printf("Filter, aod : i %d, x %f, y %f, z %f\n",caloCluster->GetID(), posF[0], posF[1], posF[2]);
}
+ //Matched tracks, just to know if there was any match, the track pointer is useless.
+ if(bESD){
+ TArrayI* matchedT = ((AliESDCaloCluster*)cluster)->GetTracksMatched();
+ if (InputEvent()->GetNumberOfTracks() > 0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) {
+ for (Int_t im = 0; im < matchedT->GetSize(); im++) {
+ Int_t iESDtrack = matchedT->At(im);;
+ if ((AliVTrack*)InputEvent()->GetTrack(iESDtrack) != 0) {
+ caloCluster->AddTrackMatched((AliVTrack*)InputEvent()->GetTrack(iESDtrack));
+ }
+ }
+ }// There is at least a match with a track
+ }
}
caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters
// end of loop on calo clusters
#include "AliAnalysisTaskSE.h"
class AliEMCALRecoUtils;
class AliEMCALGeometry;
+class AliESDtrackCuts;
class AliAnalysisTaskCaloFilter : public AliAnalysisTaskSE
{
void SwitchOnClusterCorrection() {fCorrect = kTRUE ;}
void SwitchOffClusterCorrection() {fCorrect = kFALSE;}
+ AliESDtrackCuts* GetTrackCuts() const { return fESDtrackCuts ; }
+ void SetTrackCuts(AliESDtrackCuts * cuts) { fESDtrackCuts = cuts ; }
+ Float_t GetTrackMultiplicityEtaCut() const { return fTrackMultEtaCut ; }
+ void SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta ; }
+
+
void PrintInfo();
private:
TString fEMCALGeoName; // Name of geometry to use.
AliEMCALRecoUtils * fEMCALRecoUtils; // Pointer to EMCAL utilities for clusterization
- ClassDef(AliAnalysisTaskCaloFilter, 2); // Analysis task for standard ESD filtering
+ AliESDtrackCuts *fESDtrackCuts ; // Track cut
+ Float_t fTrackMultEtaCut ; // Track multiplicity eta cut
+
+
+ ClassDef(AliAnalysisTaskCaloFilter, 3); // Analysis task for standard ESD filtering
};
#endif
virtual AliCaloTrackReader * GetReader() const {return fReader ; }
virtual void SetReader(AliCaloTrackReader * const reader) { fReader = reader ; }
+ Int_t GetTrackMultiplicity() const {return fReader->GetTrackMultiplicity();}
+
//Calorimeter helper class access methods
AliEMCALGeoUtils * GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry(); }
AliPHOSGeoUtils * GetPHOSGeometry() const { return fCaloUtils->GetPHOSGeometry() ; }
#include "AliMixedEvent.h"
#include "AliESDtrack.h"
#include "AliEMCALRecoUtils.h"
+#include "AliESDtrackCuts.h"
ClassImp(AliCaloTrackReader)
// fSecondInputFileName(""),fSecondInputFirstEvent(0),
// fAODCTSNormalInputEntries(0), fAODEMCALNormalInputEntries(0),
// fAODPHOSNormalInputEntries(0),
- fTrackStatus(0),
+ fTrackStatus(0), fESDtrackCuts(0), fTrackMult(0), fTrackMultEtaCut(0.9),
fReadStack(kFALSE), fReadAODMCParticles(kFALSE),
fDeltaAODFileName("deltaAODPartCorr.root"),fFiredTriggerClassName(""),
fAnaLED(kFALSE),fTaskName(""),fCaloUtils(0x0),
delete [] fVertex ;
}
+ if(fESDtrackCuts) delete fESDtrackCuts;
+
// Pointers not owned, done by the analysis frame
// if(fInputEvent) delete fInputEvent ;
// if(fOutputEvent) delete fOutputEvent ;
fAnaLED = kFALSE;
//We want tracks fitted in the detectors:
- fTrackStatus=AliESDtrack::kTPCrefit;
- fTrackStatus|=AliESDtrack::kITSrefit;
+ //fTrackStatus=AliESDtrack::kTPCrefit;
+ //fTrackStatus|=AliESDtrack::kITSrefit;
+
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
}
printf("Use EMCAL Cells = %d\n", fFillEMCALCells) ;
printf("Use PHOS Cells = %d\n", fFillPHOSCells) ;
printf("Track status = %d\n", (Int_t) fTrackStatus) ;
+ printf("Track Mult Eta Cut = %d\n", (Int_t) fTrackMultEtaCut) ;
printf("Write delta AOD = %d\n", fWriteOutputDeltaAOD) ;
if(fComparePtHardAndJetPt)
Int_t nTracks = fInputEvent->GetNumberOfTracks() ;
Double_t p[3];
+ fTrackMult = 0;
+ Int_t nstatus = 0;
for (Int_t itrack = 0; itrack < nTracks; itrack++) {////////////// track loop
AliVTrack * track = (AliVTrack*)fInputEvent->GetTrack(itrack) ; // retrieve track from esd
-
- //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
+
+ //Select tracks under certain conditions, TPCrefit, ITSrefit ... check the set bits
if (fTrackStatus && !((track->GetStatus() & fTrackStatus) == fTrackStatus))
continue ;
+ nstatus++;
+
+ if(fDataType==kESD && !fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
+
+ //Count the tracks in eta < 0.9
+ //printf("Eta %f cut %f\n",TMath::Abs(track->Eta()),fTrackMultEtaCut);
+ if(TMath::Abs(track->Eta())< fTrackMultEtaCut) fTrackMult++;
+
track->GetPxPyPz(p) ;
TLorentzVector momentum(p[0],p[1],p[2],0);
}// track loop
//fAODCTSNormalInputEntries = fAODCTS->GetEntriesFast();
- if(fDebug > 1) printf("AliCaloTrackReader::FillInputCTS() - aod entries %d\n", fAODCTS->GetEntriesFast());//fAODCTSNormalInputEntries);
+ if(fDebug > 1)
+ printf("AliCaloTrackReader::FillInputCTS() - aod entries %d, input tracks %d, pass status %d, multipliticy %d\n", fAODCTS->GetEntriesFast(), nTracks, nstatus, fTrackMult);//fAODCTSNormalInputEntries);
// //If second input event available, add the clusters.
// if(fSecondInputAODTree && fSecondInputAODEvent){
#include "AliFiducialCut.h"
class AliAODMCHeader;
#include "AliCalorimeterUtils.h"
+class AliESDtrackCuts;
class AliCaloTrackReader : public TObject {
// Int_t GetAODPHOSNormalInputEntries() {if(!fSecondInputAODTree) { fAODPHOSNormalInputEntries = fAODPHOS->GetEntriesFast() ;}
// return fAODPHOSNormalInputEntries ; }
- ULong_t GetTrackStatus() const {return fTrackStatus ; }
+ // Track selection
+ ULong_t GetTrackStatus() const {return fTrackStatus ; }
void SetTrackStatus(ULong_t bit) { fTrackStatus = bit ; }
+ AliESDtrackCuts* GetTrackCuts() const { return fESDtrackCuts ; }
+ void SetTrackCuts(AliESDtrackCuts * cuts) { fESDtrackCuts = cuts ; }
+ Int_t GetTrackMultiplicity() const { return fTrackMult ; }
+ Float_t GetTrackMultiplicityEtaCut() const { return fTrackMultEtaCut ; }
+ void SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta ; }
+
+ //MC switchs
void SwitchOnStack() { fReadStack = kTRUE ; }
void SwitchOffStack() { fReadStack = kFALSE ; }
void SwitchOnAODMCParticles() { fReadAODMCParticles = kTRUE ; }
// Int_t fAODPHOSNormalInputEntries; // Number of entries in PHOS in case of standard input, larger with mixing.
ULong_t fTrackStatus ; // Track selection bit, select tracks refitted in TPC, ITS ...
+ AliESDtrackCuts *fESDtrackCuts ; // Track cut
+ Int_t fTrackMult ; // Track multiplicity
+ Float_t fTrackMultEtaCut ; // Track multiplicity eta cut
Bool_t fReadStack ; // Access kine information from stack
Bool_t fReadAODMCParticles ; // Access kine information from filtered AOD MC particles
Bool_t fWriteOutputDeltaAOD;// Write the created delta AOD objects into file
Bool_t fOldAOD; // Old AODs, before revision 4.20
- ClassDef(AliCaloTrackReader,19)
+ ClassDef(AliCaloTrackReader,20)
} ;