AliRoot Core  edcc906 (edcc906)
MUONFakes.C
Go to the documentation of this file.
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 // ROOT includes
3 #include <TFile.h>
4 #include <TH1.h>
5 #include <TCanvas.h>
6 #include <Riostream.h>
7 #include <TROOT.h>
8 #include <TObjArray.h>
9 #include <TArrayI.h>
10 
11 // STEER includes
12 #include "AliLog.h"
13 #include "AliESDEvent.h"
14 #include "AliESDMuonTrack.h"
15 #include "AliCDBManager.h"
16 
17 // MUON includes
18 #include "AliMUONCDB.h"
19 #include "AliMUONTrack.h"
20 #include "AliMUONVTrackStore.h"
21 #include "AliMUONTrackParam.h"
22 #include "AliMUONESDInterface.h"
23 #include "AliMUONRecoCheck.h"
24 #include "AliMUONVCluster.h"
25 #include "AliMUONRecoParam.h"
26 #endif
27 
36 
38 Bool_t request2ChInSameSt45 = kFALSE;
39 Double_t sigmaCut = -1.;
40 
41 Int_t RemoveConnectedFakes(AliMUONVTrackStore &fakeTrackStore, AliMUONVTrackStore &trackRefStore,
42  Bool_t useLabel, TH1F &hFractionOfConnectedClusters);
43 
44 //-----------------------------------------------------------------------
45 void MUONFakes(Bool_t useLabel = kFALSE, Int_t FirstEvent = 0, Int_t LastEvent = -1,
46  const TString esdFileName = "AliESDs.root", const TString SimDir = "./generated/",
47  const TString ocdbPath = "local://$ALICE_ROOT/OCDB")
48 {
49 
50  // Disable printout of AliMCEvent
51  AliLog::SetClassDebugLevel("AliMCEvent",-1);
52 
53  //Reset ROOT and connect tree file
54  gROOT->Reset();
55 
56  // File for histograms and histogram booking
57  TFile *histoFile = new TFile("Fakes.root", "RECREATE");
58 
59  TH1F *hNumberOfTracks = new TH1F("hNumberOfTracks","nb of tracks /evt",20,0.,20.);
60  TH1F *hNumberOfAdditionalTracks = new TH1F("hNumberOfAdditionalTracks","nb of fake - nb of missing track",20,0.,20.);
61 
62  TH1F *hNumberOfClusters = new TH1F("hNumberOfClusters","nb of clusters /track",20,0.,20.);
63  TH1F *hNumberOfClustersM = new TH1F("hNumberOfClustersM","nb of clusters /matched track",20,0.,20.);
64  TH1F *hNumberOfClustersF = new TH1F("hNumberOfClustersF","nb of clusters /fake track",20,0.,20.);
65  TH1F *hNumberOfClustersMC = new TH1F("hNumberOfClustersMC","nb of clusters /MC track",20,0.,20.);
66  TH1F *hFractionOfMatchedClusters = new TH1F("hFractionOfMatchedClusters","nb of matched clusters / nb of clusters",110,0.,1.1);
67  TH1F *hFractionOfConnectedClusters = new TH1F("hFractionOfConnectedClusters","nb of connected clusters / nb of clusters in fake tracks",110,0.,1.1);
68 
69  TH1F *hChi2PerDof = new TH1F("hChi2PerDof", "track chi2/d.o.f.", 100, 0., 20.);
70  TH1F *hChi2PerDofM = new TH1F("hChi2PerDofM", "matched track chi2/d.o.f.", 100, 0., 20.);
71  TH1F *hChi2PerDofF = new TH1F("hChi2PerDofF", "fake track chi2/d.o.f.", 100, 0., 20.);
72  TH1F *hP = new TH1F("hP", "Muon P distribution (GeV/c)", 100, 0., 200.);
73  TH1F *hPM = new TH1F("hPM", "matched track P distribution (GeV/c)", 100, 0., 200.);
74  TH1F *hPF = new TH1F("hPF", "fake track P distribution (GeV/c)", 100, 0., 200.);
75  TH1F *hPt = new TH1F("hPt", "Muon Pt distribution (GeV/c)", 100, 0., 20.);
76  TH1F *hPtM = new TH1F("hPtM", "matched track Pt distribution (GeV/c)", 100, 0., 20.);
77  TH1F *hPtF = new TH1F("hPtF", "fake track Pt distribution (GeV/c)", 100, 0., 20.);
78  TH1F *hEta = new TH1F("hEta"," Muon pseudo-rapidity distribution",100,-10,0);
79  TH1F *hEtaM = new TH1F("hEtaM"," matched track pseudo-rapidity distribution",100,-10,0);
80  TH1F *hEtaF = new TH1F("hEtaF"," fake track pseudo-rapidity distribution",100,-10,0);
81  TH1F *hPhi = new TH1F("hPhi"," Muon phi distribution",100,-1.,9.);
82  TH1F *hPhiM = new TH1F("hPhiM"," matched track phi distribution",100,-1.,9.);
83  TH1F *hPhiF = new TH1F("hPhiF"," fake track phi distribution",100,-1.,9.);
84  TH1F *hNumberOfChamberHit = new TH1F("hNumberOfChamberHit","nb of chambers hit /track",20,0.,20.);
85  TH1F *hNumberOfChamberHitM = new TH1F("hNumberOfChamberHitM","nb of chambers hit /matched track",20,0.,20.);
86  TH1F *hNumberOfChamberHitF = new TH1F("hNumberOfChamberHitF","nb of chambers hit /fake track",20,0.,20.);
87 
88  // link to reconstructed and simulated tracks
89  AliMUONRecoCheck rc(esdFileName, SimDir);
90 
91  // load necessary data from OCDB
95  if (!recoParam) return;
96 
97  // get sigma cut from recoParam to associate clusters with TrackRefs in case the labels are not used
98  sigmaCut = (recoParam->ImproveTracks()) ? recoParam->GetSigmaCutForImprovement() : recoParam->GetSigmaCutForTracking();
99  // compute the mask of requested stations from recoParam
100  for (Int_t i = 0; i < 5; i++) if (recoParam->RequestStation(i)) requestedStationMask |= ( 1 << i );
101  // get from recoParam whether a track need 2 chambers hit in the same station (4 or 5) or not to be reconstructible
103 
104  // initialize global counters
105  Int_t nReconstructibleTracks = 0;
106  Int_t nReconstructedTracks = 0;
107  Int_t nEventsWithTrackReconstructedYet = 0;
108  Int_t nEventsWithFake = 0;
109  Int_t nEventsWithAdditionalFake = 0;
110  Int_t nTotMatchedTracks = 0;
111  Int_t nTotTracksReconstructedYet = 0;
112  Int_t nTotFakeTracks = 0;
113  Int_t nTotConnectedTracks = 0;
114  Int_t nTotAdditionalTracks = 0;
115  Bool_t trackReconstructedYet;
116  TArrayI eventsWithTrackReconstructedYet(10);
117  TArrayI eventsWithFake(10);
118  TArrayI eventsWithAdditionalFake(10);
119 
120  // Loop over ESD events
121  FirstEvent = TMath::Max(0, FirstEvent);
122  LastEvent = (LastEvent>=0) ? TMath::Min(rc.NumberOfEvents() - 1, LastEvent) : rc.NumberOfEvents() - 1;
123  for (Int_t iEvent = FirstEvent; iEvent <= LastEvent; iEvent++) {
124 
125  // get reconstructed and simulated tracks
126  AliMUONVTrackStore* muonTrackStore = rc.ReconstructedTracks(iEvent, kFALSE);
127  AliMUONVTrackStore* trackRefStore = rc.TrackRefs(iEvent);
128  if (!muonTrackStore || !trackRefStore) continue;
129 
130  // count the number of reconstructible tracks
131  TIter next(trackRefStore->CreateIterator());
132  AliMUONTrack* trackRef;
133  while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) ) {
134  if (trackRef->IsValid(requestedStationMask, request2ChInSameSt45)) nReconstructibleTracks++;
135  }
136 
137  // loop over ESD tracks
138  Int_t nTrackerTracks = 0;
139  trackReconstructedYet = kFALSE;
141  const AliESDEvent* esd = rc.GetESDEvent();
142  Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks() ;
143  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
144 
145  AliESDMuonTrack* esdTrack = esd->GetMuonTrack(iTrack);
146 
147  // skip ghosts
148  if (!esdTrack->ContainTrackerData()) continue;
149  nTrackerTracks++;
150 
151  // find the corresponding MUON track
152  AliMUONTrack* muonTrack = (AliMUONTrack*) muonTrackStore->FindObject(esdTrack->GetUniqueID());
153 
154  // get track info
155  Int_t nClusters = esdTrack->GetNClusters();
156  Double_t normalizedChi2 = esdTrack->GetChi2() / (2. * esdTrack->GetNHit() - 5);
157  Double_t p = esdTrack->P();
158  Double_t pT = esdTrack->Pt();
159  Double_t eta = esdTrack->Eta();
160  Double_t phi = esdTrack->Phi();
161  Int_t nChamberHit = 0;
162  for (Int_t ich=0; ich<10; ich++) if (esdTrack->IsInMuonClusterMap(ich)) nChamberHit++;
163 
164  // fill global histograms
165  hNumberOfClusters->Fill(nClusters);
166  hChi2PerDof->Fill(normalizedChi2);
167  hP->Fill(p);
168  hPt->Fill(pT);
169  hEta->Fill(eta);
170  hPhi->Fill(phi);
171  hNumberOfChamberHit->Fill(nChamberHit);
172 
173  // try to match the reconstructed track with a simulated one
174  Int_t nMatchClusters = 0;
175  AliMUONTrack* matchedTrackRef = rc.FindCompatibleTrack(*muonTrack, *trackRefStore, nMatchClusters, useLabel, sigmaCut);
176 
177  // take actions according to matching result
178  if (matchedTrackRef) {
179 
180  // global counter
181  nTotMatchedTracks++;
182  if (!matchedTrackRef->IsValid(requestedStationMask, request2ChInSameSt45)) {
183  trackReconstructedYet = kTRUE;
184  nTotTracksReconstructedYet++;
185  }
186 
187  // fill histograms
188  hFractionOfMatchedClusters->Fill(((Float_t) nMatchClusters) / ((Float_t) nClusters));
189  hNumberOfClustersMC->Fill(matchedTrackRef->GetNClusters());
190  hNumberOfClustersM->Fill(nClusters);
191  hChi2PerDofM->Fill(normalizedChi2);
192  hPM->Fill(p);
193  hPtM->Fill(pT);
194  hEtaM->Fill(eta);
195  hPhiM->Fill(phi);
196  hNumberOfChamberHitM->Fill(nChamberHit);
197 
198  // remove already matched trackRefs
199  trackRefStore->Remove(*matchedTrackRef);
200 
201  } else {
202 
203  // global counter
204  nTotFakeTracks++;
205 
206  // fill histograms
207  hNumberOfClustersF->Fill(nClusters);
208  hChi2PerDofF->Fill(normalizedChi2);
209  hPF->Fill(p);
210  hPtF->Fill(pT);
211  hEtaF->Fill(eta);
212  hPhiF->Fill(phi);
213  hNumberOfChamberHitF->Fill(nChamberHit);
214 
215  // store fake tracks
216  fakeTrackStore->Add(*muonTrack);
217 
218  }
219 
220  } // end of loop over ESD tracks
221 
222  // fill histograms
223  hNumberOfTracks->Fill(nTrackerTracks);
224  nReconstructedTracks += nTrackerTracks;
225  if (trackReconstructedYet) {
226  if (nEventsWithTrackReconstructedYet >= eventsWithTrackReconstructedYet.GetSize())
227  eventsWithTrackReconstructedYet.Set(10*eventsWithTrackReconstructedYet.GetSize());
228  eventsWithTrackReconstructedYet[nEventsWithTrackReconstructedYet++] = iEvent;
229  }
230 
231  // count the number the additional fake tracks
232  if (fakeTrackStore->GetSize() > 0) {
233 
234  // remove the most connected fake tracks
235  Int_t nFreeMissingTracks = RemoveConnectedFakes(*fakeTrackStore, *trackRefStore, useLabel, *hFractionOfConnectedClusters);
236 
237  // remove the remaining free reconstructible tracks
238  Int_t nAdditionalTracks = fakeTrackStore->GetSize() - nFreeMissingTracks;
239 
240  // fill histograms
241  if (nEventsWithFake >= eventsWithFake.GetSize()) eventsWithFake.Set(10*eventsWithFake.GetSize());
242  eventsWithFake[nEventsWithFake++] = iEvent;
243  if (nAdditionalTracks > 0) {
244  if (nEventsWithAdditionalFake >= eventsWithAdditionalFake.GetSize()) eventsWithAdditionalFake.Set(10*eventsWithAdditionalFake.GetSize());
245  eventsWithAdditionalFake[nEventsWithAdditionalFake++] = iEvent;
246  nTotAdditionalTracks += nAdditionalTracks;
247  hNumberOfAdditionalTracks->Fill(nAdditionalTracks);
248  }
249 
250  }
251 
252  delete fakeTrackStore;
253 
254  } // end of loop over events
255 
256  // total number of connected tracks
257  nTotConnectedTracks = hFractionOfConnectedClusters->GetEntries();
258 
259  // plot results
260  TCanvas cFakesSummary("cFakesSummary","cFakesSummary",900,600);
261  cFakesSummary.Divide(3,2);
262  cFakesSummary.cd(1);
263  TVirtualPad* pad1 = cFakesSummary.GetPad(1);
264  pad1->Divide(0,2);
265  pad1->cd(1);
266  pad1->GetPad(1)->SetLogy();
267  hNumberOfClusters->Draw();
268  hNumberOfClusters->SetMinimum(0.5);
269  hNumberOfClustersM->Draw("same");
270  hNumberOfClustersM->SetLineColor(4);
271  hNumberOfClustersF->Draw("same");
272  hNumberOfClustersF->SetLineColor(2);
273  hNumberOfClustersF->SetFillColor(2);
274  hNumberOfClustersF->SetFillStyle(3017);
275  pad1->cd(2);
276  pad1->GetPad(2)->SetLogy();
277  hNumberOfChamberHit->Draw();
278  hNumberOfChamberHit->SetMinimum(0.5);
279  hNumberOfChamberHitM->Draw("same");
280  hNumberOfChamberHitM->SetLineColor(4);
281  hNumberOfChamberHitF->Draw("same");
282  hNumberOfChamberHitF->SetLineColor(2);
283  hNumberOfChamberHitF->SetFillColor(2);
284  hNumberOfChamberHitF->SetFillStyle(3017);
285  cFakesSummary.cd(2);
286  cFakesSummary.GetPad(2)->SetLogy();
287  hChi2PerDof->Draw();
288  hChi2PerDof->SetMinimum(0.5);
289  hChi2PerDofM->Draw("same");
290  hChi2PerDofM->SetLineColor(4);
291  hChi2PerDofF->Draw("same");
292  hChi2PerDofF->SetLineColor(2);
293  hChi2PerDofF->SetFillColor(2);
294  hChi2PerDofF->SetFillStyle(3017);
295  cFakesSummary.cd(3);
296  cFakesSummary.GetPad(3)->SetLogy();
297  hP->Draw();
298  hP->SetMinimum(0.5);
299  hPM->Draw("same");
300  hPM->SetLineColor(4);
301  hPF->Draw("same");
302  hPF->SetLineColor(2);
303  hPF->SetFillColor(2);
304  hPF->SetFillStyle(3017);
305  cFakesSummary.cd(4);
306  cFakesSummary.GetPad(4)->SetLogy();
307  hPt->Draw();
308  hPt->SetMinimum(0.5);
309  hPtM->Draw("same");
310  hPtM->SetLineColor(4);
311  hPtF->Draw("same");
312  hPtF->SetLineColor(2);
313  hPtF->SetFillColor(2);
314  hPtF->SetFillStyle(3017);
315  cFakesSummary.cd(5);
316  cFakesSummary.GetPad(5)->SetLogy();
317  hEta->Draw();
318  hEta->SetMinimum(0.5);
319  hEtaM->Draw("same");
320  hEtaM->SetLineColor(4);
321  hEtaF->Draw("same");
322  hEtaF->SetLineColor(2);
323  hEtaF->SetFillColor(2);
324  hEtaF->SetFillStyle(3017);
325  cFakesSummary.cd(6);
326  cFakesSummary.GetPad(6)->SetLogy();
327  hPhi->Draw();
328  hPhi->SetMinimum(0.5);
329  hPhiM->Draw("same");
330  hPhiM->SetLineColor(4);
331  hPhiF->Draw("same");
332  hPhiF->SetLineColor(2);
333  hPhiF->SetFillColor(2);
334  hPhiF->SetFillStyle(3017);
335 
336  // save results
337  histoFile->cd();
338  histoFile->Write();
339  cFakesSummary.Write();
340  histoFile->Close();
341 
342  // print results
343  cout << endl;
344  cout << "- Number of reconstructible tracks: " << nReconstructibleTracks << endl;
345  cout << "- Number of reconstructed tracks: " << nReconstructedTracks << endl;
346  cout << "- Number of matched tracks: " << nTotMatchedTracks << endl;
347  cout << " (including " << nTotTracksReconstructedYet << " track(s) matched with a TrackRef that is not reconstructible";
348  if (nTotTracksReconstructedYet > 0) {
349  for(Int_t i=0; i<nEventsWithTrackReconstructedYet; i++){
350  if (i==0) cout << " (eventID = " << eventsWithTrackReconstructedYet[i];
351  else cout << ", " << eventsWithTrackReconstructedYet[i];
352  }
353  cout << "))" << endl;
354  } else cout << ")" << endl;
355  cout << "- Number of fake tracks: " << nTotFakeTracks << endl;
356  cout << " (including " << nTotConnectedTracks << " track(s) still connected to a reconstructible one)" << endl;
357  cout << " (including " << nTotAdditionalTracks << " additional track(s) (compared to the number of expected ones))" << endl;
358  cout << "- Number of events with fake track(s): " << nEventsWithFake;
359  if (nEventsWithFake > 0) {
360  for(Int_t i=0; i<nEventsWithFake; i++){
361  if (i==0) cout << " (eventID = " << eventsWithFake[i];
362  else cout << ", " << eventsWithFake[i];
363  }
364  cout << ")" << endl;
365  } else cout << endl;
366  cout << " (including " << nEventsWithAdditionalFake << " events with additional track(s)";
367  if (nEventsWithAdditionalFake > 0) {
368  for(Int_t i=0; i<nEventsWithAdditionalFake; i++){
369  if (i==0) cout << " (eventID = " << eventsWithAdditionalFake[i];
370  else cout << ", " << eventsWithAdditionalFake[i];
371  }
372  cout << "))" << endl;
373  } else cout << ")" << endl;
374  cout << endl;
375  cout << "REMINDER: results are relevent provided that you use the same recoParams as for the reconstruction" << endl;
376  cout << endl;
377 
378 }
379 
380 //-----------------------------------------------------------------------
381 Int_t RemoveConnectedFakes(AliMUONVTrackStore &fakeTrackStore, AliMUONVTrackStore &trackRefStore,
382  Bool_t useLabel, TH1F &hFractionOfConnectedClusters)
383 {
388 
389  Int_t nFreeMissingTracks = 0;
390 
391  // loop over trackRefs
392  TIter next(trackRefStore.CreateIterator());
393  AliMUONTrack* trackRef;
394  while ( ( trackRef = static_cast<AliMUONTrack*>(next()) ) ) {
395 
396  // skip not reconstructible trackRefs
397  if (!trackRef->IsValid(requestedStationMask, request2ChInSameSt45)) continue;
398 
399  Int_t label = trackRef->GetUniqueID();
400 
401  // look for the most connected fake track
402  AliMUONTrack *connectedFake = 0x0;
403  Double_t fractionOfConnectedClusters = 0.;
404  TIter next2(fakeTrackStore.CreateIterator());
405  AliMUONTrack* fakeTrack;
406  while ( ( fakeTrack = static_cast<AliMUONTrack*>(next2()) ) ) {
407 
408  // get the number of connected clusters
409  Int_t nConnectedClusters = 0;
410  if (useLabel) { // by using the MC label
411  for (Int_t iCl = 0; iCl < fakeTrack->GetNClusters(); iCl++)
412  if (((AliMUONTrackParam*) fakeTrack->GetTrackParamAtCluster()->UncheckedAt(iCl))->GetClusterPtr()->GetMCLabel() == label)
413  nConnectedClusters++;
414  } else { // by comparing cluster/TrackRef positions
415  Bool_t compTrack[10];
416  nConnectedClusters = fakeTrack->FindCompatibleClusters(*trackRef, sigmaCut, compTrack);
417  }
418 
419  // skip non-connected fake tracks
420  if (nConnectedClusters == 0) continue;
421 
422  // check if it is the most connected fake track
423  Double_t f = ((Double_t)nConnectedClusters) / ((Double_t)fakeTrack->GetNClusters());
424  if (f > fractionOfConnectedClusters) {
425  connectedFake = fakeTrack;
426  fractionOfConnectedClusters = f;
427  }
428 
429  }
430 
431  // remove the most connected fake track
432  if (connectedFake) {
433  hFractionOfConnectedClusters.Fill(fractionOfConnectedClusters);
434  fakeTrackStore.Remove(*connectedFake);
435  } else nFreeMissingTracks++;
436 
437  }
438 
439  return nFreeMissingTracks;
440 
441 }
442 
Double_t P() const
Base class of a track container.
Int_t GetNClusters() const
return the number of clusters attached to the track
Definition: AliMUONTrack.h:46
void ImproveTracks(Bool_t flag)
switch on/off the track improvement and keep the default cut in sigma to apply on cluster (local chi2...
Double_t Eta() const
AliESDMuonTrack * GetMuonTrack(Int_t i)
void MakeMoreTrackCandidates(Bool_t flag)
switch on/off the building of track candidates starting from 1 cluster in each of the stations 4 and ...
UChar_t GetNHit(void) const
Double_t GetSigmaCutForTracking() const
return the cut in sigma to apply on cluster (local chi2) and track (global chi2) during tracking ...
Class to describe the MUON tracks in the Event Summary Data class.
Int_t NumberOfEvents() const
Return the total number of events.
virtual TIterator * CreateIterator() const =0
Create an iterator to loop over tracks.
static void SetClassDebugLevel(const char *className, Int_t level)
Definition: AliLog.cxx:513
void MUONFakes(Bool_t useLabel=kFALSE, Int_t FirstEvent=0, Int_t LastEvent=-1, const TString esdFileName="AliESDs.root", const TString SimDir="./generated/", const TString ocdbPath="local://$ALICE_ROOT/OCDB")
Definition: MUONFakes.C:45
Int_t GetRunNumber()
Return the run number of the current ESD event.
virtual AliMUONTrack * Remove(AliMUONTrack &track)=0
Remove a track from the store.
virtual Int_t GetSize() const =0
The number of objects stored.
TROOT * gROOT
Float_t p[]
Definition: kNNTest.C:133
Bool_t IsInMuonClusterMap(Int_t chamber) const
Track parameters in ALICE dimuon spectrometer.
Class with MUON reconstruction parameters.
Bool_t request2ChInSameSt45
Definition: MUONFakes.C:38
Bool_t ContainTrackerData() const
Bool_t IsValid(UInt_t requestedStationMask, Bool_t request2ChInSameSt45=kFALSE)
Utility class to check reconstruction.
AliMUONVTrackStore * TrackRefs(Int_t event)
Return reference muon tracks.
Int_t FindCompatibleClusters(const AliMUONTrack &track, Double_t sigma2Cut, Bool_t compatibleCluster[10]) const
Double_t Phi() const
Int_t GetNumberOfMuonTracks() const
Definition: AliESDEvent.h:543
static AliMUONVTrackStore * NewTrackStore()
Double_t Pt() const
Double_t GetChi2(void) const
static AliMUONTrack * FindCompatibleTrack(AliMUONTrack &track, AliMUONVTrackStore &trackStore, Int_t &nMatchClusters, Bool_t useLabel=kFALSE, Double_t sigmaCut=10.)
Return the track from the store matched with the given track (or 0x0) and the fraction of matched clu...
void SetRun(Int_t run)
TF1 * f
Definition: interpolTest.C:21
void SetDefaultStorage(const char *dbString)
AliMUONVTrackStore * ReconstructedTracks(Int_t event, Bool_t refit=kTRUE)
Return the list of reconstructed tracks.
UInt_t requestedStationMask
Definition: MUONFakes.C:37
void RequestStation(Int_t iSt, Bool_t flag)
request or not at least one cluster in the station to validate the track
Reconstructed track in ALICE dimuon spectrometer.
Definition: AliMUONTrack.h:24
Double_t GetSigmaCutForImprovement() const
return the cut in sigma to apply on cluster (local chi2) during track improvement ...
virtual Bool_t Add(TObject *object)
Add an object, if of the right type.
Int_t GetNClusters() const
static AliCDBManager * Instance(TMap *entryCache=NULL, Int_t run=-1)
virtual TObject * FindObject(const char *name) const
Find an object by name.
const AliESDEvent * GetESDEvent() const
Return the reconstructed data of current event.
AliMUONRecoParam * LoadRecoParam()
Definition: AliMUONCDB.cxx:535
Int_t RemoveConnectedFakes(AliMUONVTrackStore &fakeTrackStore, AliMUONVTrackStore &trackRefStore, Bool_t useLabel, TH1F &hFractionOfConnectedClusters)
Definition: MUONFakes.C:381
Double_t sigmaCut
Definition: MUONFakes.C:39