Fork me on GitHub

Version 2 (modified by Pavel Demin, 12 years ago) ( diff )

--

Here is a wish list for a common FastSim framework:

  1. (optional, lowest priority) ROOT Independence (for example, using some classes from CLHEP and Boost.Python for factories, config. file, etc)
  1. (optional) config. file independence (specifying only in-memory representation and access methods)
  1. Module factory that creates modules instances at run-time by name

With ROOT it's just gROOT->GetClass(moduleClassName)->New()

http://root.cern.ch/root/html/TClass.html

The simplest solution without ROOT would be

  BaseModuleClass* moduleFactory(string const &name)
  {
    if(name == "Module1")
    {
      return new Module1;
    }
    else if(name == "Module2")
    {
      return new Module2;
    }
    return NULL;
  }
  1. Memory manager that minimizes the amount of memory allocations and that creates/destroys/clears all data collections used by other services and modules. It also clears all data collections produce by other services and modules between events in the event loop. (see ROOT TClonesArray, ExRootFactory)

http://root.cern.ch/root/html/TClonesArray.html

https://server06.fynu.ucl.ac.be/projects/ExRootAnalysis/browser/trunk/ExRootAnalysis/ExRootFactory.h

  1. Central configuration manager that stores all parameters for all modules and that provides access by name to these parameters (getDouble(name, defaultValue), getDouble("JetFinder/MinPT", 10.0))
  1. Data manager that provides access by name to all data collections created by other services and modules (see fwlite::Handle<T>::getByLabel(event, label) in CMSSW or TFolder in ROOT)

https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookFWLiteEventLoop

http://cmssdt.cern.ch/SDT/doxygen/CMSSW_5_3_2/doc/html/d1/dd2/classfwlite_1_1Handle.html

http://root.cern.ch/download/doc/ROOTUsersGuideHTML/ch10.html

  1. Universal object that could represent all physics objects (particles, tracks, calorimeter towers, jets) with possibility to add user defined information (see FastJet PseudoJet & UserInfoBase classes, CMS PAT UserData, ExRootCandidate)

With ROOT, user defined information can be implemented quite easily

  class ExRootCandidate
  {
  ...
  private:
    map< const TClass*, TObject* > fInfoMap
  };
  
   //------------------------------------------------------------------------------

  TObject *ExRootCandidate::GetInfo(const TClass *cl)
  {
    map<const TClass *, TObject *>::const_iterator it = fInfoMap.find(cl);

    return (it != fInfoMap.end() ? it->second : 0);
  }

  //------------------------------------------------------------------------------

  void ExRootCandidate::SetInfo(TObject *info)
  {
    fInfoMap[info->IsA()] = info;
  }

https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuidePATUserData

http://fastjet.fr/repo/doxygen-3.0.2/classfastjet_1_1PseudoJet.html

http://fastjet.fr/repo/doxygen-3.0.2/classfastjet_1_1PseudoJet_1_1UserInfoBase.html

https://server06.fynu.ucl.ac.be/projects/ExRootAnalysis/browser/trunk/ExRootAnalysis/ExRootCandidate.h

http://isscvs.cern.ch/cgi-bin/viewcvs-all.cgi/ORCA/Examples/ExRootAnalysis/UserRootAnalysis.cc?root=orca&view=markup

  1. Modules that consume and produce collections of universal objects
Note: See TracWiki for help on using the wiki.