#include "AliCentrality.h"
#include "AliEMCALGeoUtils.h"
#include "AliEMCALGeometry.h"
+#include "AliEMCALRecPoint.h"
#include "AliEMCALRecoUtils.h"
#include "AliESDCaloTrigger.h"
#include "AliESDEvent.h"
if (!TMath::IsNaN(clus->GetDispersion()))
cl->fDisp = clus->GetDispersion();
if (!TMath::IsNaN(clus->GetM20()))
- cl->fM20 = clus->GetM20();
+ cl->fM20 = clus->GetM20();
if (!TMath::IsNaN(clus->GetM02()))
- cl->fM02 = clus->GetM02();
+ cl->fM02 = clus->GetM02();
Double_t maxAxis = 0, minAxis = 0;
GetSigma(clus,maxAxis,minAxis);
clus->SetTOF(maxAxis); // store sigma in TOF
cl->fTrIso2 = GetTrackIsolation(clusterVec.Eta(),clusterVec.Phi(),fIsoDist, 2);
cl->fCeCore = GetCellIsolation(clsVec.Eta(),clsVec.Phi(),0.05);
cl->fCeIso = GetCellIsolation(clsVec.Eta(),clsVec.Phi(),fIsoDist);
+
Double_t trigpen = 0;
Double_t trignen = 0;
for(Int_t j=0; j<cl->fN; ++j) {
cl->fIsTrigM = 1;
cl->fTrigMaskE = trignen;
}
+ cl->fIsShared = IsShared(clus);
// track matching
Double_t mind2 = 1e10;
Int_t ncells = cells->GetNumberOfCells();
for (Int_t i = 0; i<ncells; ++i) {
Int_t absID = TMath::Abs(cells->GetCellNumber(i));
- Double_t cellE = cells->GetAmplitude(i);
- Float_t eta, phi;
+ Float_t eta=-1, phi=-1;
fGeom->EtaPhiFromIndex(absID,eta,phi);
- Double_t phidiff = TVector2::Phi_0_2pi(phi-cPhi);
+ Double_t phidiff = TVector2::Phi_mpi_pi(phi-cPhi);
Double_t dist = (eta-cEta)*(eta-cEta)+phidiff*phidiff;
if(dist>rad2)
continue;
+ Double_t cellE = cells->GetAmplitude(i);
cellIsolation += cellE;
}
return cellIsolation;
}
//________________________________________________________________________
-Double_t AliAnalysisTaskEMCALPi0PbPb::GetMaxCellEnergy(AliVCluster *cluster, Short_t &id) const
+Double_t AliAnalysisTaskEMCALPi0PbPb::GetCellEnergy(const AliVCluster *cluster) const
+{
+ // Get maximum energy of attached cell.
+
+ Double_t ret = 0;
+ Int_t ncells = cluster->GetNCells();
+ if (fEsdCells) {
+ for (Int_t i=0; i<ncells; i++) {
+ Double_t e = fEsdCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
+ ret += e;
+ }
+ } else {
+ for (Int_t i=0; i<ncells; i++) {
+ Double_t e = fAodCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
+ ret += e;
+ }
+ }
+ return ret;
+}
+
+//________________________________________________________________________
+Double_t AliAnalysisTaskEMCALPi0PbPb::GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const
{
// Get maximum energy of attached cell.
}
//________________________________________________________________________
-void AliAnalysisTaskEMCALPi0PbPb::GetSigma(AliVCluster *c, Double_t& sigmaMax, Double_t &sigmaMin) const
+void AliAnalysisTaskEMCALPi0PbPb::GetSigma(const AliVCluster *c, Double_t& sigmaMax, Double_t &sigmaMin) const
{
// Calculate the (E) weighted variance along the longer (eigen) axis.
}
//________________________________________________________________________
-Int_t AliAnalysisTaskEMCALPi0PbPb::GetNCells(AliVCluster *c, Double_t emin) const
+Int_t AliAnalysisTaskEMCALPi0PbPb::GetNCells(const AliVCluster *c, Double_t emin) const
{
// Calculate number of attached cells above emin.
continue;
Float_t eta = track->Eta();
Float_t phi = track->Phi();
- Double_t phidiff = TVector2::Phi_0_2pi(phi-cPhi);
+ Double_t phidiff = TVector2::Phi_mpi_pi(phi-cPhi);
Double_t dist = (eta-cEta)*(eta-cEta)+phidiff*phidiff;
if(dist>rad2)
continue;
return trkIsolation;
}
+//________________________________________________________________________
+Bool_t AliAnalysisTaskEMCALPi0PbPb::IsShared(const AliVCluster *c) const
+{
+ // Returns if cluster shared across super modules.
+
+ AliVCaloCells *cells = fEsdCells;
+ if (!cells)
+ cells = fAodCells;
+ if (!cells)
+ return 0;
+
+ Int_t n = -1;
+ Int_t ncells = c->GetNCells();
+ for(Int_t j=0; j<ncells; ++j) {
+ Int_t id = TMath::Abs(c->GetCellAbsId(j));
+ Int_t got = id / (24*48);
+ if (n==-1) {
+ n = got;
+ continue;
+ }
+ if (got!=n)
+ return 1;
+ }
+ return 0;
+}
virtual void FillPionHists();
void FillVertex(AliStaVertex *v, const AliESDVertex *esdv);
void FillVertex(AliStaVertex *v, const AliAODVertex *aodv);
- Double_t GetCellIsolation(Double_t cEta, Double_t cPhi, Double_t radius=0.2) const;
- Double_t GetMaxCellEnergy(AliVCluster *c) const { Short_t id=-1; return GetMaxCellEnergy(c,id); }
- Double_t GetMaxCellEnergy(AliVCluster *c, Short_t &id) const;
- Int_t GetNCells(AliVCluster *c, Double_t emin=0.) const;
- void GetSigma(AliVCluster *c, Double_t &sigmaMax, Double_t &sigmaMin) const;
- Double_t GetTrackIsolation(Double_t cEta, Double_t cPhi, Double_t radius=0.2, Double_t pt=0.) const;
- Double_t GetTrigEnergy(AliVCluster *c) const;
+ Double_t GetCellIsolation(Double_t cEta, Double_t cPhi, Double_t radius=0.2) const;
+ Double_t GetCellEnergy(const AliVCluster *c) const;
+ Double_t GetMaxCellEnergy(const AliVCluster *c) const { Short_t id=-1; return GetMaxCellEnergy(c,id); }
+ Double_t GetMaxCellEnergy(const AliVCluster *c, Short_t &id) const;
+ Int_t GetNCells(const AliVCluster *c, Double_t emin=0.) const;
+ void GetSigma(const AliVCluster *c, Double_t &sigmaMax, Double_t &sigmaMin) const;
+ Double_t GetTrackIsolation(Double_t cEta, Double_t cPhi, Double_t radius=0.2, Double_t pt=0.) const;
+ Double_t GetTrigEnergy(const AliVCluster *c) const;
+ Bool_t IsShared(const AliVCluster *c) const;
// input members
TString fCentVar; // variable for centrality determination
AliStaCluster() : TObject(), fE(0), fR(0), fEta(0), fPhi(0), fN(0), fN1(0), fN3(0), fIdMax(0), fEmax(0),
fDbc(-1), fDisp(-1), fM20(0), fM02(0), fEcc(0), fSig(0), fIsTrackM(0), fTrDz(0), fTrDr(-1),
fTrEp(0), fTrIso(0), fTrIso1(0), fTrIso2(0), fCeIso(0), fCeCore(0), fIsTrigM(0), fTrigE(-1),
- fTrigMaskE(-1) {;}
+ fTrigMaskE(-1), fIsShared(0) {;}
public:
Double32_t fE; //[0,0,16] energy
Bool_t fIsTrigM; // if true then trigger values are set
Double32_t fTrigE; //[0,0,16] trigger tower energy
Double32_t fTrigMaskE; //[0,0,16] masked trigger tower energy
+ Bool_t fIsShared; // =true then extends across more than one super module
- ClassDef(AliStaCluster,3) // Cluster class
+ ClassDef(AliStaCluster,4) // Cluster class
};
class AliStaTrigger : public TObject