Very inefficient histogram handling in processors


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.






Bug report


Processor code


development version


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.