#include "AliCodeTimer.h"
#include "AliESDtrackCuts.h"
#include "AliESDpid.h"
+#include "AliAODHMPIDrings.h"
#include "AliV0vertexer.h"
#include "AliCascadeVertexer.h"
#include "Riostream.h"
fIsVZEROEnabled(kTRUE),
fIsTZEROEnabled(kTRUE),
fIsZDCEnabled(kTRUE),
+ fIsHMPIDEnabled(kTRUE),
fIsV0CascadeRecoEnabled(kFALSE),
fAreCascadesEnabled(kTRUE),
fAreV0sEnabled(kTRUE),
fIsVZEROEnabled(kTRUE),
fIsTZEROEnabled(kTRUE),
fIsZDCEnabled(kTRUE),
+ fIsHMPIDEnabled(kTRUE),
fIsV0CascadeRecoEnabled(kFALSE),
fAreCascadesEnabled(kTRUE),
fAreV0sEnabled(kTRUE),
}
+//_______________________________________________________________________________________________________________________________________
+Int_t AliAnalysisTaskESDfilter::ConvertHMPID(const AliESDEvent& esd) // clm
+{
+ //
+ // Convtert ESD HMPID info to AOD and return the number of good tracks with HMPID signal.
+ // We need to return an int since there is no signal counter in the ESD.
+ //
+
+ AliCodeTimerAuto("",0);
+
+ Int_t cntHmpidGoodTracks = 0;
+
+ Float_t xMip = 0;
+ Float_t yMip = 0;
+ Int_t qMip = 0;
+ Int_t nphMip = 0;
+
+ Float_t xTrk = 0;
+ Float_t yTrk = 0;
+ Float_t thetaTrk = 0;
+ Float_t phiTrk = 0;
+
+ Double_t hmpPid[5]={0};
+ Double_t hmpMom[3]={0};
+
+ TClonesArray &hmpidRings = *(AODEvent()->GetHMPIDrings());
+
+ for (Int_t iTrack=0; iTrack<esd.GetNumberOfTracks(); ++iTrack)
+ {
+ if(! esd.GetTrack(iTrack) ) continue;
+
+ if(esd.GetTrack(iTrack)->GetHMPIDsignal() > -20 ) { //
+
+ (esd.GetTrack(iTrack))->GetHMPIDmip(xMip, yMip, qMip, nphMip); // Get MIP properties
+ (esd.GetTrack(iTrack))->GetHMPIDtrk(xTrk,yTrk,thetaTrk,phiTrk);
+ (esd.GetTrack(iTrack))->GetHMPIDpid(hmpPid);
+ if((esd.GetTrack(iTrack))->GetOuterHmpParam()) (esd.GetTrack(iTrack))->GetOuterHmpPxPyPz(hmpMom);
+
+ if(esd.GetTrack(iTrack)->GetHMPIDsignal() == 0 && thetaTrk == 0 && qMip == 0 && nphMip ==0 ) continue; //
+
+ new(hmpidRings[cntHmpidGoodTracks++]) AliAODHMPIDrings(
+ (esd.GetTrack(iTrack))->GetID(), // Unique track id to attach the ring to
+ 1000000*nphMip+qMip, // MIP charge and number of photons
+ (esd.GetTrack(iTrack))->GetHMPIDcluIdx(), // 1000000*chamber id + cluster idx of the assigned MIP cluster
+ thetaTrk, // track inclination angle theta
+ phiTrk, // track inclination angle phi
+ (esd.GetTrack(iTrack))->GetHMPIDsignal(), // Cherenkov angle
+ (esd.GetTrack(iTrack))->GetHMPIDoccupancy(), // Occupancy claculated for the given chamber
+ (esd.GetTrack(iTrack))->GetHMPIDchi2(), // Ring resolution squared
+ xTrk, // Track x coordinate (LORS)
+ yTrk, // Track y coordinate (LORS)
+ xMip, // MIP x coordinate (LORS)
+ yMip, // MIP y coordinate (LORS)
+ hmpPid, // PID probablities from ESD, remove later once it is in CombinedPid
+ hmpMom // Track momentum in HMPID at ring reconstruction
+ );
+
+ // Printf(Form("+++++++++ yes/no: %d %lf %lf %lf %lf %lf %lf ",(esd.GetTrack(iTrack))->IsHMPID(),thetaTrk, (esd.GetTrack(iTrack))->GetHMPIDchi2(),xTrk, yTrk , xMip, yMip));
+
+
+ }// HMPID signal > -20
+ }//___esd track loop
+
+ return cntHmpidGoodTracks;
+}
+
//______________________________________________________________________________
void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
{
Int_t nCaloClus = esd->GetNumberOfCaloClusters();
Int_t nFmdClus = 0;
Int_t nPmdClus = esd->GetNumberOfPmdTracks();
+ Int_t nHmpidRings = 0;
AliDebug(1,Form(" NV0=%d NCASCADES=%d NKINKS=%d", nV0s, nCascades, nKinks));
- AODEvent()->ResetStd(nTracks, nVertices, nV0s, nCascades, nJets, nCaloClus, nFmdClus, nPmdClus);
+ AODEvent()->ResetStd(nTracks, nVertices, nV0s, nCascades, nJets, nCaloClus, nFmdClus, nPmdClus,nHmpidRings);
if (nV0s > 0)
{
if ( fAreTrackletsEnabled ) ConvertTracklets(*esd);
if ( fIsZDCEnabled ) ConvertZDC(*esd);
+ if(fIsHMPIDEnabled) nHmpidRings = ConvertHMPID(*esd);
+
delete fAODTrackRefs; fAODTrackRefs=0x0;
delete fAODV0VtxRefs; fAODV0VtxRefs=0x0;
delete fAODV0Refs; fAODV0Refs=0x0;
}
aodpid->SetTOFpidResolution(tofRes);
-// aodpid->SetHMPIDsignal(track->GetHMPIDsignal());
+// aodpid->SetHMPIDsignal(0); // set to zero for compression but it will be removed later
}
void DisableCells() { fAreEMCALCellsEnabled = fArePHOSCellsEnabled = kFALSE; }
void DisableCaloTrigger(TString calo = "PHOS") { if (calo.Contains("EMCAL")) fAreEMCALTriggerEnabled = kFALSE; else fArePHOSTriggerEnabled = kFALSE; }
void DisableTracklets() { fAreTrackletsEnabled = kFALSE; }
+ void DisableHMPID() { fIsHMPIDEnabled = kFALSE; }
void EnableV0CascadeVerticesReco() { fIsV0CascadeRecoEnabled = kTRUE; }
void ConvertVZERO(const AliESDEvent& esd);
void ConvertTZERO(const AliESDEvent& esd);
void ConvertZDC(const AliESDEvent& esd);
+ Int_t ConvertHMPID(const AliESDEvent& esd);
void PropagateTrackToEMCal(AliESDtrack *esdTrack);
TClonesArray& Tracks();
Bool_t fIsVZEROEnabled; // whether or not to fill the vzero branch (true by default)
Bool_t fIsTZEROEnabled; // whether or not to fill the tzero branch (true by default)
Bool_t fIsZDCEnabled; // whether or not to fill the zdc branch (true by default)
+ Bool_t fIsHMPIDEnabled; // whether or not to fill the hmpid branch (true by default)
Bool_t fIsV0CascadeRecoEnabled; // whether or not to reconstruct again V0s and cascades (false by default)
Bool_t fAreCascadesEnabled; // whether or not to fill the cascades branch (true by default)
Bool_t fAreV0sEnabled; // whether or not to fill the v0 branch (true by default)
Bool_t fDoPropagateTrackToEMCal; // whether or not to propagate the tracks to EMCal surface (430cm) -- true by default
- ClassDef(AliAnalysisTaskESDfilter, 14); // Analysis task for standard ESD filtering
+ ClassDef(AliAnalysisTaskESDfilter, 15); // Analysis task for standard ESD filtering
};
#endif
"phosTrigger",
"fmdClusters",
"pmdClusters",
+ "hmpidRings",
"dimuons",
"AliAODTZERO",
"AliAODVZERO",
fPHOSTrigger(0),
fFmdClusters(0),
fPmdClusters(0),
+ fHMPIDrings(0),
fDimuons(0),
fAODTZERO(0),
fAODVZERO(0),
fPHOSTrigger(new AliAODCaloTrigger(*aod.fPHOSTrigger)),
fFmdClusters(new TClonesArray(*aod.fFmdClusters)),
fPmdClusters(new TClonesArray(*aod.fPmdClusters)),
+ fHMPIDrings(new TClonesArray(*aod.fHMPIDrings)),
fDimuons(new TClonesArray(*aod.fDimuons)),
fAODTZERO(new AliAODTZERO(*aod.fAODTZERO)),
fAODVZERO(new AliAODVZERO(*aod.fAODVZERO)),
AddObject(fPHOSTrigger);
AddObject(fFmdClusters);
AddObject(fPmdClusters);
+ AddObject(fHMPIDrings);
AddObject(fDimuons);
AddObject(fAODTZERO);
AddObject(fAODVZERO);
AddObject(new AliAODCaloTrigger()); // PHOS
AddObject(new TClonesArray("AliAODFmdCluster", 0));
AddObject(new TClonesArray("AliAODPmdCluster", 0));
+ AddObject(new TClonesArray("AliAODHMPIDrings", 0));
AddObject(new TClonesArray("AliAODDimuon", 0));
AddObject(new AliAODTZERO());
AddObject(new AliAODVZERO());
fEmcalCells = (AliAODCaloCells*)fAODObjects->FindObject("emcalCells");
fPhosCells = (AliAODCaloCells*)fAODObjects->FindObject("phosCells");
fCaloClusters = (TClonesArray*)fAODObjects->FindObject("caloClusters");
- fEMCALTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
- fPHOSTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
+ fEMCALTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
+ fPHOSTrigger = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
fFmdClusters = (TClonesArray*)fAODObjects->FindObject("fmdClusters");
fPmdClusters = (TClonesArray*)fAODObjects->FindObject("pmdClusters");
+ fHMPIDrings = (TClonesArray*)fAODObjects->FindObject("hmpidRings");
fDimuons = (TClonesArray*)fAODObjects->FindObject("dimuons");
fAODTZERO = (AliAODTZERO*)fAODObjects->FindObject("AliAODTZERO");
fAODVZERO = (AliAODVZERO*)fAODObjects->FindObject("AliAODVZERO");
Int_t caloClusSize,
Int_t fmdClusSize,
Int_t pmdClusSize,
+ Int_t hmpidRingsSize,
Int_t dimuonArrSize
)
{
if (pmdClusSize > fPmdClusters->GetSize())
fPmdClusters->Expand(pmdClusSize);
}
+ if (fHMPIDrings) {
+ fHMPIDrings->Delete();
+ if (hmpidRingsSize > fHMPIDrings->GetSize())
+ fHMPIDrings->Expand(hmpidRingsSize);
+ }
if (fDimuons) {
fDimuons->Delete();
if (dimuonArrSize > fDimuons->GetSize())
fFmdClusters ->Clear();
if (fPmdClusters)
fPmdClusters ->Clear();
+ if (fHMPIDrings)
+ fHMPIDrings ->Delete();
if (fDimuons)
fDimuons ->Clear();
} else {
// TList* objL = (TList*)(aodEvent->GetList()->Clone());
- TList* objL = aodEvent->GetList();
-
- if(objL == fAODObjects)
+ TList* objL = (TList*)aodEvent->GetList();
+ printf("Get list of object from tree %d !!\n", objL->GetEntries());
+ TIter nextobject(objL);
+ TObject* obj = 0;
+ while((obj = nextobject()))
{
- AliInfo("Adding object from friend. Same object friend list...skipping\n");
-
- } else {
- printf("Get list of object from tree %d !!\n", objL->GetEntries());
-
- TIter nextobject(objL);
- TObject* obj = 0;
- while((obj = nextobject()))
- {
- printf("Adding object from friend %s !\n", obj->GetName());
- fAODObjects->Add(obj);
- }
+ printf("Adding object from friend %s !\n", obj->GetName());
+ fAODObjects->Add(obj);
} // object "branch" loop
- } // has userinfo
+ } // has userinfo
} // friend loop
} // has friends
// set the branch addresses
}
}
-
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDringForTrackID(Int_t trackID)
+{
+ //
+ // Returns the HMPID object if any for a given track ID
+ //
+ if(GetHMPIDrings())
+ {
+ for(Int_t ien = 0 ; ien < GetNHMPIDrings(); ien++)
+ {
+ if( ien == trackID ) return GetHMPIDring(ien);
+ }//rings loop
+ }
+ return 0;
+}
+//------------------------------------------------------------
+Int_t AliAODEvent::GetNHMPIDrings()
+{
+ //
+ // If there is a list of HMPID rings in the given AOD event, return their number
+ //
+ if ( fHMPIDrings) return fHMPIDrings->GetEntriesFast();
+ else return -1;
+}
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDring(Int_t nRings)
+{
+ //
+ // If there is a list of HMPID rings in the given AOD event, return corresponding ring
+ //
+ if(fHMPIDrings) {
+ if( (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings) ) {
+ return (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings);
+ }
+ else return 0x0;
+ }
+ else return 0x0;
+}
+//------------------------------------------------------------
#include "AliAODDimuon.h"
#include "AliAODTZERO.h"
#include "AliAODVZERO.h"
+#include "AliAODHMPIDrings.h"
#include "AliAODZDC.h"
#ifdef MFT_UPGRADE
#include "AliAODMFT.h"
kAODPHOSTrigger,
kAODFmdClusters,
kAODPmdClusters,
+ kAODHMPIDrings,
kAODDimuons,
kAODTZERO,
kAODVZERO,
kAODZDC,
- kTOFHeader,
+ kTOFHeader,
kAODListN
#ifdef MFT_UPGRADE
,kAODVZERO
Int_t AddPmdCluster(const AliAODPmdCluster* clus)
{new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
+ // -- HMPID objects
+ TClonesArray *GetHMPIDrings() const { return fHMPIDrings; }
+ Int_t GetNHMPIDrings();
+ AliAODHMPIDrings *GetHMPIDring(Int_t nRings);
+ Int_t AddHMPIDrings(const AliAODHMPIDrings* ring)
+ {new((*fHMPIDrings)[fHMPIDrings->GetEntriesFast()]) AliAODHMPIDrings(*ring); return fHMPIDrings->GetEntriesFast()-1;}
+
+ AliAODHMPIDrings *GetHMPIDringForTrackID(Int_t trackID);
+
+
// -- Jet
TClonesArray *GetJets() const { return fJets; }
Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
Int_t caloClusSize = 0,
Int_t fmdClusSize = 0,
Int_t pmdClusSize = 0,
+ Int_t hmpidRingsSize = 0,
Int_t dimuonArrsize =0
);
void ClearStd();
AliAODCaloTrigger *fPHOSTrigger; //! PHOS Trigger information
TClonesArray *fFmdClusters; //! FMDclusters
TClonesArray *fPmdClusters; //! PMDclusters
+ TClonesArray *fHMPIDrings; //! HMPID signals
TClonesArray *fDimuons; //! dimuons
AliAODTZERO *fAODTZERO; //! TZERO AOD
AliAODVZERO *fAODVZERO; //! VZERO AOD
static const char* fAODListName[kAODListN]; //!
- ClassDef(AliAODEvent,90);
+ ClassDef(AliAODEvent,91);
};
#endif
#pragma link C++ class AliAODTZERO+;
#pragma link C++ class AliAODVZERO+;
#pragma link C++ class AliAODZDC+;
+#pragma link C++ class AliAODHMPIDrings+;
#pragma link C++ method AliAODTrack::SetPosition<double>(double const*, bool);
AOD/AliAODTZERO.cxx
AOD/AliAODVZERO.cxx
AOD/AliAODZDC.cxx
+ AOD/AliAODHMPIDrings.cxx
)
string( REPLACE ".cxx" ".h" HDRS "${SRCS}")