15 #include "GaudiKernel/ISvcLocator.h"
16 #include "GaudiKernel/Service.h"
27 const std::string& anaTag,
31 m_anaTag( anaTag ) { }
41 return StatusCode::SUCCESS;
50 const std::string& folderOverride,
51 const std::string& nameOverride )
const
54 ISvcLocator* svcLoc = Gaudi::svcLocator();
55 SmartIF<IPlotsDefinitionSvc> plotsDefSvc(svcLoc->service(
"PlotsDefSvc"+m_anaTag ));
65 if( not folderOverride.empty() ) sDef.
folder( folderOverride );
68 if( not nameOverride.empty() ) sDef.
name( nameOverride );
83 return StatusCode::FAILURE;
102 return StatusCode::SUCCESS;
112 return StatusCode::FAILURE;
144 return StatusCode::SUCCESS;
154 return StatusCode::FAILURE;
199 return StatusCode::SUCCESS;
209 return StatusCode::FAILURE;
229 return StatusCode::SUCCESS;
239 return StatusCode::FAILURE;
271 return StatusCode::SUCCESS;
281 return StatusCode::FAILURE;
284 pHisto = ( def.
nBinsY() == 0 ) ?
309 return StatusCode::SUCCESS;
322 return StatusCode::FAILURE;
325 if( std::isnan(
value ) or std::isnan(
weight ) ) {
326 ATH_MSG_ERROR(
"Non-valid fill arguments for TH1:" << pTh1->GetName() );
327 return StatusCode::FAILURE;
332 return StatusCode::SUCCESS;
342 return StatusCode::FAILURE;
345 if( std::isnan(
xval ) or std::isnan(
yval ) or std::isnan(
weight ) ) {
346 ATH_MSG_ERROR(
"Non-valid fill arguments for TH2:" << pTh2->GetName() );
347 return StatusCode::FAILURE;
352 return StatusCode::SUCCESS;
358 TH3* pTh3,
float xval,
float yval,
float zval,
float weight )
const
362 return StatusCode::FAILURE;
365 if( std::isnan(
xval ) or std::isnan(
yval ) or
366 std::isnan( zval ) or std::isnan(
weight ) ) {
367 ATH_MSG_ERROR(
"Non-valid fill arguments for TH3:" << pTh3->GetName() );
368 return StatusCode::FAILURE;
374 return StatusCode::SUCCESS;
382 if( not pTprofile ) {
384 return StatusCode::FAILURE;
387 if( std::isnan(
xval ) or std::isnan(
yval ) or std::isnan(
weight ) ) {
388 ATH_MSG_ERROR(
"Non-valid fill arguments for TProfile:" << pTprofile->GetName() );
389 return StatusCode::FAILURE;
394 return StatusCode::SUCCESS;
400 TProfile2D* pTprofile,
float xval,
float yval,
float zval,
float weight )
const
402 if( not pTprofile ) {
404 return StatusCode::FAILURE;
407 if( std::isnan(
xval ) or std::isnan(
yval ) or
408 std::isnan( zval ) or std::isnan(
weight ) ) {
409 ATH_MSG_ERROR(
"Non-valid fill arguments for TProfile2D:" << pTprofile->GetName() );
410 return StatusCode::FAILURE;
415 return StatusCode::SUCCESS;
421 TEfficiency* pTeff,
float value,
bool accepted,
float weight )
const
424 ATH_MSG_ERROR(
"Trying to fill non-definded 1D TEfficiency" );
425 return StatusCode::FAILURE;
428 if( std::isnan(
value ) or std::isnan(
weight ) ) {
429 ATH_MSG_ERROR(
"Non-valid fill arguments for 1D TEfficiency:" << pTeff->GetName() );
430 return StatusCode::FAILURE;
436 else pTeff->FillWeighted( accepted,
weight,
value );
437 return StatusCode::SUCCESS;
443 TEfficiency* pTeff2d,
float xvalue,
float yvalue,
bool accepted,
float weight )
const
446 ATH_MSG_ERROR(
"Trying to fill non-definded 2D TEfficiency" );
447 return StatusCode::FAILURE;
450 if( std::isnan( xvalue ) or std::isnan( yvalue ) or std::isnan(
weight ) ) {
451 ATH_MSG_ERROR(
"Non-valid fill arguments for 2D TEfficiency:" << pTeff2d->GetName() );
452 return StatusCode::FAILURE;
457 if(
weight==1.) pTeff2d->Fill( accepted, xvalue, yvalue );
458 else pTeff2d->FillWeighted( accepted,
weight, xvalue, yvalue );
459 return StatusCode::SUCCESS;
465 unsigned int nBins,
float absMin,
float absMax,
bool symmetriseAroundZero )
467 std::vector<float> emptyVec;
469 if( absMin<=0 or absMax<=0 ) {
470 ATH_MSG_WARNING(
"absMin or absMax argument to getLogLinearBins is out of range" );
472 }
else if(
nBins==0 ) {
477 unsigned int asymVecSize =
nBins + 1;
478 std::vector<float> theBinning( asymVecSize, 0.);
480 float logStart =
std::log( absMin );
481 float logDist =
std::log( absMax ) - logStart;
484 float thisLog{ logStart };
485 for(
float& thisBin : theBinning ) {
489 if( symmetriseAroundZero ) {