]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muondep/AliAnalysisTaskMuonRefit.h
move track selection differences from AOD and ESD to corresponding reader
[u/mrichter/AliRoot.git] / PWG / muondep / AliAnalysisTaskMuonRefit.h
CommitLineData
d0cf54cd 1#ifndef ALIANALYSISTASKMUONREFIT_H
2#define ALIANALYSISTASKMUONREFIT_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
27de2dfb 6/* $Id$ */
7
d0cf54cd 8/// \ingroup muondep
9/// \class AliAnalysisTaskMuonRefit
10/// \brief intermediate task for refitting
11//Author: Philippe Pillot - SUBATECH Nantes
12
13#include <TString.h>
d0cf54cd 14#include "AliAnalysisTaskSE.h"
15
16class AliMUONVCluster;
17class AliMUONGeometryTransformer;
18class AliMUONESDInterface;
19class AliMUONRefitter;
07f39716 20class AliMUONTriggerCircuit;
21class AliMUONTrackHitPattern;
d0cf54cd 22
23class AliAnalysisTaskMuonRefit : public AliAnalysisTaskSE {
24public:
25
26 AliAnalysisTaskMuonRefit();
27 AliAnalysisTaskMuonRefit(const char *name);
28 virtual ~AliAnalysisTaskMuonRefit();
29
30 /// Set location of the default OCDB storage (if not set use "raw://")
31 void SetDefaultStorage(const char* ocdbPath) { fDefaultStorage = ocdbPath; }
32
33 // reset the cluster resolution (by default use the one set in the recoParam)
34 void ResetClusterResolution(Int_t chId, Double_t valNB, Double_t valB);
35 void ResetClusterResolution(Double_t valNB[10], Double_t valB[10]);
36
37 /// Enable track improvement (clusters/tracks that do not pass the sigma cut will be removed)
38 /// If sigmaCut < 0: use the one set in the recoParam
39 /// By default the "improveTrack" flag and the sigma cut are taken from the recoParam
40 void ImproveTracks(Bool_t flag = kTRUE, Double_t sigmaCut = -1.) {fImproveTracks = flag; fSigmaCut = sigmaCut;}
41
42 /// Set the sigma cut for tracker/trigger track matching (by default use the one set in the recoParam)
43 void SetSigmaCutForTrigger(Double_t val) {fSigmaCutForTrigger = val;}
44
c272f7dd 45 /// Set the OCDB path to the alignment file used in the reco (if not set use default storage)
46 void SetAlignStorage(const char* ocdbPath) { fOldAlignStorage = ocdbPath; }
47
07f39716 48 // set the OCDB path to the alignment files to be used to realign the clusters before refitting
d0cf54cd 49 void ReAlign(const char* oldAlignStorage = 0x0, const char* newAlignStorage = "");
50
07f39716 51 // Set the magnetic field map to be used during refitting
52 void SetFieldPath(const char* field) { fField = field; }
53
54 /// set the flag to remove mono-cathod clusters (either considering all the pads or only the ones directly below)
55 void RemoveMonoCathodClusters(Bool_t flag = kTRUE, Bool_t checkAllPads = kTRUE) {fRemoveMonoCathCl = flag; fCheckAllPads = checkAllPads;}
56
57 /// Tag the refitted tracks rejected by improvement (or no longer matched) instead of removing them (or the trigger part)
58 /// Eventually keep the old track parameters if the refitted track no longer match the trigger
59 void TagBadTracks(Bool_t tag = kTRUE, Bool_t keep = kTRUE) {fTagBadTracks = tag; fKeepOldParam = keep;}
60
d0cf54cd 61 virtual void UserCreateOutputObjects();
62 virtual void UserExec(Option_t *);
63 virtual void NotifyRun();
64 virtual void Terminate(Option_t *);
65
66private:
67
68 /// Not implemented
69 AliAnalysisTaskMuonRefit(const AliAnalysisTaskMuonRefit& rhs);
70 /// Not implemented
71 AliAnalysisTaskMuonRefit& operator = (const AliAnalysisTaskMuonRefit& rhs);
72
73 void ModifyCluster(AliMUONVCluster& cl);
07f39716 74 void CheckPads(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const;
75 void CheckPadsBelow(AliMUONVCluster *cl, Bool_t &hasBending, Bool_t &hasNonBending) const;
76 Bool_t SetMagField() const;
d0cf54cd 77
78private:
79
80 Double_t fClusterResNB[10]; ///< cluster resolution in non-bending direction
81 Double_t fClusterResB[10]; ///< cluster resolution in bending direction
82
07f39716 83 TString fDefaultStorage; ///< location of the default OCDB storage
84 Bool_t fImproveTracks; ///< enable track improvement
85 Double_t fSigmaCut; ///< sigma cut for track improvement
86 Double_t fSigmaCutForTrigger; ///< sigma cut for tracker/trigger track matching
87 Bool_t fReAlign; ///< flag telling wether to re-align the spectrometer or not before refitting
88 TString fOldAlignStorage; ///< location of the OCDB storage where to find old MUON/Align/Data (use the default one if empty)
89 TString fNewAlignStorage; ///< location of the OCDB storage where to find new MUON/Align/Data (use the default one if empty)
90 AliMUONGeometryTransformer *fOldGeoTransformer; //!< geometry transformer used to recontruct the present data
91 AliMUONGeometryTransformer *fNewGeoTransformer; //!< new geometry transformer containing the new alignment to be applied
92 TString fField; ///< magnetic field map to be used during refitting
93 Bool_t fRemoveMonoCathCl; ///< remove or not the mono-cathod clusters
94 Bool_t fCheckAllPads; ///< use all pads or only the ones directly below the cluster to look for mono-cathods
95 Bool_t fTagBadTracks; ///< tag the bad tracks instead of removing them
96 Bool_t fKeepOldParam; ///< keep old track parameters if the refitted track no longer match the trigger
97
98 AliMUONTriggerCircuit *fTriggerCircuit; //!< trigger circuit
99 AliMUONESDInterface *fESDInterface; //!< esd interface to recover muon objects
100 AliMUONRefitter *fRefitter; //!< refitter object
101 AliMUONTrackHitPattern *fTrackHitPattern; //!< object to perform the tracker/trigger track matching
d0cf54cd 102
07f39716 103 ClassDef(AliAnalysisTaskMuonRefit, 2); // track refitter
d0cf54cd 104};
105
106//________________________________________________________________________
107inline void AliAnalysisTaskMuonRefit::ResetClusterResolution(Int_t chId, Double_t valNB, Double_t valB)
108{
109 /// set chamber non-bending and bending resolutions
09c18f72 110 if (chId < 0 || chId >= 10) return;
d0cf54cd 111 fClusterResNB[chId] = valNB;
112 fClusterResB[chId] = valB;
113}
114
115//________________________________________________________________________
116inline void AliAnalysisTaskMuonRefit::ResetClusterResolution(Double_t valNB[10], Double_t valB[10])
117{
118 /// set chambers non-bending and bending resolutions
09c18f72 119 for (Int_t i = 0; i < 10; i++) {
d0cf54cd 120 fClusterResNB[i] = valNB[i];
121 fClusterResB[i] = valB[i];
122 }
123}
124
125//________________________________________________________________________
126inline void AliAnalysisTaskMuonRefit::ReAlign(const char* oldAlignStorage, const char* newAlignStorage)
127{
128 /// Set the flag to activate the re-alignment and the specific storage where to find the old/new alignment data.
129 /// If oldAlignStorage = 0x0 we assume the spectrometer was not aligned before (default geometry)
130 /// If old(new)AlignStorage = "" we assume the old(new) alignment data are in the default storage
131 if (oldAlignStorage) fOldAlignStorage = oldAlignStorage;
132 else fOldAlignStorage = "none";
133 fNewAlignStorage = newAlignStorage;
134 fReAlign = kTRUE;
135}
136
137#endif
138