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.