Very inefficient histogram handling in processors

Project: 

EUTelescope Core Components

Many processors (e.g. EUTelClusteringProcessor, EUTelHitmaker) keep track of their histograms by storing the pointers in a map of type std::map<std::string, AIDA::IBaseHistogram * >.
For every event and every sensor plane, the pointer lookup is therefore constructed via strings, with multiple operations (e.g. the convertion of the plane id number into a string). This creates a huge overhead: in the case of the EUTelClusteringProcessor, valgrind with the cachegrind tool puts the time spend on string manipulation at O(50%) of the total processing time.
This should be optimized accross all processors, e.g. by handling histogram pointers in vectors and/or directly calling them.
Additionally: many processors handle histogram filling separately, implying that e.g. in the EUTelClusteringProcessor, they create new data structures and perform cluster identification and other calculations that could possibly be avoided if histograms would be filled during the main event processing.
 

Status: 

Active

Priority: 

Major

Category: 

Bug report

Component: 

Processor code

Version: 

development version

3 Comments

Issue changes: 

Title:Very inefficient histogramm handling in processors» Very inefficient histogram handling in processors

First fixes commited

With revision  2607, the EUTelClusteringProcessor uses vectors to store the histogram pointer, speeding up this analysis step by ~50% when filling histograms.
Other processors to follow.