10/*! \page event_description Description des bibliothèques Event et GuiEvent
11 *
12 * La bibliothèque Event fournit les outils de base pour l'analyse des
13 * données, indépendamment de leur provenance.
14 * C'est la classe de base EventManager qui orchestre les structures
15 * d'analyse:
16 * - la structure d'événement (classe Event) qui définit les paramètres
17 * des données à analyser;
18 * - les spectres (classe Spectrum) permettant de visualiser le contenu
19 * des paramètres, et les arbres (classe TreeInfo, permettant de définir
20 * des TTree au format ROOT) permettant d'extraire une partie des
21 * données;
22 * - les filtres (classe Filter) permettant de définir des conditions
23 * pour l'incrémentation des spectres et des arbres, et les contours
24 * (classe RContour) qui peuvent être utilisés pour la définition
25 * de filtres (la classe RContour fait partie des bibliothèques
26 * additionnelles pour ROOT).
27 *
28 * \par Classes de base des analyses
29 *
30 * Les analyses de données sont séparées en 2 types: les analyses de base
31 * (classe de base RunBase) et les analyses avec interface graphiques
32 * (classe de base GEVRunBase).
33 *
34 * La classe RunBase fournit un gestionnaire d'événement (classe EventManager)
35 * et les séquences de traitement des événements
36 * avec les fonctionnalités génériques pour les données d'entrée (ouverture
37 * fermeture de fichier, traitement d'événement,...).
38 * Ces fonctions sont précisées dans les classes spécifiques selon le type
39 * de données à lire.
40 *
41 * Exemples de séquencement (voir la documentation des fonctions):
42 *
43 * - lecture de fichiers individuels
44 * \code
45
46 MyAnalysis run; // classe héritant de RunBase, via une classe spécifique
47 // selon le type de données
48
49 // mode de fichier : fichier par fichier
50 run.SetFileMode(RunBase::runList);
51
52 // selon le type d'analyse, il faut ou non spécifier un fichier avant
53 // l'initialisation (pour définir la structure d'événement)
54 run.SetFileName ( "MyRunFile_1" );
55 run.Init();
56
57 // analyse de tous les événements d'un fichier
58 run.Open("MyRunFile_1");
59 run.AnalyseEvents(0);
60 run.Close();
61
62 // analyse de 1000 événements d'un autre fichier
63 run.Open("MyRunFile_2");
64 run.AnalyseEvents(1000);
65 run.Close();
66
67 // sauvegarde des histogrammes (définis en principe dans la fonction
68 // UserEventDefine() de la classe MyAnalysis
69 // (voir les fonctions utilisateurs ci-dessous)
70 run.SaveHistograms ( "MyHistoFile.root" );
71
72 * \endcode
73 *
74 * - lecture d'une série de fichiers numérotés * \code
MyAnalysis run; // classe héritant de RunBase, via une classe spécifique
// selon le type de données
// mode de fichier : liste numérotée de fichiers
// ici la numérotation se fait sur 4 chiffres: 0001, 0002, ...
run.SetFileMode(RunBase::runList);
run.SetFilePattern ("MyRunFile_*.*");
run.SetFilePatternLen (4);
run.SetFileNumbers ("1:3,6,8");
// initialisation
run.Init();
// traitement complet de la sélection de fichiers: 1 à 3, 6 et 8
run.run();
// sauvegarde des histogrammes (définis en principe dans la fonction
// UserEventDefine() de la classe MyAnalysis
// (voir les fonctions utilisateurs ci-dessous)
run.SaveHistograms ( "MyHistoFile.root" );
* \endcode
*
* \par Fonctions utilisateur
*
* La classe fait appel à des fonctions utilisateur spécifiques aux différentes
* séquences du traitement. Ces fonctions ont vocation à être surchargées
* (redéfinies) dans les classes dérivées (classes intermédiaires selon
* le type de données et classes finales d'analyse définies par l'utilisateur).
*
* La classe RunBase définit les fonctions utilisateur suivantes (et leur
* usage principal):
* - UserEventDefine() : fonction appelée une seule fois avant le traitement
* des données
* - création de paramètres utilisateur en plus de ceux des données
* - définition de spectres, d'arbres, de contours, de filtres...
* - initialisations générales spécifiques à l'analyse (définies par
* l'utilisateur)
* - UserRunStart () : fonction appelée en début de chaque analyse d'un nouveau
* fichier
* - initialisation de données fichier par fichier (spectres, compteurs,...)
* - UserEvent () : fonction de traitement d'un événement
* - calcul des paramètres additionnels
* - modification des autorisation d'incrémentation de spectres ou d'arbres
* (hors de la gestion automatique par les filtres...)
* - UserUpdate () : fonction appelée après les incrémentations automatiques de
* spectres ou d'arbres
* - analyse sur des spectres fraichement mis à jour
* - UserRunStop () : fin de traitement d'un fichier de données
* - sauvegarde de données fichier par fichier
*
* La classe ne définit pas de fonction utilisateur de fin de traitement,
* mais ceci peut être codé après le traitement à l'aide des fonctions
* de la classe RunBase (sauvegarde des histogrammes, ...) ou de fonctions
* créées par l'utilisateur dans sa classe dérivée.
*
*
* \par Interface graphique
*
* La bibliothèque GuiEvent fournit des classes supplémentaires pour
* créer des interfaces graphiques à l'analyse des données.
* En particulier, la classe GEVRunBase représente une interface de base
* à la classe RunBase.
* Elle permet de définir de façon interactive les spectres, arbres, filtres
* et contours.
*
* Les paramètres utilisateurs ne peuvent pas être définis de façon interactive.
* En effect, leur valeur doit de toute façon être calculée par du code
* dans la fonction utilisateur UserEvent().
* Ces paramètres supllémentaires (ou paramètres calculés) doivent être
* définis dans la fonction UserEventDefine() de la classe utilisateur.
*
* L'interface graphique permet de définir des pages graphiques dans
* lesquelles afficher des spectres.
*
* La classe GEVRunBase définit de nouvelles fonctions utilisateur, pour
* les nouvelles séquences liées à l'interactivité de l'analyse :
* - UserRefresh () : fonction appelée lorsque l'affichage des pages de
* spectres a été mis à jour (pour des tracés supplémentaires à
* coder par l'utilisateur)
* - UserReset () : fonction appelée lors d'une remise à zéro de l'analyse
* (si des données spécifiques à l'analyse de l'utilisateur doivent être
* réinitialisées)
* - UserQuit () : lorsque l'interface graphique est quittée, l'objet est
* détruit et toutes les analyses sont perdues (ce n'est pas le cas
* lors de lafin d'analyse d'une classe sans interface graphique);
* cette fonction permet de faire les sauvegardes des résultats avant
* de détruire l'objet d'analyse.
*
* A la différence des classes de base sans interface graphique, objets
* des classes héritant de GEVRunBase doivent être alloués de façon dynamique,
* parce qu'une fois l'interface lancée, l'objet de la classe d'analyse
* sera détruit à la fin de l'utilisation de l'interface.
*
* \code
int main ( int argc, char *argv[] )
{
// Création de l'application de fond qui interface ROOT et le système
// d'exploitation
TApplication app("App",&argc,argv);
// Déclaration du gestionnaire de l'analyse
// il doit être créé de façon dynamique (new) parce que lorsque
// l'application graphique est terminée, l'objet est détruit
// (delete).
MyGuiAnalysis * run = new MyGuiAnalysis;
// prédéfinition des conditions de fichier
// (qui peuvent être modifiées dans l'interface)
run->SetFileMode (RunBase::runList); // liste numérotée de fichiers
run->SetFilePattern ("MyRunFile_*.*"); // forme des noms de fichier
run->SetFilePatternLen (4); // numéro à 4 chiffres
run->SetFileNumbers ("1:3,6,8"); // fichiers 1 à 3, 6 et 8
// on peut libérer un peu de CPU entre le traitement de 2 événements
// (en millisecondes)
run->SetWaitTime (0.1);
// préinitialisation (facultative)
run->Init();
// démarrage de l'interface graphique
run->Run();
// il n'y a pas de 'delete', parce que c'est fait automatiquement
// lorsqu'on quitte l'interface
// Fin de traitement (interface entre ROOT et le système d'exploitation)
gApplication->Terminate(0);
return (0);
}
* \endcode
*
*
* \par Classes d'analyse spécifiques
*
* \ref tree_run_analysis
*
* \ref simul_run_analysis
*
*
* \par Informations complémentaires
*
* \ref event_release
*
* \ref event_compilation
*/
75 * \code
76
77 MyAnalysis run; // classe héritant de RunBase, via une classe spécifique
78 // selon le type de données
79
80 // mode de fichier : liste numérotée de fichiers
81 // ici la numérotation se fait sur 4 chiffres: 0001, 0002, ...
82 run.SetFileMode(RunBase::runList);
83 run.SetFilePattern ("MyRunFile_*.*");
84 run.SetFilePatternLen (4);
85 run.SetFileNumbers ("1:3,6,8");
86
87 // initialisation
88 run.Init();
89
90 // traitement complet de la sélection de fichiers: 1 à 3, 6 et 8
91 run.run();
92
93 // sauvegarde des histogrammes (définis en principe dans la fonction
94 // UserEventDefine() de la classe MyAnalysis
95 // (voir les fonctions utilisateurs ci-dessous)
96 run.SaveHistograms ( "MyHistoFile.root" );
97
98 * \endcode
99 *
100 * \par Fonctions utilisateur
101 *
102 * La classe fait appel à des fonctions utilisateur spécifiques aux différentes
103 * séquences du traitement. Ces fonctions ont vocation à être surchargées
104 * (redéfinies) dans les classes dérivées (classes intermédiaires selon
105 * le type de données et classes finales d'analyse définies par l'utilisateur).
106 *
107 * La classe RunBase définit les fonctions utilisateur suivantes (et leur
108 * usage principal):
109 * - UserEventDefine() : fonction appelée une seule fois avant le traitement
110 * des données
111 * - création de paramètres utilisateur en plus de ceux des données
112 * - définition de spectres, d'arbres, de contours, de filtres...
113 * - initialisations générales spécifiques à l'analyse (définies par
114 * l'utilisateur)
115 * - UserRunStart () : fonction appelée en début de chaque analyse d'un nouveau
116 * fichier
117 * - initialisation de données fichier par fichier (spectres, compteurs,...)
118 * - UserEvent () : fonction de traitement d'un événement
119 * - calcul des paramètres additionnels
120 * - modification des autorisation d'incrémentation de spectres ou d'arbres
121 * (hors de la gestion automatique par les filtres...)
122 * - UserUpdate () : fonction appelée après les incrémentations automatiques de
123 * spectres ou d'arbres
124 * - analyse sur des spectres fraichement mis à jour
125 * - UserRunStop () : fin de traitement d'un fichier de données
126 * - sauvegarde de données fichier par fichier
127 *
128 * La classe ne définit pas de fonction utilisateur de fin de traitement,
129 * mais ceci peut être codé après le traitement à l'aide des fonctions
130 * de la classe RunBase (sauvegarde des histogrammes, ...) ou de fonctions
131 * créées par l'utilisateur dans sa classe dérivée.
132 *
133 *
134 * \par Interface graphique
135 *
136 * La bibliothèque GuiEvent fournit des classes supplémentaires pour
137 * créer des interfaces graphiques à l'analyse des données.
138 * En particulier, la classe GEVRunBase représente une interface de base
139 * à la classe RunBase.
140 * Elle permet de définir de façon interactive les spectres, arbres, filtres
141 * et contours.
142 *
143 * Les paramètres utilisateurs ne peuvent pas être définis de façon interactive.
144 * En effect, leur valeur doit de toute façon être calculée par du code
145 * dans la fonction utilisateur UserEvent().
146 * Ces paramètres supllémentaires (ou paramètres calculés) doivent être
147 * définis dans la fonction UserEventDefine() de la classe utilisateur.
148 *
149 * L'interface graphique permet de définir des pages graphiques dans
150 * lesquelles afficher des spectres.
151 *
152 * La classe GEVRunBase définit de nouvelles fonctions utilisateur, pour
153 * les nouvelles séquences liées à l'interactivité de l'analyse :
154 * - UserRefresh () : fonction appelée lorsque l'affichage des pages de
155 * spectres a été mis à jour (pour des tracés supplémentaires à * coder par l'utilisateur)
* - UserReset () : fonction appelée lors d'une remise à zéro de l'analyse
* (si des données spécifiques à l'analyse de l'utilisateur doivent être
* réinitialisées)
* - UserQuit () : lorsque l'interface graphique est quittée, l'objet est
* détruit et toutes les analyses sont perdues (ce n'est pas le cas
* lors de lafin d'analyse d'une classe sans interface graphique);
* cette fonction permet de faire les sauvegardes des résultats avant
* de détruire l'objet d'analyse.
*
* A la différence des classes de base sans interface graphique, objets
* des classes héritant de GEVRunBase doivent être alloués de façon dynamique,
* parce qu'une fois l'interface lancée, l'objet de la classe d'analyse
* sera détruit à la fin de l'utilisation de l'interface.
*
* \code
int main ( int argc, char *argv[] )
{
// Création de l'application de fond qui interface ROOT et le système
// d'exploitation
TApplication app("App",&argc,argv);
// Déclaration du gestionnaire de l'analyse
// il doit être créé de façon dynamique (new) parce que lorsque
// l'application graphique est terminée, l'objet est détruit
// (delete).
MyGuiAnalysis * run = new MyGuiAnalysis;
// prédéfinition des conditions de fichier
// (qui peuvent être modifiées dans l'interface)
run->SetFileMode (RunBase::runList); // liste numérotée de fichiers
run->SetFilePattern ("MyRunFile_*.*"); // forme des noms de fichier
run->SetFilePatternLen (4); // numéro à 4 chiffres
run->SetFileNumbers ("1:3,6,8"); // fichiers 1 à 3, 6 et 8
// on peut libérer un peu de CPU entre le traitement de 2 événements
// (en millisecondes)
run->SetWaitTime (0.1);
// préinitialisation (facultative)
run->Init();
// démarrage de l'interface graphique
run->Run();
// il n'y a pas de 'delete', parce que c'est fait automatiquement
// lorsqu'on quitte l'interface
// Fin de traitement (interface entre ROOT et le système d'exploitation)
gApplication->Terminate(0);
return (0);
}
* \endcode
*
*
* \par Classes d'analyse spécifiques
*
* \ref tree_run_analysis
*
* \ref simul_run_analysis
*
*
* \par Informations complémentaires
*
* \ref event_release
*
* \ref event_compilation
*/
156 * coder par l'utilisateur)
157 * - UserReset () : fonction appelée lors d'une remise à zéro de l'analyse
158 * (si des données spécifiques à l'analyse de l'utilisateur doivent être
159 * réinitialisées)
160 * - UserQuit () : lorsque l'interface graphique est quittée, l'objet est
161 * détruit et toutes les analyses sont perdues (ce n'est pas le cas
162 * lors de lafin d'analyse d'une classe sans interface graphique);
163 * cette fonction permet de faire les sauvegardes des résultats avant
164 * de détruire l'objet d'analyse.
165 *
166 * A la différence des classes de base sans interface graphique, objets
167 * des classes héritant de GEVRunBase doivent être alloués de façon dynamique,
168 * parce qu'une fois l'interface lancée, l'objet de la classe d'analyse
169 * sera détruit à la fin de l'utilisation de l'interface.
170 *
171 * \code
172
173 int main ( int argc, char *argv[] )
174 {
175 // Création de l'application de fond qui interface ROOT et le système
176 // d'exploitation
177 TApplication app("App",&argc,argv);
178
179
180 // Déclaration du gestionnaire de l'analyse
181 // il doit être créé de façon dynamique (new) parce que lorsque
182 // l'application graphique est terminée, l'objet est détruit
183 // (delete).
184 MyGuiAnalysis * run = new MyGuiAnalysis;
185
186 // prédéfinition des conditions de fichier
187 // (qui peuvent être modifiées dans l'interface)
188 run->SetFileMode (RunBase::runList); // liste numérotée de fichiers
189 run->SetFilePattern ("MyRunFile_*.*"); // forme des noms de fichier
190 run->SetFilePatternLen (4); // numéro à 4 chiffres
191 run->SetFileNumbers ("1:3,6,8"); // fichiers 1 à 3, 6 et 8
192
193 // on peut libérer un peu de CPU entre le traitement de 2 événements
194 // (en millisecondes)
195 run->SetWaitTime (0.1);
196
197 // préinitialisation (facultative)
198 run->Init();
199
200 // démarrage de l'interface graphique
201 run->Run();
202
203 // il n'y a pas de 'delete', parce que c'est fait automatiquement
204 // lorsqu'on quitte l'interface
205
206
207 // Fin de traitement (interface entre ROOT et le système d'exploitation)