]>
Commit | Line | Data |
---|---|---|
ffca499d | 1 | /** |
2 | * @file ForwardAODConfig.C | |
3 | * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk> | |
4 | * @date Wed Mar 23 13:56:02 2011 | |
5 | * | |
6 | * @brief | |
7 | * | |
bd6f5206 | 8 | * @ingroup pwglf_forward_scripts_tasks |
ffca499d | 9 | * |
10 | */ | |
9d05ffeb | 11 | /** |
12 | * Configuration script for forward multiplicity task. | |
13 | * | |
14 | * You can copy this to your working directory or to some other | |
e1f47419 | 15 | * directory up-front in your ROOT macro path, and edit it to suit your |
9d05ffeb | 16 | * needs. |
17 | * | |
290052e7 | 18 | * @param task Task to configure |
19 | * | |
bd6f5206 | 20 | * @ingroup pwglf_forward_aod |
9d05ffeb | 21 | */ |
22 | void | |
23 | ForwardAODConfig(AliForwardMultiplicityBase* task) | |
24 | { | |
25 | if (!task) return; | |
26 | ||
27 | Info("ForwardAODConfig", "Setting up task %s (%p)", task->GetName(), task); | |
e1f47419 | 28 | |
29 | // --- General parameters ------------------------------------------ | |
9d05ffeb | 30 | // Whether to enable low flux specific code |
31 | task->SetEnableLowFlux(kFALSE); | |
e1f47419 | 32 | |
344e07a5 | 33 | // --- Check for MC ------------------------------------------------ |
5bb5d1f6 | 34 | // Would like to use dynamic cast but CINT interprets that as a |
35 | // static cast - sigh! | |
344e07a5 | 36 | Bool_t mc = (task->IsA()==AliForwardMCMultiplicityTask::Class()); |
37 | ||
38 | // --- Cuts -------------------------------------------------------- | |
39 | // Note, the absolute lowest signal to consider - ever - | |
40 | // irrespective of MC or real data, is 0.15. Signals below this | |
41 | // will contain remenants of the pedestal (yes, the width of the | |
42 | // pedestal is small, but there are many _many_ channels with only | |
43 | // pedestal value in them, so the absolute number of high-value | |
44 | // pedestal signals is large - despite the low probablity). | |
45 | AliFMDMultCuts cSharingLow(AliFMDMultCuts::kFixed,0.15); | |
0ccdab7b | 46 | AliFMDMultCuts cSharingHigh(AliFMDMultCuts::kLandauSigmaWidth,1); |
47 | AliFMDMultCuts cDensity(AliFMDMultCuts::kLandauSigmaWidth,1); | |
1bd766f2 | 48 | |
e1f47419 | 49 | // --- Event inspector --------------------------------------------- |
9d05ffeb | 50 | // Set the number of SPD tracklets for which we consider the event a |
51 | // low flux event | |
52 | task->GetEventInspector().SetLowFluxCut(1000); | |
53 | // Set the maximum error on v_z [cm] | |
54 | task->GetEventInspector().SetMaxVzErr(0.2); | |
4f3f98b8 | 55 | // Least number of constributors to 2nd pile-up vertex -was 3 |
56 | task->GetEventInspector().SetMinPileupContributors(5); | |
e6463868 | 57 | // Least distance from primary to 2nd pile-up vertex (cm) |
58 | task->GetEventInspector().SetMinPileupDistance(.8); | |
59 | // V0-AND triggered events flagged as NSD | |
66cf95f2 | 60 | task->GetEventInspector().SetUseV0AndForNSD(false); |
0ccdab7b | 61 | // Set the kind of vertex to look for. Can be one of |
62 | // | |
63 | // - kNormal: SPD vertex | |
64 | // - kpA2012: Selection tuned for 2012 pA data | |
65 | // - kpA2013: Selection tuned for 2013 pA data | |
66 | // - kPWGUD: Selection used by 'first physics' | |
67 | // - kDisplaced: Satellite collisions, with kNormal fall-back | |
68 | // | |
69 | task->GetEventInspector().SetVertexMethod(AliFMDEventInspector::kNormal); | |
5934a3e3 | 70 | // Which centrality estimator to use |
71 | task->GetEventInspector().SetCentralityMethod("V0M"); | |
4f3f98b8 | 72 | // How to tag events as pile-up. Bit pattern of |
73 | // | |
74 | // - 0x1: SPD multi-vertex | |
75 | // - 0x2: Track multi-vertex | |
76 | // - 0x4: Out-of-bunch | |
77 | // | |
78 | task->GetEventInspector().SetPileupFlags(0x7); | |
e1f47419 | 79 | |
0ccdab7b | 80 | // --- ESD fixer --------------------------------------------------- |
81 | // Sets the noise factor that was used during reconstruction. If | |
82 | // this is set to 4 or more, then this correction will be disabled. | |
83 | task->GetESDFixer().SetRecoNoiseFactor(1); | |
84 | // IF the noise correction is bigger than this, flag strip as dead | |
85 | task->GetESDFixer().SetMaxNoiseCorrection(0.05); | |
86 | // Sets whether to recalculate eta | |
87 | task->GetESDFixer().SetRecalculateEta(false); | |
8449e3e0 | 88 | // If true, consider AliESDFMD::kInvalidMult as a zero signal. This |
89 | // has the unfortunate side effect, that we cannot use the | |
90 | // on-the-fly calculation of the phi acceptance. | |
91 | // | |
92 | // *IMPORTANT* | |
93 | // | |
94 | // Before revision 43711 of AliFMDReconstructor, all strips with no | |
95 | // signal where set to kInvalidMult. From revision 43711 (Release | |
96 | // 4-19-Rev-09) empty strips that are not marked as bad have a | |
97 | // signal of 0 (zero). That means, that for any reconstruction done | |
98 | // with releases prior to 4-19-Rev-09 this flag _must_ be defined as | |
99 | // true. | |
100 | // | |
101 | // The unfortunate side effect mentioned above is especially cruel | |
102 | // in this case, since we would benefit a lot from this setting for | |
103 | // that data. However, one can add dead strips here using | |
104 | // AliFMDSharingFilter::AddDeadStrip or | |
105 | // AliFMDSharingFilter::AddDeadRegion to remedy the situation, since | |
106 | // strips added explicitly here are always ignored. In the future, | |
107 | // the acceptance maker script should generate the list | |
108 | // automaticallu. | |
109 | // | |
110 | // LHC10c-900Gev is effected up-to and including pass3 | |
111 | // LHC10c-7TeV is effected up-to and including pass2 | |
112 | // LHC10c-CPass0 should be OK, but has limited statistics | |
113 | // LHC10c_11a_FMD should be OK, but has few runs | |
0ccdab7b | 114 | task->GetESDFixer().SetInvalidIsEmpty(false); |
5934a3e3 | 115 | // Dead region in FMD2i |
0ccdab7b | 116 | task->GetESDFixer().AddDeadRegion(2, 'I', 16, 17, 256, 511); |
bfab35d9 | 117 | // One can add extra dead strips from a script like |
118 | // | |
119 | // void deadstrips(AliFMDSharingFilter* filter) | |
120 | // { | |
121 | // filter->AddDead(...); | |
122 | // // ... and so on | |
123 | // } | |
124 | // | |
125 | // and then do here | |
126 | // | |
0ccdab7b | 127 | // task->GetESDFixer().AddDead("deadstrips.C"); |
128 | ||
129 | // --- Sharing filter ---------------------------------------------- | |
130 | // If the following is set to true, then the merging of shared | |
131 | // signals is disabled completely | |
132 | // task->GetSharingFilter().SetMergingDisabled(false); | |
133 | // Enable use of angle corrected signals in the algorithm | |
134 | task->GetSharingFilter().SetUseAngleCorrectedSignals(true); | |
135 | // Ignore the ESD information when angle correcting. | |
136 | // | |
137 | // *IMPORTANT* | |
138 | // | |
139 | // This is to counter a known issue with AliESDFMD with ClassDef | |
140 | // version < 4, where the angle correction flag is incorrectly set. | |
141 | // A fix is coming to AliESDFMD to handle it directly in the class. | |
142 | // Only set the flag below to true if you know it to be necessary for | |
143 | // your data set. | |
144 | task->GetSharingFilter().SetIgnoreESDWhenAngleCorrecting(false); | |
145 | // Disable use of angle corrected signals in the algorithm | |
146 | task->GetSharingFilter().SetZeroSharedHitsBelowThreshold(false); | |
147 | // Whether to use simple merging algorithm | |
148 | task->GetSharingFilter().SetUseSimpleSharing(true); | |
149 | // Whether to allow for 3 strip hits - deprecated | |
150 | task->GetSharingFilter().SetAllow3Strips(false); | |
151 | // Set upper sharing cut | |
152 | task->GetSharingFilter().SetHCuts(cSharingHigh); | |
153 | // Enable use of angle corrected signals in the algorithm | |
154 | task->GetSharingFilter().SetLCuts(cSharingLow); | |
1bd766f2 | 155 | |
9b2f2e39 | 156 | // --- Density calculator ------------------------------------------ |
9d05ffeb | 157 | // Set the maximum number of particle to try to reconstruct |
5bb5d1f6 | 158 | task->GetDensityCalculator().SetMaxParticles(10); |
9d05ffeb | 159 | // Wet whether to use poisson statistics to estimate N_ch |
37079f20 | 160 | task->GetDensityCalculator().SetUsePoisson(true); |
5bb5d1f6 | 161 | // Set whether or not to include sigma in cut |
1bd766f2 | 162 | task->GetDensityCalculator().SetCuts(cDensity); |
e6463868 | 163 | // Set lumping (nEta,nPhi) |
164 | task->GetDensityCalculator().SetLumping(32,4); | |
1ff25622 | 165 | // Recalculate phi taking (x,y) offset of IP into account |
166 | task->GetDensityCalculator().SetRecalculatePhi(true); | |
81775aba | 167 | // Least acceptable quality of ELoss fits |
168 | task->GetDensityCalculator().SetMinQuality(8); | |
77f97e3f | 169 | // Set the maximum ratio of outlier bins to the total number of bins |
67a4bb96 CHC |
170 | // task->GetDensityCalculator().SetMaxOutliers(.10); |
171 | task->GetDensityCalculator().SetMaxOutliers(1.0);//Disable filter | |
77f97e3f CHC |
172 | // Set the maximum relative diviation between N_ch from Eloss and Poisson |
173 | task->GetDensityCalculator().SetOutlierCut(0.5); | |
56236b95 | 174 | // Set whether or not to use the phi acceptance |
175 | // AliFMDDensityCalculator::kPhiNoCorrect | |
176 | // AliFMDDensityCalculator::kPhiCorrectNch | |
177 | // AliFMDDensityCalculator::kPhiCorrectELoss | |
178 | task->GetDensityCalculator() | |
179 | .SetUsePhiAcceptance(AliFMDDensityCalculator::kPhiCorrectNch); | |
e1f47419 | 180 | |
181 | // --- Corrector --------------------------------------------------- | |
cec82c73 | 182 | // Whether to use the secondary map correction. By default we turn |
183 | // off secondary correction for normal data, and on for simulated | |
184 | // data. | |
185 | task->GetCorrections().SetUseSecondaryMap(mc); | |
bfab35d9 | 186 | // Whether to use the vertex bias correction (deprecated) |
9d05ffeb | 187 | task->GetCorrections().SetUseVertexBias(false); |
bfab35d9 | 188 | // Whether to use the acceptance correction from dead-strips (deprecated) |
5934a3e3 | 189 | task->GetCorrections().SetUseAcceptance(false); |
bfab35d9 | 190 | // Whether to use the merging efficiency correction (deprecated) |
9d05ffeb | 191 | task->GetCorrections().SetUseMergingEfficiency(false); |
e1f47419 | 192 | |
193 | // --- Histogram Collector ----------------------------------------- | |
9d05ffeb | 194 | // Set the number of extra bins (beyond the secondary map border) |
195 | task->GetHistCollector().SetNCutBins(2); | |
196 | // Set the correction cut, that is, when bins in the secondary map | |
197 | // is smaller than this, they are considered empty | |
198 | task->GetHistCollector().SetCorrectionCut(0.5); | |
e1f47419 | 199 | // How to calculate the value of overlapping bins. |
200 | // Possible values are | |
201 | // kStraightMean | |
202 | // kStraightMeanNoZero | |
203 | // kWeightedMean | |
204 | // kLeastError | |
bfab35d9 | 205 | // kSum |
206 | // kPreferInner | |
207 | // kPreferOuter | |
e1f47419 | 208 | task->GetHistCollector().SetMergeMethod(AliFMDHistCollector::kStraightMean); |
209 | // How to find the fiducial area of the secondary maps | |
210 | // Possible values are | |
211 | // kByCut Only bins larger that cut are trusted | |
212 | // kDistance Only bins that are more than half the size of it neighbors | |
213 | task->GetHistCollector().SetFiducialMethod(AliFMDHistCollector::kByCut); | |
8449e3e0 | 214 | // Additional diagnostics output - off by default |
0b7de667 | 215 | // |
216 | // If this option is enabled, then the summed per-vertex, per-ring | |
217 | // d2N/detadphi histograms will be stored in the output, as well as | |
218 | // copies of the secondary maps | |
344e07a5 | 219 | task->GetHistCollector().SetMakeBGHitMaps(false); |
0b7de667 | 220 | // |
221 | // If this option is enabled, then a 3D histogram will be made for | |
222 | // each ring, summing dN/deta for each centrality bin. | |
344e07a5 | 223 | task->GetHistCollector().SetMakeCentralitySums(false); |
e1f47419 | 224 | |
2b556440 | 225 | // --- Eventplane Finder ------------------------------------------- |
226 | task->GetEventPlaneFinder().SetUsePhiWeights(false); | |
227 | ||
8449e3e0 | 228 | // --- Ring AOD output --------------------------------------------- |
229 | // If set to true, then 5 additional branches will be created on the | |
230 | // output AOD - one for each FMD ring. The branches each contain a | |
231 | // TH2D object of the (primary) charged particle multiplicity per | |
232 | // (eta,phi)-bin in that event | |
344e07a5 | 233 | task->SetStorePerRing(false); |
8449e3e0 | 234 | |
9d05ffeb | 235 | // --- Set limits on fits the energy ------------------------------- |
81775aba | 236 | // DO NOT CHANGE THESE UNLESS YOU KNOW WHAT YOU ARE DOING |
9d05ffeb | 237 | // Maximum relative error on parameters |
81775aba | 238 | // AliFMDCorrELossFit::ELossFit::fgMaxRelError = .12; |
9d05ffeb | 239 | // Least weight to use |
81775aba | 240 | // AliFMDCorrELossFit::ELossFit::fgLeastWeight = 1e-5; |
9d05ffeb | 241 | // Maximum value of reduced chi^2 |
81775aba | 242 | // AliFMDCorrELossFit::ELossFit::fgMaxChi2nu = 10; |
8449e3e0 | 243 | |
244 | // --- Debug ------------------------------------------------------- | |
245 | // Set the overall debug level (1: some output, 3: a lot of output) | |
246 | // task->SetDebug(0); | |
247 | // Set the debug level of a single algorithm | |
248 | // task->GetSharingFilter().SetDebug(3); | |
9d05ffeb | 249 | } |
250 | // | |
251 | // EOF | |
252 | // |