File indexing completed on 2025-08-03 08:22:09
0001 void plot_matscan(const std::string &datfile, const int plot_theta = 0)
0002 {
0003 FILE *f = fopen(datfile.c_str(), "r");
0004 if (!f)
0005 {
0006 cout << "file " << datfile << " cannot be opened" << endl;
0007 return;
0008 }
0009 float theta;
0010 float phi;
0011 float path;
0012 float x0;
0013 float lamda0;
0014 vector<float> thetavec;
0015 vector<float> phivec;
0016 vector<float> x0vec;
0017 vector<float> lamda0vec;
0018 float thetamin = 10000;
0019 float thetamax = -10000;
0020 float phimin = 10000;
0021 float phimax = -10000;
0022 float x0min = 100000;
0023 float x0max = -100000;
0024 float lamda0min = 100000;
0025 float lamda0max = -100000;
0026 while (fscanf(f, "%f %f %f %f %f", &theta, &phi, &path, &x0, &lamda0) != EOF)
0027 {
0028 cout << "theta: " << theta
0029 << ", phi: " << phi
0030 << ", path: " << path
0031 << ", x0: " << x0
0032 << ", lamda0: " << lamda0
0033 << endl;
0034 if (plot_theta == 2)
0035 {
0036 theta = (90 + theta) / 180. * M_PI;
0037 theta = log(TMath::Tan(theta / 2.));
0038 }
0039 if (theta > thetamax)
0040 {
0041 thetamax = theta;
0042 }
0043 if (theta < thetamin)
0044 {
0045 thetamin = theta;
0046 }
0047 if (phi > phimax)
0048 {
0049 phimax = phi;
0050 }
0051 if (phi < phimin)
0052 {
0053 phimin = phi;
0054 }
0055 if (x0 > x0max)
0056 {
0057 x0max = x0;
0058 }
0059 if (x0 < x0min)
0060 {
0061 x0min = x0;
0062 }
0063 if (lamda0 > lamda0max)
0064 {
0065 lamda0max = lamda0;
0066 }
0067 if (lamda0 < lamda0min)
0068 {
0069 lamda0min = lamda0;
0070 }
0071 thetavec.push_back(theta);
0072 phivec.push_back(phi);
0073 x0vec.push_back(x0);
0074 lamda0vec.push_back(lamda0);
0075 }
0076 float *thetaarr = new float[thetavec.size()];
0077 float *phiarr = new float[phivec.size()];
0078 float *x0arr = new float[x0vec.size()];
0079 float *lamda0arr = new float[lamda0vec.size()];
0080 for (int i = 0; i < phivec.size(); i++)
0081 {
0082 thetaarr[i] = thetavec[i];
0083 phiarr[i] = phivec[i];
0084 x0arr[i] = x0vec[i];
0085 lamda0arr[i] = lamda0vec[i];
0086 }
0087 TCanvas *c = new TCanvas("c1", "material scan");
0088 c->Divide(1, 2);
0089 c->cd(1);
0090 char htitlex[100];
0091 char htitlelamda[100];
0092 double xmin;
0093 double xmax;
0094 TGraph *gr = nullptr;
0095 TGraph *grl = nullptr;
0096
0097 if (plot_theta)
0098 {
0099 if (plot_theta == 1)
0100 {
0101 sprintf(htitlex, "x0 vs theta");
0102 sprintf(htitlelamda, "lamda0 vs theta");
0103 xmin = thetamin - 1;
0104 xmax = thetamax + 1;
0105 }
0106 else
0107 {
0108 sprintf(htitlex, "x0 vs eta");
0109 sprintf(htitlelamda, "lamda0 vs eta");
0110 xmin = thetamin - 0.1;
0111 xmax = thetamax + 0.1;
0112 }
0113
0114 gr = new TGraph(thetavec.size(), thetaarr, x0arr);
0115 grl = new TGraph(thetavec.size(), thetaarr, lamda0arr);
0116 }
0117 else
0118 {
0119 sprintf(htitlex, "x0 vs phi");
0120 sprintf(htitlelamda, "lamda0 vs phi");
0121 xmin = phimin - 1;
0122 xmax = phimax + 1;
0123 gr = new TGraph(phivec.size(), phiarr, x0arr);
0124 grl = new TGraph(phivec.size(), phiarr, lamda0arr);
0125 }
0126 TH2 *h2 = new TH2F("hx2", htitlex, 2, xmin, xmax, 2, 0, x0max + 0.1 * x0max);
0127 h2->SetStats(kFALSE);
0128 h2->Draw();
0129 gr->SetMarkerStyle(21);
0130 gr->SetMarkerSize(0.1);
0131 gr->Draw("LP");
0132 c->cd(2);
0133 TH2 *hl2 = new TH2F("hlamda2", htitlelamda, 2, xmin, xmax, 2, 0, lamda0max + lamda0max / 10.);
0134 hl2->SetStats(kFALSE);
0135 hl2->Draw();
0136 grl->SetMarkerStyle(21);
0137 grl->SetMarkerSize(0.1);
0138 grl->Draw("LP");
0139 fclose(f);
0140 return;
0141 }
0142
0143 void plot_matscan_tdr(const char *datfile, const int plot_theta = 0)
0144 {
0145 FILE *f = fopen(datfile, "r");
0146 if (!f)
0147 {
0148 cout << "file " << datfile << " cannot be opened" << endl;
0149 return;
0150 }
0151 float theta;
0152 float phi;
0153 float path;
0154 float x0;
0155 float lamda0;
0156 vector<float> thetavec;
0157 vector<float> phivec;
0158 vector<float> x0vec;
0159 vector<float> lamda0vec;
0160 float thetamin = -1.10;
0161 float thetamax = 1.1;
0162 float phimin = 10000;
0163 float phimax = -10000;
0164 float x0min = 100000;
0165 float x0max = -100000;
0166 float lamda0min = 100000;
0167 float lamda0max = -100000;
0168 while (fscanf(f, "%f %f %f %f %f", &theta, &phi, &path, &x0, &lamda0) != EOF)
0169 {
0170 theta = (theta + 90) / 180. * M_PI;
0171 theta = log(TMath::Tan(theta / 2.));
0172 cout << "theta: " << theta
0173 << ", phi: " << phi
0174 << ", path: " << path
0175 << ", x0: " << x0
0176 << ", lamda0: " << lamda0
0177 << endl;
0178 if (phi > phimax)
0179 {
0180 phimax = phi;
0181 }
0182 if (phi < phimin)
0183 {
0184 phimin = phi;
0185 }
0186 if (x0 > x0max)
0187 {
0188 x0max = x0;
0189 }
0190 if (x0 < x0min)
0191 {
0192 x0min = x0;
0193 }
0194 if (lamda0 > lamda0max)
0195 {
0196 lamda0max = lamda0;
0197 }
0198 if (lamda0 < lamda0min)
0199 {
0200 lamda0min = lamda0;
0201 }
0202 thetavec.push_back(theta);
0203 phivec.push_back(phi);
0204 x0vec.push_back(x0);
0205 lamda0vec.push_back(lamda0);
0206 }
0207 float *thetaarr = new float[thetavec.size()];
0208 float *phiarr = new float[phivec.size()];
0209 float *x0arr = new float[x0vec.size()];
0210 float *lamda0arr = new float[lamda0vec.size()];
0211 for (int i = 0; i < phivec.size(); i++)
0212 {
0213 thetaarr[i] = thetavec[i];
0214 phiarr[i] = phivec[i];
0215 x0arr[i] = x0vec[i];
0216 lamda0arr[i] = lamda0vec[i];
0217 }
0218 TCanvas *c = new TCanvas("c1", "material scan");
0219 char htitlex[100];
0220 char htitlelamda[100];
0221 char titlexaxis[100];
0222 double xmin;
0223 double xmax;
0224 TGraph *gr = nullptr;
0225 TGraph *grl = nullptr;
0226
0227 if (plot_theta)
0228 {
0229 sprintf(htitlex, "x0 vs theta");
0230 sprintf(htitlelamda, "");
0231 sprintf(titlexaxis, "#eta");
0232 xmin = thetamin;
0233 xmax = thetamax;
0234 gr = new TGraph(thetavec.size(), thetaarr, x0arr);
0235 grl = new TGraph(thetavec.size(), thetaarr, lamda0arr);
0236 }
0237 else
0238 {
0239 sprintf(htitlex, "x0 vs phi");
0240 sprintf(htitlelamda, "");
0241 sprintf(titlexaxis, "#phi");
0242 xmin = phimin - 1;
0243 xmax = phimax + 1;
0244 gr = new TGraph(phivec.size(), phiarr, x0arr);
0245 grl = new TGraph(phivec.size(), phiarr, lamda0arr);
0246 }
0247 TH2 *hl2 = new TH2F("hlamda2", htitlelamda, 2, xmin, xmax, 2, 0, lamda0max + lamda0max / 10.);
0248 hl2->SetStats(kFALSE);
0249 hl2->GetXaxis()->SetTitle(titlexaxis);
0250 hl2->GetXaxis()->SetTitleSize(0.05);
0251 hl2->GetXaxis()->SetLabelSize(0.04);
0252 hl2->GetXaxis()->SetTitleOffset(0.8);
0253 hl2->GetYaxis()->SetTitle("#lambda_{0}");
0254 hl2->GetYaxis()->SetTitleSize(0.05);
0255 hl2->GetYaxis()->SetTitleOffset(0.6);
0256 hl2->GetYaxis()->SetLabelSize(0.04);
0257 hl2->Draw();
0258 grl->SetMarkerStyle(21);
0259 grl->SetMarkerSize(0.1);
0260 grl->SetLineWidth(2);
0261 grl->Draw("LP");
0262 fclose(f);
0263 return;
0264 }