ROOT logo
#ifndef ALITRIGGERCONFIGURATION_H
#define ALITRIGGERCONFIGURATION_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// This class represents the CTP configuration                               //
//                                                                           //
//                                                                           //
// A Trigger Configuration define a trigger setup for particula run          //
// We have default one for different running modes                           //
// (Pb-Pb, p-p, p-A, Calibration, etc).                                      //
// It keep:                                                                  //
//   All the information contained in the real CTP configuration file        //
//   used online during the data taking.                                     //
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TNamed.h>
#include <TObjArray.h>
class TString;

class AliTriggerCluster;
class AliTriggerDescriptor;
class AliTriggerInput;
class AliTriggerInteraction;
class AliTriggerPFProtection;
class AliTriggerBCMask;
class AliTriggerClass;

class AliTriggerConfiguration : public TNamed {

public:
                          AliTriggerConfiguration();
                          AliTriggerConfiguration( TString & name, TString & description );
               virtual   ~AliTriggerConfiguration();
   //  Setters
       AliTriggerInput*   AddInput(TString &name, TString &det, UChar_t level, UInt_t signature, UChar_t number);
		Bool_t    AddInput(AliTriggerInput *input);

 AliTriggerInteraction*   AddInteraction(TString &name, TString &logic);
                Bool_t    AddInteraction(AliTriggerInteraction *interact);

 AliTriggerInteraction*   AddFunction(TString &name, TString &logic);
                Bool_t    AddFunction(AliTriggerInteraction *func);

		Bool_t    AddPFProtection( AliTriggerPFProtection* pf );

      AliTriggerBCMask*   AddMask( TString &name, TString &mask );
		Bool_t    AddMask( AliTriggerBCMask* mask );

     AliTriggerCluster*   AddCluster( TString &name, UChar_t index, TString &detectors );
                Bool_t    AddCluster( AliTriggerCluster* cluster );

  AliTriggerDescriptor*   AddDescriptor( TString & name, TString & cond);
                Bool_t    AddDescriptor( AliTriggerDescriptor* desc );

       AliTriggerClass*   AddClass( TString &name, UChar_t index,
				    AliTriggerDescriptor *desc, AliTriggerCluster *clus,
				    AliTriggerPFProtection *pfp, AliTriggerBCMask *mask,
				    UInt_t prescaler, Bool_t allrare);
       AliTriggerClass*   AddClass( TString &name, UChar_t index,
				    TString &desc, TString &clus,
				    TString &pfp, TString &mask,
				    UInt_t prescaler, Bool_t allrare);
                 Bool_t   AddClass( AliTriggerClass *trclass);

		   void   Reset();

  //  Getters
               TString    GetActiveDetectors() const;
               TString    GetTriggeringDetectors() const;
               TString    GetTriggeringModules() const;

       const TObjArray&   GetInputs() const { return fInputs; }
       const TObjArray&   GetInteractions() const { return fInteractions; }
       const TObjArray&   GetFunctions() const { return fFunctions; }
       const TObjArray&   GetPFProtections() const { return fPFProtections; }
       const TObjArray&   GetMasks() const { return fMasks; }
       const TObjArray&   GetClusters() const { return fClusters; }
       const TObjArray&   GetDescriptors() const { return fDescriptors; }
       const TObjArray&   GetClasses() const { return fClasses; }

                  Int_t   GetVersion() const { return fVersion; }
	          Int_t   GetClassIndexFromName(const char* className) const;
             const char*  GetClassNameFromIndex(Int_t classIndex) const;
	AliTriggerClass*  GetTriggerClass(Int_t classIndex) const;
       //     AliTriggerCluster*   GetTriggerCluster(UInt_t index)
       //       { return (index < kNMaxClusters) ? (AliTriggerCluster*)fClusters[index] : NULL; }

       //AliTriggerPFProtection*   GetPFProtection(UInt_t index)
       //	       { return (index < kNMaxPFProtections) ? (AliTriggerPFProtection*)fPFProtections[index] : NULL; }
                  void    Print( const Option_t* opt ="" ) const;

  //  Configurations Database (root file)
                  void    WriteConfiguration( const char* filename="" );
      static TObjArray*   GetAvailableConfigurations( const char* filename="" );

      static AliTriggerConfiguration* LoadConfiguration(TString & des);
      static AliTriggerConfiguration* LoadConfigurationFromString(const char* configuration);
      Bool_t    IsSelected( TString detName, TString & detectors ) const;

      enum {kNMaxInputs = 60}; // CTP handles up to 60 trigger detector inputs
      enum {kNMaxInteractions = 2}; // CTP handles up to two different interactions
      enum {kNMaxFunctions = 4}; // CTP handles up to 4 different logical functions
      enum {kNMaxClasses = 100}; // Maximum number of trigger classes = 50
      enum {kNMaxClusters = 8}; // Maximum number of different detector clusters that can be handled by CTP
      enum {kNMaxPFProtections = 4}; // Maximum number of different past-future protections that can be handled by CTP
      enum {kNMaxMasks = 13};  // CTP handles up to 12 different BC masks + NONE

private:
      Bool_t ProcessConfigurationLine(const char* line, Int_t& level);

      TObjArray            fInputs;                           // Array with active CTP inputs
      TObjArray            fInteractions;                     // Array with the trigger interactions
      TObjArray            fFunctions;                        // Array with the logical functions of the first 4 inputs
      TObjArray            fPFProtections;                    // Array of Past-Future Protections
      TObjArray            fMasks;                            // Array with BC masks
      TObjArray            fDescriptors;                      // Array with trigger descriptors
      TObjArray            fClusters;                         // Array of Detector Trigger Clusters
      TObjArray            fClasses;                          // Array of Trigger Classes

      Int_t                fVersion;                          // Configuration format version

   static const TString    fgkConfigurationFileName;        //! name of default configurations file

   AliTriggerConfiguration&   operator=(const AliTriggerConfiguration& des);
   AliTriggerConfiguration( const AliTriggerConfiguration& des );

   ClassDef( AliTriggerConfiguration, 3 )  // Define a trigger configuration
};

#endif
 AliTriggerConfiguration.h:1
 AliTriggerConfiguration.h:2
 AliTriggerConfiguration.h:3
 AliTriggerConfiguration.h:4
 AliTriggerConfiguration.h:5
 AliTriggerConfiguration.h:6
 AliTriggerConfiguration.h:7
 AliTriggerConfiguration.h:8
 AliTriggerConfiguration.h:9
 AliTriggerConfiguration.h:10
 AliTriggerConfiguration.h:11
 AliTriggerConfiguration.h:12
 AliTriggerConfiguration.h:13
 AliTriggerConfiguration.h:14
 AliTriggerConfiguration.h:15
 AliTriggerConfiguration.h:16
 AliTriggerConfiguration.h:17
 AliTriggerConfiguration.h:18
 AliTriggerConfiguration.h:19
 AliTriggerConfiguration.h:20
 AliTriggerConfiguration.h:21
 AliTriggerConfiguration.h:22
 AliTriggerConfiguration.h:23
 AliTriggerConfiguration.h:24
 AliTriggerConfiguration.h:25
 AliTriggerConfiguration.h:26
 AliTriggerConfiguration.h:27
 AliTriggerConfiguration.h:28
 AliTriggerConfiguration.h:29
 AliTriggerConfiguration.h:30
 AliTriggerConfiguration.h:31
 AliTriggerConfiguration.h:32
 AliTriggerConfiguration.h:33
 AliTriggerConfiguration.h:34
 AliTriggerConfiguration.h:35
 AliTriggerConfiguration.h:36
 AliTriggerConfiguration.h:37
 AliTriggerConfiguration.h:38
 AliTriggerConfiguration.h:39
 AliTriggerConfiguration.h:40
 AliTriggerConfiguration.h:41
 AliTriggerConfiguration.h:42
 AliTriggerConfiguration.h:43
 AliTriggerConfiguration.h:44
 AliTriggerConfiguration.h:45
 AliTriggerConfiguration.h:46
 AliTriggerConfiguration.h:47
 AliTriggerConfiguration.h:48
 AliTriggerConfiguration.h:49
 AliTriggerConfiguration.h:50
 AliTriggerConfiguration.h:51
 AliTriggerConfiguration.h:52
 AliTriggerConfiguration.h:53
 AliTriggerConfiguration.h:54
 AliTriggerConfiguration.h:55
 AliTriggerConfiguration.h:56
 AliTriggerConfiguration.h:57
 AliTriggerConfiguration.h:58
 AliTriggerConfiguration.h:59
 AliTriggerConfiguration.h:60
 AliTriggerConfiguration.h:61
 AliTriggerConfiguration.h:62
 AliTriggerConfiguration.h:63
 AliTriggerConfiguration.h:64
 AliTriggerConfiguration.h:65
 AliTriggerConfiguration.h:66
 AliTriggerConfiguration.h:67
 AliTriggerConfiguration.h:68
 AliTriggerConfiguration.h:69
 AliTriggerConfiguration.h:70
 AliTriggerConfiguration.h:71
 AliTriggerConfiguration.h:72
 AliTriggerConfiguration.h:73
 AliTriggerConfiguration.h:74
 AliTriggerConfiguration.h:75
 AliTriggerConfiguration.h:76
 AliTriggerConfiguration.h:77
 AliTriggerConfiguration.h:78
 AliTriggerConfiguration.h:79
 AliTriggerConfiguration.h:80
 AliTriggerConfiguration.h:81
 AliTriggerConfiguration.h:82
 AliTriggerConfiguration.h:83
 AliTriggerConfiguration.h:84
 AliTriggerConfiguration.h:85
 AliTriggerConfiguration.h:86
 AliTriggerConfiguration.h:87
 AliTriggerConfiguration.h:88
 AliTriggerConfiguration.h:89
 AliTriggerConfiguration.h:90
 AliTriggerConfiguration.h:91
 AliTriggerConfiguration.h:92
 AliTriggerConfiguration.h:93
 AliTriggerConfiguration.h:94
 AliTriggerConfiguration.h:95
 AliTriggerConfiguration.h:96
 AliTriggerConfiguration.h:97
 AliTriggerConfiguration.h:98
 AliTriggerConfiguration.h:99
 AliTriggerConfiguration.h:100
 AliTriggerConfiguration.h:101
 AliTriggerConfiguration.h:102
 AliTriggerConfiguration.h:103
 AliTriggerConfiguration.h:104
 AliTriggerConfiguration.h:105
 AliTriggerConfiguration.h:106
 AliTriggerConfiguration.h:107
 AliTriggerConfiguration.h:108
 AliTriggerConfiguration.h:109
 AliTriggerConfiguration.h:110
 AliTriggerConfiguration.h:111
 AliTriggerConfiguration.h:112
 AliTriggerConfiguration.h:113
 AliTriggerConfiguration.h:114
 AliTriggerConfiguration.h:115
 AliTriggerConfiguration.h:116
 AliTriggerConfiguration.h:117
 AliTriggerConfiguration.h:118
 AliTriggerConfiguration.h:119
 AliTriggerConfiguration.h:120
 AliTriggerConfiguration.h:121
 AliTriggerConfiguration.h:122
 AliTriggerConfiguration.h:123
 AliTriggerConfiguration.h:124
 AliTriggerConfiguration.h:125
 AliTriggerConfiguration.h:126
 AliTriggerConfiguration.h:127
 AliTriggerConfiguration.h:128
 AliTriggerConfiguration.h:129
 AliTriggerConfiguration.h:130
 AliTriggerConfiguration.h:131
 AliTriggerConfiguration.h:132
 AliTriggerConfiguration.h:133
 AliTriggerConfiguration.h:134
 AliTriggerConfiguration.h:135
 AliTriggerConfiguration.h:136