Files
2022-12-09 14:43:28 +01:00

164 lines
4.8 KiB
C++

struct SpeciesInfo
{
SpeciesInfo()
{
}
SpeciesInfo(const SpeciesInfo& right) :
fG(right.fG),
fGerr(right.fGerr),
fLET(right.fLET),
fLETerr(right.fLETerr),
fName(right.fName)
{}
SpeciesInfo& operator=(const SpeciesInfo& right)
{
if(this == &right) return *this;
fG = right.fG;
fGerr = right.fGerr;
fLET = right.fLET;
fLETerr = right.fLETerr;
fName = right.fName;
return *this;
}
std::vector<Double_t> fG;
std::vector<Double_t> fGerr;
std::vector<Double_t> fLET;
std::vector<Double_t> fLETerr;
string fName;
};
const char* filetypes[] = {
"PostScript", "*.ps",
"Encapsulated PostScript", "*.eps",
"PDF files", "*.pdf",
"Gif files", "*.gif",
"PNG files", "*.png",
"All files", "*",
0, 0
};
TGTab *gTab = nullptr;
void Save()
{
TGFileInfo fi;
fi.fFileTypes = filetypes;
new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDSave,&fi);
gROOT->GetListOfCanvases()->At(gTab->GetCurrent())->SaveAs(fi.fFilename);
}
void plotG_LET()
{
std::map<Int_t, SpeciesInfo> speciesInfo;
gROOT->SetStyle("Plain");
gStyle->SetPalette(1);
gStyle->SetCanvasBorderMode(0);
gStyle->SetFrameBorderMode(0);
gStyle->SetPadTickX(1);
gStyle->SetPadTickY(1);
TGMainFrame *main = new TGMainFrame(gClient->GetRoot(), 200, 200);
gTab = new TGTab(main, 200, 200);
Int_t ncols, tag, runID;
Double_t LET, LET_sigma, Gvalue, Gvalue_sigma;
string name;
string dummy;
string string_key, string_value;
ifstream file;
file.open("Species.txt",std::ios::in);
runID = 0;
while(1) {
// Read LET values
file >> dummy >> LET >> dummy >> LET_sigma;
if (file.eof()) break;
std::getline(file,dummy);
if (!std::getline(file,string_key)) break;
std::istringstream key(string_key); // Read keys (name of molecule)
if (!std::getline(file,string_value)) break;
std::istringstream value(string_value); // Read G value
while(1) {
key >> name >> tag;
value >> Gvalue >> Gvalue_sigma;
if (!key || !value) break;
speciesInfo[tag].fName = name;
speciesInfo[tag].fG.resize(runID+1);
speciesInfo[tag].fGerr.resize(runID+1);
speciesInfo[tag].fLET.resize(runID+1);
speciesInfo[tag].fLETerr.resize(runID+1);
speciesInfo[tag].fG[runID] = Gvalue;
speciesInfo[tag].fGerr[runID] = Gvalue_sigma;
speciesInfo[tag].fLET[runID] = LET;
speciesInfo[tag].fLETerr[runID] = LET_sigma;
}
runID++;
}
file.close();
for (auto it_map : speciesInfo) {
auto map = it_map.second;
TGraphErrors* gSpecies = new TGraphErrors(map.fG.size(),
map.fLET.data(),
map.fG.data(),
map.fLETerr.data(),
map.fGerr.data());
Int_t color = (2+it_map.first)%TColor::GetNumberOfColors();
if (color == 5 || color == 10 || color == 0) ++color;
TGCompositeFrame *tf = gTab->AddTab(map.fName.c_str());
TGCompositeFrame *frame = new TGCompositeFrame(tf, 60, 60,
kHorizontalFrame);
tf->AddFrame(frame, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY,
10,10,10,2));
TRootEmbeddedCanvas *c1 = new TRootEmbeddedCanvas(map.fName.c_str(),
frame, 700, 500);
frame->AddFrame(c1, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY,
10,10,10,2));
c1->GetCanvas()->SetLogx();
TGHorizontalFrame* hframe = new TGHorizontalFrame(tf, 200, 40);
TGTextButton* save = new TGTextButton(hframe, "&Save as ...",
"Save()");
hframe->AddFrame(save, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
TGTextButton *exit = new TGTextButton(hframe, "&Exit ",
"gApplication->Terminate()");
hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
tf->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2));
gSpecies->SetTitle(map.fName.c_str());
gSpecies->SetMarkerStyle(20+it_map.first);
gSpecies->SetMarkerColor(color);
gSpecies->GetXaxis()->SetTitle("LET (keV/um)");
gSpecies->GetXaxis()->SetTitleOffset(1.1);
gSpecies->GetYaxis()->SetTitle("G value (molecules/100 eV)");
gSpecies->GetYaxis()->SetTitleOffset(1.2);
gSpecies->Draw("AP");
}
main->AddFrame(gTab, new TGLayoutHints(kLHintsBottom | kLHintsExpandX |
kLHintsExpandY, 2, 2, 5, 1));
main->MapSubwindows();
main->Resize(); // resize to default size
main->MapWindow();
}