File indexing completed on 2025-08-06 08:15:36
0001 #include <cmath>
0002 #include <vector>
0003 #include <TFile.h>
0004 #include <TString.h>
0005 #include <TLine.h>
0006 #include <TGraph.h>
0007 #include <TLatex.h>
0008 #include <TAxis.h>
0009 #include <TGraphErrors.h>
0010 #include <TMultiGraph.h>
0011 #include <TLegend.h>
0012 #include <TCanvas.h>
0013 #include <TF1.h>
0014 #include <TH1.h>
0015 #include <TMath.h>
0016 #include <cassert>
0017 #include <iostream>
0018 #include <fstream>
0019
0020 #include "SaveCanvas.C"
0021
0022 Double_t
0023 langaufun(Double_t *x, Double_t *par)
0024 {
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 Double_t invsq2pi = 0.3989422804014;
0039 Double_t mpshift = -0.22278298;
0040
0041
0042 Double_t np = 100.0;
0043 Double_t sc = 5.0;
0044
0045
0046 Double_t xx;
0047 Double_t mpc;
0048 Double_t fland;
0049 Double_t sum = 0.0;
0050 Double_t xlow, xupp;
0051 Double_t step;
0052 Double_t i;
0053
0054
0055 mpc = par[1] - mpshift * par[0];
0056
0057
0058 xlow = x[0] - sc * par[3];
0059 xupp = x[0] + sc * par[3];
0060
0061 step = (xupp - xlow) / np;
0062
0063
0064 for (i = 1.0; i <= np / 2; i++)
0065 {
0066 xx = xlow + (i - .5) * step;
0067
0068 fland = TMath::Landau(xx, mpc, par[0]) / par[0];
0069 sum += fland * TMath::Gaus(x[0], xx, par[3]);
0070
0071 xx = xupp - (i - .5) * step;
0072 fland = TMath::Landau(xx, mpc, par[0]) / par[0];
0073 sum += fland * TMath::Gaus(x[0], xx, par[3]);
0074 }
0075
0076 return (par[2] * step * sum * invsq2pi / par[3]);
0077 }
0078
0079 void
0080 getMeanRMS(void)
0081 {
0082 ofstream Output;
0083 Output.open("meanRMS_v1.txt");
0084
0085 char name[20000];
0086
0087 int runList[100] =
0088 { 2181, 2182, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2192 };
0089 double vert[10] =
0090 { 22, 42, 62, 82, 102, 122, 142, 152, 162, 172 };
0091 double mu[8][100];
0092 double rms[8][100];
0093 double err[8][100];
0094 double vt[8][100];
0095 double up[8][100];
0096 double mip[80] =
0097 { 43.4997, 45.6349, 40.8449, 47.7902, 48.4663, 39.2068, 48.3755, 83.1102 };
0098
0099 for (int j = 0; j < 8; j++)
0100 {
0101 sprintf(name,
0102 "/phenix/u/jinhuang/links/sPHENIX_work/Prototype_2016/Production_1101_EMCalSet2_HCalPR12/beam_0000%d-0000_DSTReader.root_DrawPrototype2MIPAnalysis_EMCDistribution_RAW_Valid_HODO_MIP_Col2_PedestalOther_TimingGood.root",
0103 runList[j]);
0104 TFile *_file0 = TFile::Open(name);
0105
0106 TCanvas *c1 = new TCanvas(Form("getMeanRMS_run%d", runList[j]),
0107 Form("getMeanRMS_run%d", runList[j]), 1800, 950);
0108 c1->Divide(4, 2);
0109
0110 for (int i = 0; i < 8; i++)
0111 {
0112 double min = 0;
0113 double max = 150;
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128 c1->cd(i + 1);
0129 c1->cd(i + 1)->SetLogy();
0130 sprintf(name, "hEnergy_ieta2_iphi%d", i);
0131 TH1F *h = (TH1F*) gDirectory->Get(name)->Clone();
0132 assert(h);
0133 h->Draw();
0134
0135 TF1 *ffit = new TF1(TString(h->GetName()) + "_langaufun", langaufun,
0136 0, 500, 4);
0137 ffit->SetParameters(6, 50, 3000, 15);
0138 ffit->SetParNames("Width", "MP", "Area", "GSigma");
0139 ffit->SetParLimits(0,0,20);
0140 ffit->SetParLimits(1,0,200);
0141 ffit->SetParLimits(2,0,20000);
0142
0143 ffit->SetParLimits(3,1,30);
0144
0145 h->Fit(ffit, "RBM");
0146
0147 c1->Update();
0148
0149
0150
0151 Output << runList[j] << "\t" << vert[j] << "\t" << i << "\t"
0152 << ffit->GetParameter(1) << "\t" << ffit->GetParError(1) << "\t"
0153 << h->GetEntries() << endl;
0154
0155 mu[i][j] = ffit->GetParameter(1);
0156
0157
0158
0159 err[i][j] = ffit->GetParError(1);
0160 vt[i][j] = vert[j];
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171 }
0172
0173
0174 SaveCanvas(c1, TString(name) + TString(c1->GetName()), kTRUE);
0175 }
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 TLegend * leg = new TLegend(0.91, 0.51, 0.99, 0.89, NULL, "brNDC");
0202
0203 TCanvas * c1 = new TCanvas(Form("getMeanRMS_Summary"),
0204 Form("getMeanRMS_Summary"), 1800, 950);
0205 gPad->DrawFrame(0, 0, 200, 200);
0206 for (int i = 0; i < 8; i++)
0207 {
0208 TGraphErrors *gr = new TGraphErrors(7, vt[i], mu[i], 0, err[i]);
0209
0210 gr->SetMarkerStyle(20);
0211 gr->SetMarkerColor(i + 1);
0212
0213
0214 gr->SetMaximum(60);
0215 gr->SetMinimum(10);
0216 gr->SetTitle("");
0217 gr->GetXaxis()->SetTitle("vertical position (mm)");
0218 gr->GetYaxis()->SetTitle("MPV ADC");
0219
0220
0221
0222 gr->Draw("p");
0223
0224
0225
0226
0227 sprintf(name, "row %d", i);
0228 leg->AddEntry(gr, name, "p");
0229
0230
0231 }
0232 leg->Draw();
0233 SaveCanvas(c1, TString(c1->GetName()), kTRUE);
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262 }
0263