X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=PWG2%2FRESONANCES%2FAliRsnEvent.h;h=23750c91f4e151931f97b09092fea15a2eebf616;hb=081fcd54c9960ef2e71c8311b627182aa5425051;hp=bdd1fd12f7173958d07b84ba602645239d1520d5;hpb=eaa44581ec40789e1a8254aed9d736b63907cbb9;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG2/RESONANCES/AliRsnEvent.h b/PWG2/RESONANCES/AliRsnEvent.h index bdd1fd12f71..23750c91f4e 100644 --- a/PWG2/RESONANCES/AliRsnEvent.h +++ b/PWG2/RESONANCES/AliRsnEvent.h @@ -1,27 +1,30 @@ +#ifndef ALIRSNEVENT_H +#define ALIRSNEVENT_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//////////////////////////////////////////////////////////////////////////////// // -// *** Class AliRsnEvent *** -// -// A container for a collection of AliRsnDaughter objects from an event. -// Contains also the primary vertex, useful for some cuts. -// In order to retrieve easily the tracks which have been identified -// as a specific type and charge, there is an array of indexes which -// allows to avoid to loop on all tracks and have only the neede ones. -// -// authors: A. Pulvirenti (email: alberto.pulvirenti@ct.infn.it) -// M. Vala (email: martin.vala@cern.ch) +// Interface to full event. // +//////////////////////////////////////////////////////////////////////////////// -#ifndef ALIRSNEVENT_H -#define ALIRSNEVENT_H +#include +#include "AliLog.h" + +#include "AliStack.h" #include "AliVEvent.h" #include "AliMCEvent.h" #include "AliESDEvent.h" #include "AliAODEvent.h" +#include "AliAODMCParticle.h" + #include "AliRsnDaughter.h" -class AliRsnCutPID; -class AliESDtrackCuts; +class AliRsnCutSet; +class AliPIDResponse; class AliRsnEvent : public TObject { public: @@ -32,71 +35,98 @@ public: virtual ~AliRsnEvent(); // basic setters/getters - void SetRef(AliVEvent *ref) {fRef = ref;} - void SetRefMC(AliVEvent *refmc) {fRefMC = refmc;} - void SetLeadingIndex(Int_t i) {fLeading = i;} - void SetLocalID(Int_t i) {fLocalID = i;} - AliVEvent* GetRef() {return fRef;} - AliVEvent* GetRefMC() {return fRefMC;} - Int_t GetLeadingIndex() const {return fLeading;} - Int_t GetLeadingParticleID() const {return fLeading;} - Int_t GetLocalID() const {return fLocalID;} + void SetRef(AliVEvent *ref) {fRef = ref;} + void SetRefMC(AliVEvent *refmc); + void SetPIDResponse(AliPIDResponse *pid) {fPID = pid;} + AliVEvent* GetRef() {return fRef;} + AliVEvent* GetRefMC() {return fRefMC;} + Int_t GetLeadingIndex() const {return fLeading;} + AliPIDResponse* GetPIDResponse() {return fPID;} // getters which convert into allowed input types - AliESDEvent* GetRefESD() {if (fRef ->IsA() == AliESDEvent::Class()) return static_cast(fRef) ; else return 0x0;} - AliAODEvent* GetRefAOD() {if (fRef ->IsA() == AliAODEvent::Class()) return static_cast(fRef) ; else return 0x0;} - AliMCEvent* GetRefMCESD() {if (fRefMC->IsA() == AliMCEvent ::Class()) return static_cast (fRefMC); else return 0x0;} - AliAODEvent* GetRefMCAOD() {if (fRefMC->IsA() == AliAODEvent::Class()) return static_cast(fRefMC); else return 0x0;} - Bool_t IsESD() {return (GetRefESD() != 0x0);} - Bool_t IsAOD() {return (GetRefAOD() != 0x0);} - - // advanced getters - Double_t GetVz(); - Int_t GetMultiplicity(AliESDtrackCuts *cuts = 0x0); + Bool_t Match(AliVEvent *ev, TClass *ref) {if (ev) return (ev->InheritsFrom(ref)); return kFALSE;} + Bool_t IsESD() {return (Match(fRef, AliESDEvent::Class()));} + Bool_t IsAOD() {return (Match(fRef, AliAODEvent::Class()));} + Bool_t InputOK(); + AliESDEvent* GetRefESD() {if (IsESD()) return (AliESDEvent*)fRef; return 0x0;} + AliMCEvent* GetRefMCESD() {if (IsESD()) return (AliMCEvent *)fRefMC; return 0x0;} + AliAODEvent* GetRefAOD() {if (IsAOD()) return (AliAODEvent*)fRef; return 0x0;} + AliAODEvent* GetRefMCAOD() {if (IsAOD()) return (AliAODEvent*)fRefMC; return 0x0;} + TClonesArray* GetAODList() {return fAODList;} + Bool_t HasMC() {if (IsESD()) return (fRefMC != 0x0); else if (IsAOD()) return (fRefMC != 0x0 && fAODList != 0x0); return kFALSE;} // setters for a daughter - Bool_t SetDaughter(AliRsnDaughter &daughter, Int_t index, AliRsnDaughter::ERefType type = AliRsnDaughter::kTrack); - Bool_t SetDaughterMC(AliRsnDaughter &daughter, Int_t index); - AliRsnDaughter GetDaughter(Int_t i, AliRsnDaughter::ERefType type = AliRsnDaughter::kTrack); - AliRsnDaughter GetDaughterMC(Int_t i); - Int_t GetAbsoluteSum(); + void SetDaughter (AliRsnDaughter &daughter, Int_t index, Bool_t fromMC = kFALSE); + AliRsnDaughter GetDaughter (Int_t index, Bool_t fromMC); + void SetDaughterESDtrack (AliRsnDaughter &target, Int_t index); + void SetDaughterESDv0 (AliRsnDaughter &target, Int_t index); + void SetDaughterESDcascade(AliRsnDaughter &target, Int_t index); + void SetDaughterESDMCtrack(AliRsnDaughter &target, Int_t index); + void SetDaughterAODtrack (AliRsnDaughter &target, Int_t index); + void SetDaughterAODv0 (AliRsnDaughter &target, Int_t index); + void SetDaughterAODcascade(AliRsnDaughter &target, Int_t index); + void SetDaughterAODMCtrack(AliRsnDaughter &target, Int_t index); + Bool_t SetMCInfoESD (AliRsnDaughter &target); + Bool_t SetMCInfoAOD (AliRsnDaughter &target); + + // counters/converters of candidates + Int_t GetAbsoluteSum() {if (fRef) return (fRef->GetNumberOfTracks() + fRef->GetNumberOfV0s() + fRef->GetNumberOfCascades()); return 0;} Bool_t ConvertAbsoluteIndex(Int_t index, Int_t &realIndex, AliRsnDaughter::ERefType &type); + Int_t ConvertRealIndex(Int_t index, AliRsnDaughter::ERefType type); // leading particle stuff - void SetLeadingParticle(AliRsnDaughter &leading) {if (fLeading >= 0) SetDaughter(leading, fLeading);} - Int_t SelectLeadingParticle(Double_t ptMin = 0.0, AliRsnCutPID *cutPID = 0x0); - Double_t GetAverageMomentum(Int_t &count, AliRsnCutPID *cutPID = 0x0); - Bool_t GetAngleDistr(Double_t &angleMean, Double_t &angleRMS, AliRsnDaughter reference); - - // statig getters - static AliRsnEvent *GetCurrentEvent1() {return fgRsnEvent1;} - static AliRsnEvent *GetCurrentEvent2() {return fgRsnEvent2;} - static void SetCurrentEvent1(AliRsnEvent *event, Int_t id = 0) {fgRsnEvent1 = event; fgRsnEvent1->SetLocalID(id);} - static void SetCurrentEvent2(AliRsnEvent *event, Int_t id = 0) {fgRsnEvent2 = event; fgRsnEvent2->SetLocalID(id);} - static Bool_t IsCurrentEvent1() {if (fgRsnEvent1 != 0x0) return kTRUE; return kFALSE;} - static Bool_t IsCurrentEvent2() {if (fgRsnEvent2 != 0x0) return kTRUE; return kFALSE;} - static Bool_t SameEvent() {if (fgRsnEvent1 == fgRsnEvent2) return kTRUE; return kFALSE;} + void SetLeadingParticle(AliRsnDaughter &leading) {if (fLeading >= 0) SetDaughter(leading, fLeading, kFALSE);} + Int_t SelectLeadingParticle(AliRsnCutSet *cuts = 0x0); private: - Bool_t SetDaughterESDtrack(AliRsnDaughter &target, Int_t index); - Bool_t SetDaughterAODtrack(AliRsnDaughter &target, Int_t index); - Bool_t SetDaughterESDv0(AliRsnDaughter &target, Int_t index); - Bool_t SetDaughterAODv0(AliRsnDaughter &target, Int_t index); - Bool_t SetDaughterESDcascade(AliRsnDaughter &target, Int_t index); - Bool_t SetDaughterAODcascade(AliRsnDaughter &target, Int_t index); - Bool_t SetMCInfoESD(AliRsnDaughter &target); - Bool_t SetMCInfoAOD(AliRsnDaughter &target); + AliVEvent *fRef; // pointer to input event + AliVEvent *fRefMC; // pointer to reference MC event (if any) + Int_t fLeading; // index of leading track + AliPIDResponse *fPID; // pointer to PID response + TClonesArray *fAODList; // pointer to AOD list of particles (if any) - AliVEvent *fRef; // pointer to input event - AliVEvent *fRefMC; // pointer to reference MC event (if any) - Int_t fLeading; // index of leading track - Int_t fLocalID; // identification number used locally + ClassDef(AliRsnEvent, 6); +}; - static AliRsnEvent *fgRsnEvent1; //! pointer to current event #1 (default current event) - static AliRsnEvent *fgRsnEvent2; //! pointer to current event #2 (different from the other when doing mixing) +inline Bool_t AliRsnEvent::InputOK() +{ +// +// Check that input is ESD or AOD +// - ClassDef(AliRsnEvent, 4); -}; + if (IsESD()) { + AliDebugClass(1, "Input is ESD"); + return kTRUE; + } else if (IsAOD()) { + AliDebugClass(1, "Input is AOD"); + return kTRUE; + } else { + AliError("Need to process ESD or AOD input"); + return kFALSE; + } +} + +inline void AliRsnEvent::SetRefMC(AliVEvent *mc) +{ +// +// Assign pointer to MC event. +// If it is an AOD, retrieve the list of MC particles +// + + if (!mc) { + fRefMC = 0x0; + fAODList = 0x0; + return; + } + + fRefMC = mc; + fAODList = 0x0; + if (fRefMC->InheritsFrom(AliAODEvent::Class())) { + AliAODEvent *aod = (AliAODEvent*)mc; + fAODList = (TClonesArray*)(aod->GetList()->FindObject(AliAODMCParticle::StdBranchName())); + if (!fAODList) fRefMC = 0x0; + } +} #endif