+ // Setup multiplicity correction (only used for non-pp collisions)
+ //
+
+ const Bool_t isPP = (fBeamType.CompareTo("PP") == 0);
+
+ // 2013 pPb data taking at low luminosity
+ const Bool_t isPPb2013LowLuminosity = period.Contains("LHC13B") || period.Contains("LHC13C") || period.Contains("LHC13D");
+ // PbPb 2010, period 10h.pass2
+ //TODO Needs further development const Bool_t is10hpass2 = period.Contains("LHC10H") && recopass == 2;
+
+
+ // In case of MC without(!) tune on data activated for the TPC, don't use the multiplicity correction for the moment
+ Bool_t isMCandNotTPCtuneOnData = fIsMC && !(fTuneMConData && ((fTuneMConDataMask & kDetTPC) == kDetTPC));
+
+ // If correction is available, but disabled (highly NOT recommended!), print warning
+ if (!fUseTPCMultiplicityCorrection && !isPP && !isMCandNotTPCtuneOnData) {
+ //TODO: Needs further development if (is10hpass2 || isPPb2013LowLuminosity) {
+ if (isPPb2013LowLuminosity) {
+ AliWarning("Mulitplicity correction disabled, but correction parameters for this period exist. It is highly recommended to use enable the correction. Otherwise the splines might be off!");
+ }
+ }
+
+ if (fUseTPCMultiplicityCorrection && !isPP && !isMCandNotTPCtuneOnData) {
+ AliInfo("Multiplicity correction enabled!");
+
+ //TODO After testing, load parameters from outside
+ /*TODO no correction for MC
+ if (period.Contains("LHC11A10")) {//LHC11A10A
+ AliInfo("Using multiplicity correction parameters for 11a10!");
+ fTPCResponse.SetParameterMultiplicityCorrection(0, 6.90133e-06);
+ fTPCResponse.SetParameterMultiplicityCorrection(1, -1.22123e-03);
+ fTPCResponse.SetParameterMultiplicityCorrection(2, 1.80220e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(3, 0.1);
+ fTPCResponse.SetParameterMultiplicityCorrection(4, 6.45306e-03);
+
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(0, -2.85505e-07);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(1, -1.31911e-06);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(2, -0.5);
+
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(0, -4.29665e-05);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(1, 1.37023e-02);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(2, -6.36337e-01);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(3, 1.13479e-02);
+ }
+ else*/ if (isPPb2013LowLuminosity) {// 2013 pPb data taking at low luminosity
+ AliInfo("Using multiplicity correction parameters for 13b.pass2 (at least also valid for 13{c,d} and pass 3)!");
+
+ fTPCResponse.SetParameterMultiplicityCorrection(0, -5.906e-06);
+ fTPCResponse.SetParameterMultiplicityCorrection(1, -5.064e-04);
+ fTPCResponse.SetParameterMultiplicityCorrection(2, -3.521e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(3, 2.469e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(4, 0);
+
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(0, -5.32e-06);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(1, 1.177e-05);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(2, -0.5);
+
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(0, 0.);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(1, 0.);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(2, 0.);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(3, 0.);
+
+ /* Not too bad, but far from perfect in the details
+ fTPCResponse.SetParameterMultiplicityCorrection(0, -6.27187e-06);
+ fTPCResponse.SetParameterMultiplicityCorrection(1, -4.60649e-04);
+ fTPCResponse.SetParameterMultiplicityCorrection(2, -4.26450e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(3, 2.40590e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(4, 0);
+
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(0, -5.338e-06);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(1, 1.220e-05);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(2, -0.5);
+
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(0, 7.89237e-05);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(1, -1.30662e-02);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(2, 8.91548e-01);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(3, 1.47931e-02);
+ */
+ }
+ /*TODO: Needs further development
+ else if (is10hpass2) {
+ AliInfo("Using multiplicity correction parameters for 10h.pass2!");
+ fTPCResponse.SetParameterMultiplicityCorrection(0, 3.21636e-07);
+ fTPCResponse.SetParameterMultiplicityCorrection(1, -6.65876e-04);
+ fTPCResponse.SetParameterMultiplicityCorrection(2, 1.28786e-03);
+ fTPCResponse.SetParameterMultiplicityCorrection(3, 1.47677e-02);
+ fTPCResponse.SetParameterMultiplicityCorrection(4, 0);
+
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(0, 7.23591e-08);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(1, 2.7469e-06);
+ fTPCResponse.SetParameterMultiplicityCorrectionTanTheta(2, -0.5);
+
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(0, -1.22590e-05);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(1, 6.88888e-03);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(2, -3.20788e-01);
+ fTPCResponse.SetParameterMultiplicitySigmaCorrection(3, 1.07345e-02);
+ }
+ */
+ else {
+ AliError(Form("Multiplicity correction is enabled, but no multiplicity correction parameters have been found for period %s.pass%d -> Mulitplicity correction DISABLED!", period.Data(), recopass));
+ fUseTPCMultiplicityCorrection = kFALSE;
+ fTPCResponse.ResetMultiplicityCorrectionFunctions();
+ }
+ }
+ else {
+ // Just set parameters such that overall correction factor is 1, i.e. no correction.
+ // This is just a reasonable choice for the parameters for safety reasons. Disabling
+ // the multiplicity correction will anyhow skip the calculation of the corresponding
+ // correction factor inside THIS class. Nevertheless, experts can access the TPCPIDResponse
+ // directly and use it for calculations - which should still give valid results, even if
+ // the multiplicity correction is explicitely enabled in such expert calls.
+
+ TString reasonForDisabling = "requested by user";
+ if (fUseTPCMultiplicityCorrection) {
+ if (isPP)
+ reasonForDisabling = "pp collisions";
+ else
+ reasonForDisabling = "MC w/o tune on data";
+ }
+
+ AliInfo(Form("Multiplicity correction %sdisabled (%s)!", fUseTPCMultiplicityCorrection ? "automatically " : "",
+ reasonForDisabling.Data()));
+
+ fUseTPCMultiplicityCorrection = kFALSE;
+ fTPCResponse.ResetMultiplicityCorrectionFunctions();
+ }
+
+ if (fUseTPCMultiplicityCorrection) {
+ for (Int_t i = 0; i <= 4 + 1; i++) {
+ AliInfo(Form("parMultCorr: %d, %e", i, fTPCResponse.GetMultiplicityCorrectionFunction()->GetParameter(i)));
+ }
+ for (Int_t j = 0; j <= 2 + 1; j++) {
+ AliInfo(Form("parMultCorrTanTheta: %d, %e", j, fTPCResponse.GetMultiplicityCorrectionFunctionTanTheta()->GetParameter(j)));
+ }
+ for (Int_t j = 0; j <= 3 + 1; j++) {
+ AliInfo(Form("parMultSigmaCorr: %d, %e", j, fTPCResponse.GetMultiplicitySigmaCorrectionFunction()->GetParameter(j)));
+ }
+ }
+
+ //
+ // Setup old resolution parametrisation