#include <UpdateTProfile.h>
Public Member Functions | |
UpdateTProfile () | |
~UpdateTProfile () | |
Static Public Member Functions | |
static void | setBinContent (TProfile *const profile, const uint32_t &bin, const double &entries, const double &mean, const double &spread) |
static void | setBinContents (TProfile *const profile, const uint32_t &bin, const double &num_of_entries, const double &sum_of_contents, const double &sum_of_squares) |
Definition at line 9 of file UpdateTProfile.h.
UpdateTProfile::UpdateTProfile | ( | ) |
Definition at line 9 of file UpdateTProfile.cc.
{;}
UpdateTProfile::~UpdateTProfile | ( | ) |
Definition at line 13 of file UpdateTProfile.cc.
{;}
void UpdateTProfile::setBinContent | ( | TProfile *const | prof, |
const uint32_t & | bin, | ||
const double & | num_of_entries, | ||
const double & | mean, | ||
const double & | spread | ||
) | [static] |
Error option "s" means that the error returned using the GetBinError() method is the spread for that bin. (If the default error option is used, the error returned is spread / sqrt(N), where N is the number of entries for that bin). The commissioning procedures use option "s" throughout.
In order that the profile histo correctly displays the "bin_mean" and "bin_spread" (an example being: peds +/- strip noise), we have to manipulate the "contents" and "error" data as follows:
TProfile::SetBinEntries( bin_number, bin_entries ) TProfile::SetBinContents( bin_number, bin_mean * bin_entries ) TProfile::SetBinError( bin_number, weight )
"weight" is calculated based on the GetBinError() method, which returns an error ("err" below) based on the following equation:
1) if error option is set to "s": err = sqrt( wei^2 / num - ( sum / num )^2 ) => err = sqrt( wei^2 / num - sum^2 / num^2 ) => wei = sqrt( err^2 * num + sum^2 / num ) => wei = sqrt( err^2 * num + mean^2 * num )
2) else if error option is set to "" (ie, default): err = ( 1 / sqrt( num ) ) * sqrt( wei^2 / num - ( sum / num )^2 ) => err = sqrt( wei^2 / num^2 - sum^2 / num^3 ) => wei = sqrt( err^2 * num^2 + cont^2 / num ) => wei = sqrt( err^2 * num^2 + mean^2 * num )
where: "num" is the bin entries, as set by the method SetBinEntries() "sum" is the bin content, as set by the method SetBinContent() "wei" is the bin error, as set by the method SetBinError() and "mean" = sum / num
Definition at line 82 of file UpdateTProfile.cc.
References ExpressReco_HICollisions_FallBack::cerr, python::tagInventory::entries, mathSSE::sqrt(), and CommonMethods::weight().
Referenced by setBinContents(), PedestalsTask::update(), PedsOnlyTask::update(), PedsFullNoiseTask::update(), and NoiseTask::update().
{ // std::cout << "[UpdateTProfile::setBinContents]" << std::endl; // Check histo exists if ( !prof ) { std::cerr << "[UpdateTProfile::setBinContents]" << " NULL pointer to TProfile object!" << std::endl; return; } // Check bin number is valid if ( bin == 0 || bin > static_cast<uint32_t>(prof->GetNbinsX()) ) { std::cerr << "[UpdateTProfile::setBinContents]" << " Unexpected bin number!" << std::endl; return; } // Check entries are present if ( num_of_entries <= 0. ) { return; } //@@ what about negative weights??? double entries = num_of_entries; // Check error option const char* spread_option = "s"; const char* default_option = ""; // const char* option = prof->GetErrorOption(); // if ( option[0] != spread_option[0] ) { // std::cout << "[UpdateTProfile::setBinContents]" // << " Setting error option for TProfile to 's'!" << std::endl; // prof->SetErrorOption( "s" ); // } const char* error_option = prof->GetErrorOption(); // Calculate "weight" used for SetBinError() method double weight; if ( error_option[0] == spread_option[0] ) { weight = sqrt( mean*mean*entries + spread*spread*entries ); } else if (error_option[0] == default_option[0] ) { weight = sqrt( mean*mean*entries + spread*spread*entries*entries ); } else { std::cerr << "[UpdateTProfile::setBinContents]" << " Unexpected error option for TProfile!" << std::endl; weight = 0.; } // Set bin entries, contents and error prof->SetBinEntries( bin, entries ); prof->SetBinContent( bin, mean * entries ); prof->SetBinError( bin, weight ); // LogTrace("TEST") // << "[UpdateTProfile::" << __func__ << "]" // << " bin/entries/mean/content/error: " // << bin << "/" // << entries << "/" // << mean << "/" // << mean*entries << "/" // << weight; // Set total number of entries if ( bin == 1 ) { prof->SetEntries( entries ); } else { prof->SetEntries( prof->GetEntries() + entries ); } }
void UpdateTProfile::setBinContents | ( | TProfile *const | prof, |
const uint32_t & | bin, | ||
const double & | num_of_entries, | ||
const double & | sum_of_contents, | ||
const double & | sum_of_squares | ||
) | [static] |
Definition at line 17 of file UpdateTProfile.cc.
References plotscripts::mean(), setBinContent(), and mathSSE::sqrt().
{ // std::cout << "[UpdateTProfile::setBinContents]" << std::endl; double mean = 0.; double spread = 0.; if ( num_of_entries ) { mean = sum_of_contents / num_of_entries; spread = sqrt( sum_of_squares/ num_of_entries - mean * mean ); } // LogTrace("TEST") // << "[UpdateTProfile::setBinContents]" // << " bin: " << bin // << " entries: " << num_of_entries // << " contents: " << sum_of_contents // << " squared: " << sum_of_squares // << " mean: " << mean // << " spread: " << spread; UpdateTProfile::setBinContent( prof, bin, num_of_entries, mean, spread ); }