]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/analysis2/AliDisplacedVertexSelection.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliDisplacedVertexSelection.cxx
CommitLineData
65abd48b 1#include "AliDisplacedVertexSelection.h"
bfab35d9 2// #include "AliAnalysisManager.h"
3#include "AliMCEvent.h"
4#include "AliMultiplicity.h"
5// #include "AliMCEventHandler.h"
6#include "AliHeader.h"
7#include "AliGenEventHeader.h"
65abd48b 8#include <iostream>
9#include <TROOT.h>
8449e3e0 10#include <TH1D.h>
bfab35d9 11#include <TH2D.h>
65abd48b 12#include "AliESDEvent.h"
13#include "AliESDZDC.h"
14ClassImp(AliDisplacedVertexSelection)
15#if 0
16; // This is for Emacs
17#endif
18
19//____________________________________________________________________
20AliDisplacedVertexSelection::AliDisplacedVertexSelection()
bfab35d9 21 : TObject(),
22 fDeltaTdc(0),
23 fSumTdc(0),
24 fZdcEnergy(0),
25 fZemEnergy(0),
26 fCorrelationZemZdc(0),
27 fCorrelationSumDelta(0),
8449e3e0 28 fVertexZ(kInvalidVtxZ),
29 fCent(100),
30 fHVertexZ(0),
bfab35d9 31 fHCent(0),
32 fMC(kFALSE)
65abd48b 33{
34}
35//____________________________________________________________________
36AliDisplacedVertexSelection::AliDisplacedVertexSelection(const AliDisplacedVertexSelection& o)
bfab35d9 37 : TObject(o),
38 fDeltaTdc(o.fDeltaTdc),
39 fSumTdc(o.fSumTdc),
40 fZdcEnergy(o.fZdcEnergy),
41 fZemEnergy(o.fZemEnergy),
42 fCorrelationZemZdc(o.fCorrelationZemZdc),
43 fCorrelationSumDelta(o.fCorrelationSumDelta),
8449e3e0 44 fVertexZ(kInvalidVtxZ),
45 fCent(100),
46 fHVertexZ(0),
bfab35d9 47 fHCent(0),
48 fMC(kFALSE)
65abd48b 49{
50}
51//____________________________________________________________________
52AliDisplacedVertexSelection&
53AliDisplacedVertexSelection::operator=(const AliDisplacedVertexSelection& o)
54{
bfab35d9 55 if (&o == this) return *this;
56
57 fDeltaTdc = o.fDeltaTdc;
58 fSumTdc = o.fSumTdc;
59 fZdcEnergy = o.fZdcEnergy;
60 fZemEnergy = o.fZemEnergy;
61 fCorrelationZemZdc = o.fCorrelationZemZdc;
62 fCorrelationSumDelta = o.fCorrelationSumDelta;
63 fMC = o.fMC;
64
65abd48b 65 return *this;
66}
67
68//____________________________________________________________________
69void
8449e3e0 70AliDisplacedVertexSelection::SetupForData(TList* l,
bfab35d9 71 const char* /* name*/,
72 Bool_t mc)
65abd48b 73{
bfab35d9 74 fMC = mc;
75
8449e3e0 76 TList* out = new TList;
77 out->SetName("displacedVertex");
78 out->SetOwner();
79 l->Add(out);
80
81 Double_t dVz = 37.5;
82 Double_t vzMin = (-kMaxK-.5) * dVz;
83 Double_t vzMax = (+kMaxK+.5) * dVz;
84
85 fHVertexZ = new TH1D("vertexZ", "Interaction point Z",
86 2*kMaxK+1, vzMin, vzMax);
87 fHVertexZ->SetXTitle("IP_{z} [cm]");
88 fHVertexZ->SetYTitle("events");
89 fHVertexZ->SetDirectory(0);
90 fHVertexZ->SetFillColor(kRed+1);
91 fHVertexZ->SetFillStyle(3001);
92 out->Add(fHVertexZ);
93
94 Int_t nCent = 6;
95 Double_t bCent[] = { 0, 5, 10, 20, 30, 40, 100 };
96 fHCent = new TH1D("cent", "Centrality", nCent, bCent);
97 fHCent->SetXTitle("Centrality [%]");
98 fHCent->SetYTitle("events");
99 fHCent->SetDirectory(0);
100 fHCent->SetFillColor(kBlue+1);
101 fHCent->SetFillStyle(3001);
102 out->Add(fHCent);
103
bfab35d9 104 Int_t nDeltaT = 2000;
105 Double_t minDeltaT = -250;
106 Double_t maxDeltaT = +250;
107 fDeltaTdc = new TH1D("DeltaTdc","#DeltaTDC",
108 nDeltaT,minDeltaT,maxDeltaT);
109 fDeltaTdc->SetXTitle("#DeltaTDC");
110 fDeltaTdc->SetDirectory(0);
111 out->Add(fDeltaTdc);
112
113 Int_t nSumT = nDeltaT;
114 Double_t minSumT = minDeltaT;
a6cd6718 115 Double_t maxSumT = maxDeltaT;
bfab35d9 116 fSumTdc = new TH1D("SumTdc","#sumTDC",nSumT,minSumT,maxSumT);
117 fSumTdc->SetXTitle("#sumTDC");
118 fSumTdc->SetDirectory(0);
119 out->Add(fSumTdc);
120
121 Int_t nZdcE = 10000;
122 Double_t minZdcE = 0;
123 Double_t maxZdcE = 200000;
124 fZdcEnergy = new TH1D("ZDCEnergy","E_{ZDC}",nZdcE,minZdcE,maxZdcE);
125 fZdcEnergy->SetXTitle("E_{ZDC}");
126 fZdcEnergy->SetDirectory(0);
127 out->Add(fZdcEnergy);
128
129 Int_t nZemE = 1000;
130 Double_t minZemE = -100;
131 Double_t maxZemE = 2900;
132 fZemEnergy = new TH1D("ZEMEnergy","E_{ZEM}",nZemE,minZemE,maxZemE);
133 fZemEnergy->SetXTitle("E_{ZEM}");
134 fZemEnergy->SetDirectory(0);
135 out->Add(fZemEnergy);
136
137 fCorrelationZemZdc = new TH2D("corrZEMZDC","E_{ZEM} vs E_{ZDC}",
138 nZemE, minZemE, maxZemE,
139 nZdcE, minZdcE, maxZdcE);
140 fCorrelationZemZdc->SetXTitle("E_{ZEM}");
141 fCorrelationZemZdc->SetYTitle("E_{ZDC}");
142 fCorrelationZemZdc->SetDirectory(0);
143 out->Add(fCorrelationZemZdc);
144
145 fCorrelationSumDelta = new TH2D("corrSumDelta","#sumTDC vs #DeltaTDC",
146 nSumT, minSumT, maxSumT,
147 nDeltaT, minDeltaT, maxDeltaT);
148 fCorrelationSumDelta->SetXTitle("#sum TDC");
149 fCorrelationSumDelta->SetYTitle("#DeltaTDC");
150 fCorrelationSumDelta->SetDirectory(0);
151 out->Add(fCorrelationSumDelta);
152
65abd48b 153}
bfab35d9 154
65abd48b 155
156//____________________________________________________________________
157void
158AliDisplacedVertexSelection::Print(Option_t*) const
159{
6ab100ec 160#if 0
65abd48b 161 char ind[gROOT->GetDirLevel()+1];
162 for (Int_t i = 0; i < gROOT->GetDirLevel(); i++) ind[i] = ' ';
163 ind[gROOT->GetDirLevel()] = '\0';
164 std::cout << std::boolalpha
165 << std::noboolalpha << std::endl;
6ab100ec 166#endif
65abd48b 167}
241cca4d 168
bfab35d9 169//____________________________________________________________________
170Float_t
171AliDisplacedVertexSelection::GetZemCorr(Int_t k, Bool_t minusminus) const
172{
bc31b177 173 if (-kMaxK > k || k > kMaxK) return 0;
bfab35d9 174
175 // Corrections for magnetic fields
176 const Float_t kPlusPlus[21] = { 0.6840,0.7879,0.8722,
177 0.9370,0.9837,1.0137,
178 1.0292,1.0327,1.0271,
179 1.0152,1.0000,0.9844,
180 0.9714,0.9634,0.9626,
181 0.9708,0.9891,1.0181,
182 1.0574,1.1060,1.1617};
183 const Float_t kMoinsMoins[21] = { 0.7082,0.8012,0.8809,
184 0.9447,0.9916,1.0220,
185 1.0372,1.0395,1.0318,
186 1.0174,1.0000,0.9830,
187 0.9699,0.9635,0.9662,
188 0.9794,1.0034,1.0371,
189 1.0782,1.1224,1.1634};
190
191 // MC specific code by Hans, is it used - why are ++ and -- the
192 // same?
193 const Float_t kPlusPlusMC[21] = { 0.68400, 0.78790, 0.87220,
194 0.93700, 0.98370, 1.08982,
195 1.03518, 1.01534, 1.01840,
196 1.01493, 1.00000, 0.970083,
197 0.979705,0.960576,0.925394,
198 0.92167, 0.971241,1.08338,
199 1.23517, 1.39308, 1.53943 };
200 const Float_t kMoinsMoinsMC[21] = { 0.68400, 0.78790, 0.87220,
201 0.9370, 0.98370, 1.08982,
202 1.03518, 1.01534, 1.0184,
203 1.01493, 1.00000, 0.970083,
204 0.979705,0.960576,0.925394,
205 0.92167, 0.971241,1.08338,
206 1.23517, 1.39308, 1.53943 };
207 Int_t i = k+kMaxK;
208 if (fMC)
209 return minusminus ? kMoinsMoinsMC[i] : kPlusPlusMC[i];
210 return minusminus ? kMoinsMoins[i] : kPlusPlus[i];
211}
212
213
214//____________________________________________________________________
215Bool_t
216AliDisplacedVertexSelection::CheckOutlier(Int_t ivtx,
217 const AliESDEvent* esd) const
218{
219 if (fMC) return false;
220 if (ivtx <= 4) return false; // Not outliers
221
222 // --- Find outliers -----------------------------------------------
223 AliESDVZERO* esdV0 = esd->GetVZEROData();
224 Double_t nClusters = esd->GetMultiplicity()->GetNumberOfITSClusters(1);
225
226 // parameter from the fit of VZERO multiplicity vs N SPD cluster
227 // distribution
228 const Double_t slp[8][21] = {{0.000,0.000,0.000,0.000,0.000,0.000,0.000,//0
229 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
230 0.000,0.000,0.000,0.000,0.000,0.000,0.000},
231 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//1
232 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
233 0.000,0.000,0.000,0.000,0.000,0.000,0.000},
234 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//2
235 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
236 0.000,0.000,0.000,0.000,0.000,0.000,0.000},
237 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//3
238 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
239 0.000,0.000,0.000,0.000,0.000,0.000,0.000},
240 {0.000,0.000,0.000,0.000,0.000,0.155,0.173,//4
241 0.238,0.348,0.384,0.209,0.362,0.433,0.435,
242 0.421,0.400,0.403,0.398,0.407,0.394,0.369},
243 {0.000,0.000,0.000,0.000,0.000,0.356,0.402,//5
244 0.504,0.650,0.643,0.331,0.543,0.640,0.642,
245 0.614,0.591,0.587,0.564,0.572,0.524,0.576},
246 {0.000,0.000,0.000,0.000,0.000,0.386,0.500,//6
247 0.692,0.856,0.810,0.390,0.619,0.713,0.708,
248 0.670,0.633,0.622,0.593,0.587,0.538,0.587},
249 {0.000,0.000,0.000,0.000,0.000,0.353,0.454,//7
250 0.697,0.944,0.941,0.444,0.670,0.746,0.736,
251 0.683,0.642,0.619,0.583,0.576,0.535,0.581}};
252 const Double_t cst[8][21] = {{0.000,0.000,0.000,0.000,0.000,0.000,0.000,//0
253 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
254 0.0000,0.000,0.000,0.000,0.000,0.000,0.00},
255 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//1
256 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
257 0.0000,0.000,0.000,0.000,0.000,0.000,0.00},
258 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//2
259 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
260 0.0000,0.000,0.000,0.000,0.000,0.000,0.00},
261 {0.000,0.000,0.000,0.000,0.000,0.000,0.000,//3
262 0.000,0.000,0.000,0.000,0.000,0.000,0.000,
263 0.0000,0.000,0.000,0.000,0.000,0.000,0.00},
264 {0.000,0.000,0.000,0.000,0.000,51.67,54.79,//4
265 53.51,23.49,24.60,28.47,27.35,24.47,23.93,
266 13.162,12.91,5.305,4.007,-14.34,-9.16,-9.43},
267 {0.000,0.000,0.000,0.000,0.000,136.34,88.84,
268 84.85,24.31,27.92,35.64,33.15,32.25,23.07,
269 13.746,-6.05,-11.95,1.995,-24.91,-22.55,-37.86},
270 {0.000,0.000,0.000,0.000,0.000,380.42,204.22,
271 123.89,34.60,29.26,32.49,30.94,19.67,7.760,
272 1.1010,-6.01,-15.66,-3.16,-18.34,-17.33,-22.17},
273 {0.000,0.000,0.000,0.000,0.000,128.00,105.04,
274 114.05,15.96,21.67,30.11,30.69,27.66,0.363,-0.511,
275 -17.67,-22.40,-11.84,-25.65,-24.29,-24.46}};
276
277 Bool_t outlier = kFALSE;
278 // loop over VZERO rings
279 for (int iring = 4; iring < 8; iring++) {
280 Double_t multRing = 0;
281 for (int iCh=0; iCh<8; iCh++) {
282 Int_t idx = iCh+iring*8;
283 multRing += esdV0->GetMultiplicity(idx);
284 }
285
286 // Tigher cut for z=0. Looser cut for suffician statistics and
287 // see saturation effects if present.
288 Double_t upFac = (ivtx == 10 ? .35 : .42);
289 Double_t downFac = (ivtx == 10 ? .20 : ivtx < 8 ? .42 : .26);
290 Double_t slpUP = slp[iring][ivtx]*(1.+upFac); //upper cut
291 Double_t slpDOWN = slp[iring][ivtx]*(1.-downFac); //lower cut
292 Double_t constant = cst[iring][ivtx];
293 //Cut is applied for rings and vertex of interest
294 if ((slpDOWN * nClusters + constant) > multRing ||
295 (slpUP * nClusters + constant) < multRing ) {
296 outlier = kTRUE;
297 }
298 }
299
300 return outlier;
301 //--- End of outlier code -----------------------------------------
302}
303//____________________________________________________________________
304Bool_t
305AliDisplacedVertexSelection::ProcessMC(const AliMCEvent* mcevent)
306{
307 if (!fMC) return true;
308 if (!mcevent) return false;
309
310 AliMCEvent* event = const_cast<AliMCEvent*>(mcevent);
311 AliHeader* header = event->Header();
312 AliGenEventHeader* genHeader = header->GenEventHeader();
313 TArrayF vertex;
314 genHeader->PrimaryVertex(vertex);
315 Double_t zvtx = vertex.At(2);
316 Double_t intTime = genHeader->InteractionTime();
317 const Double_t kVtx[16] = {-187.5, -150., -112.5, -75., -37.5, 0.,
318 37.5, 75., 112.5, 150., 187.5, 225.,
319 262.5, 300., 337.5, 375.};
320 Int_t vtxClass = -1;
321 Float_t SigmaVtx = 5.3;
322 Float_t SigmaTime = 0.18;
323
324 for(Int_t iVtx=0; iVtx<16; ++iVtx) {
325 // Do not do something for nominal
326 if (iVtx == 5) continue;
327 if ((zvtx >= kVtx[iVtx] - 3.54 * SigmaVtx &&
328 zvtx <= kVtx[iVtx] + 3.54 * SigmaVtx) &&
329 (intTime >= (iVtx * 1.25e-9 - 6.25e-9 - 4 * SigmaTime) &&
330 intTime <= (iVtx * 1.25e-9 - 6.25e-9 + 4 * SigmaTime))) {
331 vtxClass = iVtx;
332 // break here to not do more
333 break;
334 }
335 }
336 if(vtxClass > -1) {
337 fVertexZ = kVtx[vtxClass];
338 return true;
339 }
340 return false;
341}
65abd48b 342//____________________________________________________________________
241cca4d 343Bool_t
344AliDisplacedVertexSelection::Process(const AliESDEvent* esd)
345{
8449e3e0 346 fVertexZ = kInvalidVtxZ; // Default vertex value
241cca4d 347 fCent = 100; // Default centrality value
348
349 // Some constants
350 const Float_t kZDCrefSum = -66.5;
351 const Float_t kZDCrefDelta = -2.10;
352 const Float_t kZDCsigmaSum = 3.25;
353 const Float_t kZDCsigmaDelta = 2.25;
354 const Float_t kZDCsigmaSumSat = 2.50;
355 const Float_t kZDCsigmaDeltaSat = 1.35;
356
241cca4d 357 // --- Get the ESD object ------------------------------------------
358 AliESDZDC* esdZDC = esd->GetESDZDC();
359 if (!esdZDC) {
360 AliWarning("No ZDC ESD object!");
361 return false;
362 }
363 Double_t currentL3 = esd->GetCurrentL3();
364 Double_t currentDipo = esd->GetCurrentDip();
365
366 // --- ZDC and ZEM energy signal -----------------------------------
367 Double_t zdcEn = (esdZDC->GetZDCN1Energy()+
368 esdZDC->GetZDCP1Energy()+
369 esdZDC->GetZDCN2Energy()+
370 esdZDC->GetZDCP2Energy());
371 Double_t zemEn = (esdZDC->GetZDCEMEnergy(0)+
372 esdZDC->GetZDCEMEnergy(1))/8.;
bfab35d9 373
374 // HHD/Maxime inclusion - MC check!
375 if (fMC) {
376 zdcEn = (2.9 * esdZDC->GetZDCN1Energy() +
377 7.2 * esdZDC->GetZDCP1Energy() +
378 3 * esdZDC->GetZDCN2Energy() +
379 8.7 * esdZDC->GetZDCP2Energy());
380 zemEn = 0.57 * (esdZDC->GetZDCEMEnergy(0) +
381 esdZDC->GetZDCEMEnergy(1));
382 }
241cca4d 383
384 // --- Calculate DeltaT and sumT -----------------------------------
385 Double_t deltaTdc = 0;
386 Double_t sumTdc = 0;
387
388 for(Int_t i = 0; i < 4; ++i) {
389 if(esdZDC->GetZDCTDCData(10,i) != 0) {
390 Double_t tdcCnoCorr = 0.025*(esdZDC->GetZDCTDCData(10,i)-
391 esdZDC->GetZDCTDCData(14,i));
392 Double_t tdcC = esdZDC->GetZDCTDCCorrected(10,i);
393 for(Int_t j = 0; j < 4; ++j) {
394 if(esdZDC->GetZDCTDCData(12,j) != 0) {
395 Double_t tdcAnoCorr = 0.025*(esdZDC->GetZDCTDCData(12,j)-
396 esdZDC->GetZDCTDCData(14,j));
397 Double_t tdcA = esdZDC->GetZDCTDCCorrected(12,j);
398 if(esdZDC->TestBit(AliESDZDC::kCorrectedTDCFilled)) {
399 deltaTdc = tdcC-tdcA;
400 sumTdc = tdcC+tdcA;
401 }
402 else {
403 deltaTdc = tdcCnoCorr-tdcAnoCorr;
404 sumTdc = tdcCnoCorr+tdcAnoCorr;
405 }
406 }
407 }
408 }
409 }
bfab35d9 410 fDeltaTdc->Fill(deltaTdc);
411 fSumTdc->Fill(sumTdc);
412 fCorrelationSumDelta->Fill(sumTdc, deltaTdc);
241cca4d 413
414 // --- Find the vertex ---------------------------------------------
bfab35d9 415 Int_t ivtx = -1;
241cca4d 416 if(deltaTdc!=0. || sumTdc!=0.) {
8449e3e0 417 Double_t fillVz = kInvalidVtxZ;
418 for (Int_t k = -kMaxK; k <= kMaxK; ++k) {
241cca4d 419 Float_t zsat = 2.55F * k;
420 Float_t delta = (k == 0 ? kZDCsigmaDelta : kZDCsigmaDeltaSat);
421 Float_t sum = (k == 0 ? kZDCsigmaSum : kZDCsigmaSumSat);
422 Float_t dT = deltaTdc - kZDCrefDelta - zsat;
423 Float_t sT = sumTdc - kZDCrefSum - zsat;
424 Float_t check = dT * dT / delta / delta + sT * sT / sum / sum;
8449e3e0 425 if (check > 1.0) continue;
426 if (k == 0) {
427 fillVz = 0;
428 continue;
429 }
241cca4d 430 // Set the vertex
431 fVertexZ = 37.5 * k;
bfab35d9 432 fillVz = fVertexZ;
433 ivtx = k + 10; // Used for outlier calculations
241cca4d 434 // Correct zem energy
bfab35d9 435 if(currentDipo>0 && currentL3>0) zemEn /= GetZemCorr(k,false);
436 if(currentDipo<0 && currentL3<0) zemEn /= GetZemCorr(k,true);
437 // We need to break here, or we could possibly update zemEn again
438 break;
241cca4d 439 }
8449e3e0 440 if (fillVz != kInvalidVtxZ) fHVertexZ->Fill(fillVz);
241cca4d 441 }
bfab35d9 442 fZemEnergy->Fill(zemEn);
443 fZdcEnergy->Fill(zdcEn);
444 fCorrelationZemZdc->Fill(zemEn, zdcEn);
445
446 // --- Check if this is an outlier event ---------------------------
bc31b177 447 if (CheckOutlier(ivtx, esd)) {
448 fVertexZ = kInvalidVtxZ;
449 return false;
450 }
241cca4d 451
452 // --- Calculate the centrality ------------------------------------
453 Float_t c1, c2, c3, c4, c5;
454 Int_t runnumber = esd->GetRunNumber();
bfab35d9 455#if 1 // New centrality determination by HHD
456 if (runnumber < 137165 ) {
457 // ref 137161
458 c1 = 16992;
459 c2 = 345;
460 c3 = 2.23902e+02;
461 c4 = 1.56667;
462 c5 = 9.49434e-05;
463 }
464 else if (runnumber <= 137848 && runnumber >= 137230) {
465 // ref 137722
466 c1 = 15000;
467 c2 = 295;
468 c3 = 2.23660e+02;
469 c4 = 1.56664;
470 c5 = 8.99571e-05;
471 }
472 else if (runnumber <= 138275 && runnumber >= 138125) {
473 // ref 137161, yes that's the correct run!
474 c1 = 16992;
475 c2 = 345;
476 c3 = 2.23902e+02;
477 c4 = 1.56667;
478 c5 = 9.49434e-05;
479 }
480 else { // if (runnumber <= 139517 && runnumber >= 138358) {
481 // Ref run 139172
482 c1 = 16992;
483 c2 = 345;
484 c3 = 2.04789e+02;
485 c4 = 1.56629;
486 c5 = 1.02768e-04;
487 }
488#else // Old centrality determination
241cca4d 489 if (runnumber < 137722 && runnumber >= 137161 ) {
490 c1 = 16992;
491 c2 = 345;
492 c3 = 2.23902e+02;
493 c4 = 1.56667;
494 c5 = 9.49434e-05;
495 }
496 else if (runnumber < 139172 && runnumber >= 137722) {
497 c1 = 15000;
498 c2 = 295;
499 c3 = 2.23660e+02;
500 c4 = 1.56664;
501 c5 = 8.99571e-05;
502 }
503 else if (runnumber >= 139172) {
504 c1 = 16992;
505 c2 = 345;
506 c3 = 2.04789e+02;
507 c4 = 1.56629;
508 c5 = 1.02768e-04;
509 }
510 else {
511 c1 = 16992;
512 c2 = 345;
513 c3 = 2.04789e+02;
514 c4 = 1.56629;
515 c5 = 1.02768e-04;
516 }
bfab35d9 517#endif
241cca4d 518 if (zemEn > c2) {
519 Float_t slope = (zdcEn + c1) / (zemEn - c2) + c3;
520 Float_t zdcCent = (TMath::ATan(slope) - c4) / c5;
521 if (zdcCent >= 0) fCent = zdcCent;
522 }
bfab35d9 523
8449e3e0 524 fHCent->Fill(fCent);
65abd48b 525
241cca4d 526 return true;
527}
65abd48b 528//____________________________________________________________________
529//
530// EOF
531//