1 #ifndef ALINEUTRALMESONSELECTION_H
2 #define ALINEUTRALMESONSELECTION_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 //_________________________________________________________________________
7 // Class that contains methods to select candidate pairs to neutral meson
8 // 2 main selections, invariant mass around pi0 (also any other mass),
9 // apperture angle to distinguish from combinatorial.
10 // There is a 3rd cut based on the gamma correlation on phi or pt.
11 //-- Author: Gustavo Conesa (INFN-LNF)
13 // --- ROOT system ---
18 class TLorentzVector ;
23 class AliNeutralMesonSelection : public TObject {
26 AliNeutralMesonSelection() ; // default ctor
27 virtual ~AliNeutralMesonSelection() { ; } //virtual dtor
31 TList * GetCreateOutputObjects();
33 void InitParameters();
35 void Print(const Option_t * opt) const;
37 Bool_t AreNeutralMesonSelectionHistosKept() const { return fKeepNeutralMesonHistos ; }
38 void KeepNeutralMesonSelectionHistos(Bool_t keep) { fKeepNeutralMesonHistos = keep ; }
40 Bool_t SelectPair(TLorentzVector particlei, TLorentzVector particlej, TString calo) ;
42 void SetParticle(TString particleName) ; // Do some default settings for "Pi0" or "Eta"
43 TString GetParticle() const { return fParticle ; }
45 // Asymmetry selection
47 Float_t GetAsymmetryCut() const { return fAsymmetryCut ; }
48 void SetAsymmetryCut(Float_t asy) { fAsymmetryCut = asy ; }
50 void SwitchOnAsymmetryCut() { fUseAsymmetryCut = kTRUE ; }
51 void SwitchOffAsymmetryCut() { fUseAsymmetryCut = kFALSE ; }
53 //Opening angle selection
55 Double_t GetAngleMaxParam(Int_t i) const { return fAngleMaxParam.At(i) ; }
56 void SetAngleMaxParam(Int_t i, Double_t par) { fAngleMaxParam.AddAt(par,i) ; }
58 void SetShiftMinAngleCut(Float_t a, Float_t b) { fShiftMinAngle[0] = a ;
59 fShiftMinAngle[1] = b ; }
61 void SwitchOnAngleSelection() { fUseAngleCut = kTRUE ; }
62 void SwitchOffAngleSelection() { fUseAngleCut = kFALSE ; }
64 Bool_t IsAngleInWindow(Float_t angle, Float_t e) const ;
66 //Invariant mass selection
68 Double_t GetInvMassMaxCut() const { return fInvMassMaxCut ; }
69 Double_t GetInvMassMinCut() const { return fInvMassMinCut ; }
71 void SetInvMassCutRange(Double_t invmassmin, Double_t invmassmax)
72 { fInvMassMaxCut =invmassmax; fInvMassMinCut =invmassmin ; }
74 void SetSideBandCutRanges( Double_t lmin, Double_t lmax,
75 Double_t rmin, Double_t rmax )
76 { fLeftBandMinCut = lmin ; fLeftBandMaxCut = lmax ;
77 fRightBandMinCut = rmin ; fRightBandMaxCut = rmax ; }
79 void SetInvMassCutMaxParameters(Float_t a, Float_t b, Float_t c)
80 { fInvMassMaxCutParam[0] = a ;
81 fInvMassMaxCutParam[1] = b ;
82 fInvMassMaxCutParam[2] = c ; }
84 Double_t GetMass() const { return fM ; }
85 void SetMass(Double_t m) { fM = m ; }
88 // Decay photon bit setting
90 enum decayTypes { kPi0, kEta, kPi0Side, kEtaSide} ;
92 UInt_t GetDecayBit() const { return fDecayBit ; }
94 void SetDecayBit(Int_t &tag, UInt_t set) const {
95 // Set bit of type set (decayTypes) in tag
99 void SetDecayBit(Int_t &tag) const {
100 // Set bit of type set (decayTypes) in tag
101 tag |= (1<<fDecayBit) ;
104 Bool_t CheckDecayBit(Int_t tag, UInt_t test) const {
105 // Check if in tag the bit test (decayTypes) is set.
106 if (tag & (1<<test) ) return kTRUE ;
110 Bool_t CheckDecayBit(Int_t tag) const {
111 // Check if in tag the bit test (decayTypes) is set.
112 if (tag & (1<<fDecayBit) ) return kTRUE ;
116 // Histograms setters and getters
118 virtual void SetHistoERangeAndNBins(Float_t min, Float_t max, Int_t n) {
124 Int_t GetHistoNEBins() const { return fHistoNEBins ; }
125 Float_t GetHistoEMin() const { return fHistoEMin ; }
126 Float_t GetHistoEMax() const { return fHistoEMax ; }
128 virtual void SetHistoAngleRangeAndNBins(Float_t min, Float_t max, Int_t n) {
129 fHistoNAngleBins = n ;
130 fHistoAngleMax = max ;
131 fHistoAngleMin = min ;
134 Int_t GetHistoNAngleBins() const { return fHistoNAngleBins ; }
135 Float_t GetHistoAngleMin() const { return fHistoAngleMin ; }
136 Float_t GetHistoAngleMax() const { return fHistoAngleMax ; }
138 virtual void SetHistoIMRangeAndNBins(Float_t min, Float_t max, Int_t n) {
144 Int_t GetHistoNIMBins() const { return fHistoNIMBins ; }
145 Float_t GetHistoIMMin() const { return fHistoIMMin ; }
146 Float_t GetHistoIMMax() const { return fHistoIMMax ; }
150 Float_t fAsymmetryCut ; // Asymmetry cut
151 Bool_t fUseAsymmetryCut; // Use the asymmetry cut
153 Double_t fM ; // Mass of the neutral meson
154 Double_t fInvMassMaxCut ; // Invariant Mass cut maximum
155 Double_t fInvMassMinCut ; // Invariant Masscut minimun
156 Double_t fInvMassMaxCutParam[3]; // Variable invariant mass max cut, for pi0 in EMCAL
158 Double_t fLeftBandMinCut ; // Side Band selection, min left band cut
159 Double_t fLeftBandMaxCut ; // Side Band selection, max left band cut
160 Double_t fRightBandMinCut ; // Side Band selection, min right band cut
161 Double_t fRightBandMaxCut ; // Side Band selection, max right band cut
163 TArrayD fAngleMaxParam ; // Max opening angle selection parameters
164 Bool_t fUseAngleCut ; // Select pairs depending on their opening angle
165 Float_t fShiftMinAngle[2] ; // Correction shift for min angle from true kinematic limit, resolution effects
167 Bool_t fKeepNeutralMesonHistos ; // Keep neutral meson selection histograms
169 TString fParticle ; // neutral meson name (Pi0, Eta, +SideBand)
170 UInt_t fDecayBit; // Decay type flag, set when fParticle is set
173 TH2F * fhAnglePairNoCut ; //! Aperture angle of decay photons, no cuts
174 TH2F * fhAnglePairOpeningAngleCut ; //! Aperture angle of decay photons, cut on opening angle
175 TH2F * fhAnglePairAsymmetryCut ; //! Aperture angle of decay photons, asymmetry cut
176 TH2F * fhAnglePairAllCut ; //! Aperture angle of decay photons, all cuts
178 TH2F * fhInvMassPairNoCut ; //! Invariant mass of decay photons, no cuts
179 TH2F * fhInvMassPairOpeningAngleCut ; //! Invariant mass of decay photons, cut on opening angle
180 TH2F * fhInvMassPairAsymmetryCut ; //! Invariant mass of decay photons, asymmetry cut
181 TH2F * fhInvMassPairAllCut ; //! Invariant mass of decay photons, all cuts
183 TH2F * fhAsymmetryNoCut ; //! Asymmetry of decay photons, no cuts
184 TH2F * fhAsymmetryOpeningAngleCut ; //! Asymmetry of decay photons, cut on opening angle
185 TH2F * fhAsymmetryAllCut ; //! Asymmetry of decay photons, all cuts
187 //Histograms binning and range
188 Int_t fHistoNEBins ; // Number of bins in pi0 E axis
189 Float_t fHistoEMax ; // Maximum value of pi0 E histogram range
190 Float_t fHistoEMin ; // Minimum value of pi0 E histogram range
192 Int_t fHistoNAngleBins ; // Number of bins in angle axis
193 Float_t fHistoAngleMax ; // Maximum value of angle histogram range
194 Float_t fHistoAngleMin ; // Minimum value of angle histogram range
196 Int_t fHistoNIMBins ; // Number of bins in Invariant Mass axis
197 Float_t fHistoIMMax ; // Maximum value of Invariant Mass histogram range
198 Float_t fHistoIMMin ; // Minimum value of Invariant Mass histogram range
200 AliNeutralMesonSelection( const AliNeutralMesonSelection & g) ; // cpy ctor
201 AliNeutralMesonSelection & operator = (const AliNeutralMesonSelection & g) ; // cpy assignment
203 ClassDef(AliNeutralMesonSelection,8)
207 #endif //ALINEUTRALMESONSELECTION_H