1 /**************************************************************************
2 AliFemtoAnalysis - the most basic analysis there is.
3 Most others (e.g. AliFemtoVertexAnalysis) wrap this one.
4 **************************************************************************/
6 #ifndef AliFemtoAnalysis_hh
7 #define AliFemtoAnalysis_hh
12 #include "Base/AliFemtoBaseAnalysis.h" // base analysis class
13 #include "Base/AliFemtoPairCut.h"
14 #include "Base/AliFemtoEventCut.h"
15 #include "Base/AliFemtoParticleCut.h"
16 #include "Base/AliFemtoCorrFctn.h"
17 #include "Infrastructure/AliFemtoCorrFctnCollection.h"
18 #include "Infrastructure/AliFemtoPicoEventCollection.h"
19 #include "Infrastructure/AliFemtoParticleCollection.h"
20 #include "Infrastructure/AliFemtoPicoEvent.h"
22 class AliFemtoPicoEventCollectionVectorHideAway;
25 class AliFemtoAnalysis : public AliFemtoBaseAnalysis {
27 friend class AliFemtoLikeSignAnalysis;
31 AliFemtoAnalysis(const AliFemtoAnalysis& OriginalAnalysis); // copy constructor
32 virtual ~AliFemtoAnalysis();
36 virtual AliFemtoPairCut* PairCut();
37 virtual AliFemtoEventCut* EventCut();
38 virtual AliFemtoParticleCut* FirstParticleCut();
39 virtual AliFemtoParticleCut* SecondParticleCut();
41 AliFemtoCorrFctnCollection* CorrFctnCollection();
42 virtual AliFemtoCorrFctn* CorrFctn(int n); // Access to CFs within the collection
43 void AddCorrFctn(AliFemtoCorrFctn* AnotherCorrFctn);
45 void SetPairCut(AliFemtoPairCut* ThePairCut);
46 void SetEventCut(AliFemtoEventCut* TheEventCut);
47 void SetFirstParticleCut(AliFemtoParticleCut* TheFirstParticleCut);
48 void SetSecondParticleCut(AliFemtoParticleCut* TheSecondParticleCut);
50 void SetMinSizePartCollection(unsigned int minSize);
52 unsigned int NumEventsToMix();
53 void SetNumEventsToMix(const unsigned int& NumberOfEventsToMix);
54 AliFemtoPicoEvent* CurrentPicoEvent();
55 AliFemtoPicoEventCollection* MixingBuffer();
56 bool MixingBufferFull();
58 bool AnalyzeIdenticalParticles();
59 virtual AliFemtoString Report(); //! returns reports of all cuts applied and correlation functions being done
61 virtual void EventBegin(const AliFemtoEvent* TheEventToBegin); // startup for EbyE
62 virtual void ProcessEvent(const AliFemtoEvent* EventToProcess);
63 virtual void EventEnd(const AliFemtoEvent* TheEventToWrapUp); // cleanup for EbyE
64 int GetNeventsProcessed();
66 virtual void Finish();
70 void AddEventProcessed();
71 void MakePairs(const char* type,
72 AliFemtoParticleCollection* ParticlesPassingCut1,
73 AliFemtoParticleCollection* ParticlesPssingCut2=0);
75 AliFemtoPicoEventCollectionVectorHideAway* fPicoEventCollectionVectorHideAway; /* Mixing Buffer used for Analyses which wrap this one */
77 AliFemtoPairCut* fPairCut; /* cut applied to pairs */
78 AliFemtoCorrFctnCollection* fCorrFctnCollection; /* correlation functions of this analysis */
79 AliFemtoEventCut* fEventCut; /* cut to select events */
80 AliFemtoParticleCut* fFirstParticleCut; /* select particles of type #1 */
81 AliFemtoParticleCut* fSecondParticleCut; /* select particles of type #2 */
82 AliFemtoPicoEventCollection* fMixingBuffer; /* mixing buffer used in this simplest analysis */
83 AliFemtoPicoEvent* fPicoEvent; /* The current event, in the small (pico) form */
84 unsigned int fNumEventsToMix; /* How many "previous" events get mixed with this one, to make background */
85 unsigned int fNeventsProcessed; /* How many events processed so far */
87 unsigned int fMinSizePartCollection; /* Don't use event if it has fewer than this many particles passing ParticleCuts default 0*/
90 ClassDef(AliFemtoAnalysis, 0)
96 inline AliFemtoPairCut* AliFemtoAnalysis::PairCut() {return fPairCut;}
97 inline AliFemtoEventCut* AliFemtoAnalysis::EventCut() {return fEventCut;}
98 inline AliFemtoParticleCut* AliFemtoAnalysis::FirstParticleCut() {return fFirstParticleCut;}
99 inline AliFemtoParticleCut* AliFemtoAnalysis::SecondParticleCut() {return fSecondParticleCut;}
100 inline AliFemtoCorrFctnCollection* AliFemtoAnalysis::CorrFctnCollection() {return fCorrFctnCollection;}
101 inline unsigned int AliFemtoAnalysis::NumEventsToMix(){return fNumEventsToMix;}
102 inline AliFemtoPicoEvent* AliFemtoAnalysis::CurrentPicoEvent() {return fPicoEvent;}
104 inline AliFemtoPicoEventCollection* AliFemtoAnalysis::MixingBuffer() {return fMixingBuffer;}
107 inline bool AliFemtoAnalysis::AnalyzeIdenticalParticles(){return (fFirstParticleCut==fSecondParticleCut);}
108 inline void AliFemtoAnalysis::SetPairCut(AliFemtoPairCut* x) { fPairCut = x; x->SetAnalysis((AliFemtoBaseAnalysis*)this);}
109 inline void AliFemtoAnalysis::AddCorrFctn(AliFemtoCorrFctn* cf) {fCorrFctnCollection->push_back(cf); cf->SetAnalysis((AliFemtoBaseAnalysis*)this);}
110 inline void AliFemtoAnalysis::SetEventCut(AliFemtoEventCut* x) {fEventCut = x; x->SetAnalysis((AliFemtoBaseAnalysis*)this);}
111 inline void AliFemtoAnalysis::SetFirstParticleCut(AliFemtoParticleCut* x) {fFirstParticleCut = x; x->SetAnalysis((AliFemtoBaseAnalysis*)this);}
112 inline void AliFemtoAnalysis::SetSecondParticleCut(AliFemtoParticleCut* x) {fSecondParticleCut = x; x->SetAnalysis((AliFemtoBaseAnalysis*)this);}
114 inline void AliFemtoAnalysis::SetNumEventsToMix(const unsigned int& nmix){ fNumEventsToMix = nmix;}
115 inline bool AliFemtoAnalysis::MixingBufferFull(){return (fMixingBuffer->size() >= fNumEventsToMix);}
116 inline int AliFemtoAnalysis::GetNeventsProcessed() {return fNeventsProcessed;}
118 inline void AliFemtoAnalysis::SetMinSizePartCollection(unsigned int minSize){fMinSizePartCollection = minSize;}