fFillEMCALCells(0), fFillPHOSCells(0),
fRecalculateClusters(kFALSE),fSelectEmbeddedClusters(kFALSE),
fTrackStatus(0), fTrackFilterMask(0),
-fESDtrackCuts(0), fConstrainTrack(kFALSE),
+fESDtrackCuts(0), fESDtrackComplementaryCuts(0), fConstrainTrack(kFALSE),
fSelectHybridTracks(0), fSelectSPDHitTracks(kFALSE),
fTrackMult(0), fTrackMultEtaCut(0.8),
fReadStack(kFALSE), fReadAODMCParticles(kFALSE),
}
delete fESDtrackCuts;
+ delete fESDtrackComplementaryCuts;
delete fTriggerAnalysis;
// Pointers not owned, done by the analysis frame
TGeoManager::Import(fImportGeometryFilePath) ; // default need file "geometry.root" in local dir!!!!
}
+ if(!fESDtrackCuts)
+ fESDtrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); //initialize with TPC only tracks
+
}
//_______________________________________
fTrackStatus = 0;
fTrackFilterMask = 128; //For AODs, but what is the difference between fTrackStatus and fTrackFilterMask?
- fESDtrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); //initialize with TPC only tracks
+ fESDtrackCuts = 0;
+ fESDtrackComplementaryCuts = 0;
fConstrainTrack = kFALSE ; // constrain tracks to vertex
fTrackBCEvent [i] = 0;
fTrackBCEventCut[i] = 0;
}
+
for (Int_t itrack = 0; itrack < nTracks; itrack++)
{////////////// track loop
AliVTrack * track = (AliVTrack*)fInputEvent->GetTrack(itrack) ; // retrieve track from esd
{
AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (track);
- if(esdTrack && fESDtrackCuts->AcceptTrack(esdTrack))
+ if(esdTrack)
{
- track->GetPxPyPz(pTrack) ;
+ if(fESDtrackCuts->AcceptTrack(esdTrack))
+ {
+ track->GetPxPyPz(pTrack) ;
- if(fConstrainTrack)
+ if(fConstrainTrack)
+ {
+ if(esdTrack->GetConstrainedParam())
+ {
+ const AliExternalTrackParam* constrainParam = esdTrack->GetConstrainedParam();
+ esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
+ esdTrack->GetConstrainedPxPyPz(pTrack);
+ }
+ else continue;
+
+ } // use constrained tracks
+
+ if(fSelectSPDHitTracks)
+ {//Not much sense to use with TPC only or Hybrid tracks
+ if(!esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1)) continue ;
+ }
+ }
+ // Complementary track to global : Hybrids (make sure that the previous selection is for Global)
+ else if(fESDtrackComplementaryCuts && fESDtrackComplementaryCuts->AcceptTrack(esdTrack))
{
+ // constrain the track
if(esdTrack->GetConstrainedParam())
{
- const AliExternalTrackParam* constrainParam = esdTrack->GetConstrainedParam();
- esdTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
- esdTrack->GetConstrainedPxPyPz(pTrack);
+ esdTrack->Set(esdTrack->GetConstrainedParam()->GetX(),esdTrack->GetConstrainedParam()->GetAlpha(),esdTrack->GetConstrainedParam()->GetParameter(),esdTrack->GetConstrainedParam()->GetCovariance());
+
+ track->GetPxPyPz(pTrack) ;
+
}
else continue;
-
- } // use constrained tracks
-
- if(fSelectSPDHitTracks)
- {//Not much sense to use with TPC only or Hybrid tracks
- if(!esdTrack->HasPointOnITSLayer(0) && !esdTrack->HasPointOnITSLayer(1)) continue ;
}
+ else continue;
}
- else continue;
-
} // ESD
else if(fDataType==kAOD)
{
return kTRUE;
}
- if(event->GetPrimaryVertexSPD()->GetNContributors() < 1)
+ if(event->GetPrimaryVertexSPD()->GetNContributors() < 1)
{
// cout<<"bad vertex type::"<< event->GetPrimaryVertex()->GetName() << endl;
return kFALSE;
}
+//_________________________________________________________________________
+void AliCaloTrackReader::SetTrackComplementaryCuts(AliESDtrackCuts * cuts)
+{
+ // Set Track cuts for complementary tracks (hybrids)
+
+ if(fESDtrackComplementaryCuts) delete fESDtrackComplementaryCuts ;
+
+ fESDtrackComplementaryCuts = cuts ;
+
+}
+
+
AliESDtrackCuts* GetTrackCuts() const { return fESDtrackCuts ; }
void SetTrackCuts(AliESDtrackCuts * cuts) ;
+ AliESDtrackCuts* GetTrackComplementaryCuts() const { return fESDtrackComplementaryCuts ; }
+ void SetTrackComplementaryCuts(AliESDtrackCuts * cuts) ;
+
+
void SwitchOnConstrainTrackToVertex() { fConstrainTrack = kTRUE ; }
- void SwitchOffConstrainTrackToVertex() { fConstrainTrack = kFALSE ; }
+ void SwitchOffConstrainTrackToVertex() { fConstrainTrack = kFALSE ; }
void SwitchOnAODHybridTrackSelection() { fSelectHybridTracks = kTRUE ; }
void SwitchOffAODHybridTrackSelection() { fSelectHybridTracks = kFALSE ; }
ULong_t fTrackStatus ; // Track selection bit, select tracks refitted in TPC, ITS ...
ULong_t fTrackFilterMask ; // Track selection bit, for AODs (any difference with track status?)
- AliESDtrackCuts *fESDtrackCuts ; // Track cut
+ AliESDtrackCuts *fESDtrackCuts ; // Track cut
+ AliESDtrackCuts *fESDtrackComplementaryCuts; // Track cut, complementary cuts for hybrids
Bool_t fConstrainTrack ; // Constrain Track to vertex
Bool_t fSelectHybridTracks ; // Select CTS tracks of type hybrid (only for AODs)
Bool_t fSelectSPDHitTracks ; // Ensure that track hits SPD layers
AliCaloTrackReader( const AliCaloTrackReader & r) ; // cpy ctor
AliCaloTrackReader & operator = (const AliCaloTrackReader & r) ; // cpy assignment
- ClassDef(AliCaloTrackReader,48)
+ ClassDef(AliCaloTrackReader,49)
} ;