1 void MUONcombi (Int_t evNumber=0)
3 // Dynamically link some shared libs
4 if (gClassTable->GetID("AliRun") < 0) {
5 gROOT->LoadMacro("loadlibs.C");
12 // Connect the Root Galice file containing Geometry, Kine and Hits
13 TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject("galice.root");
14 if (!file) file = new TFile("galice.root");
16 // Get AliRun object from file or create it if not on file
18 gAlice = (AliRun*)file->Get("gAlice");
19 if (gAlice) printf("AliRun object found on file\n");
20 if (!gAlice) gAlice = new AliRun("gAlice","Alice test program");
22 TClonesArray *PartArray = gAlice->Particles();
26 // Import the Kine and Hits Trees for the event evNumber in the file
27 Int_t nparticles = gAlice->GetEvent(evNumber);
28 if (nparticles <= 0) return;
31 TH1F *dmass = new TH1F("dmass","Dimuon-Mass Distribution"
33 TH1F *dmassc = new TH1F("dmassc","Dimuon-Mass Distribution"
35 TH1F *dmassd = new TH1F("dmassd","Dimuon-Mass Distribution"
38 TH1F *pt = new TH1F("pt","pT-single"
44 AliGenCocktailEntry *Entry, *e1, *e2;
45 AliGenCocktail* Cocktail = (AliGenCocktail*) gAlice->Generator();
47 for (Entry=Cocktail->FirstGenerator();
49 Entry=Cocktail->NextGenerator()
53 // Pairs of Generators
55 // Initialize Combinator
56 AliDimuCombinator* Combinator = new AliDimuCombinator();
57 Combinator->SetEtaCut(-5, 5);
58 Combinator->SetPtMin(0.0);
64 Combinator->ResetRange();
68 for(Muon=Combinator->FirstMuon();
70 Muon=Combinator->NextMuon()) {
72 Int_t chfirst = Muon->GetFirstDaughter();
73 Int_t chlast = Muon->GetLastDaughter();
74 Int_t parent = Muon->GetFirstMother();
75 Float_t ptm = Muon->Pt();
76 Float_t eta = Muon->Eta();
78 printf("\n Particle %d Parent %d first child %d last child %d",
79 i,parent, chfirst, chlast);
80 printf("\n Particle pt, eta: %f , %f ", ptm, eta);
90 Combinator->ResetRange();
92 for (Combinator->FirstMuonPairSelected(Muon1,Muon2);
94 Combinator->NextMuonPairSelected(Muon1,Muon2))
98 Float_t mass = Combinator->Mass(Muon1, Muon2);
99 Float_t wgt = Combinator->Weight(Muon1, Muon2);
102 Float_t smeared_mass = mass;
103 Combinator->SmearGauss(0.05*mass, smeared_mass);
104 if (Combinator->Correlated(Muon1, Muon2)) {
105 dmassc->Fill(mass, wgt);
107 dmass->Fill(mass, wgt);
112 // Dimuon Loop controlled by Generator Loop
114 for (Cocktail->FirstGeneratorPair(e1,e2);
116 Cocktail->NextGeneratorPair(e1,e2)
118 printf("\n ----------------------------------------------------");
121 printf("\n ----------------------------------------------------");
122 Combinator->SetFirstRange (e1->GetFirst(), e1->GetLast());
123 Combinator->SetSecondRange(e2->GetFirst(), e2->GetLast());
124 Combinator->SetRate(e1->Rate(), e2->Rate());
125 for (Combinator->FirstMuonPairSelected(Muon1,Muon2);
127 Combinator->NextMuonPairSelected(Muon1,Muon2))
131 Float_t mass = Combinator->Mass(Muon1, Muon2);
132 Float_t wgt = Combinator->Weight(Muon1, Muon2);
135 Float_t smeared_mass = mass;
136 Combinator->SmearGauss(0.05*mass, smeared_mass);
137 Float_t DecayWeight =
138 Combinator->DecayProbability(Muon2)*
139 Combinator->DecayProbability(Muon2);
140 // if (TMath::Min(pt1,pt2) > -0.5*TMath::Max(pt1,pt2)+2.) {
141 if (Combinator->Correlated(Muon1, Muon2)) {
142 dmassc->Fill(smeared_mass, wgt);
144 dmass->Fill(smeared_mass, wgt);
145 dmassd->Fill(smeared_mass, wgt*DecayWeight);
150 //Create a canvas, set the view range, show histograms
152 TCanvas *c1 = new TCanvas("c1","Dimuon Plots",400,10,600,700);
153 TPad* pad11 = new TPad("pad11"," ",0.01,0.51,0.49,0.99);
154 TPad* pad12 = new TPad("pad12"," ",0.51,0.51,0.99,0.99);
155 TPad* pad13 = new TPad("pad13"," ",0.01,0.01,0.49,0.49);
156 TPad* pad14 = new TPad("pad14"," ",0.51,0.01,0.99,0.49);
157 pad11->SetFillColor(11);
158 pad12->SetFillColor(11);
159 pad13->SetFillColor(11);
160 pad14->SetFillColor(11);
167 pt->SetFillColor(42);
168 pt->SetXTitle("pT (GeV)");
173 dmass->SetFillColor(42);
174 dmass->SetXTitle("m (GeV)");
179 dmassc->SetFillColor(42);
180 dmassc->SetXTitle("m (GeV)");
185 dmassd->SetFillColor(42);
186 dmassd->SetXTitle("m (GeV)");