Back to home page

sPhenix code displayed by LXR

 
 

    


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 }