1 | <html><head><title></title><!-- Changed by: Katsuya Amako, 4-Aug-1998 --><!-- Changed by: Dennis Wright, 27-Nov-2001 --><!-- Proof read by: Joe Chuma, 30-Jun-1999 --></head><body> |
---|
2 | <table width="100%"><tbody><tr> |
---|
3 | <td> |
---|
4 | <a href="http://geant4.web.cern.ch/geant4/G4UsersDocuments/Overview/html/index.html"> |
---|
5 | <img src="persistency_files/Overview.gif" alt="Overview"></a> |
---|
6 | <a href="http://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Detector/index.html"> |
---|
7 | <img src="persistency_files/Contents.gif" alt="Contents"></a> |
---|
8 | <a href="http://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Detector/digitization.html"> |
---|
9 | <img src="persistency_files/Previous.gif" alt="Previous"></a> |
---|
10 | <a href="http://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Detector/parallelWorld.html"> |
---|
11 | <img src="persistency_files/NextGR.gif" alt="Next"></a> |
---|
12 | </td> |
---|
13 | <td align="right"> |
---|
14 | <font color="#238e23" size="-1"> |
---|
15 | <b>Geant4 User's Guide</b> |
---|
16 | <br> |
---|
17 | <b>For Application Developers</b> |
---|
18 | <br> |
---|
19 | <b>Detector Definition and Response</b> |
---|
20 | </font> |
---|
21 | </td> |
---|
22 | </tr></tbody></table> |
---|
23 | <br><br> |
---|
24 | |
---|
25 | <p align="center"> |
---|
26 | <font color="#238e23" size="+3"> |
---|
27 | <b>4.6 Object Persistency</b> |
---|
28 | </font> |
---|
29 | <br><br> |
---|
30 | |
---|
31 | </p><hr align="center" size="7"> |
---|
32 | <p> |
---|
33 | |
---|
34 | <a name="4.6.1"> |
---|
35 | <h2>4.6.1 Persistency in Geant4</h2></a> |
---|
36 | |
---|
37 | Object persistency is provided by Geant4 as an optional category, so that the |
---|
38 | user may run Geant4 with or without an object database management system |
---|
39 | (ODBMS). |
---|
40 | |
---|
41 | </p><p>When a usual (transient) object is created in C++, the object is placed |
---|
42 | onto the application heap and it ceases to exist when the application |
---|
43 | terminates. Persistent objects, on the other hand, live beyond the |
---|
44 | termination of the application process and may then be accessed by other |
---|
45 | processes (in some cases, by processes on other machines). |
---|
46 | </p><center><img src="persistency.src/pobject.gif" height="212" width="290"></center> |
---|
47 | |
---|
48 | |
---|
49 | <p>C++ does not have, as an intrinsic part of the language, the ability to |
---|
50 | store and retrieve persistent objects. Geant4 provides an abstract framework |
---|
51 | for persistency of hits, digits and events. |
---|
52 | </p><p> |
---|
53 | An example which demonstrates an implementation of object persistency using one |
---|
54 | of the tools accessible through the available interface, is provided in |
---|
55 | <tt>examples/extended/persistency</tt>. |
---|
56 | |
---|
57 | </p><p> |
---|
58 | |
---|
59 | <a name="4.6.2"> |
---|
60 | <h2>4.6.2 Using Reflex for persistency of Geant4 objects</h2></a> |
---|
61 | <p> |
---|
62 | Object persistency of Geant4 objects is also possible by the mean of the |
---|
63 | <b>Reflex</b> library <a href="#Reflex">[1]</a>. Reflex provides, in a |
---|
64 | non-intrusive way, reflection capabilities to C++ classes by generating |
---|
65 | "dictionary information" for them. Those dictionaries can then be loaded |
---|
66 | in memory allowing direct persistency of the given objects without any |
---|
67 | instrumentation of the code. The Reflex library is also part of ROOT |
---|
68 | <a href="#Root">[2]</a> (since release <tt>v5.08</tt>). |
---|
69 | </p> |
---|
70 | <p> |
---|
71 | The basic steps that one needs to do in order to use Reflex with ROOT I/O |
---|
72 | for arbitrary C++ classes is: |
---|
73 | <ol> |
---|
74 | <li>Generate the dictionary for the given classes using the |
---|
75 | <tt>genreflex</tt> tool from ROOT (this usually is done |
---|
76 | by adding the appropriate command to the makefile)</li> |
---|
77 | <li>Add initialization of ROOT I/O and loading of the generated |
---|
78 | dictionary for the given classes in the appropriate part of the |
---|
79 | code</li> |
---|
80 | <li>Whenever the objects to be persistified are available, call the |
---|
81 | <tt>WriteObject</tt> method of <tt>TFile</tt> with the pointer to the |
---|
82 | appropriate object as argument (usually it is some sort of container, |
---|
83 | like <tt>std::vector</tt> containing the collection of objects to be |
---|
84 | persistified)</li> |
---|
85 | </ol> |
---|
86 | The example provided in <tt>examples/extended/persistency</tt> |
---|
87 | demonstrates an implementation of object persistency using the Reflex |
---|
88 | mechanism in ROOT I/O. |
---|
89 | |
---|
90 | </p><p> |
---|
91 | |
---|
92 | <hr> |
---|
93 | <p> |
---|
94 | <table> |
---|
95 | <tr><td valign=top><a name="Reflex">[1]</a> |
---|
96 | <td><a href="http://cern.ch/seal-reflex/">http://cern.ch/seal-reflex</a> |
---|
97 | <tr><td valign=top><a name="Root">[2]</a> |
---|
98 | <td><a href="http://root.cern.ch/">http://root.cern.ch</a> |
---|
99 | </table> |
---|
100 | </p> |
---|
101 | |
---|
102 | <hr> |
---|
103 | <a href="http://cern.ch/geant4/G4UsersDocuments/Authors/html/subjectsToAuthors.html"> |
---|
104 | <i>About the authors</i></a> |
---|
105 | |
---|
106 | |
---|
107 | </body></html> |
---|