Skip to content

Commit dbc3f62

Browse files
jikim1290junleekimalibuild
authored
[PWGLF] add shift correction (#6298)
* add shift correction * fix * Please consider the following formatting changes --------- Co-authored-by: junleekim <junleekim@maccbookjunlee2024.dyndns.cern.ch> Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent ccf5157 commit dbc3f62

1 file changed

Lines changed: 104 additions & 3 deletions

File tree

PWGLF/Tasks/Strangeness/lambdapolarization.cxx

Lines changed: 104 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "DataFormatsParameters/GRPObject.h"
5151
#include "DataFormatsParameters/GRPMagField.h"
5252

53+
#include "CCDB/CcdbApi.h"
5354
#include "CCDB/BasicCCDBManager.h"
5455

5556
#include "PWGLF/DataModel/LFStrangenessTables.h"
@@ -72,6 +73,18 @@ struct lambdapolarization {
7273
{},
7374
OutputObjHandlingPolicy::AnalysisObject};
7475

76+
struct : ConfigurableGroup {
77+
Configurable<std::string> cfgURL{"cfgURL",
78+
"http://alice-ccdb.cern.ch", "Address of the CCDB to browse"};
79+
Configurable<int64_t> nolaterthan{"ccdb-no-later-than",
80+
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(),
81+
"Latest acceptable timestamp of creation for the object"};
82+
} cfgCcdbParam;
83+
Service<o2::ccdb::BasicCCDBManager> ccdb;
84+
o2::ccdb::CcdbApi ccdbApi;
85+
86+
Configurable<float> cfgCentSel{"cfgCentSel", 80., "Centrality selection"};
87+
7588
Configurable<float> cfgv0radiusMin{"cfgv0radiusMin", 1.2, "minimum decay radius"};
7689
Configurable<float> cfgDCAPosToPVMin{"cfgDCAPosToPVMin", 0.05, "minimum DCA to PV for positive track"};
7790
Configurable<float> cfgDCANegToPVMin{"cfgDCANegToPVMin", 0.2, "minimum DCA to PV for negative track"};
@@ -95,12 +108,20 @@ struct lambdapolarization {
95108

96109
Configurable<int> cfgnMods{"cfgnMods", 1, "The number of modulations of interest starting from 2"};
97110

111+
Configurable<bool> cfgShiftCorr{"cfgShiftCorr", false, "additional shift correction"};
112+
Configurable<bool> cfgShiftCorrDef{"cfgShiftCorrDef", false, "additional shift correction definition"};
113+
Configurable<std::string> cfgShiftPath{"cfgShiftPath", "Users/j/junlee/Qvector/QvecCalib/ShiftCorr", "Path for Shift"};
114+
98115
TF1* fMultPVCutLow = nullptr;
99116
TF1* fMultPVCutHigh = nullptr;
100117

101118
double angle;
102119
double relphi;
103120

121+
int currentRunNumber = -999;
122+
int lastRunNumber = -999;
123+
TProfile3D* shiftprofile;
124+
104125
void init(o2::framework::InitContext&)
105126
{
106127
if (cfgnMods > 1)
@@ -111,8 +132,13 @@ struct lambdapolarization {
111132
AxisSpec cosAxis = {100, -1.0, 1.0};
112133
AxisSpec centAxis = {80, 0.0, 80.0};
113134
AxisSpec epAxis = {6, 0.0, 2.0 * constants::math::PI};
135+
AxisSpec epQaAxis = {100, -1.0 * constants::math::PI, constants::math::PI};
114136

115137
AxisSpec pidAxis = {100, -10, 10};
138+
139+
AxisSpec shiftAxis = {10, 0, 10, "shift"};
140+
AxisSpec basisAxis = {6, 0, 6, "basis"};
141+
116142
for (auto i = 2; i < cfgnMods + 2; i++) {
117143
histos.add(Form("h_lambda_cos_psi%d", i), "", {HistType::kTHnSparseF, {massAxis, ptAxis, cosAxis, centAxis, epAxis}});
118144
histos.add(Form("h_alambda_cos_psi%d", i), "", {HistType::kTHnSparseF, {massAxis, ptAxis, cosAxis, centAxis, epAxis}});
@@ -125,12 +151,30 @@ struct lambdapolarization {
125151
histos.add("QA/nsigma_tpc_pt_ppi", "", {HistType::kTH2F, {ptAxis, pidAxis}});
126152
histos.add("QA/nsigma_tpc_pt_mpr", "", {HistType::kTH2F, {ptAxis, pidAxis}});
127153
histos.add("QA/nsigma_tpc_pt_mpi", "", {HistType::kTH2F, {ptAxis, pidAxis}});
154+
155+
histos.add("QA/EP_FT0C", "", {HistType::kTH2F, {centAxis, epQaAxis}});
156+
histos.add("QA/EP_FT0A", "", {HistType::kTH2F, {centAxis, epQaAxis}});
157+
histos.add("QA/EP_FV0A", "", {HistType::kTH2F, {centAxis, epQaAxis}});
158+
159+
histos.add("QA/EPRes_FT0C_FT0A", "", {HistType::kTH2F, {centAxis, cosAxis}});
160+
histos.add("QA/EPRes_FT0C_FV0A", "", {HistType::kTH2F, {centAxis, cosAxis}});
161+
histos.add("QA/EPRes_FT0A_FV0A", "", {HistType::kTH2F, {centAxis, cosAxis}});
162+
}
163+
164+
if (cfgShiftCorrDef) {
165+
histos.add("ShiftFIT", "ShiftFIT", kTProfile3D, {centAxis, basisAxis, shiftAxis});
128166
}
129167

130168
fMultPVCutLow = new TF1("fMultPVCutLow", "[0]+[1]*x+[2]*x*x+[3]*x*x*x - 2.5*([4]+[5]*x+[6]*x*x+[7]*x*x*x+[8]*x*x*x*x)", 0, 100);
131169
fMultPVCutLow->SetParameters(2834.66, -87.0127, 0.915126, -0.00330136, 332.513, -12.3476, 0.251663, -0.00272819, 1.12242e-05);
132170
fMultPVCutHigh = new TF1("fMultPVCutHigh", "[0]+[1]*x+[2]*x*x+[3]*x*x*x + 2.5*([4]+[5]*x+[6]*x*x+[7]*x*x*x+[8]*x*x*x*x)", 0, 100);
133171
fMultPVCutHigh->SetParameters(2834.66, -87.0127, 0.915126, -0.00330136, 332.513, -12.3476, 0.251663, -0.00272819, 1.12242e-05);
172+
173+
ccdb->setURL(cfgCcdbParam.cfgURL);
174+
ccdbApi.init("http://alice-ccdb.cern.ch");
175+
ccdb->setCaching(true);
176+
ccdb->setLocalObjectValidityChecking();
177+
ccdb->setCreatedNotAfter(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
134178
}
135179

136180
double massLambda = o2::constants::physics::MassLambda;
@@ -148,15 +192,19 @@ struct lambdapolarization {
148192
auto centrality = collision.centFT0C();
149193
auto multNTracksPV = collision.multNTracksPV();
150194

195+
if (cfgCentSel > centrality) {
196+
return 0;
197+
}
151198
if (multNTracksPV < fMultPVCutLow->Eval(centrality)) {
152199
return 0;
153200
}
154-
155201
if (multNTracksPV > fMultPVCutHigh->Eval(centrality)) {
156202
return 0;
157203
}
158-
159-
if ((!collision.selection_bit(aod::evsel::kNoTimeFrameBorder) || !collision.selection_bit(aod::evsel::kNoITSROFrameBorder))) {
204+
if (!collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) {
205+
return 0;
206+
}
207+
if (!collision.selection_bit(aod::evsel::kNoSameBunchPileup)) {
160208
return 0;
161209
}
162210

@@ -262,6 +310,37 @@ struct lambdapolarization {
262310
angle = ProtonBoostedVec.Pz() / ProtonBoostedVec.P();
263311
relphi = TVector2::Phi_0_2pi(static_cast<float>(nmode) * (LambdaVec.Phi() - TMath::ATan2(collision.qvecIm()[3 + (nmode - 2) * 24], collision.qvecRe()[3 + (nmode - 2) * 24])));
264312

313+
if (cfgShiftCorr) {
314+
auto deltapsiFT0C = 0.0;
315+
auto deltapsiFT0A = 0.0;
316+
auto deltapsiFV0A = 0.0;
317+
318+
auto psidefFT0C = TMath::ATan2(collision.qvecIm()[3 + (nmode - 2) * 24], collision.qvecRe()[3 + (nmode - 2) * 24]);
319+
auto psidefFT0A = TMath::ATan2(collision.qvecIm()[3 + 4 + (nmode - 2) * 24], collision.qvecRe()[3 + 4 + (nmode - 2) * 24]);
320+
auto psidefFV0A = TMath::ATan2(collision.qvecIm()[3 + 12 + (nmode - 2) * 24], collision.qvecRe()[3 + 12 + (nmode - 2) * 24]);
321+
for (int ishift = 1; ishift <= 10; ishift++) {
322+
auto coeffshiftxFT0C = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 0.5, ishift - 0.5));
323+
auto coeffshiftyFT0C = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 1.5, ishift - 0.5));
324+
auto coeffshiftxFT0A = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 2.5, ishift - 0.5));
325+
auto coeffshiftyFT0A = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 3.5, ishift - 0.5));
326+
auto coeffshiftxFV0A = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 4.5, ishift - 0.5));
327+
auto coeffshiftyFV0A = shiftprofile->GetBinContent(shiftprofile->FindBin(collision.centFT0C(), 5.5, ishift - 0.5));
328+
329+
deltapsiFT0C += ((1 / (1.0 * ishift)) * (-coeffshiftxFT0C * TMath::Cos(ishift * 2.0 * psidefFT0C) + coeffshiftyFT0C * TMath::Sin(ishift * 2.0 * psidefFT0C)));
330+
deltapsiFT0A += ((1 / (1.0 * ishift)) * (-coeffshiftxFT0A * TMath::Cos(ishift * 2.0 * psidefFT0A) + coeffshiftyFT0A * TMath::Sin(ishift * 2.0 * psidefFT0A)));
331+
deltapsiFV0A += ((1 / (1.0 * ishift)) * (-coeffshiftxFV0A * TMath::Cos(ishift * 2.0 * psidefFV0A) + coeffshiftyFV0A * TMath::Sin(ishift * 2.0 * psidefFV0A)));
332+
}
333+
relphi = TVector2::Phi_0_2pi(static_cast<float>(nmode) * (LambdaVec.Phi() - psidefFT0C - deltapsiFT0C));
334+
335+
histos.fill(HIST("QA/EP_FT0C"), collision.centFT0C(), psidefFT0C + deltapsiFT0C);
336+
histos.fill(HIST("QA/EP_FT0A"), collision.centFT0C(), psidefFT0A + deltapsiFT0A);
337+
histos.fill(HIST("QA/EP_FV0A"), collision.centFT0C(), psidefFV0A + deltapsiFV0A);
338+
339+
histos.fill(HIST("QA/EPRes_FT0C_FT0A"), collision.centFT0C(), TMath::Cos(2.0 * (psidefFT0C + deltapsiFT0C - psidefFT0A - deltapsiFT0A)));
340+
histos.fill(HIST("QA/EPRes_FT0C_FV0A"), collision.centFT0C(), TMath::Cos(2.0 * (psidefFT0C + deltapsiFT0C - psidefFV0A - deltapsiFV0A)));
341+
histos.fill(HIST("QA/EPRes_FT0A_FV0A"), collision.centFT0C(), TMath::Cos(2.0 * (psidefFT0A + deltapsiFT0A - psidefFV0A - deltapsiFV0A)));
342+
}
343+
265344
if (nmode == 2) { ////////////
266345
if (LambdaTag) {
267346
histos.fill(HIST("h_lambda_cos_psi2"), v0.mLambda(), v0.pt(), angle, collision.centFT0C(), relphi);
@@ -291,6 +370,28 @@ struct lambdapolarization {
291370
if (!eventSelected(collision)) {
292371
return;
293372
}
373+
if (cfgShiftCorrDef) {
374+
for (int ishift = 1; ishift <= 10; ishift++) {
375+
printf("debug %.3lf, %.3lf, %.3lf, %.3lf", collision.centFT0C(), 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3], collision.qvecRe()[3])));
376+
377+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 0.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3], collision.qvecRe()[3])));
378+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 1.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3], collision.qvecRe()[3])));
379+
380+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 2.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3 + 4], collision.qvecRe()[3 + 4])));
381+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 3.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3 + 4], collision.qvecRe()[3 + 4])));
382+
383+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 4.5, ishift - 0.5, TMath::Sin(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3 + 12], collision.qvecRe()[3 + 12])));
384+
histos.fill(HIST("ShiftFIT"), collision.centFT0C(), 5.5, ishift - 0.5, TMath::Cos(ishift * 2.0 * TMath::ATan2(collision.qvecIm()[3 + 12], collision.qvecRe()[3 + 12])));
385+
}
386+
}
387+
if (cfgShiftCorr) {
388+
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
389+
currentRunNumber = collision.bc_as<aod::BCsWithTimestamps>().runNumber();
390+
if (currentRunNumber != lastRunNumber) {
391+
shiftprofile = ccdb->getForTimeStamp<TProfile3D>(cfgShiftPath.value, bc.timestamp());
392+
lastRunNumber = currentRunNumber;
393+
}
394+
}
294395
for (auto i = 2; i < cfgnMods + 2; i++) {
295396
FillHistograms(collision, V0s, i);
296397
}

0 commit comments

Comments
 (0)