| 1 | Here is a wish list for a common !FastSim framework: |
| 2 | |
| 3 | 1. (optional, lowest priority) ROOT independance |
| 4 | (for example, using some classes from CLHEP and Boost.Python for factories, config. file, etc) |
| 5 | |
| 6 | 2. (optional) config. file independence (specifying only in-memory representation and access methods) |
| 7 | |
| 8 | 3. Module factory that creates modules instances at runtime '''by name''' |
| 9 | |
| 10 | With ROOT it's just {{{gROOT->GetClass(moduleClassName)->New()}}} |
| 11 | |
| 12 | http://root.cern.ch/root/html/TClass.html |
| 13 | |
| 14 | The simplest solution without ROOT would be |
| 15 | {{{ |
| 16 | BaseModuleClass* moduleFactory(string const &name) |
| 17 | { |
| 18 | if(name == "Module1") |
| 19 | { |
| 20 | return new Module1; |
| 21 | } |
| 22 | else if(name == "Module2") |
| 23 | { |
| 24 | return new Module2; |
| 25 | } |
| 26 | return NULL; |
| 27 | } |
| 28 | }}} |
| 29 | |
| 30 | 4. Memory manager that minimizes the amount of memory allocations and |
| 31 | that creates/destroys/clears all data collections used by other services and modules. |
| 32 | It also clears all data collections produce by other services and modules between |
| 33 | events in the event loop. |
| 34 | (see ROOT {{{TClonesArray}}}, {{{ExRootFactory}}}) |
| 35 | |
| 36 | http://root.cern.ch/root/html/TClonesArray.html |
| 37 | |
| 38 | https://server06.fynu.ucl.ac.be/projects/ExRootAnalysis/browser/trunk/ExRootAnalysis/ExRootFactory.h |
| 39 | |
| 40 | 5. Central configuration manager that stores all parameters for all modules and |
| 41 | that provides access '''by name''' to these parameters |
| 42 | ({{{getDouble(name, defaultValue)}}}, {{{getDouble("JetFinder/MinPT", 10.0)}}}) |
| 43 | |
| 44 | 6. Data manager that provides access '''by name''' to all data collections created by other services and modules |
| 45 | (see {{{fwlite::Handle<T>::getByLabel(event, label)}}} in CMSSW or {{{TFolder}}} in ROOT) |
| 46 | |
| 47 | https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookFWLiteEventLoop |
| 48 | |
| 49 | http://cmssdt.cern.ch/SDT/doxygen/CMSSW_5_3_2/doc/html/d1/dd2/classfwlite_1_1Handle.html |
| 50 | |
| 51 | http://root.cern.ch/download/doc/ROOTUsersGuideHTML/ch10.html |
| 52 | |
| 53 | 7. Universal object that could represent all physics objects (particles, tracks, |
| 54 | calorimeter towers, jets) with possibility to add user defined information |
| 55 | (see !FastJet {{{PseudoJet}}} & {{{UserInfoBase}}} classes, CMS PAT {{{UserData}}}, {{{ExRootCandidate}}}) |
| 56 | |
| 57 | With ROOT, user defined information can be implemented quite easily |
| 58 | {{{ |
| 59 | class ExRootCandidate |
| 60 | { |
| 61 | ... |
| 62 | private: |
| 63 | map< const TClass*, TObject* > fInfoMap |
| 64 | }; |
| 65 | |
| 66 | //------------------------------------------------------------------------------ |
| 67 | |
| 68 | TObject *ExRootCandidate::GetInfo(const TClass *cl) |
| 69 | { |
| 70 | map<const TClass *, TObject *>::const_iterator it = fInfoMap.find(cl); |
| 71 | |
| 72 | return (it != fInfoMap.end() ? it->second : 0); |
| 73 | } |
| 74 | |
| 75 | //------------------------------------------------------------------------------ |
| 76 | |
| 77 | void ExRootCandidate::SetInfo(TObject *info) |
| 78 | { |
| 79 | fInfoMap[info->IsA()] = info; |
| 80 | } |
| 81 | }}} |
| 82 | |
| 83 | https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuidePATUserData |
| 84 | |
| 85 | http://fastjet.fr/repo/doxygen-3.0.2/classfastjet_1_1PseudoJet.html |
| 86 | |
| 87 | http://fastjet.fr/repo/doxygen-3.0.2/classfastjet_1_1PseudoJet_1_1UserInfoBase.html |
| 88 | |
| 89 | https://server06.fynu.ucl.ac.be/projects/ExRootAnalysis/browser/trunk/ExRootAnalysis/ExRootCandidate.h |
| 90 | |
| 91 | http://isscvs.cern.ch/cgi-bin/viewcvs-all.cgi/ORCA/Examples/ExRootAnalysis/UserRootAnalysis.cc?root=orca&view=markup |
| 92 | |
| 93 | 8. Modules that consume and produce collections of universal objects |