Files
geant4/examples/advanced/Tiara/source/tiara/src/TiaraTally.cc
T
2016-06-09 11:11:55 +02:00

111 lines
3.4 KiB
C++

//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: TiaraTally.cc,v 1.4 2003/11/07 12:39:11 vnivanch Exp $
// GEANT4 tag $Name: geant4-07-00-cand-01 $
//
#include "TiaraTally.hh"
TiaraTally::TiaraTally() :
fBinEdges(),
fLowestEdge(0),
fMapHighEdgeToMeasure()
{}
TiaraTally::~TiaraTally()
{}
void TiaraTally::setBinEdges(const std::vector<double> & binEdges){
fBinEdges = binEdges;
if (fBinEdges.size() < 2) {
G4Exception("ERROR in TiaraTally::setBinEdges: binEdges.size() < 2");
}
fLowestEdge = fBinEdges[0];
std::vector<double>::iterator binIt = fBinEdges.begin();
binIt++;
for (;binIt != fBinEdges.end(); ++binIt) {
std::vector<double>::iterator testIt = binIt;
if (! (*binIt > *(--testIt))) {
G4Exception("ERROR in TiaraTally::setBinEdges: binEdges not in ascending order");
}
std::pair<G4double, TiaraMeasure > myPair(0, TiaraMeasure());
fMapHighEdgeToMeasure[*binIt] = myPair;
}
}
void TiaraTally::fill(G4double x, G4double w){
if (x>fLowestEdge) {
for (TiaraTallyData::iterator dataIt = fMapHighEdgeToMeasure.begin();
dataIt != fMapHighEdgeToMeasure.end(); dataIt++) {
if (x < dataIt->first) {
dataIt->second.first += w;
break;
}
}
}
}
void TiaraTally::EndOfEventAction() {
for (TiaraTallyData::iterator dataIt = fMapHighEdgeToMeasure.begin();
dataIt != fMapHighEdgeToMeasure.end(); dataIt++) {
dataIt->second.second.Xin(dataIt->second.first);
dataIt->second.first = 0;
}
}
TiaraMeasure TiaraTally::measure(G4int i){
TiaraMeasure m;
if (i<0 || i>(G4int)(fMapHighEdgeToMeasure.size()-1)) {
G4cout << "ERROR in TiaraTally::measure: argument: " << i
<< ", out of range!" << G4endl;
}
else {
G4int k(0);
for (TiaraTallyData::iterator dataIt = fMapHighEdgeToMeasure.begin();
dataIt != fMapHighEdgeToMeasure.end(); dataIt++) {
if (i==k++) {
m = dataIt->second.second;
break;
}
}
}
return m;
}
std::vector<double> TiaraTally::binEdges(){
return fBinEdges;
}
G4int TiaraTally::size() {
return fMapHighEdgeToMeasure.size();
}