Geant4 Cross Reference |
1 struct SpeciesInfoAOS 1 struct SpeciesInfoAOS 2 { 2 { 3 SpeciesInfoAOS() 3 SpeciesInfoAOS() 4 { 4 { 5 fNEvent = 0; 5 fNEvent = 0; 6 fNumber = 0; 6 fNumber = 0; 7 fG = 0.; 7 fG = 0.; 8 fG2 = 0.; 8 fG2 = 0.; 9 } 9 } 10 10 11 SpeciesInfoAOS(const SpeciesInfoAOS& right) 11 SpeciesInfoAOS(const SpeciesInfoAOS& right) // Species A(B); 12 { 12 { 13 fNEvent = right.fNEvent; 13 fNEvent = right.fNEvent; 14 fNumber = right.fNumber; 14 fNumber = right.fNumber; 15 fG = right.fG; 15 fG = right.fG; 16 fG2 = right.fG2; 16 fG2 = right.fG2; 17 fName = right.fName; 17 fName = right.fName; 18 } 18 } 19 19 20 SpeciesInfoAOS& operator=(const SpeciesInfo 20 SpeciesInfoAOS& operator=(const SpeciesInfoAOS& right) // A = B 21 { 21 { 22 if(&right == this) return *this; 22 if(&right == this) return *this; 23 fNEvent = right.fNEvent; 23 fNEvent = right.fNEvent; 24 fNumber = right.fNumber; 24 fNumber = right.fNumber; 25 fG = right.fG; 25 fG = right.fG; 26 fG2 = right.fG2; 26 fG2 = right.fG2; 27 fName = right.fName; 27 fName = right.fName; 28 return *this; 28 return *this; 29 } 29 } 30 30 31 Int_t fNEvent; 31 Int_t fNEvent; 32 Int_t fNumber; 32 Int_t fNumber; 33 Double_t fG; 33 Double_t fG; 34 Double_t fG2; 34 Double_t fG2; 35 string fName; 35 string fName; 36 }; 36 }; 37 37 38 //-------------------------------------------- 38 //------------------------------------------------------------------------ 39 39 40 struct SpeciesInfoSOA 40 struct SpeciesInfoSOA 41 { 41 { 42 SpeciesInfoSOA() 42 SpeciesInfoSOA() 43 { 43 { 44 fRelatErr = 0; 44 fRelatErr = 0; 45 } 45 } 46 46 47 SpeciesInfoSOA(const SpeciesInfoSOA& right) 47 SpeciesInfoSOA(const SpeciesInfoSOA& right) : 48 fG(right.fG), 48 fG(right.fG), 49 fGerr(right.fGerr), 49 fGerr(right.fGerr), 50 fTime(right.fTime), 50 fTime(right.fTime), 51 fRelatErr(right.fRelatErr), 51 fRelatErr(right.fRelatErr), 52 fName(right.fName) 52 fName(right.fName) 53 {} 53 {} 54 54 55 SpeciesInfoSOA& operator=(const SpeciesInfo 55 SpeciesInfoSOA& operator=(const SpeciesInfoSOA& right) 56 { 56 { 57 if(this == &right) return *this; 57 if(this == &right) return *this; 58 fG = right.fG; 58 fG = right.fG; 59 fGerr = right.fGerr; 59 fGerr = right.fGerr; 60 fTime = right.fTime; 60 fTime = right.fTime; 61 fRelatErr = right.fRelatErr; 61 fRelatErr = right.fRelatErr; 62 fName = right.fName; 62 fName = right.fName; 63 return *this; 63 return *this; 64 } 64 } 65 65 66 std::vector<Double_t> fG; 66 std::vector<Double_t> fG; 67 std::vector<Double_t> fGerr; 67 std::vector<Double_t> fGerr; 68 std::vector<Double_t> fTime; 68 std::vector<Double_t> fTime; 69 Double_t fRelatErr; 69 Double_t fRelatErr; 70 Double_t fMin, fMax; 70 Double_t fMin, fMax; 71 string fName; 71 string fName; 72 }; 72 }; 73 73 74 const char* filetypes[] = { 74 const char* filetypes[] = { 75 "PostScript", "*.ps", 75 "PostScript", "*.ps", 76 "Encapsulated PostScript", "*.eps", 76 "Encapsulated PostScript", "*.eps", 77 "PDF files", "*.pdf", 77 "PDF files", "*.pdf", 78 "Gif files", "*.gif", 78 "Gif files", "*.gif", 79 "PNG files", "*.png", 79 "PNG files", "*.png", 80 "All files", "*", 80 "All files", "*", 81 0, 0 81 0, 0 82 }; 82 }; 83 83 84 TGTab *gTab = nullptr; 84 TGTab *gTab = nullptr; 85 85 86 void Save() 86 void Save() 87 { 87 { 88 TGFileInfo fi; 88 TGFileInfo fi; 89 fi.fFileTypes = filetypes; 89 fi.fFileTypes = filetypes; 90 90 91 new TGFileDialog(gClient->GetRoot(),gClient 91 new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDSave,&fi); 92 gROOT->GetListOfCanvases()->At(gTab->GetCur 92 gROOT->GetListOfCanvases()->At(gTab->GetCurrent())->SaveAs(fi.fFilename); 93 } 93 } 94 94 95 95 96 void plotG() 96 void plotG() 97 { 97 { 98 gROOT->SetStyle("Plain"); 98 gROOT->SetStyle("Plain"); 99 gStyle->SetPalette(1); 99 gStyle->SetPalette(1); 100 gStyle->SetCanvasBorderMode(0); 100 gStyle->SetCanvasBorderMode(0); 101 gStyle->SetFrameBorderMode(0); 101 gStyle->SetFrameBorderMode(0); 102 gStyle->SetPadTickX(1); 102 gStyle->SetPadTickX(1); 103 gStyle->SetPadTickY(1); 103 gStyle->SetPadTickY(1); 104 104 105 TGMainFrame *main = new TGMainFrame(gClient 105 TGMainFrame *main = new TGMainFrame(gClient->GetRoot(), 200, 200); 106 gTab = new TGTab(main, 200, 200); 106 gTab = new TGTab(main, 200, 200); 107 Double_t timeA, sumG, sumG2; 107 Double_t timeA, sumG, sumG2; 108 Int_t speciesID, number, nEvent; 108 Int_t speciesID, number, nEvent; 109 char speciesName[500]; 109 char speciesName[500]; 110 110 111 TFile* file = new TFile; 111 TFile* file = new TFile; 112 file = TFile::Open("scorer.root"); 112 file = TFile::Open("scorer.root"); 113 113 114 TTree* tree = (TTree*)file->Get("species"); 114 TTree* tree = (TTree*)file->Get("species"); 115 tree->SetBranchAddress("speciesID", &specie 115 tree->SetBranchAddress("speciesID", &speciesID); 116 tree->SetBranchAddress("number", &number); 116 tree->SetBranchAddress("number", &number); 117 tree->SetBranchAddress("nEvent", &nEvent); 117 tree->SetBranchAddress("nEvent", &nEvent); 118 tree->SetBranchAddress("speciesName", &spec 118 tree->SetBranchAddress("speciesName", &speciesName); 119 tree->SetBranchAddress("time", &timeA); 119 tree->SetBranchAddress("time", &timeA); 120 tree->SetBranchAddress("sumG", &sumG); 120 tree->SetBranchAddress("sumG", &sumG); 121 tree->SetBranchAddress("sumG2", &sumG2); 121 tree->SetBranchAddress("sumG2", &sumG2); 122 122 123 Long64_t nentries = tree->GetEntries(); 123 Long64_t nentries = tree->GetEntries(); 124 124 125 if(nentries == 0) { 125 if(nentries == 0) { 126 cout << "No entries found in the tree sp 126 cout << "No entries found in the tree species contained in the file " 127 << file->GetPath() << endl; 127 << file->GetPath() << endl; 128 exit(1); 128 exit(1); 129 } 129 } 130 130 131 std::map<int, std::map<double, SpeciesInfoA 131 std::map<int, std::map<double, SpeciesInfoAOS>> speciesTimeInfo; 132 132 133 for (Int_t j=0; j < nentries; j++) { 133 for (Int_t j=0; j < nentries; j++) { 134 tree->GetEntry(j); 134 tree->GetEntry(j); 135 135 136 SpeciesInfoAOS& infoAOS = speciesTimeInfo 136 SpeciesInfoAOS& infoAOS = speciesTimeInfo[speciesID][timeA]; 137 137 138 infoAOS.fNumber += number; 138 infoAOS.fNumber += number; 139 infoAOS.fG += sumG; 139 infoAOS.fG += sumG; 140 infoAOS.fG2 += sumG2; 140 infoAOS.fG2 += sumG2; 141 infoAOS.fNEvent += nEvent; 141 infoAOS.fNEvent += nEvent; 142 infoAOS.fName = speciesName; 142 infoAOS.fName = speciesName; 143 } 143 } 144 144 145 std::map<Int_t, SpeciesInfoSOA> speciesInfo 145 std::map<Int_t, SpeciesInfoSOA> speciesInfo; 146 146 147 auto it_SOA = speciesTimeInfo.begin(); 147 auto it_SOA = speciesTimeInfo.begin(); 148 auto end_SOA = speciesTimeInfo.end(); 148 auto end_SOA = speciesTimeInfo.end(); 149 149 150 for (; it_SOA!=end_SOA;++it_SOA) { 150 for (; it_SOA!=end_SOA;++it_SOA) { 151 const Int_t _speciesID = it_SOA->first; 151 const Int_t _speciesID = it_SOA->first; 152 SpeciesInfoSOA& info = speciesInfo[_spec 152 SpeciesInfoSOA& info = speciesInfo[_speciesID]; 153 153 154 auto it2 = it_SOA->second.begin(); 154 auto it2 = it_SOA->second.begin(); 155 auto end2 = it_SOA->second.end(); 155 auto end2 = it_SOA->second.end(); 156 156 157 info.fName = it2->second.fName; 157 info.fName = it2->second.fName; 158 const size_t size2 = it_SOA->second.size 158 const size_t size2 = it_SOA->second.size(); 159 info.fG.resize(size2); 159 info.fG.resize(size2); 160 info.fGerr.resize(size2); 160 info.fGerr.resize(size2); 161 info.fTime.resize(size2); 161 info.fTime.resize(size2); 162 162 163 Int_t color = (2+_speciesID)%TColor::Get 163 Int_t color = (2+_speciesID)%TColor::GetNumberOfColors(); 164 if(color == 5 || color == 10 || color == 164 if(color == 5 || color == 10 || color == 0) ++color; 165 165 166 for (int i2 = 0 ;it2!=end2;++it2, ++i2) 166 for (int i2 = 0 ;it2!=end2;++it2, ++i2) { 167 SpeciesInfoAOS& infoAOS = it2->second 167 SpeciesInfoAOS& infoAOS = it2->second; 168 168 169 Double_t _SumG2 = infoAOS.fG2; 169 Double_t _SumG2 = infoAOS.fG2; 170 Double_t _MeanG = infoAOS.fG/infoAOS. 170 Double_t _MeanG = infoAOS.fG/infoAOS.fNEvent; 171 Double_t _Gerr = (infoAOS.fNEvent > 1 171 Double_t _Gerr = (infoAOS.fNEvent > 1) ? sqrt((_SumG2/infoAOS.fNEvent - pow(_MeanG,2)) 172 172 /(infoAOS.fNEvent-1) ) : 0.; 173 173 174 info.fG[i2] = _MeanG; 174 info.fG[i2] = _MeanG; 175 info.fGerr[i2] = _Gerr; 175 info.fGerr[i2] = _Gerr; 176 info.fTime[i2] = it2->first; 176 info.fTime[i2] = it2->first; 177 177 178 info.fRelatErr += _Gerr/(_MeanG + 1e-3 178 info.fRelatErr += _Gerr/(_MeanG + 1e-30); 179 if(info.fG[i2] != 0) 179 if(info.fG[i2] != 0) 180 { 180 { 181 std::cout<<info.fTime[i2]<<" "<<info 181 std::cout<<info.fTime[i2]<<" "<<info.fG[i2]<<" "<<info.fGerr[i2]<<" "<<info.fName<<std::endl; 182 } 182 } 183 } 183 } 184 184 185 TGraphErrors* gSpecies = new TGraphError 185 TGraphErrors* gSpecies = new TGraphErrors(info.fG.size(), 186 186 info.fTime.data(), 187 187 info.fG.data(), 188 188 0, 189 189 info.fGerr.data()); 190 190 191 TGCompositeFrame *tf = gTab->AddTab(info 191 TGCompositeFrame *tf = gTab->AddTab(info.fName.c_str()); 192 TGCompositeFrame *frame = new TGComposit 192 TGCompositeFrame *frame = new TGCompositeFrame(tf, 60, 60, 193 193 kHorizontalFrame); 194 194 195 tf->AddFrame(frame, new TGLayoutHints(kL 195 tf->AddFrame(frame, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY, 196 10 196 10,10,10,2)); 197 197 198 TRootEmbeddedCanvas *c1 = new TRootEmbed 198 TRootEmbeddedCanvas *c1 = new TRootEmbeddedCanvas(info.fName.c_str(), 199 199 frame, 700, 500); 200 frame->AddFrame(c1, new TGLayoutHints(kL 200 frame->AddFrame(c1, new TGLayoutHints(kLHintsExpandX|kLHintsExpandY, 201 10 201 10,10,10,2)); 202 c1->GetCanvas()->SetLogx(); 202 c1->GetCanvas()->SetLogx(); 203 203 204 TGHorizontalFrame* hframe = new TGHorizo 204 TGHorizontalFrame* hframe = new TGHorizontalFrame(tf, 200, 40); 205 205 206 TGTextButton* save = new TGTextButton(hf 206 TGTextButton* save = new TGTextButton(hframe, "&Save as ...", 207 "Sa 207 "Save()"); 208 hframe->AddFrame(save, new TGLayoutHints 208 hframe->AddFrame(save, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); 209 209 210 TGTextButton *exit = new TGTextButton(hf 210 TGTextButton *exit = new TGTextButton(hframe, "&Exit ", 211 "g 211 "gApplication->Terminate()"); 212 hframe->AddFrame(exit, new TGLayoutHints 212 hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); 213 213 214 tf->AddFrame(hframe, new TGLayoutHints(k 214 tf->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2)); 215 215 216 gSpecies->SetTitle(info.fName.c_str()); 216 gSpecies->SetTitle(info.fName.c_str()); 217 gSpecies->SetMarkerStyle(20+_speciesID); 217 gSpecies->SetMarkerStyle(20+_speciesID); 218 gSpecies->SetMarkerColor(color); 218 gSpecies->SetMarkerColor(color); 219 gSpecies->SetLineColor(color); 219 gSpecies->SetLineColor(color); 220 gSpecies->GetXaxis()->SetTitle("Time (ns 220 gSpecies->GetXaxis()->SetTitle("Time (ns)"); 221 gSpecies->GetXaxis()->SetTitleOffset(1.1 221 gSpecies->GetXaxis()->SetTitleOffset(1.1); 222 gSpecies->GetYaxis()->SetTitle("G value 222 gSpecies->GetYaxis()->SetTitle("G value (molecules/100 eV)"); 223 gSpecies->GetYaxis()->SetTitleOffset(1.2 223 gSpecies->GetYaxis()->SetTitleOffset(1.2); 224 gSpecies->Draw("ALP"); 224 gSpecies->Draw("ALP"); 225 } 225 } 226 226 227 main->AddFrame(gTab, new TGLayoutHints(kLHi 227 main->AddFrame(gTab, new TGLayoutHints(kLHintsBottom | kLHintsExpandX | 228 kLHi 228 kLHintsExpandY, 2, 2, 5, 1)); 229 229 230 main->MapSubwindows(); 230 main->MapSubwindows(); 231 main->Resize(); // resize to default size 231 main->Resize(); // resize to default size 232 main->MapWindow(); 232 main->MapWindow(); 233 233 234 } 234 } 235 235