Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 09:32:29

0001 struct SpeciesInfo
0002 {
0003    SpeciesInfo()
0004    {
0005    }
0006    SpeciesInfo(const SpeciesInfo& right) :
0007       fG(right.fG),
0008       fGerr(right.fGerr),
0009       fLET(right.fLET),
0010       fLETerr(right.fLETerr),
0011       fName(right.fName)
0012    {}
0013    SpeciesInfo& operator=(const SpeciesInfo& right)
0014    {
0015       if(this == &right) return *this;
0016       fG = right.fG;
0017       fGerr = right.fGerr;
0018       fLET = right.fLET;
0019       fLETerr = right.fLETerr;
0020       fName = right.fName;
0021       return *this;
0022    }
0023 
0024    std::vector<Double_t> fG;
0025    std::vector<Double_t> fGerr;
0026    std::vector<Double_t> fLET;
0027    std::vector<Double_t> fLETerr;
0028    string fName;
0029 };
0030 
0031 const char* filetypes[] = {
0032    "PostScript", "*.ps",
0033    "Encapsulated PostScript", "*.eps",
0034    "PDF files", "*.pdf",
0035    "Gif files", "*.gif",
0036    "PNG files", "*.png",
0037    "All files", "*",
0038    0, 0
0039 };
0040 
0041 TGTab *gTab = nullptr;
0042 
0043 void Save()
0044 {
0045   TGFileInfo fi;
0046   fi.fFileTypes = filetypes;
0047 
0048   new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDSave,&fi);
0049   gROOT->GetListOfCanvases()->At(gTab->GetCurrent())->SaveAs(fi.fFilename);
0050 }
0051 
0052 void plotG_LET()
0053 {
0054 
0055    std::map<Int_t, SpeciesInfo> speciesInfo;
0056 
0057    gROOT->SetStyle("Plain");
0058    gStyle->SetPalette(1);
0059    gStyle->SetCanvasBorderMode(0);
0060    gStyle->SetFrameBorderMode(0);
0061    gStyle->SetPadTickX(1);
0062    gStyle->SetPadTickY(1);
0063 
0064    TGMainFrame *main = new TGMainFrame(gClient->GetRoot(), 200, 200);
0065    gTab = new TGTab(main, 200, 200);
0066 
0067    Int_t ncols, tag, runID;
0068    Double_t LET, LET_sigma, Gvalue, Gvalue_sigma;
0069    string name;
0070    string dummy;
0071    string string_key, string_value;
0072 
0073    ifstream file;
0074    file.open("Species.txt",std::ios::in);
0075 
0076    runID = 0;
0077 
0078    while(1) {
0079       // Read LET values
0080       file >> dummy >> LET >> dummy >> LET_sigma;
0081       if (file.eof()) break;
0082 
0083       std::getline(file,dummy);
0084 
0085       if (!std::getline(file,string_key)) break;
0086       std::istringstream key(string_key); // Read keys (name of molecule)
0087       if (!std::getline(file,string_value)) break;
0088       std::istringstream value(string_value); // Read G value
0089       while(1) {
0090          key >> name >> tag;
0091          value >> Gvalue >> Gvalue_sigma;
0092          if (!key || !value) break;
0093          speciesInfo[tag].fName = name;
0094          speciesInfo[tag].fG.resize(runID+1);
0095          speciesInfo[tag].fGerr.resize(runID+1);
0096          speciesInfo[tag].fLET.resize(runID+1);
0097          speciesInfo[tag].fLETerr.resize(runID+1);
0098 
0099          speciesInfo[tag].fG[runID] = Gvalue;
0100          speciesInfo[tag].fGerr[runID] = Gvalue_sigma;
0101          speciesInfo[tag].fLET[runID] = LET;
0102          speciesInfo[tag].fLETerr[runID] = LET_sigma;
0103       }
0104       runID++;
0105    }
0106    file.close();
0107 
0108    for (auto it_map : speciesInfo) {
0109 
0110       auto map = it_map.second;
0111       TGraphErrors* gSpecies = new TGraphErrors(map.fG.size(),
0112                                                 map.fLET.data(),
0113                                                 map.fG.data(),
0114                                                 map.fLETerr.data(),
0115                                                 map.fGerr.data());
0116 
0117       Int_t color = (2+it_map.first)%TColor::GetNumberOfColors();
0118       if (color == 5 || color == 10 || color == 0) ++color;
0119 
0120 
0121       TGCompositeFrame *tf = gTab->AddTab(map.fName.c_str());
0122       TGCompositeFrame *frame = new TGCompositeFrame(tf, 60, 60,
0123                                                      kHorizontalFrame);
0124 
0125       tf->AddFrame(frame, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY,
0126                    10,10,10,2));
0127 
0128       TRootEmbeddedCanvas *c1 = new TRootEmbeddedCanvas(map.fName.c_str(),
0129                                                         frame, 700, 500);
0130       frame->AddFrame(c1, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY,
0131                       10,10,10,2));
0132       c1->GetCanvas()->SetLogx();
0133 
0134       TGHorizontalFrame* hframe = new TGHorizontalFrame(tf, 200, 40);
0135 
0136       TGTextButton* save = new TGTextButton(hframe, "&Save as ...",
0137                                             "Save()");
0138       hframe->AddFrame(save, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
0139 
0140       TGTextButton *exit = new TGTextButton(hframe, "&Exit ",
0141                                             "gApplication->Terminate()");
0142       hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
0143 
0144       tf->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
0145 
0146       gSpecies->SetTitle(map.fName.c_str());
0147       gSpecies->SetMarkerStyle(20+it_map.first);
0148       gSpecies->SetMarkerColor(color);
0149       gSpecies->GetXaxis()->SetTitle("LET (keV/um)");
0150       gSpecies->GetXaxis()->SetTitleOffset(1.1);
0151       gSpecies->GetYaxis()->SetTitle("G value (molecules/100 eV)");
0152       gSpecies->GetYaxis()->SetTitleOffset(1.2);
0153       gSpecies->Draw("AP");
0154    }
0155 
0156    main->AddFrame(gTab, new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
0157                                           kLHintsExpandY, 2, 2, 5, 1));
0158 
0159    main->MapSubwindows();
0160    main->Resize();   // resize to default size
0161    main->MapWindow();
0162 }
0163