28 #include "StFlowLeeYangZerosMaker.h"
29 #include "StFlowMaker/StFlowMaker.h"
30 #include "StFlowMaker/StFlowEvent.h"
31 #include "StFlowMaker/StFlowConstants.h"
32 #include "StFlowMaker/StFlowSelection.h"
34 #include "PhysicalConstants.h"
35 #include "SystemOfUnits.h"
41 #include "TProfile2D.h"
42 #include "TOrdCollection.h"
43 #include "StMessMgr.h"
47 #define PR(x) cout << "##### FlowLYZ: " << (#x) << " = " << (x) << endl;
59 SetPtRange_for_vEta(0., 0.);
60 SetEtaRange_for_vPt(0., 0.);
65 StMaker(name), MakerName(name) {
68 SetPtRange_for_vEta(0., 0.);
69 SetEtaRange_for_vPt(0., 0.);
85 if (pFlowMaker) pFlowEvent = pFlowMaker->FlowEventPointer();
86 if (pFlowEvent && pFlowSelect->Select(pFlowEvent)) {
87 if (FillFromFlowEvent()) {
88 if (!mFirstPass) { FillParticleHistograms(); }
90 gMessMgr->Info(
"##### FlowLeeYangZero: Event Q = 0");
93 gMessMgr->Info(
"##### FlowLeeYangZero: FlowEvent pointer null");
97 if (Debug()) StMaker::PrintInfo();
104 Int_t StFlowLeeYangZerosMaker::Init() {
112 float ptMaxPart = Flow::ptMaxPart;
113 if (pFlowSelect->PtMaxPart()) {
114 ptMaxPart = pFlowSelect->PtMaxPart();
117 mPtBinsPart = Flow::nPtBinsPart;
118 if (pFlowSelect->PtBinsPart()) {
119 mPtBinsPart = pFlowSelect->PtBinsPart();
121 xLabel =
"Pseudorapidity";
122 if (strlen(pFlowSelect->PidPart()) != 0) { xLabel =
"Rapidity"; }
126 Bool_t reCentCalc = pFlowMaker->ReCentCalc();
128 const float multMin = 0.;
129 const float multMax = 2000.;
131 enum { nMultBins = 200
142 Double_t rBinArray[Flow::nRBins+1];
143 Double_t meanBinWidth = Flow::rMax / Flow::nRBins;
146 Double_t initialBinWidth = meanBinWidth / F;
147 Double_t eps = 2. * meanBinWidth * (1. - 1./F) / (
double)(Flow::nRBins-1);
152 Double_t binWidth = initialBinWidth;
153 for (
int rBin = 1; rBin < Flow::nRBins+1; rBin++) {
154 rBinArray[rBin] = rBinArray[rBin-1] + binWidth;
160 mHistYieldPartPt =
new TH1D(
"FlowLYZ_YieldPartPt",
"FlowLYZ_YieldPartPt", mPtBinsPart,
161 Flow::ptMin, ptMaxPart);
162 mHistYieldPartPt->SetXTitle(
"Pt (GeV/c)");
164 mHistYieldPartEta =
new TH1D(
"FlowLYZ_YieldPartEta",
"FlowLYZ_YieldPartEta", mNEtaBins,
166 mHistYieldPartEta->SetXTitle((
char*)xLabel.Data());
169 mHistMult =
new TH1F(
"FlowLYZ_Mult",
"FlowLYZ_Mult", nMultBins, multMin, multMax);
170 mHistMult->SetXTitle(
"Multiplicity");
171 mHistMult->SetYTitle(
"Counts");
176 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
177 mV1neum[Ntheta](0., 0.);
181 for (
int k = 0; k < Flow::nSels; k++) {
184 histTitle =
new TString(
"FlowProLYZ_V_Sel");
186 histFull[k].mHistPro_V =
new TProfile(histTitle->Data(), histTitle->Data(),
187 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5, -1000., 1000.);
188 histFull[k].mHistPro_V->SetXTitle(
"Harmonic");
189 histFull[k].mHistPro_V->SetYTitle(
"mean V_{n}");
193 histTitle =
new TString(
"FlowProLYZ_vr0_Sel");
195 histFull[k].mHistPro_vr0 =
new TProfile(histTitle->Data(), histTitle->Data(),
196 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5, -100., 100.);
197 histFull[k].mHistPro_vr0->SetXTitle(
"Harmonic");
198 histFull[k].mHistPro_vr0->SetYTitle(
"v from r0 (%)");
202 histTitle =
new TString(
"FlowLYZ_v_Sel");
204 histFull[k].mHist_v =
new TH1F(histTitle->Data(), histTitle->Data(),
205 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5);
206 histFull[k].mHist_v->SetXTitle(
"Harmonic");
207 histFull[k].mHist_v->SetYTitle(
"v (%)");
211 for (
int j = 0; j < Flow::nHars; j++) {
216 histTitle =
new TString(
"FlowProLYZ_vEta_Sel");
218 *histTitle +=
"_Har";
220 histFull[k].histFullHar[j].mHistPro_vEta =
new TProfile(histTitle->Data(),
221 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax, -1000., 1000.);
222 histFull[k].histFullHar[j].mHistPro_vEta->SetXTitle((
char*)xLabel.Data());
223 histFull[k].histFullHar[j].mHistPro_vEta->SetYTitle(
"v (%)");
226 histTitle =
new TString(
"FlowProLYZ_vPt_Sel");
228 *histTitle +=
"_Har";
230 histFull[k].histFullHar[j].mHistPro_vPt =
new TProfile(histTitle->Data(),
231 histTitle->Data(), mPtBinsPart, Flow::ptMin, ptMaxPart, -1000., 1000.);
232 histFull[k].histFullHar[j].mHistPro_vPt->SetXTitle(
"Pt (GeV/c)");
233 histFull[k].histFullHar[j].mHistPro_vPt->SetYTitle(
"v (%)");
237 for (Int_t Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
240 histTitle =
new TString(
"FlowLYZ_Gtheta");
241 *histTitle += Ntheta;
242 *histTitle +=
"_Sel";
244 *histTitle +=
"_Har";
246 histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta =
new TH1D(histTitle->Data(),
247 histTitle->Data(), Flow::nRBins, rBinArray);
248 histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->SetXTitle(
"r");
249 histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->SetYTitle(
"|G^{#theta}(ir)|^{2}");
253 histTitle =
new TString(
"FlowReGtheta");
254 *histTitle += Ntheta;
255 *histTitle +=
"_Sel";
257 *histTitle +=
"_Har";
259 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta =
new TProfile(histTitle->Data(),
260 histTitle->Data(), Flow::nRBins, rBinArray);
261 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta->SetXTitle(
"r");
262 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta->SetYTitle(
"Re(G^{#theta}(ir))");
266 histTitle =
new TString(
"FlowImGtheta");
267 *histTitle += Ntheta;
268 *histTitle +=
"_Sel";
270 *histTitle +=
"_Har";
272 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta =
new TProfile(histTitle->Data(),
273 histTitle->Data(), Flow::nRBins, rBinArray);
274 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta->SetXTitle(
"r");
275 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta->SetYTitle(
"Im(G^{#theta}(ir))");
279 histTitle =
new TString(
"FlowReNumer2D");
280 *histTitle += Ntheta;
281 *histTitle +=
"_Sel";
283 *histTitle +=
"_Har";
285 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D =
new TProfile2D(histTitle->Data(),
286 histTitle->Data(), 2, mEtaMin, mEtaMax, mPtBinsPart, Flow::ptMin, ptMaxPart);
287 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->SetXTitle((
char*)xLabel.Data());
288 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->SetYTitle(
"Pt (GeV/c)");
292 histTitle =
new TString(
"FlowReNumerEta");
293 *histTitle += Ntheta;
294 *histTitle +=
"_Sel";
296 *histTitle +=
"_Har";
298 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta =
new TProfile(histTitle->Data(),
299 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax);
300 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->SetXTitle((
char*)xLabel.Data());
301 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->SetYTitle(
"v (%)");
305 histTitle =
new TString(
"FlowImNumer2D");
306 *histTitle += Ntheta;
307 *histTitle +=
"_Sel";
309 *histTitle +=
"_Har";
311 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D =
new TProfile2D(histTitle->Data(),
312 histTitle->Data(), 2, mEtaMin, mEtaMax, mPtBinsPart, Flow::ptMin, ptMaxPart);
313 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D->SetXTitle((
char*)xLabel.Data());
314 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D->SetYTitle(
"Pt (GeV/c)");
318 histTitle =
new TString(
"FlowImNumerEta");
319 *histTitle += Ntheta;
320 *histTitle +=
"_Sel";
322 *histTitle +=
"_Har";
324 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta =
new TProfile(histTitle->Data(),
325 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax);
326 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta->SetXTitle((
char*)xLabel.Data());
327 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta->SetYTitle(
"v (%)");
333 TString *histTitleVtheta;
334 histTitle =
new TString(
"FlowProLYZ_Vtheta_Sel");
336 *histTitle +=
"_Har";
338 histFull[k].histFullHar[j].mHistPro_Vtheta =
new TProfile(histTitle->Data(),
339 histTitle->Data(), Flow::nTheta, -0.5, Flow::nTheta-0.5, -1000., 1000.);
340 histFull[k].histFullHar[j].mHistPro_Vtheta->SetXTitle(
"#theta");
341 histFull[k].histFullHar[j].mHistPro_Vtheta->SetYTitle(
"V_{n}^{#theta}");
342 histTitleVtheta =
new TString(histTitle->Data());
346 histTitle =
new TString(
"FlowReDenom_Sel");
348 *histTitle +=
"_Har";
350 histFull[k].histFullHar[j].mHistReDenom =
new TProfile(histTitle->Data(),
351 histTitle->Data(), Flow::nTheta, -0.5, Flow::nTheta-0.5);
352 histFull[k].histFullHar[j].mHistReDenom->SetXTitle(
"#theta");
353 histFull[k].histFullHar[j].mHistReDenom->SetYTitle(
"Re(Q^{#theta}e^{ir_{0}^{#theta}Q^{#theta}})");
357 histTitle =
new TString(
"FlowImDenom_Sel");
359 *histTitle +=
"_Har";
361 histFull[k].histFullHar[j].mHistImDenom =
new TProfile(histTitle->Data(),
362 histTitle->Data(), Flow::nTheta, -0.5, Flow::nTheta-0.5);
363 histFull[k].histFullHar[j].mHistImDenom->SetXTitle(
"#theta");
364 histFull[k].histFullHar[j].mHistImDenom->SetYTitle(
"Im(Q^{#theta}e^{ir_{0}^{#theta}Q^{#theta}})");
368 histTitle =
new TString(
"FlowCentX_Sel");
370 *histTitle +=
"_Har";
372 histFull[k].histFullHar[j].mHistCentX =
new TProfile(histTitle->Data(),
373 histTitle->Data(), 3, 0.5, 3.5);
374 histFull[k].histFullHar[j].mHistCentX->SetXTitle(
"TPCE, TPCW, TPC");
375 histFull[k].histFullHar[j].mHistCentX->SetYTitle(
"<cos n #phi>");
378 histTitle =
new TString(
"FlowCentY_Sel");
380 *histTitle +=
"_Har";
382 histFull[k].histFullHar[j].mHistCentY =
new TProfile(histTitle->Data(),
383 histTitle->Data(), 3, 0.5, 3.5);
384 histFull[k].histFullHar[j].mHistCentY->SetXTitle(
"TPCE, TPCW, TPC");
385 histFull[k].histFullHar[j].mHistCentY->SetYTitle(
"<sin n #phi>");
388 histTitle =
new TString(
"FlowQCent_Sel");
390 *histTitle +=
"_Har";
392 histFull[k].histFullHar[j].mHistQCent =
new TProfile(histTitle->Data(),
393 histTitle->Data(), 2, 0.5, 2.5);
394 histFull[k].histFullHar[j].mHistQCent->SetXTitle(
"X, Y");
395 histFull[k].histFullHar[j].mHistQCent->SetYTitle(
"<Q_{n}/M>");
399 histTitle =
new TString(
"FlowProLYZ_r0theta_Sel");
401 *histTitle +=
"_Har";
403 histFull[k].histFullHar[j].mHistPro_r0theta =
new TProfile(histTitle->Data(),
404 histTitle->Data(), Flow::nTheta, -0.5, Flow::nTheta-0.5, 0., 2.);
405 histFull[k].histFullHar[j].mHistPro_r0theta->SetXTitle(
"#theta");
406 histFull[k].histFullHar[j].mHistPro_r0theta->SetYTitle(
"r_{0}^{#theta}");
410 TString *histTitleForReadIn;
411 histTitleForReadIn =
new TString(
"FlowLYZ_r0theta_Sel");
413 *histTitle +=
"_Har";
417 TFile fileZeroPass(
"flow.reCent.root",
"R");
418 if (fileZeroPass.IsOpen() || !reCentCalc) {
421 TFile fileFirstPass(
"flow.firstPassLYZ.root",
"R");
422 if (fileFirstPass.IsOpen()) {
423 gMessMgr->Info(
"##### FlowLeeYangZero: Second Pass");
426 dynamic_cast<TH1D*
>(fileFirstPass.Get(histTitleForReadIn->Data()));
428 cout <<
"##### FlowLeeYangZeros: dynamic cast can't find " <<
429 histTitleForReadIn->Data() << endl;
431 }
else if (tempHist->GetNbinsX() != Flow::nTheta) {
432 cout <<
"##### FlowLeeYangZeros: nTheta of 1st pass not equal to 2nd pass" <<
434 PR(tempHist->GetNbinsX());
438 delete histTitleForReadIn;
440 for (Int_t Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
441 mr0theta[k][j][Ntheta] = tempHist->GetBinContent(Ntheta+1);
442 mr0theta[k][j+2][Ntheta] = tempHist->GetBinContent(Ntheta+1);
445 fileFirstPass.Close();
447 gMessMgr->Info(
"##### FlowLeeYangZero: First Pass");
451 gMessMgr->Info(
"##### FlowLeeYangZero: Zero Pass");
457 gMessMgr->SetLimit(
"##### FlowLeeYangZero", 5);
458 gMessMgr->Info(
"##### FlowLeeYangZero: $Id: StFlowLeeYangZerosMaker.cxx,v 1.8 2018/02/26 23:10:59 smirnovd Exp $");
460 return StMaker::Init();
465 Bool_t StFlowLeeYangZerosMaker::FillFromFlowEvent() {
470 mMult = (int)pFlowEvent->MultPart(pFlowSelect);
471 mHistMult->Fill((
float)mMult);
476 Float_t theta, theta1, order, r0;
477 TComplex expo, denom, Gtheta;
478 Double_t Qtheta, cosTheta12, mult;
481 for (
int k = 0; k < Flow::nSels; k++) {
482 pFlowSelect->SetSelection(k);
483 for (
int j = 0; j < Flow::nHars; j++) {
485 pFlowSelect->SetHarmonic(j);
488 pFlowSelect->SetHarmonic(0);
491 pFlowSelect->SetHarmonic(1);
493 order = (double)((j+1)/m);
497 q = pFlowEvent->ReCentPar(pFlowSelect,
"TPCE");
498 histFull[k].histFullHar[j].mHistCentX->Fill(1., q.X());
499 histFull[k].histFullHar[j].mHistCentY->Fill(1., q.Y());
500 q = pFlowEvent->ReCentPar(pFlowSelect,
"TPCW");
501 histFull[k].histFullHar[j].mHistCentX->Fill(2., q.X());
502 histFull[k].histFullHar[j].mHistCentY->Fill(2., q.Y());
503 q = pFlowEvent->ReCentPar(pFlowSelect,
"TPC");
504 histFull[k].histFullHar[j].mHistCentX->Fill(3., q.X());
505 histFull[k].histFullHar[j].mHistCentY->Fill(3., q.Y());
511 Q = pFlowEvent->QPart(pFlowSelect);
512 if (Q.Mod() == 0.)
return kFALSE;
514 mQ2[k][j] += Q.Mod2();
518 mult = (double)(pFlowEvent->MultPart(pFlowSelect));
519 histFull[k].histFullHar[j].mHistQCent->Fill(1., Q.X()/mult);
520 histFull[k].histFullHar[j].mHistQCent->Fill(2., Q.Y()/mult);
524 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
525 theta = ((float)Ntheta / (
float)Flow::nTheta) * TMath::Pi()/order;
527 mQtheta[k][j][Ntheta] = pFlowEvent->Qtheta(pFlowSelect, theta);
529 mQtheta[k][j][Ntheta] = mQtheta[k][j-2][Ntheta];
531 Qtheta = mQtheta[k][j][Ntheta];
533 if (mFirstPass && j<=1) {
535 for (
int rBin = 1; rBin < Flow::nRBins; rBin++) {
536 Float_t r = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinCenter(rBin);
538 expo(0., r * Qtheta);
539 Gtheta = TComplex::Exp(expo);
540 }
else if (!mV1Mixed || j) {
541 Gtheta = pFlowEvent->Grtheta(pFlowSelect, r, theta);
542 if (Gtheta.Rho2() > 1000.) {
break; }
544 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta->Fill(r, Gtheta.Re());
545 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta->Fill(r, Gtheta.Im());
547 }
else if (!mFirstPass) {
549 r0 = mr0theta[k][j][Ntheta];
551 expo(0., r0 * Qtheta);
552 denom = Qtheta * TComplex::Exp(expo);
554 mGr0theta[k][j][Ntheta] = pFlowEvent->Grtheta(pFlowSelect, r0, theta);
555 denom = mGr0theta[k][j][Ntheta] *
556 pFlowEvent->Gder_r0theta(pFlowSelect, r0, theta);
558 histFull[k].histFullHar[j].mHistReDenom->Fill(Ntheta, denom.Re());
559 histFull[k].histFullHar[j].mHistImDenom->Fill(Ntheta, denom.Im());
567 if (!mFirstPass && mV1Mixed) {
568 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
569 theta = ((float)Ntheta / (
float)Flow::nTheta) * TMath::Pi()/2.;
570 r0 = mr0theta[1][1][Ntheta];
571 TComplex theta1Term(0.,0.);
572 for (
int Ntheta1 = 0; Ntheta1 < Flow::nTheta1; Ntheta1++) {
573 theta1 = ((float)Ntheta1 / (
float)Flow::nTheta1) * 2. * TMath::Pi();
574 cosTheta12 = cos(2.*(theta1 - theta));
575 mGV1r0theta[Ntheta1][Ntheta] = pFlowEvent->GV1r0theta(pFlowSelect, r0, theta1, theta);
576 theta1Term += (cosTheta12 * mGV1r0theta[Ntheta1][Ntheta]);
579 mV1neum[Ntheta] += (theta1Term / (double)Flow::nTheta1);
590 void StFlowLeeYangZerosMaker::FillParticleHistograms() {
595 StFlowTrackCollection* pFlowTracks = pFlowEvent->TrackCollection();
596 StFlowTrackIterator itr;
598 Float_t theta, theta1, phi, eta, pt, m, r0;
599 TVector2 reCent, reCent2, reCent1;
600 Double_t order, wgt, wgt2, cosTerm, reCentTheta, reCentTheta2, reCentTheta1;
601 TComplex expo, numer, cosTermComp;
602 for (itr = pFlowTracks->begin(); itr != pFlowTracks->end(); itr++) {
605 phi = pFlowTrack->Phi();
606 if (phi < 0.) phi += twopi;
607 eta = pFlowTrack->Eta();
608 pt = pFlowTrack->Pt();
611 if (pFlowSelect->SelectPart(pFlowTrack)) {
612 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0]) {
613 if (pt < mPtRange_for_vEta[1] && pt >= mPtRange_for_vEta[0]) {
614 mHistYieldPartEta->Fill(eta);
617 mHistYieldPartEta->Fill(eta);
625 if (mEtaRange_for_vPt[1] > mEtaRange_for_vPt[0]) {
626 if (TMath::Abs(eta) < mEtaRange_for_vPt[1] && TMath::Abs(eta) >= mEtaRange_for_vPt[0]) {
627 mHistYieldPartPt->Fill(pt);
630 mHistYieldPartPt->Fill(pt);
634 for (
int k = 0; k < Flow::nSels; k++) {
635 pFlowSelect->SetSelection(k);
636 for (
int j = 0; j < Flow::nHars; j++) {
638 pFlowSelect->SetHarmonic(j);
639 if (j==2) { m = 3.; }
640 else if (j==3) { m = 2.; }
641 order = (double)(j+1)/m;
644 if (pFlowSelect->SelectPart(pFlowTrack)) {
645 reCent = pFlowEvent->ReCent(k, j, pFlowTrack);
646 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
647 theta = ((float)Ntheta / (
float)Flow::nTheta) * TMath::Pi()/order;
648 reCentTheta = reCent.X() * cos(m*order*theta) + reCent.Y() * sin(m*order*theta);
649 r0 = mr0theta[k][j][Ntheta];
651 expo(0., r0 * mQtheta[k][j][Ntheta]);
652 numer = (cos(m*order*(phi - theta)) - reCentTheta) * TComplex::Exp(expo);
654 wgt = pFlowEvent->Weight(k, j, pFlowTrack);
655 if (!j && mV1Mixed) {
656 theta = ((float)Ntheta / (
float)Flow::nTheta) * TMath::Pi()/2.;
657 r0 = mr0theta[k][1][Ntheta];
658 wgt2 = pFlowEvent->Weight(k, 1, pFlowTrack);
659 reCent2 = pFlowEvent->ReCent(k, 1, pFlowTrack);
660 reCentTheta2 = reCent2.X() * cos(2.*theta) + reCent2.Y() * sin(2.*theta);
661 double Gim2 = r0 * wgt2 * (cos(2*(phi - theta)) - reCentTheta2);
662 TComplex theta1Term(0.,0.);
663 for (
int Ntheta1 = 0; Ntheta1 < Flow::nTheta1; Ntheta1++) {
664 theta1 = ((float)Ntheta1 / (
float)Flow::nTheta1) * 2. * TMath::Pi();
665 reCentTheta1 = reCent.X() * cos(1.*theta1) + reCent.Y() * sin(1.*theta1);
666 double Gim1 = r0 * Flow::epsV1 * wgt * (cos(phi - theta1) - reCentTheta1);
667 TComplex Gr0denom(1., Gim1+Gim2);
668 TComplex Gr0neum(0., r0 * Flow::epsV1 * (cos(phi - theta1)) - reCentTheta1);
669 TComplex Gder_r0theta = mGV1r0theta[Ntheta1][Ntheta] * Gr0neum / Gr0denom;
670 Double_t cosTheta12 = cos(2.*(theta1 - theta));
671 theta1Term += (cosTheta12 * Gder_r0theta);
673 numer = theta1Term / (double)Flow::nTheta1;
674 }
else if (j==2 && mV1Mixed) {
677 cosTerm = cos(m*order*(phi - theta)) - reCentTheta;
678 cosTermComp(1., r0*cosTerm);
679 numer = mGr0theta[k][j][Ntheta] * cosTerm / cosTermComp;
683 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0]) {
684 if (pt < mPtRange_for_vEta[1] && pt >= mPtRange_for_vEta[0]) {
685 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->Fill(eta, numer.Re());
686 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta->Fill(eta, numer.Im());
690 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->Fill(eta, numer.Re());
691 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta->Fill(eta, numer.Im());
694 if (mEtaRange_for_vPt[1] > mEtaRange_for_vPt[0]) {
695 if (TMath::Abs(eta) < mEtaRange_for_vPt[1] && TMath::Abs(eta) >= mEtaRange_for_vPt[0]) {
696 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->Fill(eta, pt, numer.Re());
697 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D->Fill(eta, pt, numer.Im());
701 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->Fill(eta, pt, numer.Re());
702 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D->Fill(eta, pt, numer.Im());
722 TOrdCollection* savedHistNames =
new TOrdCollection(Flow::nSels * Flow::nHars);
723 TOrdCollection* savedHistFirstPassNames =
new TOrdCollection(Flow::nSels * Flow::nTheta * 3);
724 TOrdCollection* savedHistZeroPassNames =
new TOrdCollection(Flow::nSels * Flow::nHars * 2);
727 cout << endl <<
"##### LeeYangZeros Maker:" << endl;
729 Float_t reCentX, reCentY;
730 if (mFirstPass) { cout <<
"Test of recentering of Q vector per particle:" << endl; }
731 for (
int k = 0; k < Flow::nSels; k++) {
732 for (
int j = 0; j < Flow::nHars; j++) {
734 reCentX = histFull[k].histFullHar[j].mHistCentX->GetBinContent(3);
735 reCentY = histFull[k].histFullHar[j].mHistCentY->GetBinContent(3);
736 cout << setprecision(3) <<
"Sel = " << k+1 <<
", Har = " << j+1 <<
" : reCent_x = " << reCentX
737 <<
", reCent_y = " << reCentY << endl;
738 reCentX = histFull[k].histFullHar[j].mHistCentX->GetBinContent(1);
739 reCentY = histFull[k].histFullHar[j].mHistCentY->GetBinContent(1);
740 cout << setprecision(3) <<
"Sel = " << k+1 <<
", Har = " << j+1 <<
" : reCentE_x = " << reCentX
741 <<
", reCentE_y = " << reCentY << endl;
742 reCentX = histFull[k].histFullHar[j].mHistCentX->GetBinContent(2);
743 reCentY = histFull[k].histFullHar[j].mHistCentY->GetBinContent(2);
744 cout << setprecision(3) <<
"Sel = " << k+1 <<
", Har = " << j+1 <<
" : reCentW_x = " << reCentX
745 <<
", reCentW_y = " << reCentY << endl;
746 savedHistZeroPassNames->AddLast(histFull[k].histFullHar[j].mHistCentX);
747 savedHistZeroPassNames->AddLast(histFull[k].histFullHar[j].mHistCentY);
748 }
else if (mFirstPass) {
749 reCentX = histFull[k].histFullHar[j].mHistQCent->GetBinContent(1);
750 reCentY = histFull[k].histFullHar[j].mHistQCent->GetBinContent(2);
751 cout << setprecision(3) <<
"Sel = " << k+1 <<
", Har = " << j+1 <<
" : reCentedQ_x = " << reCentX
752 <<
", reCentedQ_y = " << reCentY << endl;
753 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].mHistQCent);
755 savedHistNames->AddLast(histFull[k].histFullHar[j].mHistQCent);
761 TFile fileZeroPass(
"flow.reCent.root",
"RECREATE");
763 savedHistZeroPassNames->Write();
764 fileZeroPass.Close();
765 delete savedHistZeroPassNames;
771 cout <<
"integrated flow: (errors just show variation with theta)" << endl;
773 Float_t reG, imG, reNumer, imNumer, reDenom, imDenom, reDiv;
774 TComplex Gtheta, denom, numer, div;
775 TComplex i = TComplex::I();
776 Float_t mult = mHistMult->GetMean();
777 Float_t _v, vErr, Vtheta, V, V1SqTheta, V1Sq, yield, eta, pt;
778 Double_t r0, yieldSum, vSum, err2Sum, Glast, G0, Gnext, GnextNext, v1DiffConst;
779 Float_t Xlast, X0, Xnext, sigma2, chi;
780 Float_t BesselRatio[3] = {1., 1.202, 2.69};
785 Int_t
etaBins = mHistYieldPartEta->GetNbinsX();
786 T = mHistYieldPartEta->Integral(0, etaBins+1);
787 B = mHistYieldPartEta->Integral(0, etaBins/2);
788 F = mHistYieldPartEta->Integral(etaBins/2+1, etaBins+1);
792 int rBins = Flow::nRBins;
793 for (
int k = 0; k < Flow::nSels; k++) {
794 for (
int j = 0; j < Flow::nHars; j++) {
795 bool oddHar = (j+1) % 2;
798 else if (j==3) { m = 2; }
799 if (mFirstPass && j<=1) {
800 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
801 for (
int rBin = 1; rBin <= rBins; rBin++) {
805 reG = histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta->GetBinContent(rBin);
806 imG = histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta->GetBinContent(rBin);
808 histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->SetBinContent(rBin, Gtheta.Rho2());
811 r0 = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetXaxis()->
813 for (
int N = 2; N < rBins-1; N++) {
814 G0 = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinContent(N);
815 Gnext = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinContent(N+1);
816 GnextNext = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinContent(N+2);
818 if (Gnext > G0 && GnextNext > G0) {
819 Glast = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinContent(N-1);
820 Xlast = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinCenter(N-1);
821 X0 = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinCenter(N);
822 Xnext = histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta->GetBinCenter(N+1);
823 if (X0 < 0.005)
break;
825 r0 -= ((X0 - Xlast)*(X0 - Xlast)*(G0 - Gnext) - (X0 - Xnext)*(X0 - Xnext)*(G0 - Glast)) /
826 (2.*((X0 - Xlast)*(G0 - Gnext) - (X0 - Xnext)*(G0 - Glast)));
831 histFull[k].histFullHar[j].mHistPro_r0theta->Fill(Ntheta, r0);
832 Vtheta = Flow::j01 / r0;
833 histFull[k].histFullHar[j].mHistPro_Vtheta->Fill(Ntheta, Vtheta);
834 _v = (m==1) ? Vtheta / mult : 0.;
835 histFull[k].mHistPro_vr0->Fill(j+1, _v/perCent);
837 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].histTheta[Ntheta].mHistGtheta);
841 histTitle =
new TString(
"FlowReGtheta");
842 *histTitle += Ntheta;
843 *histTitle +=
"_Sel";
845 *histTitle +=
"_Har";
847 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReGtheta =
848 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProReGtheta->ProjectionX(histTitle->Data());
849 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReGtheta->SetTitle(histTitle->Data());
850 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReGtheta->SetXTitle(
"r");
851 histFull[k].histFullHar[j].histTheta[Ntheta].mHistReGtheta->SetYTitle(
"Re(G^{#theta}(ir))");
853 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].histTheta[Ntheta].mHistReGtheta);
855 histTitle =
new TString(
"FlowImGtheta");
856 *histTitle += Ntheta;
857 *histTitle +=
"_Sel";
859 *histTitle +=
"_Har";
861 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImGtheta =
862 histFull[k].histFullHar[j].histTheta[Ntheta].mHistProImGtheta->ProjectionX(histTitle->Data());
863 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImGtheta->SetTitle(histTitle->Data());
864 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImGtheta->SetXTitle(
"r");
865 histFull[k].histFullHar[j].histTheta[Ntheta].mHistImGtheta->SetYTitle(
"Im(G^{#theta}(ir))");
867 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].histTheta[Ntheta].mHistImGtheta);
871 }
else if (!mFirstPass) {
874 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
876 if (k && !j && mV1Mixed) {
877 mV1neum[Ntheta] /= mNEvents;
879 r0 = mr0theta[1][1][Ntheta];
880 reDenom = histFull[k].histFullHar[1].mHistReDenom->GetBinContent(Ntheta+1);
881 imDenom = histFull[k].histFullHar[1].mHistImDenom->GetBinContent(Ntheta+1);
882 denom(reDenom,imDenom);
883 div = mV1neum[Ntheta] / denom;
885 V1SqTheta = -8. * Flow::j01 / (Flow::epsV1*Flow::epsV1) / TMath::Power(r0,3.) * reDiv;
887 if (!std::isnan(V1SqTheta) && V1SqTheta != 0.) {
888 Vtheta = TMath::Sqrt(fabs(V1SqTheta));
891 Vtheta = Flow::j01 / mr0theta[k][j][Ntheta];
893 histFull[k].mHistPro_V->Fill(j+1, Vtheta);
894 _v = (m==1) ? Vtheta / mult : 0.;
895 histFull[k].mHistPro_vr0->Fill(j+1, _v/perCent);
899 if (k && !j && mV1Mixed) {
900 V1Sq /= Flow::nTheta;
901 v2Sign = (int)(V1Sq / fabs(V1Sq));
902 cout <<
"The sign of v2 is " << v2Sign << endl;
904 V = TMath::Sqrt(fabs(V1Sq));
906 v1DiffConst = -4. * Flow::j01 * (double)v2Sign / V / (Flow::epsV1*Flow::epsV1) /
912 for (
int Ntheta = 0; Ntheta < Flow::nTheta; Ntheta++) {
914 if (k && !j && mV1Mixed) {
915 reDenom = histFull[k].histFullHar[1].mHistReDenom->GetBinContent(Ntheta+1);
916 imDenom = histFull[k].histFullHar[1].mHistImDenom->GetBinContent(Ntheta+1);
917 denom(reDenom,imDenom);
919 reDenom = histFull[k].histFullHar[j].mHistReDenom->GetBinContent(Ntheta+1);
920 imDenom = histFull[k].histFullHar[j].mHistImDenom->GetBinContent(Ntheta+1);
921 denom(reDenom,imDenom);
922 denom *= TComplex::Power(i, m-1);
923 Vtheta = Flow::j01 / mr0theta[k][j][Ntheta];
927 int etaMax = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->GetNbinsX();
928 for (
int binEta = 1; binEta <= etaMax; binEta++) {
929 eta = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->GetXaxis()->
930 GetBinCenter(binEta);
932 reNumer = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumerEta->
933 GetBinContent(binEta);
934 imNumer = histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumerEta->
935 GetBinContent(binEta);
936 numer(reNumer,imNumer);
938 reDiv = (numer / denom).Re();
939 if (!std::isnan(reDiv) && reDiv != 0.) {
940 if (k && !j && mV1Mixed) {
941 _v = v1DiffConst * reDiv /perCent;
943 _v = BesselRatio[m-1] * reDiv * Vtheta /perCent;
945 histFull[k].histFullHar[j].mHistPro_vEta->Fill(eta, _v);
952 int etaMax2D = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->
954 for (
int binPt = 1; binPt <= mPtBinsPart; binPt++) {
955 pt = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->GetYaxis()->
957 for (
int binEta = 1; binEta <= etaMax2D; binEta++) {
958 eta = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->GetXaxis()->
959 GetBinCenter(binEta);
961 reNumer = histFull[k].histFullHar[j].histTheta[Ntheta].mHistReNumer2D->
962 GetBinContent(binEta, binPt);
963 imNumer = histFull[k].histFullHar[j].histTheta[Ntheta].mHistImNumer2D->
964 GetBinContent(binEta, binPt);
965 numer(reNumer,imNumer);
967 reDiv = (numer / denom).Re();
968 if (k && !j && mV1Mixed) {
969 v[binEta-1] = v1DiffConst * reDiv /perCent;
971 v[binEta-1] = BesselRatio[m-1] * reDiv * Vtheta /perCent;
974 if (!std::isnan(reDiv) && reDiv != 0.) {
976 _v = (F * v[1] - B * v[0]) / T;
978 _v = (B * v[0] + F * v[1]) / T;
980 histFull[k].histFullHar[j].mHistPro_vPt->Fill(pt, _v);
990 mQ[k][j] /= (float)mNEvents;
991 mQ2[k][j] /= (float)mNEvents;
993 V = histFull[k].mHistPro_V->GetBinContent(j+1);
994 sigma2 = mQ2[k][j] - TMath::Power(mQ[k][j].X(), 2.) - TMath::Power(mQ[k][j].Y(), 2.)
995 - TMath::Power(V, 2.);
997 chi = V / TMath::Sqrt(sigma2);
1000 _v = histFull[k].mHistPro_vr0->GetBinContent(j+1);
1001 vErr = histFull[k].mHistPro_vr0->GetBinError(j+1);
1002 if (k && !j && mV1Mixed) {
1004 cout << setprecision(3) <<
"Sel = " << k+1 <<
": v" << j+1 <<
" from r0 = (" << _v <<
1005 " +/- " << vErr <<
") %"<<
" from mixed harmonics" << endl;
1007 }
else if (mFirstPass) {
1008 cout << setprecision(3) <<
"Sel = " << k+1 <<
": v" << j+1 <<
" from r0 = (" << _v <<
1009 " +/- " << vErr <<
") %" << endl;
1011 cout << setprecision(3) <<
"Sel = " << k+1 <<
": v" << j+1 <<
" from r0 = (" << _v <<
1012 " +/- " << vErr <<
") % chiJYO = " << chi << endl;
1018 if (mFirstPass && j<=1) {
1020 histTitle =
new TString(
"FlowLYZ_r0theta_Sel");
1022 *histTitle +=
"_Har";
1024 histFull[k].histFullHar[j].mHist_r0theta =
1025 histFull[k].histFullHar[j].mHistPro_r0theta->ProjectionX(histTitle->Data());
1026 histFull[k].histFullHar[j].mHist_r0theta->SetTitle(histTitle->Data());
1027 histFull[k].histFullHar[j].mHist_r0theta->SetXTitle(
"#theta");
1028 histFull[k].histFullHar[j].mHist_r0theta->SetYTitle(
"r_{0}^{#theta}");
1030 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].mHist_r0theta);
1032 histTitle =
new TString(
"FlowLYZ_Vtheta_Sel");
1034 *histTitle +=
"_Har";
1036 histFull[k].histFullHar[j].mHist_Vtheta =
1037 histFull[k].histFullHar[j].mHistPro_Vtheta->ProjectionX(histTitle->Data());
1038 histFull[k].histFullHar[j].mHist_Vtheta->SetTitle(histTitle->Data());
1039 histFull[k].histFullHar[j].mHist_Vtheta->SetXTitle(
"#theta");
1040 histFull[k].histFullHar[j].mHist_Vtheta->SetYTitle(
"V_{n}^{#theta}");
1042 savedHistFirstPassNames->AddLast(histFull[k].histFullHar[j].mHist_Vtheta);
1044 }
else if (!mFirstPass) {
1046 histTitle =
new TString(
"FlowLYZ_vEta_Sel");
1048 *histTitle +=
"_Har";
1050 histFull[k].histFullHar[j].mHist_vEta =
1051 histFull[k].histFullHar[j].mHistPro_vEta->ProjectionX(histTitle->Data());
1052 histFull[k].histFullHar[j].mHist_vEta->SetTitle(histTitle->Data());
1053 histFull[k].histFullHar[j].mHist_vEta->SetXTitle((
char*)xLabel.Data());
1054 histFull[k].histFullHar[j].mHist_vEta->SetYTitle(
"v (%)");
1056 savedHistNames->AddLast(histFull[k].histFullHar[j].mHist_vEta);
1058 histTitle =
new TString(
"FlowLYZ_vPt_Sel");
1060 *histTitle +=
"_Har";
1062 histFull[k].histFullHar[j].mHist_vPt =
1063 histFull[k].histFullHar[j].mHistPro_vPt->ProjectionX(histTitle->Data());
1064 histFull[k].histFullHar[j].mHist_vPt->SetTitle(histTitle->Data());
1065 histFull[k].histFullHar[j].mHist_vPt->SetXTitle(
"Pt (GeV/c)");
1066 histFull[k].histFullHar[j].mHist_vPt->SetYTitle(
"v (%)");
1068 savedHistNames->AddLast(histFull[k].histFullHar[j].mHist_vPt);
1076 for (
int bin=1; bin<=mNEtaBins; bin++) {
1078 eta = histFull[k].histFullHar[j].mHistPro_vEta->GetBinCenter(bin);
1079 if (mEtaRange_for_vPt[1] > mEtaRange_for_vPt[0] &&
1080 (TMath::Abs(eta) < mEtaRange_for_vPt[0] ||
1081 TMath::Abs(eta) >= mEtaRange_for_vPt[1])) {
1082 etaPtNoCut = kFALSE;
1084 _v = histFull[k].histFullHar[j].mHistPro_vEta->GetBinContent(bin);
1085 if (_v != 0. && etaPtNoCut) {
1086 yield = mHistYieldPartEta->GetBinContent(bin);
1088 if (oddHar && eta < 0.) { _v *= -1.; }
1090 vErr = histFull[k].histFullHar[j].mHistPro_vEta->GetBinError(bin);
1091 err2Sum += yield*vErr * yield*vErr;
1095 _v = vSum / yieldSum;
1096 vErr = TMath::Sqrt(err2Sum) / yieldSum;
1097 cout << setprecision(3) <<
"Sel = " << k+1 <<
": v" << j+1 <<
" from eta= (" << _v <<
1098 " +/- " << vErr <<
") %" << endl;
1105 for (
int bin=1; bin<=mPtBinsPart; bin++) {
1107 pt = histFull[k].histFullHar[j].mHistPro_vPt->GetBinCenter(bin);
1108 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0] &&
1109 (pt < mPtRange_for_vEta[0] || pt >= mPtRange_for_vEta[1])) {
1110 etaPtNoCut = kFALSE;
1112 _v = histFull[k].histFullHar[j].mHistPro_vPt->GetBinContent(bin);
1113 if (_v != 0. && etaPtNoCut) {
1114 yield = mHistYieldPartPt->GetBinContent(bin);
1117 vErr = histFull[k].histFullHar[j].mHistPro_vPt->GetBinError(bin);
1118 err2Sum += yield*vErr * yield*vErr;
1122 _v = vSum / yieldSum;
1123 vErr = TMath::Sqrt(err2Sum) / yieldSum;
1124 histFull[k].mHist_v->SetBinContent(j+1, _v);
1125 histFull[k].mHist_v->SetBinError(j+1, vErr);
1126 cout << setprecision(3) <<
"Sel = " << k+1 <<
": v" << j+1 <<
" from pt = (" << _v <<
1127 " +/- " << vErr <<
") %" << endl;
1134 histTitle =
new TString(
"FlowLYZ_vr0_Sel");
1136 histFull[k].mHist_vr0 =
1137 histFull[k].mHistPro_vr0->ProjectionX(histTitle->Data());
1138 histFull[k].mHist_vr0->SetTitle(histTitle->Data());
1139 histFull[k].mHist_vr0->SetXTitle(
"Harmonic");
1140 histFull[k].mHist_vr0->SetYTitle(
"v from r_{0} (%)");
1142 savedHistFirstPassNames->AddLast(histFull[k].mHist_vr0);
1143 savedHistNames->AddLast(histFull[k].mHist_vr0);
1148 histTitle =
new TString(
"FlowLYZ_V_Sel");
1150 histFull[k].mHist_V =
1151 histFull[k].mHistPro_V->ProjectionX(histTitle->Data());
1152 histFull[k].mHist_V->SetTitle(histTitle->Data());
1153 histFull[k].mHist_V->SetXTitle(
"Harmonic");
1154 histFull[k].mHist_V->SetYTitle(
"mean V_{n}");
1156 savedHistNames->AddLast(histFull[k].mHist_V);
1158 savedHistNames->AddLast(histFull[k].mHist_v);
1165 TFile fileFirstPassNew(
"flow.firstPassLYZNew.root",
"RECREATE");
1166 TFile histFile(
"flow.LeeYangZeros.root",
"RECREATE");
1168 savedHistFirstPassNames->AddLast(mHistMult);
1169 fileFirstPassNew.cd();
1170 savedHistFirstPassNames->Write();
1172 savedHistFirstPassNames->Write();
1175 savedHistNames->AddLast(mHistMult);
1176 savedHistNames->AddLast(mHistYieldPartPt);
1177 savedHistNames->AddLast(mHistYieldPartEta);
1178 savedHistNames->Write();
1180 fileFirstPassNew.Close();
1183 delete savedHistNames;
1184 delete savedHistFirstPassNames;
1197 void StFlowLeeYangZerosMaker::SetHistoRanges(Bool_t ftpc_included) {
1199 if (ftpc_included) {
1200 mEtaMin = Flow::etaMin;
1201 mEtaMax = Flow::etaMax;
1202 mNEtaBins = Flow::nEtaBins;
1205 mEtaMin = Flow::etaMinTpcOnly;
1206 mEtaMax = Flow::etaMaxTpcOnly;
1207 mNEtaBins = Flow::nEtaBinsTpcOnly;
1215 inline void StFlowLeeYangZerosMaker::SetPtRange_for_vEta(Float_t lo, Float_t hi) {
1219 mPtRange_for_vEta[0] = lo;
1220 mPtRange_for_vEta[1] = hi;
1227 inline void StFlowLeeYangZerosMaker::SetEtaRange_for_vPt(Float_t lo, Float_t hi) {
1231 mEtaRange_for_vPt[0] = lo;
1232 mEtaRange_for_vPt[1] = hi;
virtual ~StFlowLeeYangZerosMaker()
Destructor.
StFlowLeeYangZerosMaker(const Char_t *name="FlowLeeYangZeros")
Default constructor.