//--------------------------------------------------------------------------------------------------------
AliRsnEvent::AliRsnEvent() :
- fIsESD(kTRUE),
- fPath(""),
fPVx(0.0),
fPVy(0.0),
fPVz(0.0),
fPos[i] = NULL;
fNeg[i] = NULL;
}
+ fPosNoPID = NULL;
+ fNegNoPID = NULL;
}
//--------------------------------------------------------------------------------------------------------
AliRsnEvent::AliRsnEvent(const AliRsnEvent &event) :
TObject((TObject)event),
- fIsESD(event.fIsESD),
- fPath(event.fPath),
fPVx(event.fPVx),
fPVy(event.fPVy),
fPVz(event.fPVz),
if (event.fPos[i]) fPos[i] = (TClonesArray*)event.fPos[i]->Clone();
if (event.fNeg[i]) fNeg[i] = (TClonesArray*)event.fNeg[i]->Clone();
}
+ fPosNoPID = (TClonesArray*)event.fPosNoPID->Clone();
+ fNegNoPID = (TClonesArray*)event.fNegNoPID->Clone();
}
+//--------------------------------------------------------------------------------------------------------
AliRsnEvent& AliRsnEvent::operator=(const AliRsnEvent &event)
{
//
// Assignment operator.
// Creates new instances of all collections to store a copy of all objects.
//
- fIsESD = event.fIsESD;
- fPath = event.fPath;
fPVx = event.fPVx;
fPVy = event.fPVy;
fPVz = event.fPVz;
if (event.fPos[i]) fPos[i] = (TClonesArray*)event.fPos[i]->Clone();
if (event.fNeg[i]) fNeg[i] = (TClonesArray*)event.fNeg[i]->Clone();
}
+ fPosNoPID = (TClonesArray*)event.fPosNoPID->Clone();
+ fNegNoPID = (TClonesArray*)event.fNegNoPID->Clone();
return (*this);
}
//
// Stores a track into the correct array
//
- Int_t pdg, sign, ifirst, ilast;
-
// if sign is zero, track is not stored
- sign = (Int_t)track.GetSign();
+ Int_t sign = (Int_t)track.GetSign();
if (!sign) return;
// if PDG code is assigned, track is stored in the corresponding collection
- // otherwise, a copy of track is is stored in each collection (undefined track)
- pdg = track.GetPDG();
+ // otherwise, it is stored in the array of unidentified particles with that sign
+ Int_t index, iarray, pdg = track.GetPDG();
if (pdg != 0) {
- ifirst = PDG2Enum(pdg);
- ilast = ifirst;
- if (ifirst < AliPID::kElectron || ifirst > AliPID::kProton) return;
+ iarray = PDG2Enum(pdg);
+ if (iarray < AliPID::kElectron || iarray > AliPID::kProton) return;
+ TClonesArray &array = (sign > 0) ? *fPos[iarray] : *fNeg[iarray];
+ index = array.GetEntries();
+ new(array[index]) AliRsnDaughter(track);
}
else {
- ifirst = AliPID::kElectron;
- ilast = AliPID::kProton;
- }
-
- // track is stored
- Int_t i, index;
- for (i = ifirst; i <= ilast; i++) {
- if (sign > 0) {
- index = fPos[i]->GetEntries();
- TClonesArray &array = *fPos[i];
- new(array[index]) AliRsnDaughter(track);
- }
- else {
- index = fNeg[i]->GetEntries();
- TClonesArray &array = *fNeg[i];
- new(array[index]) AliRsnDaughter(track);
- }
+ TClonesArray &array = (sign > 0) ? *fPosNoPID : *fNegNoPID;
+ index = array.GetEntries();
+ new(array[index]) AliRsnDaughter(track);
}
}
//--------------------------------------------------------------------------------------------------------
fNeg[i] = 0;
}
}
-}
-//--------------------------------------------------------------------------------------------------------
-Int_t AliRsnEvent::GetMultiplicity(Bool_t recalc)
-{
-//
-// Computes multiplicity.
-// If it is already computed (fMultiplicity > -1), it returns that value,
-// unless one sets the argument to kTRUE.
-//
- if (fMultiplicity < 0) recalc = kTRUE;
- if (recalc) {
- fMultiplicity = 0;
- Int_t i;
- for (i = 0; i < AliPID::kSPECIES; i++) {
- fMultiplicity += (Int_t)fPos[i]->GetEntries();
- fMultiplicity += (Int_t)fNeg[i]->GetEntries();
- }
+ if (fPosNoPID) fPosNoPID->Delete();
+ if (fNegNoPID) fNegNoPID->Delete();
+ if (deleteCollections) {
+ delete fPosNoPID;
+ delete fNegNoPID;
+ fPosNoPID = 0;
+ fNegNoPID = 0;
}
-
- return fMultiplicity;
}
//--------------------------------------------------------------------------------------------------------
-const char * AliRsnEvent::GetOriginFileName() const
+void AliRsnEvent::ComputeMultiplicity()
{
//
-// Returns the path where input file was stored
+// Computes multiplicity.
//
- TString str(fPath);
- if (fIsESD) {
- str.Append("/AliESDs.root");
- }
- else {
- str.Append("/galice.root");
+ fMultiplicity = 0;
+ Int_t i;
+ for (i = 0; i < AliPID::kSPECIES; i++) {
+ fMultiplicity += (Int_t)fPos[i]->GetEntries();
+ fMultiplicity += (Int_t)fNeg[i]->GetEntries();
}
-
- return str.Data();
+ if (fPosNoPID) fMultiplicity += fPosNoPID->GetEntries();
+ if (fNegNoPID) fMultiplicity += fNegNoPID->GetEntries();
}
//--------------------------------------------------------------------------------------------------------
TClonesArray* AliRsnEvent::GetTracks(Char_t sign, AliPID::EParticleType type)
fPos[i]->BypassStreamer(kFALSE);
fNeg[i]->BypassStreamer(kFALSE);
}
+ fPosNoPID = new TClonesArray("AliRsnDaughter", 0);
+ fNegNoPID = new TClonesArray("AliRsnDaughter", 0);
+ fPosNoPID->BypassStreamer(kFALSE);
+ fNegNoPID->BypassStreamer(kFALSE);
}
//--------------------------------------------------------------------------------------------------------
Int_t AliRsnEvent::PDG2Enum(Int_t pdgcode)
void AddTrack(AliRsnDaughter track);
void Clear(Option_t *option = "");
- Int_t GetMultiplicity(Bool_t recalc = kFALSE);
- const char* GetOriginFileName() const;
+ void ComputeMultiplicity();
+ Int_t GetMultiplicity() const {return fMultiplicity;}
Double_t GetPrimaryVertexX() const {return fPVx;}
Double_t GetPrimaryVertexY() const {return fPVy;}
Double_t GetPrimaryVertexZ() const {return fPVz;}
void Init();
Int_t PDG2Enum(Int_t pdgcode);
void PrintTracks();
- void SetESD(Bool_t yesno = kTRUE) {fIsESD=yesno;}
- void SetPath(TString path) {fPath=path;}
void SetPrimaryVertex(Double_t x, Double_t y, Double_t z) {fPVx=x;fPVy=y;fPVz=z;}
private:
- Bool_t fIsESD; // if true, it is ESD event, otherwise it comes from Kine
- TString fPath; // complete path where input event file is stored
-
Double_t fPVx; // position of
Double_t fPVy; // primary
Double_t fPVz; // vertex
TClonesArray *fPos[AliPID::kSPECIES]; // collections of positive particles
TClonesArray *fNeg[AliPID::kSPECIES]; // collections of negative particles
+ TClonesArray *fPosNoPID; // collection of unidentified positive particles
+ TClonesArray *fNegNoPID; // collection of unidentified positive particles
ClassDef(AliRsnEvent,1);
};