00001
00002
00003
00004
00005
00006
00007
00009
00010
00011
00013
00014 #include <Stiostream.h>
00015 #include <stdlib.h>
00016 #include <math.h>
00017 #include "StMaker.h"
00018 #include "StFlowAnalysisMaker.h"
00019 #include "StFlowMaker/StFlowMaker.h"
00020 #include "StFlowMaker/StFlowEvent.h"
00021 #include "StFlowMaker/StFlowConstants.h"
00022 #include "StFlowMaker/StFlowSelection.h"
00023 #include "StFlowMaker/StFlowCutEvent.h"
00024 #include "StEnumerations.h"
00025 #include "PhysicalConstants.h"
00026 #include "SystemOfUnits.h"
00027 #include "TVector2.h"
00028 #include "TFile.h"
00029 #include "TString.h"
00030 #include "TH1.h"
00031 #include "TH2.h"
00032 #include "TH3.h"
00033 #include "TProfile.h"
00034 #include "TProfile2D.h"
00035 #include "TOrdCollection.h"
00036 #include "StMessMgr.h"
00037 #include "TMath.h"
00038 #include "TText.h"
00039 #include "TF1.h"
00040 #define PR(x) cout << "##### FlowAnalysis: " << (#x) << " = " << (x) << endl;
00041
00042 ClassImp(StFlowAnalysisMaker)
00043
00044
00045
00046 StFlowAnalysisMaker::StFlowAnalysisMaker(const Char_t* name): StMaker(name),
00047 MakerName(name) {
00048 pFlowSelect = new StFlowSelection();
00049 SetHistoRanges();
00050 SetPtRange_for_vEta(0., 0.);
00051 SetEtaRange_for_vPt(0., 0.);
00052 }
00053
00054 StFlowAnalysisMaker::StFlowAnalysisMaker(const Char_t* name,
00055 const StFlowSelection& flowSelect) :
00056 StMaker(name), MakerName(name) {
00057 pFlowSelect = new StFlowSelection(flowSelect);
00058 SetHistoRanges();
00059 SetPtRange_for_vEta(0., 0.);
00060 SetEtaRange_for_vPt(0., 0.);
00061 }
00062
00063
00064
00065 StFlowAnalysisMaker::~StFlowAnalysisMaker() {
00066 }
00067
00068
00069
00070 Int_t StFlowAnalysisMaker::Make() {
00071
00072
00073
00074 pFlowMaker = NULL;
00075 pFlowMaker = (StFlowMaker*)GetMaker("Flow");
00076 if (pFlowMaker) pFlowEvent = pFlowMaker->FlowEventPointer();
00077 if (pFlowEvent && pFlowSelect->Select(pFlowEvent)) {
00078 if (FillFromFlowEvent()) {
00079 FillEventHistograms();
00080 FillParticleHistograms();
00081 } else {
00082 gMessMgr->Info("##### FlowAnalysis: Event psi = 0");
00083 }
00084 } else {
00085 gMessMgr->Info("##### FlowAnalysis: FlowEvent pointer null");
00086 return kStOK;
00087 }
00088
00089 if (Debug()) StMaker::PrintInfo();
00090
00091 return kStOK;
00092 }
00093
00094
00095
00096 Int_t StFlowAnalysisMaker::Init() {
00097
00098
00099 StFlowMaker* pFlowMaker = NULL;
00100 pFlowMaker = (StFlowMaker*)GetMaker("Flow");
00101 Bool_t reCentCalc = pFlowMaker->ReCentCalc();
00102
00103 float ptMaxPart = Flow::ptMaxPart;
00104 if (pFlowSelect->PtMaxPart()) {
00105 ptMaxPart = pFlowSelect->PtMaxPart();
00106 }
00107 int nPtBinsPart = Flow::nPtBinsPart;
00108 if (pFlowSelect->PtBinsPart()) {
00109 nPtBinsPart = pFlowSelect->PtBinsPart();
00110 }
00111 xLabel = "Pseudorapidity";
00112 if (strlen(pFlowSelect->PidPart()) != 0) { xLabel = "Rapidity"; }
00113
00114 const float triggerMin = -0.5;
00115 const float triggerMax = 10.5;
00116 const float chargeMin = -2.5;
00117 const float chargeMax = 2.5;
00118 const float dcaMin = 0.;
00119 const float dcaMax = 0.3;
00120 const float glDcaMax = 3.6;
00121 const float chi2Min = 0.;
00122 const float chi2Max = 5.;
00123 const float fitPtsMinTpc = -0.5;
00124 const float fitPtsMaxTpc = 60.5;
00125 const float maxPtsMinTpc = -0.5;
00126 const float maxPtsMaxTpc = 60.5;
00127 const float fitPtsMinFtpc = -0.5;
00128 const float fitPtsMaxFtpc = 12.5;
00129 const float maxPtsMinFtpc = -0.5;
00130 const float maxPtsMaxFtpc = 12.5;
00131 const float fitOverMaxMin = 0.;
00132 const float fitOverMaxMax = 1.2;
00133 const float origMultMin = 0.;
00134 const float origMultMax = 3000.;
00135 const float MultEtaMin = 0.;
00136 const float MultEtaMax = 1000.;
00137 const float totalMultMin = 0.;
00138 const float totalMultMax = 2000.;
00139 const float corrMultMin = 0.;
00140 const float corrMultMax = 2000.;
00141 const float multOverOrigMin = 0.;
00142 const float multOverOrigMax = 1.;
00143 const float vertexZMin =-100.5;
00144 const float vertexZMax = 100.5;
00145 const float vertexXYMin = -1.;
00146 const float vertexXYMax = 1.;
00147 const float QXYMin = -0.5;
00148 const float QXYMax = 0.5;
00149 const float etaSymZMin = -1.15;
00150 const float etaSymZMax = 1.15;
00151 const float etaSymMin = -6.;
00152 const float etaSymMax = 6.;
00153 const float phiMin = 0.;
00154 const float phiMax = twopi;
00155 const float psiMin = 0.;
00156 const float psiMax = twopi;
00157 const float multMin = 0.;
00158 const float multMax = 2000.;
00159 const float qMin = 0.;
00160 const float pidMin = -10.;
00161 const float pidMax = 10.;
00162 const float centMin = -0.5;
00163 const float centMax = 9.5;
00164 const float pMin = -2.5;
00165 const float pMax = 1.5;
00166 const float dEdxMax = 0.00004;
00167 const float qMax = 3.5;
00168
00169 enum { nTriggerBins = 11,
00170 nChargeBins = 50,
00171 nDcaBins = 60,
00172 nChi2Bins = 50,
00173 nFitPtsBinsTpc = 61,
00174 nFitPtsBinsFtpc = 13,
00175 nMaxPtsBinsTpc = 61,
00176 nMaxPtsBinsFtpc = 13,
00177 nFitOverMaxBins = 40,
00178 nOrigMultBins = 60,
00179 nMultEtaBins = 50,
00180 nTotalMultBins = 40,
00181 nMultOverOrigBins = 50,
00182 nMultPartBins = 40,
00183 nVertexZBins = 51,
00184 nVertexXYBins = 50,
00185 nQXYBins = 50,
00186 nEtaSymBins = 45,
00187 nPhi3DBins = 18,
00188 nPsiBins = 36,
00189 nMultBins = 40,
00190 nPidBins = 50,
00191 nCentBins = 10,
00192 nDedxBins = 200,
00193 nMomenBins = 200,
00194 n_qBins = 50
00195 };
00196
00197
00198 mHistTrigger = new TH1F("Flow_Trigger", "Flow_Trigger",
00199 nTriggerBins, triggerMin, triggerMax);
00200 mHistTrigger->SetXTitle("Trig: 0 mb+cen, 1 mb, 2 central, 3 laser, 10 other");
00201 mHistTrigger->SetYTitle("Counts");
00202
00203
00204
00205 mHistChargeFtpc = new TH1F("Flow_Charge_Ftpc", "Flow_Charge_Ftpc",
00206 nChargeBins, chargeMin, chargeMax);
00207 mHistChargeFtpc->SetXTitle("Charge");
00208 mHistChargeFtpc->SetYTitle("Counts");
00209
00210
00211
00212 mHistDcaTpc = new TH1F("Flow_Dca_Tpc", "Flow_Dca_Tpc",
00213 nDcaBins, dcaMin, dcaMax);
00214 mHistDcaTpc->SetXTitle("Track dca to Vertex (cm)");
00215 mHistDcaTpc->SetYTitle("Counts");
00216
00217
00218 mHistDcaFtpc = new TH1F("Flow_Dca_Ftpc", "Flow_Dca_Ftpc",
00219 nDcaBins, dcaMin, dcaMax);
00220 mHistDcaFtpc->SetXTitle("Track dca to Vertex (cm)");
00221 mHistDcaFtpc->SetYTitle("Counts");
00222
00223
00224
00225
00226 mHistDcaGlobalTpc = new TH1F("Flow_DcaGlobal_Tpc", "Flow_DcaGlobal_Tpc",
00227 nDcaBins, dcaMin, glDcaMax);
00228 mHistDcaGlobalTpc->SetXTitle("Global Track dca (cm)");
00229 mHistDcaGlobalTpc->SetYTitle("Counts");
00230
00231
00232 mHistDcaGlobalFtpc = new TH1F("Flow_DcaGlobal_Ftpc", "Flow_DcaGlobal_Ftpc",
00233 nDcaBins, dcaMin, glDcaMax);
00234 mHistDcaGlobalFtpc->SetXTitle("Global Track dca (cm)");
00235 mHistDcaGlobalFtpc->SetYTitle("Counts");
00236
00237
00238
00239
00240 mHistChi2Tpc = new TH1F("Flow_Chi2_Tpc", "Flow_Chi2_Tpc",
00241 nChi2Bins, chi2Min, chi2Max);
00242 mHistChi2Tpc->SetXTitle("Chi square per df");
00243 mHistChi2Tpc->SetYTitle("Counts");
00244
00245
00246 mHistChi2Ftpc = new TH1F("Flow_Chi2_Ftpc", "Flow_Chi2_Ftpc",
00247 nChi2Bins, chi2Min, chi2Max);
00248 mHistChi2Ftpc->SetXTitle("Chi square per df");
00249 mHistChi2Ftpc->SetYTitle("Counts");
00250
00251
00252
00253
00254 mHistFitPtsTpc = new TH1F("Flow_FitPts_Tpc", "Flow_FitPts_Tpc",
00255 nFitPtsBinsTpc, fitPtsMinTpc, fitPtsMaxTpc);
00256 mHistFitPtsTpc->SetXTitle("Fit Points");
00257 mHistFitPtsTpc->SetYTitle("Counts");
00258
00259
00260 mHistFitPtsFtpc = new TH1F("Flow_FitPts_Ftpc", "Flow_FitPts_Ftpc",
00261 nFitPtsBinsFtpc, fitPtsMinFtpc, fitPtsMaxFtpc);
00262 mHistFitPtsFtpc->SetXTitle("Fit Points");
00263 mHistFitPtsFtpc->SetYTitle("Counts");
00264
00265
00266
00267
00268 mHistMaxPtsTpc = new TH1F("Flow_MaxPts_Tpc ", "Flow_MaxPts_Tpc ",
00269 nMaxPtsBinsTpc , maxPtsMinTpc , maxPtsMaxTpc );
00270 mHistMaxPtsTpc ->SetXTitle("Max Points");
00271 mHistMaxPtsTpc ->SetYTitle("Counts");
00272
00273
00274 mHistMaxPtsFtpc = new TH1F("Flow_MaxPts_Ftpc", "Flow_MaxPts_Ftpc",
00275 nMaxPtsBinsFtpc, maxPtsMinFtpc, maxPtsMaxFtpc);
00276 mHistMaxPtsFtpc->SetXTitle("Max Points");
00277 mHistMaxPtsFtpc->SetYTitle("Counts");
00278
00279
00280
00281
00282 mHistFitOverMaxTpc = new TH1F("Flow_FitOverMax_Tpc", "Flow_FitOverMax_Tpc",
00283 nFitOverMaxBins, fitOverMaxMin, fitOverMaxMax);
00284 mHistFitOverMaxTpc->SetXTitle("Fit Points / Max Points");
00285 mHistFitOverMaxTpc->SetYTitle("Counts");
00286
00287
00288 mHistFitOverMaxFtpc = new TH1F("Flow_FitOverMax_Ftpc", "Flow_FitOverMax_Ftpc",
00289 nFitOverMaxBins, fitOverMaxMin, fitOverMaxMax);
00290 mHistFitOverMaxFtpc->SetXTitle("Fit Points / Max Points");
00291 mHistFitOverMaxFtpc->SetYTitle("Counts");
00292
00293
00294
00295 mHistOrigMult = new TH1F("Flow_OrigMult", "Flow_OrigMult",
00296 nOrigMultBins, origMultMin, origMultMax);
00297 mHistOrigMult->SetXTitle("Original Mult");
00298 mHistOrigMult->SetYTitle("Counts");
00299
00300
00301 mHistMultEta = new TH1F("Flow_MultEta", "Flow_MultEta",
00302 nMultEtaBins, MultEtaMin, MultEtaMax);
00303 mHistMultEta->SetXTitle("Mult for Centrality");
00304 mHistMultEta->SetYTitle("Counts");
00305
00306
00307 mHistMult = new TH1F("Flow_Mult", "Flow_Mult",
00308 nTotalMultBins, totalMultMin, totalMultMax);
00309 mHistMult->SetXTitle("Mult");
00310 mHistMult->SetYTitle("Counts");
00311
00312
00313 mHistMultOverOrig = new TH1F("Flow_MultOverOrig", "Flow_MultOverOrig",
00314 nMultOverOrigBins, multOverOrigMin, multOverOrigMax);
00315 mHistMultOverOrig->SetXTitle("Mult / Orig. Mult");
00316 mHistMultOverOrig->SetYTitle("Counts");
00317
00318
00319 mHistMultPart = new TH1F("Flow_MultPart", "Flow_MultPart",
00320 nMultPartBins, corrMultMin, corrMultMax);
00321 mHistMultPart->SetXTitle("Mult of Correlated Particles");
00322 mHistMultPart->SetYTitle("Counts");
00323
00324
00325 mHistVertexZ = new TH1F("Flow_VertexZ", "Flow_VertexZ",
00326 nVertexZBins, vertexZMin, vertexZMax);
00327 mHistVertexZ->SetXTitle("Vertex Z (cm)");
00328 mHistVertexZ->SetYTitle("Counts");
00329
00330
00331 mHistVertexXY2D = new TH2F("Flow_VertexXY2D", "Flow_VertexXY2D",
00332 nVertexXYBins, vertexXYMin, vertexXYMax,
00333 nVertexXYBins, vertexXYMin, vertexXYMax);
00334 mHistVertexXY2D->SetXTitle("Vertex X (cm)");
00335 mHistVertexXY2D->SetYTitle("Vertex Y (cm)");
00336
00337
00338 mHistEtaSymVerZ2DTpc = new TH2F("Flow_EtaSymVerZ2D_Tpc", "Flow_EtaSymVerZ2D_Tpc",
00339 nVertexZBins, vertexZMin, vertexZMax, nEtaSymBins, etaSymZMin, etaSymZMax);
00340 mHistEtaSymVerZ2DTpc->SetXTitle("Vertex Z (cm)");
00341 mHistEtaSymVerZ2DTpc->SetYTitle("Eta Symmetry");
00342
00343
00344 mHistEtaSymVerZ2DFtpc = new TH2F("Flow_EtaSymVerZ2D_Ftpc", "Flow_EtaSymVerZ2D_Ftpc",
00345 nVertexZBins, vertexZMin, vertexZMax, nEtaSymBins, etaSymZMin, etaSymZMax);
00346 mHistEtaSymVerZ2DFtpc->SetXTitle("Vertex Z (cm)");
00347 mHistEtaSymVerZ2DFtpc->SetYTitle("Eta Symmetry");
00348
00349
00350 mHistEtaSymTpc = new TH1F("Flow_EtaSym_Tpc", "Flow_EtaSym_Tpc",
00351 nEtaSymBins, etaSymMin, etaSymMax);
00352 mHistEtaSymTpc->SetXTitle("Eta Symmetry Ratio TPC");
00353 mHistEtaSymTpc->SetYTitle("Counts");
00354
00355
00356 mHistEtaSymFtpc = new TH1F("Flow_EtaSym_Ftpc", "Flow_EtaSym_Ftpc",
00357 nEtaSymBins, etaSymMin, etaSymMax);
00358 mHistEtaSymFtpc->SetXTitle("Eta Symmetry Ratio FTPC");
00359 mHistEtaSymFtpc->SetYTitle("Counts");
00360
00361
00362 mHistEtaPtPhi3D = new TH3F("Flow_EtaPtPhi3D", "Flow_EtaPtPhi3D",
00363 mNEtaBins, mEtaMin, mEtaMax, Flow::nPtBins, Flow::ptMin,
00364 Flow::ptMax, nPhi3DBins, phiMin, phiMax);
00365 mHistEtaPtPhi3D->SetXTitle("Eta");
00366 mHistEtaPtPhi3D->SetYTitle("Pt (GeV/c)");
00367 mHistEtaPtPhi3D->SetZTitle("Phi (rad)");
00368
00369
00370 mHistYieldAll2D = new TH2D("Flow_YieldAll2D", "Flow_YieldAll2D",
00371 mNEtaBins, mEtaMin, mEtaMax, Flow::nPtBins, Flow::ptMin,
00372 Flow::ptMax);
00373 mHistYieldAll2D->Sumw2();
00374 mHistYieldAll2D->SetXTitle("Pseudorapidty");
00375 mHistYieldAll2D->SetYTitle("Pt (GeV/c)");
00376
00377
00378 mHistYieldPart2D = new TH2D("Flow_YieldPart2D", "Flow_YieldPart2D",
00379 mNEtaBins, mEtaMin, mEtaMax, nPtBinsPart, Flow::ptMin,
00380 ptMaxPart);
00381 mHistYieldPart2D->Sumw2();
00382 mHistYieldPart2D->SetXTitle((char*)xLabel.Data());
00383 mHistYieldPart2D->SetYTitle("Pt (GeV/c)");
00384
00385
00386 mHistBinEta = new TProfile("Flow_Bin_Eta", "Flow_Bin_Eta",
00387 mNEtaBins, mEtaMin, mEtaMax, mEtaMin, mEtaMax, "");
00388 mHistBinEta->SetXTitle((char*)xLabel.Data());
00389 mHistBinEta->SetYTitle("<Eta>");
00390
00391
00392 mHistBinPt = new TProfile("Flow_Bin_Pt", "Flow_Bin_Pt",
00393 nPtBinsPart, Flow::ptMin, ptMaxPart, Flow::ptMin, ptMaxPart, "");
00394 mHistBinPt->SetXTitle("Pt (GeV/c)");
00395 mHistBinPt->SetYTitle("<Pt> (GeV/c)");
00396
00397
00398 mHistPidPiPlus = new TH1F("Flow_PidPiPlus", "Flow_PidPiPlus",
00399 nPidBins, pidMin, pidMax);
00400 mHistPidPiPlus->SetXTitle("(PID - Mean) / Resolution");
00401 mHistPidPiPlus->SetYTitle("Counts");
00402
00403
00404 mHistPidPiMinus = new TH1F("Flow_PidPiMinus", "Flow_PidPiMinus",
00405 nPidBins, pidMin, pidMax);
00406 mHistPidPiMinus->SetXTitle("(PID - Mean) / Resolution");
00407 mHistPidPiMinus->SetYTitle("Counts");
00408
00409
00410 mHistPidProton = new TH1F("Flow_PidProton", "Flow_PidProton",
00411 nPidBins, pidMin, pidMax);
00412 mHistPidProton->SetXTitle("(PID - Mean) / Resolution");
00413 mHistPidProton->SetYTitle("Counts");
00414
00415
00416 mHistPidAntiProton = new TH1F("Flow_PidAntiProton", "Flow_PidAntiProton",
00417 nPidBins, pidMin, pidMax);
00418 mHistPidAntiProton->SetXTitle("(PID - Mean) / Resolution");
00419 mHistPidAntiProton->SetYTitle("Counts");
00420
00421
00422 mHistPidKplus = new TH1F("Flow_PidKplus", "Flow_PidKplus",
00423 nPidBins, pidMin, pidMax);
00424 mHistPidKplus->SetXTitle("(PID - Mean) / Resolution");
00425 mHistPidKplus->SetYTitle("Counts");
00426
00427
00428 mHistPidKminus = new TH1F("Flow_PidKminus", "Flow_PidKminus",
00429 nPidBins, pidMin, pidMax);
00430 mHistPidKminus->SetXTitle("(PID - Mean) / Resolution");
00431 mHistPidKminus->SetYTitle("Counts");
00432
00433
00434 mHistPidDeuteron = new TH1F("Flow_PidDeuteron", "Flow_PidDeuteron",
00435 nPidBins, pidMin, pidMax);
00436 mHistPidDeuteron->SetXTitle("(PID - Mean) / Resolution");
00437 mHistPidDeuteron->SetYTitle("Counts");
00438
00439
00440 mHistPidAntiDeuteron = new TH1F("Flow_PidAntiDeuteron",
00441 "Flow_PidAntiDeuteron",
00442 nPidBins, pidMin, pidMax);
00443 mHistPidAntiDeuteron->SetXTitle("(PID - Mean) / Resolution");
00444 mHistPidAntiDeuteron->SetYTitle("Counts");
00445
00446
00447 mHistPidElectron = new TH1F("Flow_PidElectron", "Flow_PidElectron",
00448 nPidBins, pidMin, pidMax);
00449 mHistPidElectron->SetXTitle("(PID - Mean) / Resolution");
00450 mHistPidElectron->SetYTitle("Counts");
00451
00452
00453 mHistPidPositron = new TH1F("Flow_PidPositron", "Flow_PidPositron",
00454 nPidBins, pidMin, pidMax);
00455 mHistPidPositron->SetXTitle("(PID - Mean) / Resolution");
00456 mHistPidPositron->SetYTitle("Counts");
00457
00458
00459 mHistPidPiPlusPart = new TH1F("Flow_PidPiPlusPart",
00460 "Flow_PidPiPlusPart",
00461 nPidBins, pidMin, pidMax);
00462 mHistPidPiPlusPart->SetXTitle("(PID - Mean) / Resolution");
00463 mHistPidPiPlusPart->SetYTitle("Counts");
00464
00465
00466 mHistPidPiMinusPart = new TH1F("Flow_PidPiMinusPart",
00467 "Flow_PidPiMinusPart",
00468 nPidBins, pidMin, pidMax);
00469 mHistPidPiMinusPart->SetXTitle("(PID - Mean) / Resolution");
00470 mHistPidPiMinusPart->SetYTitle("Counts");
00471
00472
00473 mHistPidProtonPart = new TH1F("Flow_PidProtonPart",
00474 "Flow_PidProtonPart",
00475 nPidBins, pidMin, pidMax);
00476 mHistPidProtonPart->SetXTitle("(PID - Mean) / Resolution");
00477 mHistPidProtonPart->SetYTitle("Counts");
00478
00479
00480 mHistPidAntiProtonPart = new TH1F("Flow_PidAntiProtonPart",
00481 "Flow_PidAntiProtonPart",
00482 nPidBins, pidMin, pidMax);
00483 mHistPidAntiProtonPart->SetXTitle("(PID - Mean) / Resolution");
00484 mHistPidAntiProtonPart->SetYTitle("Counts");
00485
00486
00487 mHistPidKplusPart = new TH1F("Flow_PidKplusPart",
00488 "Flow_PidKplusPart",
00489 nPidBins, pidMin, pidMax);
00490 mHistPidKplusPart->SetXTitle("(PID - Mean) / Resolution");
00491 mHistPidKplusPart->SetYTitle("Counts");
00492
00493
00494 mHistPidKminusPart = new TH1F("Flow_PidKminusPart",
00495 "Flow_PidKminusPart",
00496 nPidBins, pidMin, pidMax);
00497 mHistPidKminusPart->SetXTitle("(PID - Mean) / Resolution");
00498 mHistPidKminusPart->SetYTitle("Counts");
00499
00500
00501 mHistPidDeuteronPart = new TH1F("Flow_PidDeuteronPart",
00502 "Flow_PidDeuteronPart",
00503 nPidBins, pidMin, pidMax);
00504 mHistPidDeuteronPart->SetXTitle("(PID - Mean) / Resolution");
00505 mHistPidDeuteronPart->SetYTitle("Counts");
00506
00507
00508 mHistPidAntiDeuteronPart = new TH1F("Flow_PidAntiDeuteronPart",
00509 "Flow_PidAntiDeuteronPart",
00510 nPidBins, pidMin, pidMax);
00511 mHistPidAntiDeuteronPart->SetXTitle("(PID - Mean) / Resolution");
00512 mHistPidAntiDeuteronPart->SetYTitle("Counts");
00513
00514
00515 mHistPidElectronPart = new TH1F("Flow_PidElectronPart",
00516 "Flow_PidElectronPart",
00517 nPidBins, pidMin, pidMax);
00518 mHistPidElectronPart->SetXTitle("(PID - Mean) / Resolution");
00519 mHistPidElectronPart->SetYTitle("Counts");
00520
00521
00522 mHistPidPositronPart = new TH1F("Flow_PidPositronPart",
00523 "Flow_PidPositronPart",
00524 nPidBins, pidMin, pidMax);
00525 mHistPidPositronPart->SetXTitle("(PID - Mean) / Resolution");
00526 mHistPidPositronPart->SetYTitle("Counts");
00527
00528
00529 mHistPidMult = new TProfile("Flow_PidMult", "Flow_PidMult",
00530 13, 0.5, 13.5, 0., 10000., "");
00531 mHistPidMult->SetXTitle("all, h+, h-, pi+, pi-, pr+, pr-, K+, K-, d+, d-, e-, e+");
00532 mHistPidMult->SetYTitle("Multiplicity");
00533
00534
00535 mHistCent = new TH1F("Flow_Cent", "Flow_Cent",
00536 nCentBins, centMin, centMax);
00537 mHistCent->SetXTitle("Centrality Bin");
00538 mHistCent->SetYTitle("Counts");
00539
00540
00541 mHistCTBvsZDC2D = new TH2F("Flow_CTBvsZDC2D", "Flow_CTBvsZDC2D",
00542 125, 0, 500,
00543 125, 0, 40000);
00544 mHistCTBvsZDC2D->SetXTitle("ZDC sum");
00545 mHistCTBvsZDC2D->SetYTitle("CTB sum");
00546
00547
00548 mHistMeanDedxPos2D = new TH2F("Flow_MeanDedxPos2D",
00549 "Flow_MeanDedxPos2D",
00550 nMomenBins, pMin, pMax,
00551 nDedxBins, 0, dEdxMax);
00552 mHistMeanDedxPos2D->SetXTitle("log(momentum) (GeV/c)");
00553 mHistMeanDedxPos2D->SetYTitle("mean dEdx");
00554
00555
00556 mHistMeanDedxNeg2D = new TH2F("Flow_MeanDedxNeg2D",
00557 "Flow_MeanDedxNeg2D",
00558 nMomenBins, pMin, pMax,
00559 nDedxBins, 0, dEdxMax);
00560 mHistMeanDedxNeg2D->SetXTitle("log(momentum) (GeV/c)");
00561 mHistMeanDedxNeg2D->SetYTitle("mean dEdx");
00562
00563
00564 mHistMeanDedxPiPlus2D = new TH2F("Flow_MeanDedxPiPlus2D",
00565 "Flow_MeanDedxPiPlus2D",
00566 nMomenBins, pMin, pMax,
00567 nDedxBins, 0, dEdxMax);
00568 mHistMeanDedxPiPlus2D->SetXTitle("log(momentum) (GeV/c)");
00569 mHistMeanDedxPiPlus2D->SetYTitle("mean dEdx");
00570
00571
00572 mHistMeanDedxPiMinus2D = new TH2F("Flow_MeanDedxPiMinus2D",
00573 "Flow_MeanDedxPiMinus2D",
00574 nMomenBins, pMin, pMax,
00575 nDedxBins, 0, dEdxMax);
00576 mHistMeanDedxPiMinus2D->SetXTitle("log(momentum) (GeV/c)");
00577 mHistMeanDedxPiMinus2D->SetYTitle("mean dEdx");
00578
00579
00580 mHistMeanDedxProton2D = new TH2F("Flow_MeanDedxProton2D",
00581 "Flow_MeanDedxProton2D",
00582 nMomenBins, pMin, pMax,
00583 nDedxBins, 0, dEdxMax);
00584 mHistMeanDedxProton2D->SetXTitle("log(momentum) (GeV/c)");
00585 mHistMeanDedxProton2D->SetYTitle("mean dEdx");
00586
00587
00588 mHistMeanDedxPbar2D = new TH2F("Flow_MeanDedxPbar2D",
00589 "Flow_MeanDedxPbar2D",
00590 nMomenBins, pMin, pMax,
00591 nDedxBins, 0, dEdxMax);
00592 mHistMeanDedxPbar2D->SetXTitle("log(momentum) (GeV/c)");
00593 mHistMeanDedxPbar2D->SetYTitle("mean dEdx");
00594
00595
00596 mHistMeanDedxKplus2D = new TH2F("Flow_MeanDedxKplus2D",
00597 "Flow_MeanDedxKplus2D",
00598 nMomenBins, pMin, pMax,
00599 nDedxBins, 0, dEdxMax);
00600 mHistMeanDedxKplus2D->SetXTitle("log(momentum) (GeV/c)");
00601 mHistMeanDedxKplus2D->SetYTitle("mean dEdx");
00602
00603
00604 mHistMeanDedxKminus2D = new TH2F("Flow_MeanDedxKminus2D",
00605 "Flow_MeanDedxKminus2D",
00606 nMomenBins, pMin, pMax,
00607 nDedxBins, 0, dEdxMax);
00608 mHistMeanDedxKminus2D->SetXTitle("log(momentum) (GeV/c)");
00609 mHistMeanDedxKminus2D->SetYTitle("mean dEdx");
00610
00611
00612 mHistMeanDedxDeuteron2D = new TH2F("Flow_MeanDedxDeuteron2D",
00613 "Flow_MeanDedxDeuteron2D",
00614 nMomenBins, pMin, pMax,
00615 nDedxBins, 0, dEdxMax);
00616 mHistMeanDedxDeuteron2D->SetXTitle("log(momentum) (GeV/c)");
00617 mHistMeanDedxDeuteron2D->SetYTitle("mean dEdx");
00618
00619
00620 mHistMeanDedxAntiDeuteron2D = new TH2F("Flow_MeanDedxAntiDeuteron2D",
00621 "Flow_MeanDedxAntiDeuteron2D",
00622 nMomenBins, pMin, pMax,
00623 nDedxBins, 0, dEdxMax);
00624 mHistMeanDedxAntiDeuteron2D->SetXTitle("log(momentum) (GeV/c)");
00625 mHistMeanDedxAntiDeuteron2D->SetYTitle("mean dEdx");
00626
00627
00628 mHistMeanDedxElectron2D = new TH2F("Flow_MeanDedxElectron2D",
00629 "Flow_MeanDedxElectron2D",
00630 nMomenBins, pMin, pMax,
00631 nDedxBins, 0, dEdxMax);
00632 mHistMeanDedxElectron2D->SetXTitle("log(momentum) (GeV/c)");
00633 mHistMeanDedxElectron2D->SetYTitle("mean dEdx");
00634
00635
00636 mHistMeanDedxPositron2D = new TH2F("Flow_MeanDedxPositron2D",
00637 "Flow_MeanDedxPositron2D",
00638 nMomenBins, pMin, pMax,
00639 nDedxBins, 0, dEdxMax);
00640 mHistMeanDedxPositron2D->SetXTitle("log(momentum) (GeV/c)");
00641 mHistMeanDedxPositron2D->SetYTitle("mean dEdx");
00642
00643
00644 mZDC_SMD_west_vert = new TH1F("Flow_ZDC_SMD_west_vert","Flow_ZDC_SMD_west_vert",7,0.5,7.5);
00645 mZDC_SMD_east_vert = new TH1F("Flow_ZDC_SMD_east_vert","Flow_ZDC_SMD_east_vert",7,0.5,7.5);
00646 mZDC_SMD_west_hori = new TH1F("Flow_ZDC_SMD_west_hori","Flow_ZDC_SMD_west_hori",8,0.5,8.5);
00647 mZDC_SMD_east_hori = new TH1F("Flow_ZDC_SMD_east_hori","Flow_ZDC_SMD_east_hori",8,0.5,8.5);
00648 mHistZDCSMDPsiWgtEast = new TH1D("Flow_ZDCSMDPsiWgtEast","Flow_ZDCSMDPsiWgtEast",
00649 Flow::zdcsmd_nPsiBins,-twopi/2.,twopi/2.);
00650 mHistZDCSMDPsiWgtWest = new TH1D("Flow_ZDCSMDPsiWgtWest","Flow_ZDCSMDPsiWgtWest",
00651 Flow::zdcsmd_nPsiBins,-twopi/2.,twopi/2.);
00652 mHistZDCSMDPsiWgtTest = new TH1D("Flow_ZDCSMDPsiWgtTest","Flow_ZDCSMDPsiWgtTest",
00653 Flow::zdcsmd_nPsiBins,0.,twopi);
00654 mHistZDCSMDPsiWgtFull = new TH1D("Flow_ZDCSMDPsiWgtFull","Flow_ZDCSMDPsiWgtFull",
00655 Flow::zdcsmd_nPsiBins,0.,twopi);
00656 mHistZDCSMDPsiCorTest = new TH1D("Flow_ZDCSMDPsiCorTest","Flow_ZDCSMDPsiCorTest",
00657 Flow::zdcsmd_nPsiBins,-twopi/2.,twopi/2.);
00658 mHistZDCSMDPsiCorFull = new TH1D("Flow_ZDCSMDPsiCorFull","Flow_ZDCSMDPsiWgtFull",
00659 Flow::zdcsmd_nPsiBins,-twopi/2.,twopi/2.);
00660 TString* histTitle;
00661 for (int i = 0; i < Flow::nSels * Flow::nSubs; i++) {
00662
00663
00664 for (int j = 0; j < Flow::nHars; j++) {
00665 float order = (float)(j + 1);
00666
00667
00668 histTitle = new TString("Flow_Psi_Subs");
00669 *histTitle += i+1;
00670 histTitle->Append("_Har");
00671 *histTitle += j+1;
00672 histSub[i].histSubHar[j].mHistPsiSubs = new TH1F(histTitle->Data(),
00673 histTitle->Data(), nPsiBins, psiMin, (psiMax / order));
00674 histSub[i].histSubHar[j].mHistPsiSubs->Sumw2();
00675 histSub[i].histSubHar[j].mHistPsiSubs->SetXTitle
00676 ("Event Plane Angle (rad)");
00677 histSub[i].histSubHar[j].mHistPsiSubs->SetYTitle("Counts");
00678 delete histTitle;
00679 }
00680 }
00681
00682 for (int k = 0; k < Flow::nSels; k++) {
00683
00684
00685
00686
00687 histTitle = new TString("Flow_Cos_Sel");
00688 *histTitle += k+1;
00689 histFull[k].mHistCos = new TProfile(histTitle->Data(), histTitle->Data(),
00690 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5, -1., 1., "");
00691 histFull[k].mHistCos->SetXTitle("Harmonic");
00692 histFull[k].mHistCos->SetYTitle("<cos(n*delta_Psi)>");
00693 delete histTitle;
00694
00695
00696 histTitle = new TString("Flow_Res_Sel");
00697 *histTitle += k+1;
00698 histFull[k].mHistRes = new TH1F(histTitle->Data(), histTitle->Data(),
00699 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5);
00700 histFull[k].mHistRes->SetXTitle("Harmonic");
00701 histFull[k].mHistRes->SetYTitle("Resolution");
00702 delete histTitle;
00703
00704
00705 histTitle = new TString("Flow_vObs_Sel");
00706 *histTitle += k+1;
00707 histFull[k].mHist_vObs = new TProfile(histTitle->Data(), histTitle->Data(),
00708 Flow::nHars, 0.5, (float)(Flow::nHars) + 0.5, -1000., 1000., "");
00709 histFull[k].mHist_vObs->SetXTitle("Harmonic");
00710 histFull[k].mHist_vObs->SetYTitle("vObs (%)");
00711 delete histTitle;
00712
00713
00714 for (int j = 0; j < Flow::nHars; j++) {
00715 float order = (float)(j+1);
00716
00717
00718 histTitle = new TString("Flow_Mul_Sel");
00719 *histTitle += k+1;
00720 histTitle->Append("_Har");
00721 *histTitle += j+1;
00722 histFull[k].histFullHar[j].mHistMult = new TH1F(histTitle->Data(),
00723 histTitle->Data(), nMultBins, multMin, multMax);
00724 histFull[k].histFullHar[j].mHistMult->SetXTitle("Multiplicity");
00725 histFull[k].histFullHar[j].mHistMult->SetYTitle("Counts");
00726 delete histTitle;
00727
00728
00729 histTitle = new TString("Flow_Psi_Sel");
00730 *histTitle += k+1;
00731 histTitle->Append("_Har");
00732 *histTitle += j+1;
00733 histFull[k].histFullHar[j].mHistPsi = new TH1F(histTitle->Data(),
00734 histTitle->Data(), nPsiBins, psiMin, psiMax / order);
00735 histFull[k].histFullHar[j].mHistPsi->Sumw2();
00736 histFull[k].histFullHar[j].mHistPsi->SetXTitle
00737 ("Event Plane Angle (rad)");
00738 histFull[k].histFullHar[j].mHistPsi->SetYTitle("Counts");
00739 delete histTitle;
00740
00741
00742 histTitle = new TString("Flow_PhiLab_Sel");
00743 *histTitle += k+1;
00744 histTitle->Append("_Har");
00745 *histTitle += j+1;
00746 histFull[k].histFullHar[j].mHistPhiLab = new TH1F(histTitle->Data(),
00747 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
00748 histFull[k].histFullHar[j].mHistPhiLab->SetXTitle("Particle Lab Angle (rad)");
00749 histFull[k].histFullHar[j].mHistPhiLab->SetYTitle("Counts");
00750 histFull[k].histFullHar[j].mHistPhiLab->Sumw2();
00751 delete histTitle;
00752
00753
00754 histTitle = new TString("FlowReCentX_Sel");
00755 *histTitle += k+1;
00756 *histTitle += "_Har";
00757 *histTitle += j+1;
00758 histFull[k].histFullHar[j].mHistReCentX = new TProfile(histTitle->Data(),
00759 histTitle->Data(), 3, 0.5, 3.5);
00760 histFull[k].histFullHar[j].mHistReCentX->SetXTitle("FTPCE, FTPCW, TPCE, TPCW");
00761 histFull[k].histFullHar[j].mHistReCentX->SetYTitle("<cos n #phi>");
00762 delete histTitle;
00763
00764 histTitle = new TString("FlowReCentY_Sel");
00765 *histTitle += k+1;
00766 *histTitle += "_Har";
00767 *histTitle += j+1;
00768 histFull[k].histFullHar[j].mHistReCentY = new TProfile(histTitle->Data(),
00769 histTitle->Data(), 3, 0.5, 3.5);
00770 histFull[k].histFullHar[j].mHistReCentY->SetXTitle("FTPCE, FTPCW, TPCE, TPCW");
00771 histFull[k].histFullHar[j].mHistReCentY->SetYTitle("<sin n #phi>");
00772 delete histTitle;
00773
00774
00775 histTitle = new TString("FlowQreCent_Sel");
00776 *histTitle += k+1;
00777 *histTitle += "_Har";
00778 *histTitle += j+1;
00779 histFull[k].histFullHar[j].mHistQreCent = new TProfile(histTitle->Data(),
00780 histTitle->Data(), 2, 0.5, 2.5);
00781 histFull[k].histFullHar[j].mHistQreCent->SetXTitle("X, Y");
00782 histFull[k].histFullHar[j].mHistQreCent->SetYTitle("<Q_{n}/M>");
00783
00784
00785 histTitle = new TString("Flow_QXY2D_Sel");
00786 *histTitle += k+1;
00787 histTitle->Append("_Har");
00788 *histTitle += j+1;
00789 histFull[k].histFullHar[j].mHistQXY2D = new TH2D(histTitle->Data(), histTitle->Data(),
00790 nQXYBins, QXYMin, QXYMax, nQXYBins, QXYMin, QXYMax);
00791 histFull[k].histFullHar[j].mHistQXY2D->SetXTitle("Q_X/M");
00792 histFull[k].histFullHar[j].mHistQXY2D->SetYTitle("Q_Y/M");
00793 delete histTitle;
00794
00795
00796 histTitle = new TString("Flow_QFTPCSubXY2D_Sel");
00797 *histTitle += k+1;
00798 histTitle->Append("_Har");
00799 *histTitle += j+1;
00800 histFull[k].histFullHar[j].mHistQFTPCSubXY2D = new TH2D(histTitle->Data(), histTitle->Data(),
00801 nQXYBins, QXYMin*2., QXYMax*2., nQXYBins, QXYMin*2., QXYMax*2.);
00802 histFull[k].histFullHar[j].mHistQFTPCSubXY2D->SetXTitle("QSub_X/M");
00803 histFull[k].histFullHar[j].mHistQFTPCSubXY2D->SetYTitle("QSub_Y/M");
00804 delete histTitle;
00805
00806
00807 histTitle = new TString("Flow_QTPCSubXY2D_Sel");
00808 *histTitle += k+1;
00809 histTitle->Append("_Har");
00810 *histTitle += j+1;
00811 histFull[k].histFullHar[j].mHistQTPCSubXY2D = new TH2D(histTitle->Data(), histTitle->Data(),
00812 nQXYBins, QXYMin*2., QXYMax*2., nQXYBins, QXYMin*2., QXYMax*2.);
00813 histFull[k].histFullHar[j].mHistQTPCSubXY2D->SetXTitle("QSub_X/M");
00814 histFull[k].histFullHar[j].mHistQTPCSubXY2D->SetYTitle("QSub_Y/M");
00815 delete histTitle;
00816
00817
00818 histTitle = new TString("Flow_Psi_Diff_Sel");
00819 *histTitle += k+1;
00820 histTitle->Append("_Har");
00821 *histTitle += j+1;
00822
00823 if (k == 0 ) {
00824 Int_t my_order = 1;
00825 if (j == 1) {
00826 my_order = 2;
00827 }
00828 histFull[k].histFullHar[j].mHistPsi_Diff = new TH1F(histTitle->Data(),
00829 histTitle->Data(), nPsiBins, -psiMax/my_order/2., psiMax/my_order/2.);
00830 } else {
00831 histFull[k].histFullHar[j].mHistPsi_Diff = new TH1F(histTitle->Data(),
00832 histTitle->Data(), nPsiBins, -psiMax/2., psiMax/2.);
00833 }
00834
00835 if (k == 0) {
00836 if (j == 0) {
00837 histFull[k].histFullHar[j].mHistPsi_Diff->SetXTitle
00838 ("#Psi_{1,Sel1} - #Psi_{1,Sel2}(rad)");
00839 } else if (j == 1) {
00840 histFull[k].histFullHar[j].mHistPsi_Diff->SetXTitle
00841 ("#Psi_{2,Sel1} - #Psi_{2,Sel2}(rad)");
00842 }
00843 } else if (k == 1) {
00844 if (j == 0) {
00845 histFull[k].histFullHar[j].mHistPsi_Diff->SetXTitle
00846 ("#Psi_{1,Sel1} - #Psi_{2,Sel2}(rad)");
00847 } else if (j == 1) {
00848 histFull[k].histFullHar[j].mHistPsi_Diff->SetXTitle
00849 ("#Psi_{1,Sel1} - #Psi_{2,Sel1}(rad)");
00850 }
00851 }
00852
00853 histFull[k].histFullHar[j].mHistPsi_Diff->SetYTitle("Counts");
00854 delete histTitle;
00855
00856
00857 histTitle = new TString("Flow_Psi_Sub_Corr_Sel");
00858 *histTitle += k+1;
00859 histTitle->Append("_Har");
00860 *histTitle += j+1;
00861 histFull[k].histFullHar[j].mHistPsiSubCorr = new TH1F(histTitle->Data(),
00862 histTitle->Data(), nPsiBins, psiMin, psiMax / order);
00863 histFull[k].histFullHar[j].mHistPsiSubCorr->Sumw2();
00864 histFull[k].histFullHar[j].mHistPsiSubCorr->SetXTitle
00865 ("Sub-Event Correlation (rad)");
00866 histFull[k].histFullHar[j].mHistPsiSubCorr->SetYTitle("Counts");
00867 delete histTitle;
00868
00869
00870 histTitle = new TString("Flow_Psi_Sub_Corr_Diff_Sel");
00871 *histTitle += k+1;
00872 histTitle->Append("_Har");
00873 *histTitle += j+1;
00874 histFull[k].histFullHar[j].mHistPsiSubCorrDiff = new
00875 TH1F(histTitle->Data(), histTitle->Data(), nPsiBins, psiMin,
00876 psiMax / (order+1.));
00877 histFull[k].histFullHar[j].mHistPsiSubCorrDiff->Sumw2();
00878 histFull[k].histFullHar[j].mHistPsiSubCorrDiff->SetXTitle
00879 ("Sub-Event Correlation (rad)");
00880 histFull[k].histFullHar[j].mHistPsiSubCorrDiff->SetYTitle("Counts");
00881 delete histTitle;
00882
00883
00884 histTitle = new TString("Flow_q_Sel");
00885 *histTitle += k+1;
00886 histTitle->Append("_Har");
00887 *histTitle += j+1;
00888 histFull[k].histFullHar[j].mHist_q = new TH1F(histTitle->Data(),
00889 histTitle->Data(), n_qBins, qMin, qMax);
00890 histFull[k].histFullHar[j].mHist_q->Sumw2();
00891 histFull[k].histFullHar[j].mHist_q->SetXTitle("q = |Q|/sqrt(Mult)");
00892 histFull[k].histFullHar[j].mHist_q->SetYTitle("Counts");
00893 delete histTitle;
00894
00895
00896 histTitle = new TString("Flow_Phi_Corr_Sel");
00897 *histTitle += k+1;
00898 histTitle->Append("_Har");
00899 *histTitle += j+1;
00900 histFull[k].histFullHar[j].mHistPhiCorr = new TH1F(histTitle->Data(),
00901 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax / order);
00902 histFull[k].histFullHar[j].mHistPhiCorr->Sumw2();
00903 histFull[k].histFullHar[j].mHistPhiCorr->
00904 SetXTitle("Particle-Plane Correlation (rad)");
00905 histFull[k].histFullHar[j].mHistPhiCorr->SetYTitle("Counts");
00906 delete histTitle;
00907
00908
00909 histTitle = new TString("Flow_Yield2D_Sel");
00910 *histTitle += k+1;
00911 histTitle->Append("_Har");
00912 *histTitle += j+1;
00913 histFull[k].histFullHar[j].mHistYield2D = new TH2D(histTitle->Data(),
00914 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax,
00915 Flow::nPtBins, Flow::ptMin, Flow::ptMax);
00916 histFull[k].histFullHar[j].mHistYield2D->Sumw2();
00917 histFull[k].histFullHar[j].mHistYield2D->SetXTitle("Pseudorapidty");
00918 histFull[k].histFullHar[j].mHistYield2D->SetYTitle("Pt (GeV/c)");
00919 delete histTitle;
00920
00921
00922 histTitle = new TString("Flow_vObs2D_Sel");
00923 *histTitle += k+1;
00924 histTitle->Append("_Har");
00925 *histTitle += j+1;
00926 histFull[k].histFullHar[j].mHist_vObs2D = new TProfile2D(histTitle->Data(),
00927 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax, nPtBinsPart,
00928 Flow::ptMin, ptMaxPart, -1000., 1000., "");
00929 histFull[k].histFullHar[j].mHist_vObs2D->SetXTitle((char*)xLabel.Data());
00930 histFull[k].histFullHar[j].mHist_vObs2D->SetYTitle("Pt (GeV/c)");
00931 delete histTitle;
00932
00933
00934 histTitle = new TString("Flow_vObsEta_Sel");
00935 *histTitle += k+1;
00936 histTitle->Append("_Har");
00937 *histTitle += j+1;
00938 histFull[k].histFullHar[j].mHist_vObsEta = new TProfile(histTitle->Data(),
00939 histTitle->Data(), mNEtaBins, mEtaMin, mEtaMax, -1000., 1000., "");
00940 histFull[k].histFullHar[j].mHist_vObsEta->SetXTitle((char*)xLabel.Data());
00941 histFull[k].histFullHar[j].mHist_vObsEta->SetYTitle("v (%)");
00942 delete histTitle;
00943
00944 histTitle = new TString("Flow_vObsPt_Sel");
00945 *histTitle += k+1;
00946 histTitle->Append("_Har");
00947 *histTitle += j+1;
00948 histFull[k].histFullHar[j].mHist_vObsPt = new TProfile(histTitle->Data(),
00949 histTitle->Data(), nPtBinsPart, Flow::ptMin, ptMaxPart, -1000., 1000., "");
00950 histFull[k].histFullHar[j].mHist_vObsPt->SetXTitle("Pt (GeV/c)");
00951 histFull[k].histFullHar[j].mHist_vObsPt->SetYTitle("v (%)");
00952 delete histTitle;
00953 }
00954
00955
00956 for (int j = 0; j < 2; j++) {
00957
00958
00959
00960 histTitle = new TString("Flow_Phi_FarEast_Sel");
00961 *histTitle += k+1;
00962 histTitle->Append("_Har");
00963 *histTitle += j+1;
00964 histFull[k].histTwoHar[j].mHistPhiFarEast = new TH1D(histTitle->Data(),
00965 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
00966 histFull[k].histTwoHar[j].mHistPhiFarEast->SetXTitle
00967 ("Azimuthal Angles (rad)");
00968 histFull[k].histTwoHar[j].mHistPhiFarEast->SetYTitle("Counts");
00969 delete histTitle;
00970
00971
00972 histTitle = new TString("Flow_Phi_East_Sel");
00973 *histTitle += k+1;
00974 histTitle->Append("_Har");
00975 *histTitle += j+1;
00976 histFull[k].histTwoHar[j].mHistPhiEast = new TH1D(histTitle->Data(),
00977 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
00978 histFull[k].histTwoHar[j].mHistPhiEast->SetXTitle
00979 ("Azimuthal Angles (rad)");
00980 histFull[k].histTwoHar[j].mHistPhiEast->SetYTitle("Counts");
00981 delete histTitle;
00982
00983
00984 histTitle = new TString("Flow_Phi_West_Sel");
00985 *histTitle += k+1;
00986 histTitle->Append("_Har");
00987 *histTitle += j+1;
00988 histFull[k].histTwoHar[j].mHistPhiWest = new TH1D(histTitle->Data(),
00989 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
00990 histFull[k].histTwoHar[j].mHistPhiWest->SetXTitle
00991 ("Azimuthal Angles (rad)");
00992 histFull[k].histTwoHar[j].mHistPhiWest->SetYTitle("Counts");
00993 delete histTitle;
00994
00995
00996 histTitle = new TString("Flow_Phi_FarWest_Sel");
00997 *histTitle += k+1;
00998 histTitle->Append("_Har");
00999 *histTitle += j+1;
01000 histFull[k].histTwoHar[j].mHistPhiFarWest = new TH1D(histTitle->Data(),
01001 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01002 histFull[k].histTwoHar[j].mHistPhiFarWest->SetXTitle
01003 ("Azimuthal Angles (rad)");
01004 histFull[k].histTwoHar[j].mHistPhiFarWest->SetYTitle("Counts");
01005 delete histTitle;
01006
01007
01008 histTitle = new TString("Flow_Phi_FtpcFarEast_Sel");
01009 *histTitle += k+1;
01010 histTitle->Append("_Har");
01011 *histTitle += j+1;
01012 histFull[k].histTwoHar[j].mHistPhiFtpcFarEast = new TH1D(histTitle->Data(),
01013 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01014 histFull[k].histTwoHar[j].mHistPhiFtpcFarEast->SetXTitle
01015 ("Azimuthal Angles (rad)");
01016 histFull[k].histTwoHar[j].mHistPhiFtpcFarEast->SetYTitle("Counts");
01017 delete histTitle;
01018
01019
01020 histTitle = new TString("Flow_Phi_FtpcEast_Sel");
01021 *histTitle += k+1;
01022 histTitle->Append("_Har");
01023 *histTitle += j+1;
01024 histFull[k].histTwoHar[j].mHistPhiFtpcEast = new TH1D(histTitle->Data(),
01025 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01026 histFull[k].histTwoHar[j].mHistPhiFtpcEast->SetXTitle
01027 ("Azimuthal Angles (rad)");
01028 histFull[k].histTwoHar[j].mHistPhiFtpcEast->SetYTitle("Counts");
01029 delete histTitle;
01030
01031
01032 histTitle = new TString("Flow_Phi_FtpcWest_Sel");
01033 *histTitle += k+1;
01034 histTitle->Append("_Har");
01035 *histTitle += j+1;
01036 histFull[k].histTwoHar[j].mHistPhiFtpcWest = new TH1D(histTitle->Data(),
01037 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01038 histFull[k].histTwoHar[j].mHistPhiFtpcWest->SetXTitle
01039 ("Azimuthal Angles (rad)");
01040 histFull[k].histTwoHar[j].mHistPhiFtpcWest->SetYTitle("Counts");
01041 delete histTitle;
01042
01043
01044 histTitle = new TString("Flow_Phi_FtpcFarWest_Sel");
01045 *histTitle += k+1;
01046 histTitle->Append("_Har");
01047 *histTitle += j+1;
01048 histFull[k].histTwoHar[j].mHistPhiFtpcFarWest = new TH1D(histTitle->Data(),
01049 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01050 histFull[k].histTwoHar[j].mHistPhiFtpcFarWest->SetXTitle
01051 ("Azimuthal Angles (rad)");
01052 histFull[k].histTwoHar[j].mHistPhiFtpcFarWest->SetYTitle("Counts");
01053 delete histTitle;
01054
01055
01056
01057 histTitle = new TString("Flow_Phi_Weight_FarEast_Sel");
01058 *histTitle += k+1;
01059 histTitle->Append("_Har");
01060 *histTitle += j+1;
01061 histFull[k].histTwoHar[j].mHistPhiWgtFarEast = new TH1D(histTitle->Data(),
01062 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01063 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->Sumw2();
01064 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->SetXTitle
01065 ("Azimuthal Angles (rad)");
01066 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->SetYTitle("PhiWgt");
01067 delete histTitle;
01068
01069
01070 histTitle = new TString("Flow_Phi_Weight_East_Sel");
01071 *histTitle += k+1;
01072 histTitle->Append("_Har");
01073 *histTitle += j+1;
01074 histFull[k].histTwoHar[j].mHistPhiWgtEast = new TH1D(histTitle->Data(),
01075 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01076 histFull[k].histTwoHar[j].mHistPhiWgtEast->Sumw2();
01077 histFull[k].histTwoHar[j].mHistPhiWgtEast->SetXTitle
01078 ("Azimuthal Angles (rad)");
01079 histFull[k].histTwoHar[j].mHistPhiWgtEast->SetYTitle("PhiWgt");
01080 delete histTitle;
01081
01082
01083 histTitle = new TString("Flow_Phi_Weight_West_Sel");
01084 *histTitle += k+1;
01085 histTitle->Append("_Har");
01086 *histTitle += j+1;
01087 histFull[k].histTwoHar[j].mHistPhiWgtWest = new TH1D(histTitle->Data(),
01088 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01089 histFull[k].histTwoHar[j].mHistPhiWgtWest->Sumw2();
01090 histFull[k].histTwoHar[j].mHistPhiWgtWest->SetXTitle
01091 ("Azimuthal Angles (rad)");
01092 histFull[k].histTwoHar[j].mHistPhiWgtWest->SetYTitle("PhiWgt");
01093 delete histTitle;
01094
01095
01096 histTitle = new TString("Flow_Phi_Weight_FarWest_Sel");
01097 *histTitle += k+1;
01098 histTitle->Append("_Har");
01099 *histTitle += j+1;
01100 histFull[k].histTwoHar[j].mHistPhiWgtFarWest = new TH1D(histTitle->Data(),
01101 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01102 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->Sumw2();
01103 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->SetXTitle
01104 ("Azimuthal Angles (rad)");
01105 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->SetYTitle("PhiWgt");
01106 delete histTitle;
01107
01108
01109 histTitle = new TString("Flow_Phi_Weight_FtpcFarEast_Sel");
01110 *histTitle += k+1;
01111 histTitle->Append("_Har");
01112 *histTitle += j+1;
01113 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast = new TH1D(histTitle->Data(),
01114 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01115 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->Sumw2();
01116 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->SetXTitle
01117 ("Azimuthal Angles (rad)");
01118 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->SetYTitle("PhiWgt");
01119 delete histTitle;
01120
01121
01122 histTitle = new TString("Flow_Phi_Weight_FtpcEast_Sel");
01123 *histTitle += k+1;
01124 histTitle->Append("_Har");
01125 *histTitle += j+1;
01126 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast = new TH1D(histTitle->Data(),
01127 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01128 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast->Sumw2();
01129 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast->SetXTitle
01130 ("Azimuthal Angles (rad)");
01131 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast->SetYTitle("PhiWgt");
01132 delete histTitle;
01133
01134
01135 histTitle = new TString("Flow_Phi_Weight_FtpcWest_Sel");
01136 *histTitle += k+1;
01137 histTitle->Append("_Har");
01138 *histTitle += j+1;
01139 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest = new TH1D(histTitle->Data(),
01140 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01141 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest->Sumw2();
01142 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest->SetXTitle
01143 ("Azimuthal Angles (rad)");
01144 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest->SetYTitle("PhiWgt");
01145 delete histTitle;
01146
01147
01148 histTitle = new TString("Flow_Phi_Weight_FtpcFarWest_Sel");
01149 *histTitle += k+1;
01150 histTitle->Append("_Har");
01151 *histTitle += j+1;
01152 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest = new TH1D(histTitle->Data(),
01153 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01154 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->Sumw2();
01155 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->SetXTitle
01156 ("Azimuthal Angles (rad)");
01157 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->SetYTitle("PhiWgt");
01158 delete histTitle;
01159
01160
01161
01162
01163 histTitle = new TString("Flow_Phi_Flat_FarEast_Sel");
01164 *histTitle += k+1;
01165 histTitle->Append("_Har");
01166 *histTitle += j+1;
01167 histFull[k].histTwoHar[j].mHistPhiFlatFarEast = new TH1D(histTitle->Data(),
01168 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01169 histFull[k].histTwoHar[j].mHistPhiFlatFarEast->SetXTitle
01170 ("Azimuthal Angles (rad)");
01171 histFull[k].histTwoHar[j].mHistPhiFlatFarEast->SetYTitle("Counts");
01172 delete histTitle;
01173
01174
01175 histTitle = new TString("Flow_Phi_Flat_East_Sel");
01176 *histTitle += k+1;
01177 histTitle->Append("_Har");
01178 *histTitle += j+1;
01179 histFull[k].histTwoHar[j].mHistPhiFlatEast = new TH1D(histTitle->Data(),
01180 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01181 histFull[k].histTwoHar[j].mHistPhiFlatEast->SetXTitle
01182 ("Azimuthal Angles (rad)");
01183 histFull[k].histTwoHar[j].mHistPhiFlatEast->SetYTitle("Counts");
01184 delete histTitle;
01185
01186
01187 histTitle = new TString("Flow_Phi_Flat_West_Sel");
01188 *histTitle += k+1;
01189 histTitle->Append("_Har");
01190 *histTitle += j+1;
01191 histFull[k].histTwoHar[j].mHistPhiFlatWest = new TH1D(histTitle->Data(),
01192 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01193 histFull[k].histTwoHar[j].mHistPhiFlatWest->SetXTitle
01194 ("Azimuthal Angles (rad)");
01195 histFull[k].histTwoHar[j].mHistPhiFlatWest->SetYTitle("Counts");
01196 delete histTitle;
01197
01198
01199 histTitle = new TString("Flow_Phi_Flat_FarWest_Sel");
01200 *histTitle += k+1;
01201 histTitle->Append("_Har");
01202 *histTitle += j+1;
01203 histFull[k].histTwoHar[j].mHistPhiFlatFarWest = new TH1D(histTitle->Data(),
01204 histTitle->Data(), Flow::nPhiBins, phiMin, phiMax);
01205 histFull[k].histTwoHar[j].mHistPhiFlatFarWest->SetXTitle
01206 ("Azimuthal Angles (rad)");
01207 histFull[k].histTwoHar[j].mHistPhiFlatFarWest->SetYTitle("Counts");
01208 delete histTitle;
01209
01210
01211 histTitle = new TString("Flow_Phi_Flat_FtpcFarEast_Sel");
01212 *histTitle += k+1;
01213 histTitle->Append("_Har");
01214 *histTitle += j+1;
01215 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarEast = new TH1D(histTitle->Data(),
01216 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01217 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarEast->SetXTitle
01218 ("Azimuthal Angles (rad)");
01219 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarEast->SetYTitle("Counts");
01220 delete histTitle;
01221
01222
01223 histTitle = new TString("Flow_Phi_Flat_FtpcEast_Sel");
01224 *histTitle += k+1;
01225 histTitle->Append("_Har");
01226 *histTitle += j+1;
01227 histFull[k].histTwoHar[j].mHistPhiFlatFtpcEast = new TH1D(histTitle->Data(),
01228 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01229 histFull[k].histTwoHar[j].mHistPhiFlatFtpcEast->SetXTitle
01230 ("Azimuthal Angles (rad)");
01231 histFull[k].histTwoHar[j].mHistPhiFlatFtpcEast->SetYTitle("Counts");
01232 delete histTitle;
01233
01234
01235 histTitle = new TString("Flow_Phi_Flat_FtpcWest_Sel");
01236 *histTitle += k+1;
01237 histTitle->Append("_Har");
01238 *histTitle += j+1;
01239 histFull[k].histTwoHar[j].mHistPhiFlatFtpcWest = new TH1D(histTitle->Data(),
01240 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01241 histFull[k].histTwoHar[j].mHistPhiFlatFtpcWest->SetXTitle
01242 ("Azimuthal Angles (rad)");
01243 histFull[k].histTwoHar[j].mHistPhiFlatFtpcWest->SetYTitle("Counts");
01244 delete histTitle;
01245
01246
01247 histTitle = new TString("Flow_Phi_Flat_FtpcFarWest_Sel");
01248 *histTitle += k+1;
01249 histTitle->Append("_Har");
01250 *histTitle += j+1;
01251 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarWest = new TH1D(histTitle->Data(),
01252 histTitle->Data(), Flow::nPhiBinsFtpc, phiMin, phiMax);
01253 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarWest->SetXTitle
01254 ("Azimuthal Angles (rad)");
01255 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarWest->SetYTitle("Counts");
01256 delete histTitle;
01257
01258 }
01259 }
01260
01261
01262 TFile fileReCent("flow.reCentAna.root","R");
01263 if (reCentCalc) {
01264 gMessMgr->Info("##### FlowAnalysis: Calc reCent Pars");
01265 mCalcReCentPars = kTRUE;
01266 } else {
01267 mCalcReCentPars = kFALSE;
01268 }
01269
01270 gMessMgr->SetLimit("##### FlowAnalysis", 2);
01271 gMessMgr->Info("##### FlowAnalysis: $Id: StFlowAnalysisMaker.cxx,v 1.103 2011/07/25 15:54:42 posk Exp $");
01272
01273 return StMaker::Init();
01274 }
01275
01276
01277
01278 Bool_t StFlowAnalysisMaker::FillFromFlowEvent() {
01279
01280
01281 Bool_t kRETURN;
01282
01283 for (int k = 0; k < Flow::nSels; k++) {
01284 pFlowSelect->SetSelection(k);
01285 for (int j = 0; j < Flow::nHars; j++) {
01286 pFlowSelect->SetHarmonic(j);
01287 for (int n = 0; n < Flow::nSubs; n++) {
01288 pFlowSelect->SetSubevent(n);
01289 int i = Flow::nSels*k + n;
01290
01291 mQSub[i][j] = pFlowEvent->Q(pFlowSelect);
01292 mPsiSub[i][j] = pFlowEvent->Psi(pFlowSelect);
01293 mMultSub[i][j] = pFlowEvent->Mult(pFlowSelect);
01294 if (mMultSub[i][j] < 3.) kRETURN = kFALSE;
01295 if (mQSub[i][j].Mod()==0.) kRETURN = kFALSE;
01296 }
01297
01298 pFlowSelect->SetSubevent(-1);
01299
01300 mQ[k][j] = pFlowEvent->Q(pFlowSelect);
01301 mPsi[k][j] = pFlowEvent->Psi(pFlowSelect);
01302 m_q[k][j] = pFlowEvent->q(pFlowSelect);
01303 mMult[k][j] = pFlowEvent->Mult(pFlowSelect);
01304 if (mQ[k][j].Mod()==0.) kRETURN = kFALSE;
01305 }
01306 }
01307 mZDCSMD_e_PsiWgt = pFlowEvent->ZDCSMD_PsiWgtEast();
01308 mZDCSMD_w_PsiWgt = pFlowEvent->ZDCSMD_PsiWgtWest();
01309 mZDCSMD_f_PsiWgt = (pFlowEvent->UseZDCSMD()) ? pFlowEvent->ZDCSMD_PsiWgtFull():1.;
01310 mFlowWeight = (pFlowEvent->UseZDCSMD()) ? mZDCSMD_e_PsiWgt*mZDCSMD_w_PsiWgt*mZDCSMD_f_PsiWgt:1.;
01311
01312 return kRETURN;
01313 }
01314
01315
01316
01317 void StFlowAnalysisMaker::FillEventHistograms() {
01318
01319
01320
01321 unsigned int triggers = StFlowCutEvent::TriggersFound();
01322 mHistTrigger->Fill(triggers);
01323
01324
01325 int origMult = pFlowEvent->OrigMult();
01326 mHistOrigMult ->Fill((float)origMult);
01327 mHistMultEta ->Fill((float)pFlowEvent->MultEta());
01328 int cent = pFlowEvent->Centrality();
01329 mHistCent ->Fill((float)cent);
01330 int totalMult = pFlowEvent->TrackCollection()->size();
01331 mHistMult ->Fill((float)totalMult);
01332 UInt_t partMult = pFlowEvent->MultPart(pFlowSelect);
01333 mHistMultPart ->Fill((float)partMult);
01334 if (origMult) mHistMultOverOrig->Fill((float)totalMult / (float)origMult);
01335
01336 StThreeVectorF vertex = pFlowEvent->VertexPos();
01337 mHistVertexZ ->Fill(vertex.z());
01338 mHistVertexXY2D->Fill(vertex.x(), vertex.y());
01339
01340 mHistCTBvsZDC2D->Fill(pFlowEvent->ZDCe() + pFlowEvent->ZDCw(), pFlowEvent->CTB());
01341
01342
01343 for(int strip=1; strip<9; strip++) {
01344 mZDC_SMD_west_hori->Fill(strip,pFlowEvent->ZDCSMD(1,1,strip));
01345 mZDC_SMD_east_hori->Fill(strip,pFlowEvent->ZDCSMD(0,1,strip));
01346 if(strip==8) continue;
01347 mZDC_SMD_west_vert->Fill(strip,pFlowEvent->ZDCSMD(1,0,strip));
01348 mZDC_SMD_east_vert->Fill(strip,pFlowEvent->ZDCSMD(0,0,strip));
01349 }
01350 mHistZDCSMDPsiWgtEast->Fill(pFlowEvent->ZDCSMD_PsiEst());
01351 mHistZDCSMDPsiWgtWest->Fill(pFlowEvent->ZDCSMD_PsiWst());
01352 mHistZDCSMDPsiWgtTest->Fill(mPsi[0][0]);
01353 mHistZDCSMDPsiWgtFull->Fill(mPsi[0][0],mFlowWeight/mZDCSMD_f_PsiWgt);
01354 mHistZDCSMDPsiCorTest->Fill(pFlowEvent->ZDCSMD_PsiCorr());
01355 mHistZDCSMDPsiCorFull->Fill(pFlowEvent->ZDCSMD_PsiCorr(),mFlowWeight/mZDCSMD_f_PsiWgt);
01356
01357
01358 for (int k = 0; k < Flow::nSels; k++) {
01359 for (int j = 0; j < Flow::nHars; j++) {
01360 for (int n = 0; n < Flow::nSubs; n++) {
01361 int i = Flow::nSels*k + n;
01362 if(mPsiSub[i][j]) { histSub[i].histSubHar[j].mHistPsiSubs->Fill(mPsiSub[i][j]); }
01363 if (mQSub[i][j].Mod() && mMultSub[i][j]) {
01364 if (k==0) {
01365 double QSubx = mQSub[i][j].X() / (double)mMultSub[i][j];
01366 double QSuby = mQSub[i][j].Y() / (double)mMultSub[i][j];
01367 histFull[n].histFullHar[j].mHistQFTPCSubXY2D->Fill(QSubx,QSuby);
01368 } else if (k==1) {
01369 double QSubx = mQSub[i][j].X() / (double)mMultSub[i][j];
01370 double QSuby = mQSub[i][j].Y() / (double)mMultSub[i][j];
01371 histFull[n].histFullHar[j].mHistQTPCSubXY2D->Fill(QSubx,QSuby);
01372 }
01373 }
01374 }
01375 }
01376 }
01377
01378
01379 for (int k = 0; k < Flow::nSels; k++) {
01380 pFlowSelect->SetSelection(k);
01381 for (int j = 0; j < Flow::nHars; j++) {
01382 pFlowSelect->SetHarmonic(j);
01383 float order = (float)(j+1);
01384
01385 if (mPsi[k][j]) {
01386 histFull[k].histFullHar[j].mHistPsi->Fill(mPsi[k][j]);
01387
01388 }
01389 if (mQ[k][j].Mod() && mMult[k][j]) {
01390 double Qx = mQ[k][j].X() / (double)mMult[k][j];
01391 double Qy = mQ[k][j].Y() / (double)mMult[k][j];
01392 histFull[k].histFullHar[j].mHistQXY2D->Fill(Qx,Qy);
01393 }
01394 if (mPsi[0][j] && mPsi[1][j]) {
01395 if (k < 2 && j < 2) {
01396 if (k == 0) {
01397 float psi1 = mPsi[0][j];
01398 float psi2 = mPsi[1][j];
01399 float diff = psi1 - psi2;
01400 if (diff < -twopi/2./(j+1)) {
01401 diff += twopi/(j+1);
01402 } else if (diff > +twopi/2./(j+1)) {
01403 diff -= twopi/(j+1);
01404 }
01405 histFull[k].histFullHar[j].mHistPsi_Diff->Fill(diff);
01406 } else if (k == 1) {
01407 float psi1 = 0.;
01408 float psi2 = 0.;
01409 if (j == 0) {
01410 psi1 = mPsi[0][0];
01411 psi2 = mPsi[1][1];
01412 } else if (j == 1) {
01413 psi1 = mPsi[0][0];
01414 psi2 = mPsi[0][1];
01415 }
01416 float diff = psi1 - psi2;
01417 diff = (TMath::Abs(diff) > twopi/2.) ? ((diff > 0.) ? -(twopi - diff) :
01418 -(diff + twopi)) : diff;
01419 histFull[k].histFullHar[j].mHistPsi_Diff->Fill(diff);
01420 }
01421 }
01422 }
01423
01424 if (mPsiSub[Flow::nSels*k][j] != 0. && mPsiSub[Flow::nSels*k+1][j] != 0.) {
01425 float psiSubCorr;
01426 if(pFlowEvent->UseZDCSMD()) {
01427 psiSubCorr = pFlowEvent->ZDCSMD_PsiCorr();
01428 }
01429 else if (mV1Ep1Ep2 == kFALSE || order != 1) {
01430 psiSubCorr = mPsiSub[Flow::nSels*k][j] - mPsiSub[Flow::nSels*k+1][j];
01431 }
01432 else {
01433 psiSubCorr = mPsiSub[Flow::nSels*k][0] + mPsiSub[Flow::nSels*k+1][0] - 2.*mPsi[k][1];
01434 }
01435 histFull[k].mHistCos->Fill(order, (float)cos(order * psiSubCorr),mFlowWeight/mZDCSMD_f_PsiWgt);
01436 if (psiSubCorr < 0.) psiSubCorr += twopi / order;
01437 if (psiSubCorr > twopi / order) psiSubCorr -= twopi / order;
01438 histFull[k].histFullHar[j].mHistPsiSubCorr->Fill(psiSubCorr,mFlowWeight/mZDCSMD_f_PsiWgt);
01439 }
01440
01441 if (j < Flow::nHars - 1) {
01442 int j1 = 0, j2 = 0;
01443 float psiSubCorrDiff;
01444 if (j==0) {
01445 j1 = 1, j2 = 2;
01446 } else if (j==1) {
01447 j1 = 1, j2 = 3;
01448 } else if (j==2) {
01449 j1 = 2, j2 = 4;
01450 }
01451 psiSubCorrDiff = fmod((double)mPsiSub[Flow::nSels*k][j1-1],
01452 twopi/(double)j2) - fmod((double)mPsiSub[Flow::nSels*k+1][j2-1],
01453 twopi/(double)j2);
01454 if (psiSubCorrDiff < 0.) psiSubCorrDiff += twopi/(float)j2;
01455 if (psiSubCorrDiff) { histFull[k].histFullHar[j].mHistPsiSubCorrDiff->Fill(psiSubCorrDiff); }
01456 psiSubCorrDiff = fmod((double)mPsiSub[Flow::nSels*k][j2-1],
01457 twopi/(double)j2) - fmod((double)mPsiSub[Flow::nSels*k+1][j1-1],
01458 twopi/(double)j2);
01459 if (psiSubCorrDiff < 0.) psiSubCorrDiff += twopi/(float)j2;
01460 if (psiSubCorrDiff) { histFull[k].histFullHar[j].mHistPsiSubCorrDiff->Fill(psiSubCorrDiff); }
01461 }
01462
01463 histFull[k].histFullHar[j].mHistMult->Fill((float)mMult[k][j]);
01464 if (m_q[k][j]) { histFull[k].histFullHar[j].mHist_q->Fill(m_q[k][j]); }
01465
01466 if (mCalcReCentPars) {
01467
01468 TVector2 qReCent;
01469 qReCent = pFlowEvent->ReCentEPPar(pFlowSelect,"FTPCE");
01470 if (qReCent.X()) histFull[k].histFullHar[j].mHistReCentX->Fill(1., qReCent.X());
01471 if (qReCent.Y()) histFull[k].histFullHar[j].mHistReCentY->Fill(1., qReCent.Y());
01472 qReCent = pFlowEvent->ReCentEPPar(pFlowSelect,"FTPCW");
01473 if (qReCent.X()) histFull[k].histFullHar[j].mHistReCentX->Fill(2., qReCent.X());
01474 if (qReCent.Y()) histFull[k].histFullHar[j].mHistReCentY->Fill(2., qReCent.Y());
01475 qReCent = pFlowEvent->ReCentEPPar(pFlowSelect,"TPCE");
01476 if (qReCent.X()) histFull[k].histFullHar[j].mHistReCentX->Fill(3., qReCent.X());
01477 if (qReCent.Y()) histFull[k].histFullHar[j].mHistReCentY->Fill(3., qReCent.Y());
01478 qReCent = pFlowEvent->ReCentEPPar(pFlowSelect,"TPCW");
01479 if (qReCent.X()) histFull[k].histFullHar[j].mHistReCentX->Fill(4., qReCent.X());
01480 if (qReCent.Y()) histFull[k].histFullHar[j].mHistReCentY->Fill(4., qReCent.Y());
01481 }
01482 }
01483 }
01484 }
01485
01486
01487
01488 void StFlowAnalysisMaker::FillParticleHistograms() {
01489
01490
01491 float etaSymPosTpcN = 0.;
01492 float etaSymNegTpcN = 0.;
01493 float etaSymPosFtpcN = 0.;
01494 float etaSymNegFtpcN = 0.;
01495 float hPlusN = 0.;
01496 float hMinusN = 0.;
01497 float piPlusN = 0.;
01498 float piMinusN = 0.;
01499 float protonN = 0.;
01500 float pbarN = 0.;
01501 float kMinusN = 0.;
01502 float kPlusN = 0.;
01503 float deuteronN = 0.;
01504 float dbarN = 0.;
01505 float electronN = 0.;
01506 float positronN = 0.;
01507
01508
01509 StFlowTrackCollection* pFlowTracks = pFlowEvent->TrackCollection();
01510 StFlowTrackIterator itr;
01511
01512 for (itr = pFlowTracks->begin(); itr != pFlowTracks->end(); itr++) {
01513 StFlowTrack* pFlowTrack = *itr;
01514
01515 float phi = pFlowTrack->Phi();
01516 if (phi < 0.) phi += twopi;
01517 float eta = pFlowTrack->Eta();
01518 float zFirstPoint = 0.;
01519 float zLastPoint = 0.;
01520 if (pFlowEvent->FirstLastPoints()) {
01521 zFirstPoint = pFlowTrack->ZFirstPoint();
01522 zLastPoint = pFlowTrack->ZLastPoint();
01523 }
01524 float pt = pFlowTrack->Pt();
01525 int charge = pFlowTrack->Charge();
01526 float dca = pFlowTrack->Dca();
01527 float dcaGlobal = pFlowTrack->DcaGlobal();
01528 float chi2 = pFlowTrack->Chi2();
01529 int fitPts = pFlowTrack->FitPts();
01530 int maxPts = pFlowTrack->MaxPts();
01531 Char_t pid[10];
01532 strcpy(pid, pFlowTrack->Pid());
01533 float totalp = pFlowTrack->P();
01534 float logp = ::log(totalp);
01535 float dEdx = pFlowTrack->Dedx();
01536 StTrackTopologyMap map = pFlowTrack->TopologyMap();
01537
01538
01539
01540
01541 if (map.trackFtpcEast() || map.trackFtpcWest()) {
01542 mHistChargeFtpc ->Fill((float)charge);
01543 mHistDcaFtpc ->Fill(dca);
01544 mHistDcaGlobalFtpc->Fill(dcaGlobal);
01545 mHistChi2Ftpc ->Fill(chi2);
01546 mHistFitPtsFtpc ->Fill((float)fitPts);
01547 mHistMaxPtsFtpc ->Fill((float)maxPts);
01548 if (maxPts) mHistFitOverMaxFtpc->Fill((float)fitPts/(float)maxPts);
01549 }
01550
01551 else {
01552
01553
01554 if (strcmp(pid, "pi+") == 0) piPlusN++;
01555 if (strcmp(pid, "pi-") == 0) piMinusN++;
01556 if (strcmp(pid, "pr+") == 0) protonN++;
01557 if (strcmp(pid, "pr-") == 0) pbarN++;
01558 if (strcmp(pid, "k+") == 0) kPlusN++;
01559 if (strcmp(pid, "k-") == 0) kMinusN++;
01560 if (strcmp(pid, "d+") == 0) deuteronN++;
01561 if (strcmp(pid, "d-") == 0) dbarN++;
01562 if (strcmp(pid, "e-") == 0) electronN++;
01563 if (strcmp(pid, "e+") == 0) positronN++;
01564
01565 mHistDcaTpc ->Fill(dca);
01566 mHistDcaGlobalTpc->Fill(dcaGlobal);
01567 mHistChi2Tpc ->Fill(chi2);
01568 mHistFitPtsTpc ->Fill((float)fitPts);
01569 mHistMaxPtsTpc ->Fill((float)maxPts);
01570 if (maxPts) mHistFitOverMaxTpc->Fill((float)fitPts/(float)maxPts);
01571
01572 if (charge == 1) {
01573 hPlusN++;
01574 mHistMeanDedxPos2D->Fill(logp, dEdx);
01575 float piPlus = pFlowTrack->PidPiPlus();
01576 mHistPidPiPlus->Fill(piPlus);
01577 if (strcmp(pid, "pi+") == 0) {
01578 mHistMeanDedxPiPlus2D->Fill(logp, dEdx);
01579 mHistPidPiPlusPart->Fill(piPlus);
01580 }
01581 float kplus = pFlowTrack->PidKaonPlus();
01582 mHistPidKplus->Fill(kplus);
01583 if (strcmp(pid, "k+") == 0) {
01584 mHistMeanDedxKplus2D->Fill(logp, dEdx);
01585 mHistPidKplusPart->Fill(kplus);
01586 }
01587 float proton = pFlowTrack->PidProton();
01588 mHistPidProton->Fill(proton);
01589 if (strcmp(pid, "pr+") == 0) {
01590 mHistMeanDedxProton2D->Fill(logp, dEdx);
01591 mHistPidProtonPart->Fill(proton);
01592 }
01593 float deuteron = pFlowTrack->PidDeuteron();
01594 mHistPidDeuteron->Fill(deuteron);
01595 if (strcmp(pid, "d+") == 0) {
01596 mHistMeanDedxDeuteron2D->Fill(logp, dEdx);
01597 mHistPidDeuteronPart->Fill(deuteron);
01598 }
01599 float positron = pFlowTrack->PidPositron();
01600 mHistPidPositron->Fill(positron);
01601 if (strcmp(pid, "e+") == 0) {
01602 mHistMeanDedxPositron2D->Fill(logp, dEdx);
01603 mHistPidPositronPart->Fill(positron);
01604 }
01605 } else if (charge == -1) {
01606 hMinusN++;
01607 mHistMeanDedxNeg2D->Fill(logp, dEdx);
01608 float piMinus = pFlowTrack->PidPiMinus();
01609 mHistPidPiMinus->Fill(piMinus);
01610 if (strcmp(pid, "pi-") == 0) {
01611 mHistMeanDedxPiMinus2D->Fill(logp, dEdx);
01612 mHistPidPiMinusPart->Fill(piMinus);
01613 }
01614 float kminus = pFlowTrack->PidKaonMinus();
01615 mHistPidKminus->Fill(kminus);
01616 if (strcmp(pid, "k-") == 0) {
01617 mHistMeanDedxKminus2D->Fill(logp, dEdx);
01618 mHistPidKminusPart->Fill(kminus);
01619 }
01620 float antiproton = pFlowTrack->PidAntiProton();
01621 mHistPidAntiProton->Fill(antiproton);
01622 if (strcmp(pid, "pr-") == 0) {
01623 mHistMeanDedxPbar2D->Fill(logp, dEdx);
01624 mHistPidAntiProtonPart->Fill(antiproton);
01625 }
01626 float antideuteron = pFlowTrack->PidAntiDeuteron();
01627 mHistPidAntiDeuteron->Fill(antideuteron);
01628 if (strcmp(pid, "d-") == 0) {
01629 mHistMeanDedxAntiDeuteron2D->Fill(logp, dEdx);
01630 mHistPidAntiDeuteronPart->Fill(antideuteron);
01631 }
01632 float electron = pFlowTrack->PidElectron();
01633 mHistPidElectron->Fill(electron);
01634 if (strcmp(pid, "e-") == 0) {
01635 mHistMeanDedxElectron2D->Fill(logp, dEdx);
01636 mHistPidElectronPart->Fill(electron);
01637 }
01638 }
01639 }
01640
01641
01642 mHistEtaPtPhi3D->Fill(eta, pt, phi);
01643 mHistYieldAll2D->Fill(eta, pt);
01644 if (pFlowSelect->SelectPart(pFlowTrack)) {
01645 if (strlen(pFlowSelect->PidPart()) != 0) {
01646 float rapidity = pFlowTrack->Y();
01647 mHistBinEta->Fill(rapidity, rapidity);
01648 mHistYieldPart2D->Fill(rapidity, pt);
01649 } else {
01650 mHistBinEta->Fill(eta, eta);
01651 mHistYieldPart2D->Fill(eta, pt);
01652 }
01653 mHistBinPt->Fill(pt, pt);
01654 }
01655
01656
01657
01658 if (map.hasHitInDetector(kTpcId)) {
01659 (eta > 0.) ? etaSymPosTpcN++ : etaSymNegTpcN++;
01660 }
01661
01662 else if (map.trackFtpcEast() || map.trackFtpcWest()) {
01663 (eta > 0.) ? etaSymPosFtpcN++ : etaSymNegFtpcN++;
01664 }
01665
01666 TVector2 Q, reCent;
01667 Double_t mult;
01668
01669 for (int k = 0; k < Flow::nSels; k++) {
01670 pFlowSelect->SetSelection(k);
01671 for (int j = 0; j < Flow::nHars; j++) {
01672 bool oddHar = (j+1) % 2;
01673 pFlowSelect->SetHarmonic(j);
01674 double order = (double)(j+1);
01675 double orderEP = order;
01676 float psi_i = 0., psi_2 = 0.;
01677 if (pFlowEvent->EtaSubs()) {
01678 int i = Flow::nSels*k;
01679 psi_i = (eta > 0.) ? mPsiSub[i+1][j] : mPsiSub[i][j];
01680 } else if (pFlowEvent->RanSubs()) {
01681 int i = Flow::nSels*k;
01682 if (pFlowTrack->Select(j,k,0)) {
01683 psi_i = mPsiSub[i+1][j];
01684 } else if (pFlowTrack->Select(j,k,1)) {
01685 psi_i = mPsiSub[i][j];
01686 } else {
01687 int r = (eta > 0.) ? 1 : 0;
01688 psi_i = mPsiSub[i+r][j];
01689 }
01690 } else if (order > 3. && !oddHar) {
01691 psi_i = mPsi[k][1];
01692 if (psi_i > twopi/order) psi_i -= twopi/order;
01693 if (psi_i > twopi/order) psi_i -= twopi/order;
01694 } else {
01695 psi_i = mPsi[k][j];
01696 }
01697
01698 if (pFlowSelect->Select(pFlowTrack)) {
01699
01700 histFull[k].histFullHar[j].mHistYield2D->Fill(eta, pt);
01701
01702
01703 double phiWgt = pFlowEvent->PhiWeight(k, j, pFlowTrack);
01704 TVector2 reCent = pFlowEvent->ReCentEP(k, j, pFlowTrack);
01705
01706 if (pFlowMaker->PhiWgtCalc() && j < 2) {
01707
01708
01709 StDetectorId detId;
01710 Bool_t kTpcFarEast = kFALSE;
01711 Bool_t kTpcEast = kFALSE;
01712 Bool_t kTpcWest = kFALSE;
01713 Bool_t kTpcFarWest = kFALSE;
01714 Bool_t kFtpcFarEast = kFALSE;
01715 Bool_t kFtpcEast = kFALSE;
01716 Bool_t kFtpcWest = kFALSE;
01717 Bool_t kFtpcFarWest = kFALSE;
01718 if (map.hasHitInDetector(kTpcId) || (map.data(0) == 0 && map.data(1) == 0)) {
01719
01720 detId = kTpcId;
01721
01722 if (pFlowEvent->FirstLastPoints()) {
01723 if (zFirstPoint > 0. && zLastPoint > 0.) {
01724 kTpcFarWest = kTRUE;
01725 } else if (zFirstPoint > 0. && zLastPoint < 0.) {
01726 kTpcWest = kTRUE;
01727 } else if (zFirstPoint < 0. && zLastPoint > 0.) {
01728 kTpcEast = kTRUE;
01729 } else {
01730 kTpcFarEast = kTRUE;
01731 }
01732 } else {
01733 Float_t vertexZ = pFlowEvent->VertexPos().z();
01734 if (eta > 0. && vertexZ > 0.) {
01735 kTpcFarWest = kTRUE;
01736 } else if (eta > 0. && vertexZ < 0.) {
01737 kTpcWest = kTRUE;
01738 } else if (eta < 0. && vertexZ > 0.) {
01739 kTpcEast = kTRUE;
01740 } else {
01741 kTpcFarEast = kTRUE;
01742 }
01743 }
01744 } else if (map.trackFtpcEast()) {
01745 detId = kFtpcEastId;
01746 Float_t vertexZ = pFlowEvent->VertexPos().z();
01747 if (vertexZ > 0.) {
01748 kFtpcEast = kTRUE;
01749 } else {
01750 kFtpcFarEast = kTRUE;
01751 }
01752 } else if (map.trackFtpcWest()) {
01753 detId = kFtpcWestId;
01754 Float_t vertexZ = pFlowEvent->VertexPos().z();
01755 if (vertexZ > 0.) {
01756 kFtpcFarWest = kTRUE;
01757 } else {
01758 kFtpcWest = kTRUE;
01759 }
01760 } else {
01761 detId = kUnknownId;
01762 }
01763
01764
01765 float wt = 1.;
01766 if (pFlowEvent->PtWgt()) {
01767 wt *= (pt < pFlowEvent->PtWgtSaturation()) ? pt :
01768 pFlowEvent->PtWgtSaturation();
01769 }
01770 float etaAbs = fabs(eta);
01771
01772 if (pFlowEvent->EtaWgt() && j==0 && etaAbs > 1.) { wt *= etaAbs; }
01773
01774
01775 if (kFtpcFarEast) {
01776 histFull[k].histTwoHar[j].mHistPhiFtpcFarEast->Fill(phi,wt);
01777 } else if (kFtpcEast) {
01778 histFull[k].histTwoHar[j].mHistPhiFtpcEast->Fill(phi,wt);
01779 } else if (kFtpcWest) {
01780 histFull[k].histTwoHar[j].mHistPhiFtpcWest->Fill(phi,wt);
01781 } else if (kFtpcFarWest) {
01782 histFull[k].histTwoHar[j].mHistPhiFtpcFarWest->Fill(phi,wt);
01783 } else if (kTpcFarEast){
01784 histFull[k].histTwoHar[j].mHistPhiFarEast->Fill(phi,wt);
01785 } else if (kTpcEast){
01786 histFull[k].histTwoHar[j].mHistPhiEast->Fill(phi,wt);
01787 } else if (kTpcWest){
01788 histFull[k].histTwoHar[j].mHistPhiWest->Fill(phi,wt);
01789 } else if (kTpcFarWest){
01790 histFull[k].histTwoHar[j].mHistPhiFarWest->Fill(phi,wt);
01791 }
01792
01793
01794 if (pFlowEvent->FirstLastPoints() && !pFlowEvent->FirstLastPhiWgt()) {
01795 kTpcFarEast = kFALSE;
01796 kTpcEast = kFALSE;
01797 kTpcWest = kFALSE;
01798 kTpcFarWest = kFALSE;
01799 Float_t vertexZ = pFlowEvent->VertexPos().z();
01800 if (eta > 0. && vertexZ > 0.) {
01801 kTpcFarWest = kTRUE;
01802 } else if (eta > 0. && vertexZ < 0.) {
01803 kTpcWest = kTRUE;
01804 } else if (eta < 0. && vertexZ > 0.) {
01805 kTpcEast = kTRUE;
01806 } else {
01807 kTpcFarEast = kTRUE;
01808 }
01809 }
01810
01811
01812 if (j==0 && eta < 0.) phiWgt /= -1.;
01813
01814 if (kFtpcFarEast) {
01815 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarEast->Fill(phi, phiWgt);
01816 } else if (kFtpcEast) {
01817 histFull[k].histTwoHar[j].mHistPhiFlatFtpcEast->Fill(phi, phiWgt);
01818 } else if (kFtpcWest) {
01819 histFull[k].histTwoHar[j].mHistPhiFlatFtpcWest->Fill(phi, phiWgt);
01820 } else if (kFtpcFarWest) {
01821 histFull[k].histTwoHar[j].mHistPhiFlatFtpcFarWest->Fill(phi, phiWgt);
01822 } else if (kTpcFarEast) {
01823 histFull[k].histTwoHar[j].mHistPhiFlatFarEast->Fill(phi, phiWgt);
01824 } else if (kTpcEast) {
01825 histFull[k].histTwoHar[j].mHistPhiFlatEast->Fill(phi, phiWgt);
01826 } else if (kTpcWest) {
01827 histFull[k].histTwoHar[j].mHistPhiFlatWest->Fill(phi, phiWgt);
01828 } else if (kTpcFarWest) {
01829 histFull[k].histTwoHar[j].mHistPhiFlatFarWest->Fill(phi, phiWgt);
01830 }
01831 if (j==0 && eta < 0.) phiWgt *= -1.;
01832 }
01833
01834
01835 if (!pFlowEvent->EtaSubs() && !pFlowEvent->RanSubs()) {
01836 TVector2 Q_i;
01837 if (order > 3. && !oddHar) {
01838 orderEP = 2;
01839 }
01840 double Qx = phiWgt * cos(orderEP * phi) - reCent.X();
01841 double Qy = phiWgt * sin(orderEP * phi) - reCent.Y();
01842 Q_i.Set(Qx, Qy);
01843 TVector2 mQ_i = mQ[k][j] - Q_i;
01844 psi_i = mQ_i.Phi() / orderEP;
01845 if (psi_i < 0.) psi_i += twopi / orderEP;
01846 }
01847 }
01848
01849
01850 if (mV1Ep1Ep2 == kTRUE && order == 1) {
01851 StFlowSelection usedForPsi2 = *pFlowSelect;
01852 usedForPsi2.SetHarmonic(1);
01853 usedForPsi2.SetSubevent(-1);
01854 if (usedForPsi2.Select(pFlowTrack)) {
01855 TVector2 Q_i;
01856 double phiWgt = pFlowEvent->PhiWeight(k, 1, pFlowTrack);
01857 TVector2 reCent = pFlowEvent->ReCentEP(k, 1, pFlowTrack);
01858 double Qx = phiWgt * cos(2 * phi) - reCent.X();
01859 double Qy = phiWgt * sin(2 * phi) - reCent.Y();
01860 Q_i.Set(Qx, Qy);
01861 TVector2 mQ_i = mQ[k][1] - Q_i;
01862 psi_2 = mQ_i.Phi() / 2.;
01863 if (psi_2 < 0.) psi_2 += twopi / 2.;
01864 }
01865 else {
01866 psi_2 = mPsi[k][1];
01867 }
01868 }
01869
01870
01871 mult = (double)(pFlowEvent->Mult(pFlowSelect));
01872 if (mult > 0.) {
01873 histFull[k].histFullHar[j].mHistQreCent->Fill(1., mQ[k][j].X()/mult);
01874 histFull[k].histFullHar[j].mHistQreCent->Fill(2., mQ[k][j].Y()/mult);
01875 }
01876
01877
01878 if (pFlowSelect->SelectPart(pFlowTrack)) {
01879 float v;
01880 if (pFlowEvent->UseZDCSMD()) {
01881 v = cos(order *(phi-mQ[k][1].Phi()))/perCent;
01882 }
01883 else if (mV1Ep1Ep2 == kFALSE || order != 1) {
01884 v = cos(order * (phi - psi_i))/perCent;
01885 }
01886 else {
01887 v = cos(phi + psi_i - 2.*psi_2)/perCent;
01888 }
01889 float vFlip = v;
01890 if (eta < 0 && j==0) vFlip *= -1;
01891 if (strlen(pFlowSelect->PidPart()) != 0) {
01892 float rapidity = pFlowTrack->Y();
01893 histFull[k].histFullHar[j].mHist_vObs2D->Fill(rapidity, pt, v,mFlowWeight);
01894
01895 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0]) {
01896 if (pt < mPtRange_for_vEta[1] && pt >= mPtRange_for_vEta[0]) {
01897
01898 histFull[k].histFullHar[j].mHist_vObsEta->Fill(rapidity, v,mFlowWeight);
01899 }
01900 }
01901 else {
01902 histFull[k].histFullHar[j].mHist_vObsEta->Fill(rapidity, v, mFlowWeight);
01903 }
01904
01905 } else {
01906 histFull[k].histFullHar[j].mHist_vObs2D->Fill(eta, pt, v,mFlowWeight);
01907
01908 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0]) {
01909 if (pt < mPtRange_for_vEta[1] && pt >= mPtRange_for_vEta[0]) {
01910
01911 histFull[k].histFullHar[j].mHist_vObsEta->Fill(eta, v, mFlowWeight);
01912 }
01913 }
01914 else {
01915 histFull[k].histFullHar[j].mHist_vObsEta->Fill(eta, v, mFlowWeight);
01916 }
01917 }
01918
01919 if (mEtaRange_for_vPt[1] > mEtaRange_for_vPt[0]) {
01920 if (TMath::Abs(eta) < mEtaRange_for_vPt[1] && TMath::Abs(eta) >= mEtaRange_for_vPt[0]) {
01921
01922 histFull[k].histFullHar[j].mHist_vObsPt->Fill(pt, vFlip, mFlowWeight);
01923 }
01924 }
01925 else {
01926 histFull[k].histFullHar[j].mHist_vObsPt->Fill(pt, vFlip,mFlowWeight);
01927 }
01928
01929
01930 Bool_t etaPtNoCut = kTRUE;
01931 if (mPtRange_for_vEta[1] > mPtRange_for_vEta[0] &&
01932 (pt < mPtRange_for_vEta[0] || pt >= mPtRange_for_vEta[1])) {
01933 etaPtNoCut = kFALSE;
01934 }
01935 if (mEtaRange_for_vPt[1] > mEtaRange_for_vPt[0] &&
01936 (TMath::Abs(eta) < mEtaRange_for_vPt[0] ||
01937 TMath::Abs(eta) >= mEtaRange_for_vPt[1])) {
01938 etaPtNoCut = kFALSE;
01939 }
01940 if (etaPtNoCut) histFull[k].mHist_vObs->Fill(order, vFlip,mFlowWeight);
01941
01942
01943 if (mPsi[k][j]) {
01944 histFull[k].histFullHar[j].mHistPhiLab->Fill(phi);
01945 histFull[k].histFullHar[j].mHistPhiLab->Fill(phi);
01946 float phi_i = phi;
01947 if (eta < 0 && j==0) {
01948 phi_i += pi;
01949 if (phi_i > twopi) phi_i -= twopi;
01950 }
01951 float dPhi = phi_i - psi_i;
01952 if (dPhi < 0.) dPhi += twopi;
01953 histFull[k].histFullHar[j].mHistPhiCorr->
01954 Fill(fmod((double)dPhi, twopi / order));
01955 }
01956 }
01957 }
01958 }
01959 }
01960
01961
01962 float etaSymTpc = (etaSymPosTpcN - etaSymNegTpcN) / (etaSymPosTpcN + etaSymNegTpcN);
01963 float etaSymFtpc = (etaSymPosFtpcN - etaSymNegFtpcN) / (etaSymPosFtpcN + etaSymNegFtpcN);
01964
01965 StThreeVectorF vertex = pFlowEvent->VertexPos();
01966 Float_t vertexZ = vertex.z();
01967 mHistEtaSymVerZ2DTpc ->Fill(vertexZ , etaSymTpc);
01968 mHistEtaSymVerZ2DFtpc->Fill(vertexZ , etaSymFtpc);
01969
01970
01971 float etaSymZInterceptTpc = 0.00023;
01972 float etaSymZSlopeTpc = -0.00394;
01973 etaSymTpc -= (etaSymZInterceptTpc + etaSymZSlopeTpc * vertexZ);
01974 etaSymTpc *= ::sqrt((etaSymPosTpcN + etaSymNegTpcN));
01975 mHistEtaSymTpc->Fill(etaSymTpc);
01976
01977
01978 float etaSymZInterceptFtpc = -0.0077;
01979 float etaSymZSlopeFtpc = 0.0020;
01980 etaSymFtpc -= (etaSymZInterceptFtpc + etaSymZSlopeFtpc * vertexZ);
01981 etaSymFtpc *= ::sqrt((etaSymPosFtpcN + etaSymNegFtpcN));
01982 mHistEtaSymFtpc->Fill(etaSymFtpc);
01983
01984
01985 float totalMult = (float)pFlowEvent->TrackCollection()->size();
01986 mHistPidMult->Fill(1., totalMult);
01987 mHistPidMult->Fill(2., hPlusN);
01988 mHistPidMult->Fill(3., hMinusN);
01989 mHistPidMult->Fill(4., piPlusN);
01990 mHistPidMult->Fill(5., piMinusN);
01991 mHistPidMult->Fill(6., protonN);
01992 mHistPidMult->Fill(7., pbarN);
01993 mHistPidMult->Fill(8., kPlusN);
01994 mHistPidMult->Fill(9., kMinusN);
01995 mHistPidMult->Fill(10., deuteronN);
01996 mHistPidMult->Fill(11., dbarN);
01997 mHistPidMult->Fill(12., electronN);
01998 mHistPidMult->Fill(13., positronN);
01999
02000 }
02001
02002
02003
02004 static Double_t resEventPlane(double chi) {
02005
02006
02007 double con = 0.626657;
02008 double arg = chi * chi / 4.;
02009
02010 Double_t res = con * chi * exp(-arg) * (TMath::BesselI0(arg) +
02011 TMath::BesselI1(arg));
02012
02013 return res;
02014 }
02015
02016
02017
02018 static Double_t resEventPlaneK2(double chi) {
02019
02020
02021
02022 double con = 0.626657;
02023 double arg = chi * chi / 4.;
02024
02025 double besselOneHalf = ::sqrt(arg/halfpi) * sinh(arg)/arg;
02026 double besselThreeHalfs = ::sqrt(arg/halfpi) * (cosh(arg)/arg - sinh(arg)/(arg*arg));
02027 Double_t res = con * chi * exp(-arg) * (besselOneHalf + besselThreeHalfs);
02028
02029 return res;
02030 }
02031
02032
02033
02034 static Double_t resEventPlaneK3(double chi) {
02035
02036
02037
02038 double con = 0.626657;
02039 double arg = chi * chi / 4.;
02040
02041 Double_t res = con * chi * exp(-arg) * (TMath::BesselI1(arg) +
02042 TMath::BesselI(2, arg));
02043
02044 return res;
02045 }
02046
02047
02048
02049 static Double_t resEventPlaneK4(double chi) {
02050
02051
02052
02053 double con = 0.626657;
02054 double arg = chi * chi / 4.;
02055
02056 double besselOneHalf = ::sqrt(arg/halfpi) * sinh(arg)/arg;
02057 double besselThreeHalfs = ::sqrt(arg/halfpi) * (cosh(arg)/arg - sinh(arg)/(arg*arg));
02058 double besselFiveHalfs = besselOneHalf - 3*besselThreeHalfs/arg;
02059
02060 Double_t res = con * chi * exp(-arg) * (besselThreeHalfs + besselFiveHalfs);
02061
02062 return res;
02063 }
02064
02065
02066
02067 Double_t chi(double res) {
02068
02069
02070 double chi = 2.0;
02071 double delta = 1.0;
02072
02073 for (int i = 0; i < 20; i++) {
02074 while(resEventPlane(chi) < res) {chi += delta;}
02075 delta = delta / 2.;
02076 while(resEventPlane(chi) > res) {chi -= delta;}
02077 delta = delta / 2.;
02078 }
02079
02080 return chi;
02081 }
02082
02083
02084
02085 Int_t StFlowAnalysisMaker::Finish() {
02086
02087
02088
02089 cout << endl << "##### Analysis Maker:" << endl;
02090 TString* histTitle;
02091
02092
02093 TOrdCollection* phiWgtHistNames = new TOrdCollection(Flow::nSels*Flow::nHars+3);
02094
02095
02096 TOrdCollection* savedHistReCentNames = new TOrdCollection(Flow::nSels * Flow::nHars * 2);
02097 if (mCalcReCentPars) {
02098 Float_t reCentX, reCentY;
02099 cout << "ReCentered Q vector per particle:" << endl;
02100 for (int k = 0; k < Flow::nSels; k++) {
02101 for (int j = 0; j < Flow::nHars; j++) {
02102 savedHistReCentNames->AddLast(histFull[k].histFullHar[j].mHistReCentX);
02103 savedHistReCentNames->AddLast(histFull[k].histFullHar[j].mHistReCentY);
02104 reCentX = histFull[k].histFullHar[j].mHistQreCent->GetBinContent(1);
02105 reCentY = histFull[k].histFullHar[j].mHistQreCent->GetBinContent(2);
02106 cout << setprecision(3) << "Sel = " << k+1 << ", Har = " << j+1 << " : reCentedQ_x = "
02107 << reCentX << ",\t reCentedQ_y = " << reCentY << endl;
02108 }
02109 }
02110 }
02111 cout << endl;
02112
02113
02114 double cosPair[Flow::nSels][Flow::nHars];
02115 double cosPairErr[Flow::nSels][Flow::nHars];
02116 double content;
02117 double error;
02118 double totalError;
02119 for (int k = 0; k < Flow::nSels; k++) {
02120
02121 histTitle = new TString("Flow_v_Sel");
02122 *histTitle += k+1;
02123 histFull[k].mHist_v =
02124 histFull[k].mHist_vObs->ProjectionX(histTitle->Data());
02125 histFull[k].mHist_v->SetTitle(histTitle->Data());
02126 histFull[k].mHist_v->SetXTitle("Harmonic");
02127 histFull[k].mHist_v->SetYTitle("v (%)");
02128 delete histTitle;
02129 AddHist(histFull[k].mHist_v);
02130
02131 for (int j = 0; j < Flow::nHars; j++) {
02132 double order = (double)(j+1);
02133 cosPair[k][j] = histFull[k].mHistCos->GetBinContent(j+1);
02134 cosPairErr[k][j] = histFull[k].mHistCos->GetBinError(j+1);
02135
02136 if (pFlowEvent->UseZDCSMD()) {
02137 double ZDCSMD_deltaResSub = 0.005,ZDCSMD_mResDelta=0.;
02138 double ZDCSMD_resSub = (histFull[k].mHistCos->GetBinContent(1)>0.) ?
02139 ::sqrt(histFull[k].mHistCos->GetBinContent(1)) : 0.;
02140 double ZDCSMD_resSubErr = (histFull[k].mHistCos->GetBinContent(1)>0.) ?
02141 histFull[k].mHistCos->GetBinError(1)/(2.*ZDCSMD_resSub) : 0.;
02142 double ZDCSMD_chiSub = chi(ZDCSMD_resSub);
02143 double ZDCSMD_chiSubDelta = chi((ZDCSMD_resSub+ZDCSMD_deltaResSub));
02144 if (j==0) {
02145 mRes[k][j] = resEventPlane(::sqrt(2.) * ZDCSMD_chiSub);
02146 ZDCSMD_mResDelta = resEventPlane(::sqrt(2.) * ZDCSMD_chiSubDelta);
02147 }
02148 if (j==1) {
02149 mRes[k][j] = resEventPlaneK2(::sqrt(2.) * ZDCSMD_chiSub);
02150 ZDCSMD_mResDelta = resEventPlaneK2(::sqrt(2.) * ZDCSMD_chiSubDelta);
02151 }
02152 if (j==2) {
02153 mRes[k][j] = resEventPlaneK3(::sqrt(2.) * ZDCSMD_chiSub);
02154 ZDCSMD_mResDelta = resEventPlaneK3(::sqrt(2.) * ZDCSMD_chiSubDelta);
02155 }
02156 if (j==3) {
02157 mRes[k][j] = resEventPlaneK4(::sqrt(2.) * ZDCSMD_chiSub);
02158 ZDCSMD_mResDelta = resEventPlaneK4(::sqrt(2.) * ZDCSMD_chiSubDelta);
02159 }
02160 mResErr[k][j] = ZDCSMD_resSubErr * fabs ((double)mRes[k][j]
02161 - ZDCSMD_mResDelta) / ZDCSMD_deltaResSub;
02162
02163 }
02164 else {
02165 if (cosPair[k][j] > 0.) {
02166 double resSub, resSubErr;
02167 double res2, res2error;
02168 if (mV1Ep1Ep2 == kTRUE && order == 1) {
02169
02170 if (histFull[k].mHistCos->GetBinContent(2) > 0.) {
02171 if (histFull[k].mHistCos->GetBinContent(2) > 0.92) {
02172 res2 = 0.99;
02173 res2error = 0.007;
02174 } else {
02175 double deltaRes2Sub = 0.005;
02176 double res2Sub = ::sqrt(histFull[k].mHistCos->GetBinContent(2));
02177 double res2SubErr = histFull[k].mHistCos->GetBinError(2) / (2. * res2Sub);
02178 double chiSub2 = chi(res2Sub);
02179 double chiSub2Delta = chi(res2Sub + deltaRes2Sub);
02180 res2 = resEventPlane(::sqrt(2.) * chiSub2);
02181 double mRes2Delta = resEventPlane(::sqrt(2.) * chiSub2Delta);
02182 res2error = res2SubErr * fabs((double)res2 - mRes2Delta)
02183 / deltaRes2Sub;
02184 }
02185 } else {
02186 res2 = 0.;
02187 res2error = 0.;
02188 }
02189
02190 mRes[k][j] = ::sqrt(cosPair[k][0]*res2);
02191 mResErr[k][j] = 1./(2.*mRes[k][j])*::sqrt(res2*res2*cosPairErr[k][0]*cosPairErr[k][0]
02192 + cosPair[k][0]*cosPair[k][0]*res2error*res2error);
02193 if (!pFlowEvent->EtaSubs()) {
02194
02195
02196 mRes[k][j] *= ::sqrt(2.);
02197 mResErr[k][j] *= ::sqrt(2.);
02198 }
02199 } else if (pFlowEvent->EtaSubs() || pFlowEvent->RanSubs()) {
02200 resSub = ::sqrt(cosPair[k][j]);
02201 resSubErr = cosPairErr[k][j] / (2. * resSub);
02202 mRes[k][j] = resSub;
02203 mResErr[k][j] = resSubErr;
02204 } else if (order==4. || order==6.|| order==8.) {
02205 double deltaResSub = 0.005;
02206 double resSub = ::sqrt(cosPair[k][1]);
02207 double resSubErr = cosPairErr[k][1] / (2. * resSub);
02208 double chiSub = chi(resSub);
02209 double chiSubDelta = chi(resSub + deltaResSub);
02210 double mResDelta;
02211 if (order==4.) {
02212 mRes[k][j] = resEventPlaneK2(::sqrt(2.) * chiSub);
02213 mResDelta = resEventPlaneK2(::sqrt(2.) * chiSubDelta);
02214 } else if (order==6.) {
02215 mRes[k][j] = resEventPlaneK3(::sqrt(2.) * chiSub);
02216 mResDelta = resEventPlaneK3(::sqrt(2.) * chiSubDelta);
02217 } else {
02218 mRes[k][j] = resEventPlaneK4(::sqrt(2.) * chiSub);
02219 mResDelta = resEventPlaneK4(::sqrt(2.) * chiSubDelta);
02220 }
02221 mResErr[k][j] = resSubErr * fabs((double)mRes[k][j] - mResDelta) / deltaResSub;
02222 } else {
02223 if (cosPair[k][j] > 0.92) {
02224 mRes[k][j] = 0.99;
02225 mResErr[k][j] = 0.007;
02226 } else {
02227 double deltaResSub = 0.005;
02228 double resSub = ::sqrt(cosPair[k][j]);
02229 double resSubErr = cosPairErr[k][j] / (2. * resSub);
02230 double chiSub = chi(resSub);
02231 double chiSubDelta = chi(resSub + deltaResSub);
02232 mRes[k][j] = resEventPlane(::sqrt(2.) * chiSub);
02233 double mResDelta = resEventPlane(::sqrt(2.) * chiSubDelta);
02234 mResErr[k][j] = resSubErr * fabs((double)mRes[k][j] - mResDelta)
02235 / deltaResSub;
02236 }
02237 }
02238 } else {
02239 mRes[k][j] = 0.;
02240 mResErr[k][j] = 0.;
02241 }
02242 }
02243 histFull[k].mHistRes->SetBinContent(j+1, mRes[k][j]);
02244 histFull[k].mHistRes->SetBinError(j+1, mResErr[k][j]);
02245
02246
02247 histTitle = new TString("Flow_v2D_Sel");
02248 *histTitle += k+1;
02249 histTitle->Append("_Har");
02250 *histTitle += j+1;
02251 histFull[k].histFullHar[j].mHist_v2D =
02252 histFull[k].histFullHar[j].mHist_vObs2D->ProjectionXY(histTitle->Data());
02253 histFull[k].histFullHar[j].mHist_v2D->SetTitle(histTitle->Data());
02254 histFull[k].histFullHar[j].mHist_v2D->SetXTitle((char*)xLabel.Data());
02255 histFull[k].histFullHar[j].mHist_v2D->SetYTitle("Pt (GeV/c)");
02256 histFull[k].histFullHar[j].mHist_v2D->SetZTitle("v (%)");
02257 delete histTitle;
02258 AddHist(histFull[k].histFullHar[j].mHist_v2D);
02259
02260
02261 histTitle = new TString("Flow_vEta_Sel");
02262 *histTitle += k+1;
02263 histTitle->Append("_Har");
02264 *histTitle += j+1;
02265 histFull[k].histFullHar[j].mHist_vEta =
02266 histFull[k].histFullHar[j].mHist_vObsEta->ProjectionX(histTitle->Data());
02267 histFull[k].histFullHar[j].mHist_vEta->SetTitle(histTitle->Data());
02268 histFull[k].histFullHar[j].mHist_vEta->SetXTitle((char*)xLabel.Data());
02269 histFull[k].histFullHar[j].mHist_vEta->SetYTitle("v (%)");
02270 delete histTitle;
02271 AddHist(histFull[k].histFullHar[j].mHist_vEta);
02272
02273 TString* histTitle = new TString("Flow_vPt_Sel");
02274 *histTitle += k+1;
02275 histTitle->Append("_Har");
02276 *histTitle += j+1;
02277 histFull[k].histFullHar[j].mHist_vPt =
02278 histFull[k].histFullHar[j].mHist_vObsPt->ProjectionX(histTitle->Data());
02279 histFull[k].histFullHar[j].mHist_vPt->SetTitle(histTitle->Data());
02280 histFull[k].histFullHar[j].mHist_vPt->SetXTitle("Pt (GeV/c)");
02281 histFull[k].histFullHar[j].mHist_vPt->SetYTitle("v (%)");
02282 delete histTitle;
02283 AddHist(histFull[k].histFullHar[j].mHist_vPt);
02284
02285
02286 if (mRes[k][j]) {
02287 cout << endl << "##### Resolution of the " << j+1 << "th harmonic = " <<
02288 mRes[k][j] << " +/- " << mResErr[k][j] << endl;
02289
02290 histFull[k].histFullHar[j].mHist_v2D-> Scale(1. / mRes[k][j]);
02291 histFull[k].histFullHar[j].mHist_vEta->Scale(1. / mRes[k][j]);
02292 histFull[k].histFullHar[j].mHist_vPt ->Scale(1. / mRes[k][j]);
02293 content = histFull[k].mHist_v->GetBinContent(j+1);
02294 content /= mRes[k][j];
02295 histFull[k].mHist_v->SetBinContent(j+1, content);
02296
02297 error = histFull[k].mHist_v->GetBinError(j+1);
02298 error /= mRes[k][j];
02299 totalError = fabs(content) * ::sqrt((error/content)*(error/content) +
02300 (mResErr[k][j]/mRes[k][j])*(mResErr[k][j]/mRes[k][j]));
02301 histFull[k].mHist_v->SetBinError(j+1, totalError);
02302
02303
02304 TF1* funcCosSin = new TF1("funcCosSin",
02305 "[3]*(1.+[0]*2./100.*cos([2]*x)+[1]*2./100.*sin([2]*x))", 0., twopi);
02306
02307 funcCosSin->SetParameters(0, 0, j+1);
02308 funcCosSin->SetParLimits(2, 1, 1);
02309 histFull[k].histFullHar[j].mHistPhiLab->Fit("funcCosSin","Q,N");
02310 Double_t cosParLab = funcCosSin->GetParameter(0);
02311 Double_t sinParLab = funcCosSin->GetParameter(1);
02312 histFull[k].histFullHar[j].mHistPsi->Fit("funcCosSin","Q,N");
02313 Double_t cosParEP = funcCosSin->GetParameter(0);
02314 Double_t sinParEP = funcCosSin->GetParameter(1);
02315 cout << "100*cosLab = " << cosParLab << ", 100*sinLab = " << sinParLab << endl;
02316 cout << "100*cosEP = " << cosParEP << ", 100*sinEP = " << sinParEP << endl;
02317 delete funcCosSin;
02318 float nonflat = (cosParEP*cosParLab + sinParEP*sinParLab)/mRes[k][j]/100.;
02319 cout << "nonflat = " << nonflat << endl;
02320
02321 cout << "##### v" << j+1 << "= (" << content << " +/- " << error << ")%" << endl;
02322 cout << "##### v" << j+1 << "= (" << content - nonflat << " (with nonflat corr.) +/- "
02323 << totalError << " (with syst.) )%" << endl;
02324 histFull[k].mHist_v->SetBinContent(j+1, content - nonflat);
02325
02326
02327 } else {
02328 cout << "##### Resolution of the " << j+1 << "th harmonic was zero."
02329 << endl;
02330 histFull[k].histFullHar[j].mHist_v2D-> Reset();
02331 histFull[k].histFullHar[j].mHist_vEta->Reset();
02332 histFull[k].histFullHar[j].mHist_vPt ->Reset();
02333 histFull[k].mHist_v->SetBinContent(j+1, 0.);
02334 histFull[k].mHist_v->SetBinError(j+1, 0.);
02335 }
02336
02337
02338 if (pFlowMaker->PhiWgtCalc()) {
02339 if (j < 2) {
02340 double meanFarEast = histFull[k].histTwoHar[j].mHistPhiFarEast->Integral()
02341 / (double)Flow::nPhiBins;
02342 double meanEast = histFull[k].histTwoHar[j].mHistPhiEast->Integral()
02343 / (double)Flow::nPhiBins;
02344 double meanWest = histFull[k].histTwoHar[j].mHistPhiWest->Integral()
02345 / (double)Flow::nPhiBins;
02346 double meanFarWest = histFull[k].histTwoHar[j].mHistPhiFarWest->Integral()
02347 / (double)Flow::nPhiBins;
02348 double meanFtpcFarEast = histFull[k].histTwoHar[j].mHistPhiFtpcFarEast->Integral()
02349 / (double)Flow::nPhiBinsFtpc;
02350 double meanFtpcEast = histFull[k].histTwoHar[j].mHistPhiFtpcEast->Integral()
02351 / (double)Flow::nPhiBinsFtpc;
02352 double meanFtpcWest = histFull[k].histTwoHar[j].mHistPhiFtpcWest->Integral()
02353 / (double)Flow::nPhiBinsFtpc;
02354 double meanFtpcFarWest = histFull[k].histTwoHar[j].mHistPhiFtpcFarWest->Integral()
02355 / (double)Flow::nPhiBinsFtpc;
02356
02357
02358 for (int i = 0; i < Flow::nPhiBins; i++) {
02359 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->SetBinContent(i+1,meanFarEast);
02360 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->SetBinError(i+1, 0.);
02361 histFull[k].histTwoHar[j].mHistPhiWgtEast ->SetBinContent(i+1, meanEast);
02362 histFull[k].histTwoHar[j].mHistPhiWgtEast ->SetBinError(i+1, 0.);
02363 histFull[k].histTwoHar[j].mHistPhiWgtWest ->SetBinContent(i+1, meanWest);
02364 histFull[k].histTwoHar[j].mHistPhiWgtWest ->SetBinError(i+1, 0.);
02365 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->SetBinContent(i+1,meanFarWest);
02366 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->SetBinError(i+1, 0.);
02367 }
02368
02369
02370 for (int i = 0; i < Flow::nPhiBinsFtpc; i++) {
02371 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->SetBinContent(i+1,meanFtpcFarEast);
02372 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->SetBinError(i+1, 0.);
02373 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast ->SetBinContent(i+1,meanFtpcEast);
02374 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast ->SetBinError(i+1, 0.);
02375 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest ->SetBinContent(i+1,meanFtpcWest);
02376 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest ->SetBinError(i+1, 0.);
02377 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->SetBinContent(i+1,meanFtpcFarWest);
02378 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->SetBinError(i+1, 0.);
02379 }
02380
02381
02382 histFull[k].histTwoHar[j].mHistPhiWgtFarEast->
02383 Divide(histFull[k].histTwoHar[j].mHistPhiFarEast);
02384 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFarEast);
02385 histFull[k].histTwoHar[j].mHistPhiWgtEast->
02386 Divide(histFull[k].histTwoHar[j].mHistPhiEast);
02387 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtEast);
02388 histFull[k].histTwoHar[j].mHistPhiWgtWest->
02389 Divide(histFull[k].histTwoHar[j].mHistPhiWest);
02390 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtWest);
02391 histFull[k].histTwoHar[j].mHistPhiWgtFarWest->
02392 Divide(histFull[k].histTwoHar[j].mHistPhiFarWest);
02393 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFarWest);
02394
02395
02396 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast->
02397 Divide(histFull[k].histTwoHar[j].mHistPhiFtpcFarEast);
02398 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarEast);
02399 histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast->
02400 Divide(histFull[k].histTwoHar[j].mHistPhiFtpcEast);
02401 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFtpcEast);
02402 histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest->
02403 Divide(histFull[k].histTwoHar[j].mHistPhiFtpcWest);
02404 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFtpcWest);
02405 histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest->
02406 Divide(histFull[k].histTwoHar[j].mHistPhiFtpcFarWest);
02407 phiWgtHistNames->AddLast(histFull[k].histTwoHar[j].mHistPhiWgtFtpcFarWest);
02408 }
02409 }
02410 }
02411 }
02412 phiWgtHistNames->AddLast(mHistZDCSMDPsiWgtEast);
02413 phiWgtHistNames->AddLast(mHistZDCSMDPsiWgtWest);
02414 TFile* pPhiWgtFile = new TFile("flowPhiWgt.hist.root", "READ");
02415 if (pPhiWgtFile->IsOpen())
02416 { phiWgtHistNames->AddLast(mHistZDCSMDPsiWgtFull); }
02417
02418
02419 TFile histFile("flow.hist.root", "RECREATE");
02420
02421 GetHistList()->Write();
02422 histFile.Close();
02423
02424
02425 if (pFlowMaker->PhiWgtCalc()) {
02426 TFile phiWgtNewFile("flowPhiWgtNew.hist.root", "RECREATE");
02427 TText* textInfo = 0;
02428 if (pFlowEvent->FirstLastPoints()) {
02429 char chInfo[400];
02430 sprintf(chInfo, "%s%d%s%d%s", " pt weight= ", pFlowEvent->PtWgt(),
02431 ", eta weight= ", pFlowEvent->EtaWgt(), "\n");
02432 textInfo = new TText(0,0,chInfo);
02433 textInfo->Write("info");
02434 }
02435 phiWgtNewFile.cd();
02436 phiWgtHistNames->Write();
02437 phiWgtNewFile.Close();
02438 if (pFlowEvent->FirstLastPoints()) delete textInfo;
02439 }
02440 delete phiWgtHistNames;
02441
02442
02443 if (mCalcReCentPars) {
02444 TFile fileReCent("flow.reCentAnaNew.root", "RECREATE");
02445 fileReCent.cd();
02446 savedHistReCentNames->Write();
02447 fileReCent.Close();
02448 }
02449 delete savedHistReCentNames;
02450
02451 delete pFlowSelect;
02452
02453 return StMaker::Finish();
02454 }
02455
02456
02457
02458 void StFlowAnalysisMaker::SetHistoRanges(Bool_t ftpc_included) {
02459
02460 if (ftpc_included) {
02461 mEtaMin = Flow::etaMin;
02462 mEtaMax = Flow::etaMax;
02463 mNEtaBins = Flow::nEtaBins;
02464 }
02465 else {
02466 mEtaMin = Flow::etaMinTpcOnly;
02467 mEtaMax = Flow::etaMaxTpcOnly;
02468 mNEtaBins = Flow::nEtaBinsTpcOnly;
02469 }
02470
02471 return;
02472 }
02473
02474
02475
02476 void StFlowAnalysisMaker::SetPtRange_for_vEta(Float_t lo, Float_t hi) {
02477
02478
02479
02480 mPtRange_for_vEta[0] = lo;
02481 mPtRange_for_vEta[1] = hi;
02482
02483 return;
02484 }
02485
02486
02487
02488 void StFlowAnalysisMaker::SetEtaRange_for_vPt(Float_t lo, Float_t hi) {
02489
02490
02491
02492 mEtaRange_for_vPt[0] = lo;
02493 mEtaRange_for_vPt[1] = hi;
02494
02495 return;
02496 }
02497
02498
02499
02500 void StFlowAnalysisMaker::SetV1Ep1Ep2(Bool_t v1Ep1Ep2) {
02501
02502
02503
02504 mV1Ep1Ep2 = v1Ep1Ep2;
02505
02506 return;
02507 }
02508
02509
02511
02512
02513
02514
02515
02516
02517
02518
02519
02520
02521
02522
02523
02524
02525
02526
02527
02528
02529
02530
02531
02532
02533
02534
02535
02536
02537
02538
02539
02540
02541
02542
02543
02544
02545
02546
02547
02548
02549
02550
02551
02552
02553
02554
02555
02556
02557
02558
02559
02560
02561
02562
02563
02564
02565
02566
02567
02568
02569
02570
02571
02572
02573
02574
02575
02576
02577
02578
02579
02580
02581
02582
02583
02584
02585
02586
02587
02588
02589
02590
02591
02592
02593
02594
02595
02596
02597
02598
02599
02600
02601
02602
02603
02604
02605
02606
02607
02608
02609
02610
02611
02612
02613
02614
02615
02616
02617
02618
02619
02620
02621
02622
02623
02624
02625
02626
02627
02628
02629
02630
02631
02632
02633
02634
02635
02636
02637
02638
02639
02640
02641
02642
02643
02644
02645
02646
02647
02648
02649
02650
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669
02670
02671
02672
02673
02674
02675
02676
02677
02678
02679
02680
02681
02682
02683
02684
02685
02686
02687
02688
02689
02690
02691
02692
02693
02694
02695
02696
02697
02698
02699
02700
02701
02702
02703
02704
02705
02706
02707
02708
02709
02710
02711
02712
02713
02714
02715
02716
02717
02718
02719
02720
02721
02722
02723
02724
02725
02726
02727
02728
02729
02730
02731
02732
02733
02734
02735
02736
02737
02738
02739
02740
02741
02742
02743
02744
02745
02746
02747
02748
02749
02750
02751
02752
02753
02754
02755
02756
02757
02758
02759
02760
02761
02762
02763
02764
02765
02766
02767
02768
02769
02770
02771
02772
02773
02774
02775
02776
02777
02778
02779
02780
02781
02782
02783
02784
02785
02786
02787
02788
02789
02790
02791
02792
02793
02794
02795
02796
02797
02798
02799
02800
02801
02802
02803
02804
02805
02806
02807
02808
02809
02810
02811
02812
02813
02814
02815
02816
02817
02818
02819
02820
02821
02822
02823
02824
02825
02826
02827
02828
02829
02830
02831
02832
02833
02834
02835
02836
02837
02838
02839