fNbins(500),
fMinBinPt(0),
fMaxBinPt(250),
- fClusPtCut(0.15),
- fTrackPtCut(0.15),
- fTrackMinEta(-0.9),
- fTrackMaxEta(0.9),
- fTrackMinPhi(-10),
- fTrackMaxPhi(10),
- fClusTimeCutLow(-10),
- fClusTimeCutUp(10),
fMinPtTrackInEmcal(0),
fEventPlaneVsEmcal(-1),
fMinEventPlane(-10),
fNbins(500),
fMinBinPt(0),
fMaxBinPt(250),
- fClusPtCut(0.15),
- fTrackPtCut(0.15),
- fTrackMinEta(-0.9),
- fTrackMaxEta(0.9),
- fTrackMinPhi(-10),
- fTrackMaxPhi(10),
- fClusTimeCutLow(-10),
- fClusTimeCutUp(10),
fMinPtTrackInEmcal(0),
fEventPlaneVsEmcal(-1),
fMinEventPlane(-10),
// Destructor
}
+//________________________________________________________________________
+void AliAnalysisTaskEmcalDev::SetClusPtCut(Double_t cut, Int_t c)
+{
+ AliClusterContainer *cont = GetClusterContainer(c);
+ if (cont) cont->SetClusPtCut(cut);
+ else AliError(Form("%s in SetClusPtCut(...): container %d not found",GetName(),c));
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskEmcalDev::SetClusTimeCut(Double_t min, Double_t max, Int_t c)
+{
+ AliClusterContainer *cont = GetClusterContainer(c);
+ if (cont) cont->SetClusTimeCut(min,max);
+ else AliError(Form("%s in SetClusTimeCut(...): container %d not found",GetName(),c));
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskEmcalDev::SetTrackPtCut(Double_t cut, Int_t c)
+{
+ AliParticleContainer *cont = GetParticleContainer(c);
+ if (cont) cont->SetParticlePtCut(cut);
+ else AliError(Form("%s in SetTrackPtCut(...): container %d not found",GetName(),c));
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskEmcalDev::SetTrackEtaLimits(Double_t min, Double_t max, Int_t c)
+{
+ AliParticleContainer *cont = GetParticleContainer(c);
+ if (cont) cont->SetParticleEtaLimits(min,max);
+ else AliError(Form("%s in SetTrackPtCut(...): container %d not found",GetName(),c));
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskEmcalDev::SetTrackPhiLimits(Double_t min, Double_t max, Int_t c)
+{
+ AliParticleContainer *cont = GetParticleContainer(c);
+ if (cont) cont->SetParticlePhiLimits(min,max);
+ else AliError(Form("%s in SetTrackPhiLimits(...): container %d not found",GetName(),c));
+}
+
//________________________________________________________________________
void AliAnalysisTaskEmcalDev::UserCreateOutputObjects()
{
void SetNCentBins(Int_t n) { fNcentBins = n ; }
void SetCentRange(Double_t min, Double_t max) { fMinCent = min ; fMaxCent = max ; }
- void SetClusName(const char *n) { AddClusterContainer(n) ; }
- void SetCaloCellsName(const char *n) { fCaloCellsName = n ; }
- void SetCaloTriggersName(const char *n) { fCaloTriggersName = n ; }
- void SetClusPtCut(Double_t cut) { fClusPtCut = cut ; }
- void SetClusTimeCut(Double_t min, Double_t max) { fClusTimeCutLow = min ; fClusTimeCutUp = max ; }
void SetHistoBins(Int_t nbins, Double_t min, Double_t max) { fNbins = nbins; fMinBinPt = min; fMaxBinPt = max ; }
void SetOffTrigger(UInt_t t) { fOffTrigger = t ; }
- void SetPtCut(Double_t cut) { SetClusPtCut(cut) ; SetTrackPtCut(cut) ; }
- void SetTrackPtCut(Double_t cut) { fTrackPtCut = cut ; }
- void SetTrackEtaLimits(Double_t min, Double_t max) { fTrackMaxEta = max ; fTrackMinEta = min ; }
- void SetTrackPhiLimits(Double_t min, Double_t max) { fTrackMaxPhi = max ; fTrackMinPhi = min ; }
- void SetTracksName(const char *n) { AddParticleContainer(n) ; }
void SetTrigClass(const char *n) { fTrigClass = n ; }
void SetVzRange(Double_t min, Double_t max) { fMinVz = min ; fMaxVz = max ; }
void SetForceBeamType(BeamType f) { fForceBeamType = f ; }
void SetIsPythia(Bool_t i) { fIsPythia = i ; }
void SetMCLabelShift(Int_t s) { fMCLabelShift = s ; }
+ void SetCaloCellsName(const char *n) { fCaloCellsName = n ; }
+ void SetCaloTriggersName(const char *n) { fCaloTriggersName = n ; }
+
+ void SetTracksName(const char *n) { AddParticleContainer(n) ; }
+ void SetClusName(const char *n) { AddClusterContainer(n) ; }
+
+ void SetClusPtCut(Double_t cut, Int_t c=0);
+ void SetClusTimeCut(Double_t min, Double_t max, Int_t c=0);
+ void SetTrackPtCut(Double_t cut, Int_t c=0);
+ void SetTrackEtaLimits(Double_t min, Double_t max, Int_t c=0);
+ void SetTrackPhiLimits(Double_t min, Double_t max, Int_t c=0);
+
AliParticleContainer *AddParticleContainer(const char *n);
AliClusterContainer *AddClusterContainer(const char *n);
void RemoveParticleContainer(Int_t i=0) { fParticleCollArray.RemoveAt(i);}
AliParticleContainer *GetParticleContainer(const char* name) const;
AliClusterContainer *GetClusterContainer(const char* name) const;
- TClonesArray *GetParticleArray(const Int_t i=0) const;
- TClonesArray *GetClusterArray(const Int_t i=0) const;
+ protected:
+ BeamType GetBeamType();
+ TClonesArray *GetArrayFromEvent(const char *name, const char *clname=0);
+ Bool_t PythiaInfoFromFile(const char* currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard);
+
+ TClonesArray *GetParticleArray(const Int_t i=0) const;
+ TClonesArray *GetClusterArray(const Int_t i=0) const;
- AliVParticle *GetAcceptParticleFromArray(Int_t p, Int_t c=0) const;
- AliVCluster *GetAcceptClusterFromArray(Int_t cl, Int_t c=0) const;
+ AliVParticle *GetAcceptParticleFromArray(Int_t p, Int_t c=0) const;
+ AliVCluster *GetAcceptClusterFromArray(Int_t cl, Int_t c=0) const;
- Int_t GetNParticles(Int_t i=0) const;
- Int_t GetNClusters(Int_t i=0) const;
+ Int_t GetNParticles(Int_t i=0) const;
+ Int_t GetNClusters(Int_t i=0) const;
- protected:
- Bool_t AcceptCluster(AliVCluster *clus, Int_t c = 0) const;
- Bool_t AcceptTrack(AliVParticle *track, Int_t c = 0) const;
+ Bool_t AcceptCluster(AliVCluster *clus, Int_t c = 0) const;
+ Bool_t AcceptTrack(AliVParticle *track, Int_t c = 0) const;
+
+ // Virtual functions, to be overloaded in derived classes
virtual void ExecOnce();
virtual Bool_t FillGeneralHistograms();
- virtual Bool_t FillHistograms() { return kTRUE ; }
- BeamType GetBeamType();
- TClonesArray *GetArrayFromEvent(const char *name, const char *clname=0);
virtual Bool_t IsEventSelected();
virtual Bool_t RetrieveEventObjects();
+ virtual Bool_t FillHistograms() { return kTRUE ; }
virtual Bool_t Run() { return kTRUE ; }
- Bool_t PythiaInfoFromFile(const char* currFile, Float_t &fXsec, Float_t &fTrials, Int_t &pthard);
+
BeamType fForceBeamType; // forced beam type
Bool_t fGeneralHistograms; // whether or not it should fill some general histograms
Int_t fNbins; // no. of pt bins
Double_t fMinBinPt; // min pt in histograms
Double_t fMaxBinPt; // max pt in histograms
- Double_t fClusPtCut; // cut on cluster pt
- Double_t fTrackPtCut; // cut on track pt
- Double_t fTrackMinEta; // cut on track eta
- Double_t fTrackMaxEta; // cut on track eta
- Double_t fTrackMinPhi; // cut on track phi
- Double_t fTrackMaxPhi; // cut on track phi
- Double_t fClusTimeCutLow; // low time cut for clusters
- Double_t fClusTimeCutUp; // up time cut for clusters
Double_t fMinPtTrackInEmcal; // min pt track in emcal
Double_t fEventPlaneVsEmcal; // select events which have a certain event plane wrt the emcal
Double_t fMinEventPlane; // minimum event plane value
AliAnalysisTaskEmcalDev(const AliAnalysisTaskEmcalDev&); // not implemented
AliAnalysisTaskEmcalDev &operator=(const AliAnalysisTaskEmcalDev&); // not implemented
- ClassDef(AliAnalysisTaskEmcalDev, 3) // EMCAL base analysis task
+ ClassDef(AliAnalysisTaskEmcalDev, 4) // EMCAL base analysis task
};
#endif
}
}
+//________________________________________________________________________
+AliVCluster* AliClusterContainer::GetClusterWithLabel(Int_t lab) const {
+
+ //Get particle with label lab in array
+
+ Int_t i = GetIndexFromLabel(lab);
+ return GetCluster(i);
+}
+
+//________________________________________________________________________
+AliVCluster* AliClusterContainer::GetAcceptClusterWithLabel(Int_t lab) const {
+
+ //Get particle with label lab in array
+
+ Int_t i = GetIndexFromLabel(lab);
+ return GetAcceptCluster(i);
+}
+
//________________________________________________________________________
AliVCluster* AliClusterContainer::GetNextAcceptCluster(Int_t i) {
- //Get next accepted cluster; if i >= 0 (re)start counter from i; return 0 if no accepted particle could be found
+ //Get next accepted cluster; if i >= 0 (re)start counter from i; return 0 if no accepted cluster could be found
if (i>=0) fCurrentID = i;
return c;
}
+//________________________________________________________________________
+AliVCluster* AliClusterContainer::GetNextCluster(Int_t i) {
+
+ //Get next cluster; if i >= 0 (re)start counter from i; return 0 if no cluster could be found
+
+ if (i>=0) fCurrentID = i;
+
+ const Int_t n = GetNEntries();
+ AliVCluster *c = 0;
+ while (fCurrentID < n && !c) {
+ c = GetCluster(fCurrentID);
+ fCurrentID++;
+ }
+
+ return c;
+}
+
//________________________________________________________________________
void AliClusterContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
{
AliVCluster *GetLeadingCluster(const char* opt="") ;
AliVCluster *GetCluster(Int_t i) const;
AliVCluster *GetAcceptCluster(Int_t i) const;
+ AliVCluster *GetClusterWithLabel(Int_t lab) const;
+ AliVCluster *GetAcceptClusterWithLabel(Int_t lab) const;
AliVCluster *GetNextAcceptCluster(Int_t i=-1) ;
+ AliVCluster *GetNextCluster(Int_t i=-1) ;
void GetMomentum(TLorentzVector &mom, Int_t i) const;
Bool_t AcceptCluster(AliVCluster *vp) const;
Int_t GetNClusters() const {return GetNEntries();}
AliParticleContainer *tracks = static_cast<AliParticleContainer*>(fParticleCollArray.At(0));
AliParticleContainer *clusters = static_cast<AliParticleContainer*>(fParticleCollArray.At(1));
- const Double_t maxd2 = fMaxDistance*fMaxDistance;
-
- // set the links between tracks and clusters
AliEmcalParticle *partC = 0;
AliEmcalParticle *partT = 0;
+ const Double_t maxd2 = fMaxDistance*fMaxDistance;
+
+ // set the links between tracks and clusters
clusters->ResetCurrentID();
while ((partC = static_cast<AliEmcalParticle*>(clusters->GetNextAcceptParticle()))) {
AliVCluster *clust = partC->GetCluster();
#include "AliEmcalJet.h"
#include "AliVEvent.h"
#include "AliLog.h"
+#include "AliNamedArrayI.h"
#include "AliEmcalContainer.h"
//________________________________________________________________________
AliEmcalContainer::AliEmcalContainer():
TNamed("AliEmcalContainer","AliEmcalContainer"),
- fClArray(0),
fClArrayName(),
fClassName(),
- fCurrentID(0)
+ fIsParticleLevel(kFALSE),
+ fClArray(0),
+ fCurrentID(0),
+ fLabelMap(0)
{
// Default constructor.
//________________________________________________________________________
AliEmcalContainer::AliEmcalContainer(const char *name):
TNamed(name,name),
- fClArray(0),
fClArrayName(),
fClassName(),
- fCurrentID(0)
+ fIsParticleLevel(kFALSE),
+ fClArray(0),
+ fCurrentID(0),
+ fLabelMap(0)
{
// Standard constructor.
fClArray = 0;
}
}
+
+ fLabelMap = dynamic_cast<AliNamedArrayI*>(event->FindListObject(fClArrayName + "_Map"));
+}
+
+//________________________________________________________________________
+Int_t AliEmcalContainer::GetIndexFromLabel(Int_t lab) const
+{
+ if (fLabelMap) {
+ if (lab < fLabelMap->GetSize()) {
+ return fLabelMap->At(lab);
+ }
+ else {
+ AliDebug(3,Form("%s_AliEmcalContainer::GetIndexFromLabel - Label not found in the map, returning -1...",fClArrayName.Data()));
+ return -1;
+ }
+ }
+ else {
+ AliDebug(3,Form("%s_AliEmcalContainer::GetIndexFromLabel - No index-label map found, returning label...",fClArrayName.Data()));
+ return lab;
+ }
}
class TLorentzVector;
class AliVEvent;
+class AliNamedArrayI;
#include <TNamed.h>
#include <TClonesArray.h>
AliEmcalContainer(const char *name);
virtual ~AliEmcalContainer(){;}
- void SetArrayName(const char *n) {fClArrayName = n;}
- TClonesArray *GetArray() {return fClArray;}
- Int_t GetNEntries() const {return fClArray->GetEntriesFast();}
- const TString& GetArrayName() const {return fClArrayName;}
- Int_t GetCurrentID() const {return fCurrentID-1; }
- void SortArray() {fClArray->Sort();}
+ void SetArrayName(const char *n) { fClArrayName = n ; }
+ TClonesArray *GetArray() { return fClArray ; }
+ Int_t GetNEntries() const { return fClArray->GetEntriesFast() ; }
+ const TString& GetArrayName() const { return fClArrayName ; }
+ Int_t GetCurrentID() const { return fCurrentID-1 ; }
+ void SortArray() { fClArray->Sort() ; }
+ void ResetCurrentID(Int_t i=0) { fCurrentID = i ; }
+ void SetIsParticleLevel(Bool_t b) { fIsParticleLevel = b ; }
+ Bool_t GetIsParticleLevel() const { return fIsParticleLevel ; }
+
virtual void GetMomentum(TLorentzVector &mom, Int_t i) const = 0;
virtual void SetArray(AliVEvent *event);
- void ResetCurrentID(Int_t i=0) {fCurrentID = i;}
+ Int_t GetIndexFromLabel(Int_t lab) const;
protected:
- TClonesArray *fClArray; //!TClonesArray
- Double_t fVertex[3]; //!event vertex array
TString fClArrayName; // name of branch
TString fClassName; // name of the class in the TClonesArray
+ Bool_t fIsParticleLevel; // whether or not it is a particle level object collection
+
+ TClonesArray *fClArray; //!TClonesArray
Int_t fCurrentID; //!current ID for automatic loops
+ AliNamedArrayI *fLabelMap; //!Label-Index map
+ Double_t fVertex[3]; //!event vertex array
private:
AliEmcalContainer(const AliEmcalContainer& obj); // copy constructor
AliEmcalContainer& operator=(const AliEmcalContainer& other); // assignment
- ClassDef(AliEmcalContainer,2);
+ ClassDef(AliEmcalContainer,3);
};
}
}
+//________________________________________________________________________
+AliVParticle* AliParticleContainer::GetParticleWithLabel(Int_t lab) const {
+
+ //Get particle with label lab in array
+
+ Int_t i = GetIndexFromLabel(lab);
+ return GetParticle(i);
+}
+
+//________________________________________________________________________
+AliVParticle* AliParticleContainer::GetAcceptParticleWithLabel(Int_t lab) const {
+
+ //Get particle with label lab in array
+
+ Int_t i = GetIndexFromLabel(lab);
+ return GetAcceptParticle(i);
+}
+
//________________________________________________________________________
AliVParticle* AliParticleContainer::GetNextAcceptParticle(Int_t i) {
return p;
}
+//________________________________________________________________________
+AliVParticle* AliParticleContainer::GetNextParticle(Int_t i) {
+
+ //Get next particle; if i >= 0 (re)start counter from i; return 0 if no particle could be found
+
+ if (i>=0) fCurrentID = i;
+
+ const Int_t n = GetNEntries();
+ AliVParticle *p = 0;
+ while (fCurrentID < n && !p) {
+ p = GetParticle(fCurrentID);
+ fCurrentID++;
+ }
+
+ return p;
+}
+
//________________________________________________________________________
void AliParticleContainer::GetMomentum(TLorentzVector &mom, Int_t i) const
{
AliParticleContainer(const char *name);
virtual ~AliParticleContainer(){;}
- void SetParticlePtCut(Double_t cut) { fParticlePtCut = cut ; }
- void SetParticleEtaLimits(Double_t min, Double_t max) { fParticleMaxEta = max ; fParticleMinEta = min ; }
- void SetParticlePhiLimits(Double_t min, Double_t max) { fParticleMaxPhi = max ; fParticleMinPhi = min ; }
+ void SetParticlePtCut(Double_t cut) { fParticlePtCut = cut ; }
+ void SetParticleEtaLimits(Double_t min, Double_t max) { fParticleMaxEta = max ; fParticleMinEta = min ; }
+ void SetParticlePhiLimits(Double_t min, Double_t max) { fParticleMaxPhi = max ; fParticleMinPhi = min ; }
void SetTrackBitMap(UInt_t m) { fTrackBitMap = m ; }
void SetMCTrackBitMap(UInt_t m) { fMCTrackBitMap = m ; }
void SetMinMCLabel(Int_t s) { fMinMCLabel = s ; }
- AliVParticle *GetLeadingParticle(const char* opt="") ;
- AliVParticle *GetParticle(Int_t i) const;
- AliVParticle *GetAcceptParticle(Int_t i) const;
- AliVParticle *GetNextAcceptParticle(Int_t i=-1) ;
+ Double_t GetParticlePtCut() const { return fParticlePtCut; }
+ Double_t GetParticleEtaMin() const { return fParticleMinEta; }
+ Double_t GetParticleEtaMax() const { return fParticleMaxEta; }
+ Double_t GetParticlePhiMin() const { return fParticleMinPhi; }
+ Double_t GetParticlePhiMax() const { return fParticleMaxPhi; }
+ AliVParticle *GetLeadingParticle(const char* opt="") ;
+ AliVParticle *GetParticle(Int_t i) const;
+ AliVParticle *GetAcceptParticle(Int_t i) const;
+ AliVParticle *GetParticleWithLabel(Int_t lab) const;
+ AliVParticle *GetAcceptParticleWithLabel(Int_t lab) const;
+ AliVParticle *GetNextAcceptParticle(Int_t i=-1) ;
+ AliVParticle *GetNextParticle(Int_t i=-1) ;
void GetMomentum(TLorentzVector &mom, Int_t i) const;
- Bool_t AcceptParticle(AliVParticle *vp) const;
- Int_t GetNParticles() const {return GetNEntries();}
+ Bool_t AcceptParticle(AliVParticle *vp) const;
+ Int_t GetNParticles() const {return GetNEntries();}
void SetClassName(const char *clname);
protected: