Analysis  version 7.0 - august 2014
RunBase.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file RunBase.hh
3  *
4  * Fichier de déclaration d'une classe de base pour les analyses: RunBase.
5  */
6 //======================================================================
7 
8 
9 #ifndef RUN_BASE_HH
10 #define RUN_BASE_HH
11 
12 #include "EventManager.hh"
13 #include "GStringList.hh"
14 
15 //======================================================================
16 /*! \class RunBase
17  *
18  * Classe de base pour créer des analyses de données.
19  * Elle hérite d'un gestionnaire d'événements (EventManager)
20  * et définit les fonctions de base (le plus souvent purement
21  * virtuelles) liées à la lecture des événements.
22  *
23  * Ces fonctions concernent l'analyse elle-même:
24  * - initialisation de la structure d'événement (RunInit)
25  * - ouverture et fermeture des flux d'entrée (Open, Close)
26  * - lecture d'événements (ReadEvent (abstraite) et AnalyseEvent)
27  * - analyse: ensemble d'événements dans un fichier (AnalyseEvents) ou
28  * ensemble de fichiers (Run)
29  *
30  * et les fonctions utilisateur associées:
31  * - UserEventDefine: définition des paramètres utilisateur additionnels
32  * - UserRunStart: début d'analyse d'un nouveau fichier
33  * - UserEvent: traitement utilisateur d'un événement
34  * - UserUpdate: fonction après traitement de l'événement et mise à jour des spectres
35  * - UserRunStop: fin d'analyse d'un fichier
36  *
37  * Le fonctions utilisateur doivent retourner une valeur nulle si tout
38  * va bien, une valeur négative en cas de problème et une valeur positive
39  * pour interrompre l'analyse.
40  *
41  * \par Fonctions abstraites:
42  *
43  * Les fonctions suivantes doivent impérativement être définies
44  * dans les classes dérivées:
45  * - int Open ( const string &f_name );\n
46  * elle doit appeler la fonction RunStart();
47  * - bool IsOpen ( );
48  * - int Close ( );\n
49  * elle doit appeler la fonction RunStop();
50  * - int RunInit ( );
51  * - int ReadEvent ( );
52  *
53  * \par Squelette de l'analyse:
54  *
55  * Traitement partiel d'événements
56  * - création d'une instance héritant de RunBase
57  * - initialisation avec Init
58  * - RunInit (fonction abstraite)
59  * - UserEventDefine
60  * - ouverture d'un fichier: Open (fonction abstraite)
61  * - appel à RunStart si nécessaire
62  * - IncrementFileCount
63  * - UserRunStart
64  * - traitement d'événements AnalyseEvents
65  * - traitement de chaque événement AnalyseEvent
66  * - ReadEvent
67  * - IncrementEventCount
68  * - UserEvent
69  * - IncrementSpectra
70  * - UserUpdate
71  * - fermeture du fichier: Close (fonction abstraite)
72  * - appel à RunStop
73  * - UserRunStop
74  *
75  * Traitement d'une série de fichiers
76  * - préparation de l'analyse (détermination des fichiers d'entrée)
77  * - SetFileMode,
78  * - SetFileName,
79  * - SetFilePattern, SetFilePatternLen, SetFileNumbers,
80  * - execution
81  * - appel à Run, qui utilise:
82  * - Init
83  * - RunInit (fonction abstraite)
84  * - UserEventDefine
85  * - Open (fonction abstraite)
86  * - AnalyseEvents
87  * - Close (fonction abstraite)
88  *
89  */
90 class RunBase : public EventManager
91 {
92 //----------------------------------------------------------------------
93  /*! \object_doc */
95 //----------------------------------------------------------------------
96 
97  /// Type de fichiers source
98  enum FileMode
99  {
100  runTape = 0,
101  runFile = 1,
102  runList = 2
103  };
104 
105  protected:
106  string work_dir; ///< répertoire de base du programme
107 
108  bool run_init; ///< test si l'initialisation est effectuéed42d@
109  bool run_started; ///< test si un run est en cours
110 
111  // variables générales pour l'analyse des
112  Int_t file_mode; ///< mode de sélection des fichiers
113 
114  string file_name; ///< nom effectif du fichier d'entréeb6c1cdb3a1@
115  string file_pattern; ///< format de recherche des fichiers runs par leur numéro
116  u_int file_pattern_len; ///< longueur du format de numéro de run
117  string file_numbers; ///< numéro des fichiers de runs
118  Int_t file_num; ///< numéro du fichier traité\x80-\xFF]*
119  Int_t file_sub_num; ///< numéro secondaire du fichier traité3118ee1@
120  GStringList file_list; ///< liste des fichiers validant le format
121  bool file_list_changed; ///< indique s'il faut redéterminer la liste de fichiers
122 
123  Int_t file_count; ///< nombre de fichiers lus
124  Int_t event_count; ///< nombre d'événements lus dans le fichier
125  Int_t total_event_count; ///< nombre d'événements lus total
126 
127 //----------------------------------------------------------------------
128 // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR
129 //----------------------------------------------------------------------
130 
131  public:
132 
133  // Constructeur par défaut.
134  RunBase ( );
135 
136  protected:
137  // Constructeur de recopie.
138  RunBase ( const RunBase &original );
139 
140  public:
141  // Destructeur
142  virtual ~RunBase ( );
143 
144 
145 //----------------------------------------------------------------------
146 // FONCTIONS DE BASE POUR LA LECTURE D'EVENEMENTS
147 
148  /*! Ouverture effective du fichier de run (file_name).
149  * La fonction retourne 0 si le fichier est ouvert, une valeur
150  * négative en cas de problème, et une valeur positive s'il faut
151  * interrompre l'exécution.
152  * La fonction doit appeler RunStart ( );
153  */
154  virtual int Open ( ) = 0;
155  virtual int Open ( const string &f_name );
156  virtual int Open ( const u_int f_num, u_int f_sub = 0 );
157 
158  /*! Fonction qui retourne vrai si un fichier en cours d'analyse est ouvert.*/
159  virtual bool IsOpen ( ) = 0;
160 
161  /*! Fermeture du fichier en cours d'analyse.
162  * La fonction retourne 0 si le fichier est fermé, une valeur
163  * négative en cas de problème, et une valeur positive s'il faut
164  * interrompre l'exécution.
165  * La fonction doit appeler RunStop ( );
166  */
167  virtual int Close ( ) = 0;
168 
169  /*! Initialisation de l'analyse: cette fonction a pour objectif
170  * de créer la structure d'événement.
171  * Elle doit ensuite faire appel à la fonction utilisateur
172  * UserEventDefine pour l'ajout de paramètres supplémentaires.
173  */
174  virtual int RunInit ( ) = 0;
175 
176  virtual int ClearEvent ( );
177 
178  /*! Lecture d'un événement: cette méthode doit être redéfinie
179  * dans les classes dérivées.
180  * La fonction mets à jour l'ensemble des paramètres de la
181  * structure d'événements à partir d'un événement lu dans le
182  * flux d'entrée.
183  * La fonction retourne 0 si la lecture s'est bien passée, et
184  * -1 en cas de fin de fichier.
185  */
186  virtual int ReadEvent ( ) = 0;
187 
188  // traitement complet d'un événement
189  virtual int AnalyseEvent ( );
190 
191  // Lecture d'un ensemble d'événements
192  virtual int AnalyseEvents ( const u_int n );
193 
194  // fonctions de traitement d'une analyse
195  virtual int Init ( );
196  virtual void Run ( );
197  virtual void Reset ( );
198  virtual void FullReset ( );
199 
200  protected:
201  virtual int RunStart ( );
202  virtual int RunStop ( );
203 
204  // specific functions for derived classes
205  virtual void AnalysisStart ( ); // inline
206  virtual void AnalysisStop ( ); // inline
207 
208  virtual void RunTape ( );
209  virtual void RunFile ( );
210  virtual void RunList ( );
211 
212 
213 // FONCTIONS POUR LES CLASSES DERIVEES
214 
215  protected:
216  virtual void IncrementEventCount ( );
217  virtual void IncrementFileCount ( );
218 
219  public:
220  string GetWorkDirectory ( ) const; // inline
221  void SetWorkDirectory ( const string & wd ); // inline
222 
223  virtual Int_t GetTotalEventCount ( ) const;
224  virtual Int_t GetEventCount ( ) const;
225  virtual Int_t GetFileCount ( ) const;
226 
227  virtual bool IsRunInit ( ) const;
228  virtual bool IsRunStarted ( ) const;
229  virtual bool IsRunStopped ( ) const;
230 
231  virtual void SetFileMode ( const Int_t mode );
232  virtual void SetFileName ( const string &f_name );
233  virtual void SetFilePattern ( const string &pattern );
234  virtual void SetFilePatternLen ( const u_int len );
235  virtual void SetFileNumbers ( const string &f_num );
236  virtual Int_t SetFileListNames ( );
237 
238  virtual Int_t GetFileMode ( ) const;
239  virtual string GetFileName ( ) const;
240  virtual string GetFilePattern ( ) const;
241  virtual Int_t GetFilePatternLen ( ) const;
242  virtual string GetFileNumbers ( ) const;
243  virtual Int_t GetFileNumber ( ) const;
244 
245  virtual Int_t TapeRewind ( );
246  virtual Int_t TapeForward ( const Int_t n = 1 );
247  virtual Int_t TapeBackward ( const Int_t n = 1 );
248 
249 //----------------------------------------------------------------------
250 // FONCTIONS UTILISATEUR
251 
252  virtual int UserEventDefine ( );
253  virtual int UserRunStart ( );
254  virtual int UserEvent ( );
255  virtual int UserUpdate ( );
256  virtual int UserRunStop ( );
257 
258 //----------------------------------------------------------------------
259 // pour ROOT...
260  public:
261  /*! Définition à usage de ROOT... */
262  ClassDef(RunBase,0);
263 };
264 
265 
266 //======================================================================
267 // FONCTIONS INLINE POUR L'ANALYSE
268 //======================================================================
269 
270 /*! Return the work directory.*/
271 inline string RunBase::GetWorkDirectory ( ) const
272  { return (work_dir); }
273 
274 /*! Set the working directory.
275  * \param wd name of the directory
276  */
277 inline void RunBase::SetWorkDirectory ( const string & wd )
278  { work_dir = wd; }
279 
280 /*! Définit le nom de fichier.
281  * \param f_name nom de fichier
282  */
283 inline void RunBase::SetFileName ( const string &f_name )
284  { file_name = f_name; }
285 
286 /*! Définit le type de source des fichiers run.
287  * \param mode mode de lecture
288  */
289 inline void RunBase::SetFileMode ( const Int_t mode )
290  { file_mode = mode; }
291 
292 /*! Définit le patron pour la recherche des noms de fichiers.
293  * \param pattern format de la recherche
294  */
295 inline void RunBase::SetFilePattern ( const string &pattern )
296  { file_pattern = pattern; file_list_changed = true; }
297 
298 /*! Définit la longueur du format des numéros de run dans les fichiers.
299  * \param len longueur du format de numéro de run des fichiers
300  */
301 inline void RunBase::SetFilePatternLen ( const u_int len )
302  { file_pattern_len = len; file_list_changed = true; }
303 
304 /*! Définit la liste des fichiers.
305  * \param f_num chaîne de définition de la liste
306  */
307 inline void RunBase::SetFileNumbers ( const string &f_num )
308  { file_numbers = f_num; file_list_changed = true; }
309 
310 
311 /*! Retourne le mode de lecture des fichiers de runs.*/
312 inline Int_t RunBase::GetFileMode ( ) const
313  { return (file_mode); }
314 
315 /*! Retourne le nom du fichier de runs en cours de traitement.*/
316 inline string RunBase::GetFileName ( ) const
317  { return (file_name); }
318 
319 /*! Retourne le format pour listes de fichiers de runs.*/
320 inline string RunBase::GetFilePattern ( ) const
321  { return (file_pattern); }
322 
323 /*! Retourne la longueur du format pour listes de fichiers de runs.*/
324 inline Int_t RunBase::GetFilePatternLen ( ) const
325  { return (file_pattern_len); }
326 
327 /*! Retourne la liste des numéros de fichiers de runs.*/
328 inline string RunBase::GetFileNumbers ( ) const
329  { return (file_numbers); }
330 
331 /*! Retourne le numéro du fichier en cours de traitement.*/
332 inline Int_t RunBase::GetFileNumber ( ) const
333  { return (file_num); }
334 
335 //----------------------------------------------------------------------
336 
337 /*! Retourne vrai si l'analyse est initialisée.*/
338 inline bool RunBase::IsRunInit ( ) const
339  { return (run_init); }
340 
341 /*! Retourne vrai si l'analyse est démarrée.*/
342 inline bool RunBase::IsRunStarted ( ) const
343  { return (run_started); }
344 
345 /*! Retourne vrai si l'analyse est arrêtée.*/
346 inline bool RunBase::IsRunStopped ( ) const
347  { return (!run_started); }
348 
349 
350 //----------------------------------------------------------------------
351 
352 /*! Retourne le nombre total d'événements lus.*/
353 inline Int_t RunBase::GetTotalEventCount ( ) const
354  { return (total_event_count); }
355 
356 /*! Retourne le nombre d'événements lus dans le fichier.*/
357 inline Int_t RunBase::GetEventCount ( ) const
358  { return (event_count); }
359 
360 /*! Retourne le nombre de fichiers lus.*/
361 inline Int_t RunBase::GetFileCount ( ) const
362  { return (file_count); }
363 
364 /*! Incrémente le nombre d'événements lus.*/
367 
368 /*! Incrémente le nombre de fichiers lus.*/
370  { file_count++; }
371 
372 //----------------------------------------------------------------------
373 
374 /*! Function called at run start, before user function, for specific
375  * actions from derived classes.
376  */
377 inline void RunBase::AnalysisStart ( ) { }
378 
379 /*! Function called at run stop, after user function for specific
380  * actions from derived classes.
381  */
382 inline void RunBase::AnalysisStop ( ) { }
383 
384 //----------------------------------------------------------------------
385 
386 /*! Fonction utilisateur par défaut pour la définitions des paramètres
387  * User de l'événement et la définition des spectres.
388  * Cette fonction est appelée une seule fois, lors de la première
389  * initialisation d'une instance RunBase. Lorsque plusieurs fichiers
390  * runs sont lus, elle n'est pas rappelée (la structure d'événement
391  * est censé rester la même).
392  */
394  {
395  #ifdef DEBUG_RUN
396  DEBUG_LINE << "UserEventDefine ( ) default function" << endl;
397  #endif
398  return (0);
399  }
400 
401 /*! Fonction utilisateur par défaut d'initialisation d'un run.
402  * Cette fonction est appelée à chaque début de run.
403  */
404 inline int RunBase::UserRunStart ( )
405  {
406  #ifdef DEBUG_RUN
407  DEBUG_LINE << "UserRunStart ( ) default function" << endl;
408  #endif
409  return (0);
410  }
411 
412 /*! Fonction utilisateur par défaut de traitement de chaque événement.
413  */
414 inline int RunBase::UserEvent ( )
415  { return (0); }
416 
417 /*! Fonction utilisateur par défaut appelée après l'incrémentation des
418  * spectres, après le traitement d'un événement.
419  */
420 inline int RunBase::UserUpdate ( )
421  { return (0); }
422 
423 /*! Fonction utilisateur par défaut appelée en fin de run.
424  */
425 inline int RunBase::UserRunStop ( )
426  {
427  #ifdef DEBUG_RUN1
428  DEBUG1_LINE << "UserRunStop ( ) default function" << endl;
429  #endif
430  return (0);
431  }
432 
433 //======================================================================
434 #endif
virtual bool IsOpen()=0
virtual int RunStop()
Definition: RunBase.cpp:333
virtual Int_t TapeBackward(const Int_t n=1)
Definition: RunBase.cpp:693
virtual void SetFileMode(const Int_t mode)
Definition: RunBase.hh:289
virtual Int_t GetFileMode() const
Definition: RunBase.hh:312
virtual void RunTape()
Definition: RunBase.cpp:461
virtual Int_t TapeForward(const Int_t n=1)
Definition: RunBase.cpp:677
virtual Int_t GetTotalEventCount() const
Definition: RunBase.hh:353
virtual Int_t TapeRewind()
Definition: RunBase.cpp:661
virtual int ReadEvent()=0
virtual Int_t GetFilePatternLen() const
Definition: RunBase.hh:324
virtual string GetFilePattern() const
Definition: RunBase.hh:320
virtual Int_t SetFileListNames()
Definition: RunBase.cpp:604
virtual void SetFileName(const string &f_name)
Definition: RunBase.hh:283
virtual void Run()
Definition: RunBase.cpp:413
virtual int UserRunStop()
Definition: RunBase.hh:425
virtual int ClearEvent()
Definition: RunBase.cpp:153
virtual int Open()=0
virtual void FullReset()
Definition: RunBase.cpp:281
virtual void AnalysisStart()
Definition: RunBase.hh:377
virtual int AnalyseEvents(const u_int n)
Definition: RunBase.cpp:230
virtual string GetFileName() const
Definition: RunBase.hh:316
u_int file_pattern_len
longueur du format de numéro de run
Definition: RunBase.hh:116
virtual int UserUpdate()
Definition: RunBase.hh:420
virtual void IncrementFileCount()
Definition: RunBase.hh:369
bool run_started
test si un run est en cours
Definition: RunBase.hh:109
void SetWorkDirectory(const string &wd)
Definition: RunBase.hh:277
RunBase()
Definition: RunBase.cpp:19
virtual int UserEventDefine()
Definition: RunBase.hh:393
string work_dir
répertoire de base du programme
Definition: RunBase.hh:106
Definition: RunBase.hh:90
bool file_list_changed
indique s&#39;il faut redéterminer la liste de fichiers
Definition: RunBase.hh:121
virtual void SetFilePattern(const string &pattern)
Definition: RunBase.hh:295
virtual void RunFile()
Definition: RunBase.cpp:491
Int_t total_event_count
nombre d&#39;événements lus total
Definition: RunBase.hh:125
virtual void Reset()
Definition: RunBase.cpp:269
virtual void SetFilePatternLen(const u_int len)
Definition: RunBase.hh:301
virtual int Close()=0
virtual Int_t GetFileCount() const
Definition: RunBase.hh:361
GStringList file_list
liste des fichiers validant le format
Definition: RunBase.hh:120
virtual int UserEvent()
Definition: RunBase.hh:414
string file_numbers
numéro des fichiers de runs
Definition: RunBase.hh:117
virtual int AnalyseEvent()
Definition: RunBase.cpp:174
virtual Int_t GetFileNumber() const
Definition: RunBase.hh:332
virtual int RunStart()
Definition: RunBase.cpp:294
virtual int UserRunStart()
Definition: RunBase.hh:404
virtual Int_t GetEventCount() const
Definition: RunBase.hh:357
string file_pattern
format de recherche des fichiers runs par leur numéro
Definition: RunBase.hh:115
virtual int Init()
Definition: RunBase.cpp:367
string file_name
nom effectif du fichier d&#39;entrée
Definition: RunBase.hh:114
virtual int RunInit()=0
Int_t file_count
nombre de fichiers lus
Definition: RunBase.hh:123
virtual bool IsRunStopped() const
Definition: RunBase.hh:346
virtual void IncrementEventCount()
Definition: RunBase.hh:365
Int_t event_count
nombre d&#39;événements lus dans le fichier
Definition: RunBase.hh:124
virtual void RunList()
Definition: RunBase.cpp:508
virtual void AnalysisStop()
Definition: RunBase.hh:382
FileMode
Type de fichiers source.
Definition: RunBase.hh:98
virtual ~RunBase()
Definition: RunBase.cpp:50
virtual string GetFileNumbers() const
Definition: RunBase.hh:328
GObjectV(RunBase)
ClassDef(RunBase, 0)
bool run_init
test si l&#39;initialisation est effectuée
Definition: RunBase.hh:108
Definition: EventManager.hh:59
Int_t file_num
numéro du fichier traité
Definition: RunBase.hh:118
virtual void SetFileNumbers(const string &f_num)
Definition: RunBase.hh:307
string GetWorkDirectory() const
Definition: RunBase.hh:271
Int_t file_sub_num
numéro secondaire du fichier traité
Definition: RunBase.hh:119
virtual bool IsRunInit() const
Definition: RunBase.hh:338
Int_t file_mode
mode de sélection des fichiers
Definition: RunBase.hh:112
virtual bool IsRunStarted() const
Definition: RunBase.hh:342