Hierarchical dependence of porphyrin self-aggregation: controlling and exploiting the complexity