Tracking flag functionality increased. By A.Morsch.
[u/mrichter/AliRoot.git] / EVGEN / DimuonCombinator.h
1 #ifndef _DimuonCombinator_H
2 #define _DimuonCombinator_H
3 #include "GParticle.h"
4 #include <TBrowser.h>
5 #include <TList.h>
6 #include <TTree.h>
7 #include <TROOT.h>
8
9
10 class DimuonCombinator:
11     public TObject 
12 {
13 public:
14     DimuonCombinator(TClonesArray* Partarray){
15         fPartArray=Partarray;
16         fNParticle=fPartArray->GetEntriesFast();
17         
18         fimuon1 =0;
19         fimuon2 =0;
20         fmuon1  =0;
21         fmuon2  =0;
22         fimin1  = 0;
23         fimin2  = 0;
24         fimax1  = fNParticle;
25         fimax2  = fNParticle;
26         fPtMin  =0;
27         fEtaMin =-10;
28         fEtaMax =-10;
29         fRate1=1.;
30         fRate2=1.;
31     }
32 //    
33 //  Iterators
34 //  Single muons
35     GParticle* FirstMuon();
36     GParticle* NextMuon();
37 //  Single muons selected
38     GParticle* FirstMuonSelected();
39     GParticle* NextMuonSelected();
40 //  Dimuons    
41     void FirstMuonPair(GParticle* & muon1, GParticle* & muon2);
42     void NextMuonPair(GParticle* & muon1, GParticle* & muon2);
43 //  Dimuons selected    
44     void FirstMuonPairSelected(GParticle* & muon1, GParticle* & muon2);
45     void NextMuonPairSelected(GParticle* & muon1, GParticle* & muon2);
46 //  Loop over all prticles    
47     void ResetRange();
48 //  Set two ranges for dimuon loop    
49     void SetFirstRange (Int_t from, Int_t to);
50     void SetSecondRange(Int_t from, Int_t to);    
51 //  Cuts
52     void SetPtMin(Float_t ptmin) {fPtMin=ptmin;}
53     void SetEtaCut(Float_t etamin, Float_t etamax){fEtaMin=etamin; fEtaMax=etamax;}      Bool_t Selected(GParticle* part);
54     Bool_t Selected(GParticle* part1, GParticle* part2);
55 // Kinematics
56     Float_t Mass(GParticle* part1, GParticle* part);
57     Float_t PT(GParticle* part1, GParticle* part);
58     Float_t Pz(GParticle* part1, GParticle* part);
59     Float_t Y(GParticle* part1, GParticle* part);
60 // Response
61     void SmearGauss(Float_t width, Float_t & value);
62 // Weight
63     Bool_t  Correlated(GParticle* part1, GParticle* part2);
64     void    SetRate(Float_t rate){fRate1=rate;}
65     void    SetRate(Float_t rate1, Float_t rate2 ){fRate1=rate1; fRate2=rate2;}
66     Float_t Weight(GParticle* part);
67     Float_t Weight(GParticle* part1, GParticle* part);
68     Float_t Decay_Prob(GParticle* part);
69     
70  private:
71     void FirstPartner();
72     void NextPartner();
73     void FirstPartnerSelected();
74     void NextPartnerSelected();
75     Int_t Origin(GParticle* part);
76     GParticle* Parent(GParticle* part);
77     GParticle* Partner();
78     Int_t Type(GParticle *part){return part->GetKF();}
79 private:
80     TClonesArray *fPartArray;
81     Int_t fNParticle;
82     Int_t fimuon1;
83     Int_t fimuon2;
84     Int_t fimin1;
85     Int_t fimin2;
86     Int_t fimax1;
87     Int_t fimax2;
88     Float_t fRate1;
89     Float_t fRate2;
90     GParticle *fmuon1;
91     GParticle *fmuon2;
92     Float_t fPtMin;
93     Float_t fEtaMin;
94     Float_t fEtaMax;
95     ClassDef(DimuonCombinator,1)
96 };
97 #endif
98
99
100
101