Skip to content

Commit 6dd9854

Browse files
authored
[PWGLF] Generalise epvector.cxx to higher harmonics (#11543)
1 parent 677f95e commit 6dd9854

File tree

1 file changed

+53
-51
lines changed

1 file changed

+53
-51
lines changed

PWGLF/TableProducer/Common/epvector.cxx

Lines changed: 53 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ struct epvector {
9393
Configurable<float> cfgCutDCAz{"cfgCutDCAz", 2.0f, "DCAz range for tracks"};
9494
Configurable<int> cfgITScluster{"cfgITScluster", 4, "Number of ITS cluster"};
9595
// Configurable<int> cfgTPCcluster{"cfgTPCcluster", 70, "Number of TPC cluster"};
96+
Configurable<float> cfgHarmonic{"cfgHarmonic", 2, "Harmonic for event plane calculation"};
9697
Configurable<bool> useGainCallib{"useGainCallib", true, "use gain calibration"};
9798
Configurable<bool> useRecentere{"useRecentere", true, "use Recentering"};
9899
Configurable<bool> useShift{"useShift", false, "use Shift"};
@@ -228,26 +229,28 @@ struct epvector {
228229
return TMath::ATan2(chPos.Y() + offsetY, chPos.X() + offsetX);
229230
}
230231

231-
double GetPhiInRange(double phi)
232+
double GetPhiInRange(double phi, double harmonic = 2)
232233
{
233234
double result = phi;
235+
double period = 2. * TMath::Pi() / harmonic;
234236
while (result < 0) {
235-
result = result + 2. * TMath::Pi() / 2;
237+
result = result + period;
236238
}
237-
while (result > 2. * TMath::Pi() / 2) {
238-
result = result - 2. * TMath::Pi() / 2;
239+
while (result > period) {
240+
result = result - period;
239241
}
240242
return result;
241243
}
242244

243-
double GetDeltaPsiSubInRange(double psi1, double psi2)
245+
double GetDeltaPsiSubInRange(double psi1, double psi2, double harmonic = 2)
244246
{
245247
double delta = psi1 - psi2;
246-
if (TMath::Abs(delta) > TMath::Pi() / 2) {
248+
double period = TMath::Pi() / harmonic;
249+
if (TMath::Abs(delta) > period) {
247250
if (delta > 0.)
248-
delta -= 2. * TMath::Pi() / 2;
251+
delta -= 2. * period;
249252
else
250-
delta += 2. * TMath::Pi() / 2;
253+
delta += 2. * period;
251254
}
252255
return delta;
253256
}
@@ -320,36 +323,35 @@ struct epvector {
320323
float ampl = gainequal * ft0.amplitudeA()[iChA];
321324
histos.fill(HIST("FT0Amp"), chanelid, ampl);
322325
auto phiA = GetPhiFT0(chanelid, offsetFT0Ax, offsetFT0Ay);
323-
qxFT0A = qxFT0A + ampl * TMath::Cos(2.0 * phiA);
324-
qyFT0A = qyFT0A + ampl * TMath::Sin(2.0 * phiA);
326+
qxFT0A = qxFT0A + ampl * TMath::Cos(cfgHarmonic.value * phiA);
327+
qyFT0A = qyFT0A + ampl * TMath::Sin(cfgHarmonic.value * phiA);
325328
}
326329
for (std::size_t iChC = 0; iChC < ft0.channelC().size(); iChC++) {
327330
auto chanelid = ft0.channelC()[iChC] + 96;
328-
// printf("Offset for FT0A: x = %d y = %d\n", chanelid, chanelid-96);
329331
auto gainequal = 1.0;
330332
if (useGainCallib) {
331333
gainequal = 1 / gainprofile->GetBinContent(gainprofile->FindBin(chanelid));
332334
}
333335
float ampl = gainequal * ft0.amplitudeC()[iChC];
334336
histos.fill(HIST("FT0Amp"), chanelid, ampl);
335337
auto phiC = GetPhiFT0(chanelid, offsetFT0Cx, offsetFT0Cy);
336-
qxFT0C = qxFT0C + ampl * TMath::Cos(2.0 * phiC);
337-
qyFT0C = qyFT0C + ampl * TMath::Sin(2.0 * phiC);
338+
qxFT0C = qxFT0C + ampl * TMath::Cos(cfgHarmonic.value * phiC);
339+
qyFT0C = qyFT0C + ampl * TMath::Sin(cfgHarmonic.value * phiC);
338340
}
339341

340342
for (auto& trk : tracks) {
341343
if (!selectionTrack(trk) || TMath::Abs(trk.eta()) > 0.8 || trk.pt() > cfgCutPTMax || TMath::Abs(trk.eta()) < cfgMinEta) {
342344
continue;
343345
}
344-
qxTPC = qxTPC + trk.pt() * TMath::Cos(2.0 * trk.phi());
345-
qyTPC = qyTPC + trk.pt() * TMath::Sin(2.0 * trk.phi());
346+
qxTPC = qxTPC + trk.pt() * TMath::Cos(cfgHarmonic.value * trk.phi());
347+
qyTPC = qyTPC + trk.pt() * TMath::Sin(cfgHarmonic.value * trk.phi());
346348
if (trk.eta() < 0.0) {
347-
qxTPCL = qxTPCL + trk.pt() * TMath::Cos(2.0 * trk.phi());
348-
qyTPCL = qyTPCL + trk.pt() * TMath::Sin(2.0 * trk.phi());
349+
qxTPCL = qxTPCL + trk.pt() * TMath::Cos(cfgHarmonic.value * trk.phi());
350+
qyTPCL = qyTPCL + trk.pt() * TMath::Sin(cfgHarmonic.value * trk.phi());
349351
}
350352
if (trk.eta() > 0.0) {
351-
qxTPCR = qxTPCR + trk.pt() * TMath::Cos(2.0 * trk.phi());
352-
qyTPCR = qyTPCR + trk.pt() * TMath::Sin(2.0 * trk.phi());
353+
qxTPCR = qxTPCR + trk.pt() * TMath::Cos(cfgHarmonic.value * trk.phi());
354+
qyTPCR = qyTPCR + trk.pt() * TMath::Sin(cfgHarmonic.value * trk.phi());
353355
}
354356
}
355357
if (useRecentere && (currentRunNumber != lastRunNumber)) {
@@ -367,11 +369,11 @@ struct epvector {
367369
qxTPCR = (qxTPCR - hrecentere->GetBinContent(hrecentere->FindBin(centrality, 8.5))) / hrecentere->GetBinError(hrecentere->FindBin(centrality, 8.5));
368370
qyTPCR = (qyTPCR - hrecentere->GetBinContent(hrecentere->FindBin(centrality, 9.5))) / hrecentere->GetBinError(hrecentere->FindBin(centrality, 9.5));
369371
}
370-
psiFT0C = 0.5 * TMath::ATan2(qyFT0C, qxFT0C);
371-
psiFT0A = 0.5 * TMath::ATan2(qyFT0A, qxFT0A);
372-
psiTPC = 0.5 * TMath::ATan2(qyTPC, qxTPC);
373-
psiTPCL = 0.5 * TMath::ATan2(qyTPCL, qxTPCL);
374-
psiTPCR = 0.5 * TMath::ATan2(qyTPCR, qxTPCR);
372+
psiFT0C = (1.0 / cfgHarmonic.value) * TMath::ATan2(qyFT0C, qxFT0C);
373+
psiFT0A = (1.0 / cfgHarmonic.value) * TMath::ATan2(qyFT0A, qxFT0A);
374+
psiTPC = (1.0 / cfgHarmonic.value) * TMath::ATan2(qyTPC, qxTPC);
375+
psiTPCL = (1.0 / cfgHarmonic.value) * TMath::ATan2(qyTPCL, qxTPCL);
376+
psiTPCR = (1.0 / cfgHarmonic.value) * TMath::ATan2(qyTPCR, qxTPCR);
375377

376378
if (useShift && (currentRunNumber != lastRunNumber)) {
377379
shiftprofile = ccdb->getForTimeStamp<TProfile3D>(ConfShift.value, bc.timestamp());
@@ -391,7 +393,7 @@ struct epvector {
391393
for (int ishift = 1; ishift <= 10; ishift++) {
392394
auto coeffshiftxFT0C = shiftprofile->GetBinContent(shiftprofile->FindBin(centrality, 0.5, ishift - 0.5));
393395
auto coeffshiftyFT0C = shiftprofile->GetBinContent(shiftprofile->FindBin(centrality, 1.5, ishift - 0.5));
394-
deltapsiFT0C = deltapsiFT0C + ((1 / (1.0 * ishift)) * (-coeffshiftxFT0C * TMath::Cos(ishift * 2.0 * psiFT0C) + coeffshiftyFT0C * TMath::Sin(ishift * 2.0 * psiFT0C)));
396+
deltapsiFT0C = deltapsiFT0C + ((1 / (1.0 * ishift)) * (-coeffshiftxFT0C * TMath::Cos(ishift * cfgHarmonic.value * psiFT0C) + coeffshiftyFT0C * TMath::Sin(ishift * cfgHarmonic.value * psiFT0C)));
395397
if (useShift2) {
396398
auto coeffshiftxFT0A = shiftprofile2->GetBinContent(shiftprofile2->FindBin(centrality, 0.5, ishift - 0.5));
397399
auto coeffshiftyFT0A = shiftprofile2->GetBinContent(shiftprofile2->FindBin(centrality, 1.5, ishift - 0.5));
@@ -404,10 +406,10 @@ struct epvector {
404406

405407
auto coeffshiftxTPCR = shiftprofile5->GetBinContent(shiftprofile5->FindBin(centrality, 0.5, ishift - 0.5));
406408
auto coeffshiftyTPCR = shiftprofile5->GetBinContent(shiftprofile5->FindBin(centrality, 1.5, ishift - 0.5));
407-
deltapsiFT0A = deltapsiFT0A + ((1 / (1.0 * ishift)) * (-coeffshiftxFT0A * TMath::Cos(ishift * 2.0 * psiFT0A) + coeffshiftyFT0A * TMath::Sin(ishift * 2.0 * psiFT0A)));
408-
deltapsiTPC = deltapsiTPC + ((1 / (1.0 * ishift)) * (-coeffshiftxTPC * TMath::Cos(ishift * 2.0 * psiTPC) + coeffshiftyTPC * TMath::Sin(ishift * 2.0 * psiTPC)));
409-
deltapsiTPCL = deltapsiTPCL + ((1 / (1.0 * ishift)) * (-coeffshiftxTPCL * TMath::Cos(ishift * 2.0 * psiTPCL) + coeffshiftyTPCL * TMath::Sin(ishift * 2.0 * psiTPCL)));
410-
deltapsiTPCR = deltapsiTPCR + ((1 / (1.0 * ishift)) * (-coeffshiftxTPCR * TMath::Cos(ishift * 2.0 * psiTPCR) + coeffshiftyTPCR * TMath::Sin(ishift * 2.0 * psiTPCR)));
409+
deltapsiFT0A = deltapsiFT0A + ((1 / (1.0 * ishift)) * (-coeffshiftxFT0A * TMath::Cos(ishift * cfgHarmonic.value * psiFT0A) + coeffshiftyFT0A * TMath::Sin(ishift * cfgHarmonic.value * psiFT0A)));
410+
deltapsiTPC = deltapsiTPC + ((1 / (1.0 * ishift)) * (-coeffshiftxTPC * TMath::Cos(ishift * cfgHarmonic.value * psiTPC) + coeffshiftyTPC * TMath::Sin(ishift * cfgHarmonic.value * psiTPC)));
411+
deltapsiTPCL = deltapsiTPCL + ((1 / (1.0 * ishift)) * (-coeffshiftxTPCL * TMath::Cos(ishift * cfgHarmonic.value * psiTPCL) + coeffshiftyTPCL * TMath::Sin(ishift * cfgHarmonic.value * psiTPCL)));
412+
deltapsiTPCR = deltapsiTPCR + ((1 / (1.0 * ishift)) * (-coeffshiftxTPCR * TMath::Cos(ishift * cfgHarmonic.value * psiTPCR) + coeffshiftyTPCR * TMath::Sin(ishift * cfgHarmonic.value * psiTPCR)));
411413
}
412414
}
413415
psiFT0C = psiFT0C + deltapsiFT0C;
@@ -432,12 +434,12 @@ struct epvector {
432434
histos.fill(HIST("QyTPCR"), centrality, qyTPCR);
433435
histos.fill(HIST("PsiTPCR"), centrality, psiTPCR);
434436

435-
histos.fill(HIST("ResFT0CFT0A"), centrality, TMath::Cos(2.0 * (psiFT0C - psiFT0A)), occupancy);
436-
histos.fill(HIST("ResFT0CTPC"), centrality, TMath::Cos(2.0 * (psiFT0C - psiTPC)), occupancy);
437-
histos.fill(HIST("ResFT0ATPC"), centrality, TMath::Cos(2.0 * (psiFT0A - psiTPC)), occupancy);
438-
histos.fill(HIST("ResFT0CTPCL"), centrality, TMath::Cos(2.0 * (psiFT0C - psiTPCL)), occupancy);
439-
histos.fill(HIST("ResFT0CTPCR"), centrality, TMath::Cos(2.0 * (psiFT0C - psiTPCR)), occupancy);
440-
histos.fill(HIST("ResTPCRTPCL"), centrality, TMath::Cos(2.0 * (psiTPCR - psiTPCL)), occupancy);
437+
histos.fill(HIST("ResFT0CFT0A"), centrality, TMath::Cos(cfgHarmonic.value * (psiFT0C - psiFT0A)), occupancy);
438+
histos.fill(HIST("ResFT0CTPC"), centrality, TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPC)), occupancy);
439+
histos.fill(HIST("ResFT0ATPC"), centrality, TMath::Cos(cfgHarmonic.value * (psiFT0A - psiTPC)), occupancy);
440+
histos.fill(HIST("ResFT0CTPCL"), centrality, TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPCL)), occupancy);
441+
histos.fill(HIST("ResFT0CTPCR"), centrality, TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPCR)), occupancy);
442+
histos.fill(HIST("ResTPCRTPCL"), centrality, TMath::Cos(cfgHarmonic.value * (psiTPCR - psiTPCL)), occupancy);
441443

442444
double qFT0Cmag = TMath::Sqrt(qxFT0C * qxFT0C + qyFT0C * qyFT0C);
443445
double qFT0Amag = TMath::Sqrt(qxFT0A * qxFT0A + qyFT0A * qyFT0A);
@@ -451,28 +453,28 @@ struct epvector {
451453
histos.fill(HIST("QFT0C"), centrality, qFT0Cmag, occupancy);
452454
histos.fill(HIST("QFT0A"), centrality, qFT0Amag, occupancy);
453455

454-
histos.fill(HIST("ResFT0CFT0ASP"), centrality, qFT0Cmag * qFT0Amag * TMath::Cos(2.0 * (psiFT0C - psiFT0A)), occupancy);
455-
histos.fill(HIST("ResFT0CTPCSP"), centrality, qFT0Cmag * qTPCmag * TMath::Cos(2.0 * (psiFT0C - psiTPC)), occupancy);
456-
histos.fill(HIST("ResFT0ATPCSP"), centrality, qFT0Amag * qTPCmag * TMath::Cos(2.0 * (psiFT0A - psiTPC)), occupancy);
457-
histos.fill(HIST("ResFT0CTPCLSP"), centrality, qFT0Cmag * qTPCLmag * TMath::Cos(2.0 * (psiFT0C - psiTPCL)), occupancy);
458-
histos.fill(HIST("ResFT0CTPCRSP"), centrality, qFT0Cmag * qTPCRmag * TMath::Cos(2.0 * (psiFT0C - psiTPCR)), occupancy);
459-
histos.fill(HIST("ResTPCRTPCLSP"), centrality, qTPCRmag * qTPCLmag * TMath::Cos(2.0 * (psiTPCR - psiTPCL)), occupancy);
456+
histos.fill(HIST("ResFT0CFT0ASP"), centrality, qFT0Cmag * qFT0Amag * TMath::Cos(cfgHarmonic.value * (psiFT0C - psiFT0A)), occupancy);
457+
histos.fill(HIST("ResFT0CTPCSP"), centrality, qFT0Cmag * qTPCmag * TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPC)), occupancy);
458+
histos.fill(HIST("ResFT0ATPCSP"), centrality, qFT0Amag * qTPCmag * TMath::Cos(cfgHarmonic.value * (psiFT0A - psiTPC)), occupancy);
459+
histos.fill(HIST("ResFT0CTPCLSP"), centrality, qFT0Cmag * qTPCLmag * TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPCL)), occupancy);
460+
histos.fill(HIST("ResFT0CTPCRSP"), centrality, qFT0Cmag * qTPCRmag * TMath::Cos(cfgHarmonic.value * (psiFT0C - psiTPCR)), occupancy);
461+
histos.fill(HIST("ResTPCRTPCLSP"), centrality, qTPCRmag * qTPCLmag * TMath::Cos(cfgHarmonic.value * (psiTPCR - psiTPCL)), occupancy);
460462

461463
for (int ishift = 1; ishift <= 10; ishift++) {
462-
histos.fill(HIST("ShiftFT0C"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * psiFT0C));
463-
histos.fill(HIST("ShiftFT0C"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * psiFT0C));
464+
histos.fill(HIST("ShiftFT0C"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * cfgHarmonic.value * psiFT0C));
465+
histos.fill(HIST("ShiftFT0C"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * cfgHarmonic.value * psiFT0C));
464466

465-
histos.fill(HIST("ShiftFT0A"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * psiFT0A));
466-
histos.fill(HIST("ShiftFT0A"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * psiFT0A));
467+
histos.fill(HIST("ShiftFT0A"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * cfgHarmonic.value * psiFT0A));
468+
histos.fill(HIST("ShiftFT0A"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * cfgHarmonic.value * psiFT0A));
467469

468-
histos.fill(HIST("ShiftTPC"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * psiTPC));
469-
histos.fill(HIST("ShiftTPC"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * psiTPC));
470+
histos.fill(HIST("ShiftTPC"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * cfgHarmonic.value * psiTPC));
471+
histos.fill(HIST("ShiftTPC"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * cfgHarmonic.value * psiTPC));
470472

471-
histos.fill(HIST("ShiftTPCL"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * psiTPCL));
472-
histos.fill(HIST("ShiftTPCL"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * psiTPCL));
473+
histos.fill(HIST("ShiftTPCL"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * cfgHarmonic.value * psiTPCL));
474+
histos.fill(HIST("ShiftTPCL"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * cfgHarmonic.value * psiTPCL));
473475

474-
histos.fill(HIST("ShiftTPCR"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * psiTPCR));
475-
histos.fill(HIST("ShiftTPCR"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * psiTPCR));
476+
histos.fill(HIST("ShiftTPCR"), centrality, 0.5, ishift - 0.5, TMath::Sin(ishift * cfgHarmonic.value * psiTPCR));
477+
histos.fill(HIST("ShiftTPCR"), centrality, 1.5, ishift - 0.5, TMath::Cos(ishift * cfgHarmonic.value * psiTPCR));
476478
}
477479
lastRunNumber = currentRunNumber;
478480
}

0 commit comments

Comments
 (0)