// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // /// \file electromagnetic/TestEm17/src/HistoManager.cc /// \brief Implementation of the HistoManager class // // // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "HistoManager.hh" #include "HistoMessenger.hh" #include "G4UnitsTable.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() : fHistoMessenger(0) { fileName[0] = "testem17"; factoryOn = false; fNbHist = 0; // histograms for (G4int k=0; kSetVerboseLevel(0); G4String extension = analysisManager->GetFileType(); fileName[1] = fileName[0] + "." + extension; // Open an output file // G4bool fileOpen = analysisManager->OpenFile(fileName[0]); if (!fileOpen) { G4cout << "\n---> HistoManager::book(): cannot open " << fileName[1] << G4endl; return; } // create selected histograms // analysisManager->SetFirstHistoId(1); for (G4int k=0; kCreateH1( fLabel[k], fTitle[k], fNbins[k], fVmin[k], fVmax[k]); fHistPt[k] = analysisManager->GetH1(fHistId[k]); factoryOn = true; } } if (factoryOn) G4cout << "\n----> Histogram file is opened in " << fileName[1] << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void HistoManager::Save() { if (factoryOn) { G4cout << "\n----> HistoManager::save " << G4endl; G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); analysisManager->Write(); analysisManager->CloseFile(); SaveAscii(); // Write fAscii file, if any G4cout << "\n----> Histograms are saved in " << fileName[1] << G4endl; // delete G4AnalysisManager::Instance(); factoryOn = false; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void HistoManager::FillHisto(G4int ih, G4double e, G4double weight) { if (ih > kMaxHisto) { G4cout << "---> warning from HistoManager::FillHisto() : histo " << ih << "does not fExist; e= " << e << " w= " << weight << G4endl; return; } if (fHistPt[ih]) fHistPt[ih]->fill(e/fUnit[ih], weight); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void HistoManager::SetHisto(G4int ih, G4int nbins, G4double vmin, G4double vmax, const G4String& unit) { if (ih > kMaxHisto) { G4cout << "---> warning from HistoManager::SetHisto() : histo " << ih << "does not fExist" << G4endl; return; } const G4String id[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"}; const G4String title[] = { "log10(Etransfert/Emu) muIonization", //1 "log10(Etransfert/Emu) muPair", //2 "log10(Etransfert/Emu) muBrems", //3 "log10(Etransfert/Emu) muNuclear", //4 "log10(Etransfert/Emu) hIonization", //5 "log10(Etransfert/Emu) hPair", //6 "log10(Etransfert/Emu) hBrems", //7 "dummy", //8 "dummy", //9 "dummy", //10 "log10(Etransfert/Emu) muIonization", //11 "log10(Etransfert/Emu) muPair", //12 "log10(Etransfert/Emu) muBrems", //13 "log10(Etransfert/Emu) muNuclear" //14 }; G4String titl = title[ih]; fUnit[ih] = 1.; if (unit != "none") { titl = title[ih] + " (" + unit + ")"; fUnit[ih] = G4UnitDefinition::GetValueOf(unit); } fExist[ih] = true; fLabel[ih] = "h"+id[ih]; fTitle[ih] = titl; fNbins[ih] = nbins; fVmin[ih] = vmin; fVmax[ih] = vmax; fWidth[ih] = fUnit[ih]*(vmax-vmin)/nbins; fNbHist++; G4cout << "----> SetHisto " << ih << ": " << titl << "; " << nbins << " bins from " << vmin << " " << unit << " to " << vmax << " " << unit << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void HistoManager::Normalize(G4int ih, G4double fac) { if (ih >= kMaxHisto) { G4cout << "---> warning from HistoManager::Normalize() : histo " << ih << " fac= " << fac << G4endl; return; } if (fHistPt[ih]) fHistPt[ih]->scale(fac); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void HistoManager::PrintHisto(G4int ih) { if (ih < kMaxHisto) { fAscii[ih] = true; fAscii[0] = true; } else G4cout << "---> warning from HistoManager::PrintHisto() : histo " << ih << "does not exist" << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include void HistoManager::SaveAscii() { if (!fAscii[0]) return; G4String name = fileName[0] + ".ascii"; std::ofstream File(name, std::ios::out); if (!File) { G4cout << "\n---> HistoManager::saveAscii(): cannot open " << name << G4endl; return; } File.setf( std::ios::scientific, std::ios::floatfield ); //write selected histograms for (G4int ih=0; ihaxis().bin_center(iBin) << "\t" << fHistPt[ih]->bin_height(iBin) << G4endl; } } } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......