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

////////////////////////////////////////////////////////////////
//                                                            //
//  Multi Chip Module Simulation Configuration Handler Class  //
//                                                            //
////////////////////////////////////////////////////////////////


#include <TObject.h>
#include "AliTRDltuParam.h"
#include "AliTRDCalOnlineGainTable.h"
#include "AliTRDtrapConfig.h"

class AliTRDtrapConfigHandler : public TObject {
 public:
                    AliTRDtrapConfigHandler(AliTRDtrapConfig *cfg);
  virtual          ~AliTRDtrapConfigHandler();

  void Init();                                                // Set DMEM allocation modes
  void ResetMCMs();                                           // Reset all trap registers and DMEM of the MCMs
  Int_t LoadConfig();                                         // load a default configuration suitable for simulation
  Int_t LoadConfig(TString filename);                         // load a TRAP configuration from a file
  Int_t SetGaintable(AliTRDCalOnlineGainTable const &gtbl);   // Set a gain table to correct Q0 and Q1 for PID

  void ProcessLTUparam(Int_t dest, Int_t addr, UInt_t data);  // Process the LTU parameters
  void PrintGeoTest();                                        // Prints some information about the geometry. Only for debugging

  // UInt_t peek(Int_t rob, Int_t mcm, Int_t addr);   // not implemented yet
  // Int_t poke(Int_t rob, Int_t mcm, Int_t addr, UInt_t value);   // not implemented yet

 private:
  Bool_t AddValues(UInt_t det, UInt_t cmd, UInt_t extali, Int_t addr, UInt_t data);

  void  ConfigureDyCorr(Int_t det);                             // deflection length correction due to Lorentz angle and tilted pad correction
  void  ConfigureDRange(Int_t det);                             // deflection range LUT,  range calculated according to B-field (in T) and pt_min (in GeV/c)
  void  ConfigureNTimebins(Int_t det);                          // timebins in the drift region
  void  ConfigurePIDcorr(Int_t det);                            // Calculate the mcm individual correction factors for the PID

  Double_t Square(Double_t val) const { return val*val; };          // returns the square of a given number

  AliTRDtrapConfigHandler(const AliTRDtrapConfigHandler &h);             // not implemented
  AliTRDtrapConfigHandler &operator=(const AliTRDtrapConfigHandler &h);  // not implemented

  static const UInt_t fgkScsnCmdReset=6;     // SCSN command for reset
  static const UInt_t fgkScsnCmdPause=8;     // SCSN command to pause
  static const UInt_t fgkScsnCmdRead=9;      // SCSN command to read
  static const UInt_t fgkScsnCmdWrite=10;    // SCSN command to write
  static const UInt_t fgkScsnCmdPtrg=12;     // SCSN command for pretrigger
  static const UInt_t fgkScsnCmdRobPower=16; // SCSN command to switch ROB power
  static const UInt_t fgkScsnCmdRobReset=17; // SCSN command for ROB reset

  static const UInt_t fgkScsnCmdRestr=18;    // SCSN command to restrict commands to specified chambers
  static const UInt_t fgkScsnCmdTtcRx=19;    // SCSN command to configure TTCrx
  static const UInt_t fgkScsnCmdHwPtrg=20;   // SCSN command to issue pretrigger pulse
  static const UInt_t fgkScsnCmdSetHC=22;    // SCSN command to set HC ID
  static const UInt_t fgkScsnCmdMcmTemp=24;  // SCSN command for MCM temperature sensors
  static const UInt_t fgkScsnCmdPM=25;       // SCSN command for patchmaker
  static const UInt_t fgkScsnCmdOri=26;      // SCSN command for ORI configuration
  static const UInt_t fgkScsnLTUparam=27;    // extended SCSN command for the LTU configuration

  static const Int_t fgkMCMperROBCol = 4;  // MCMs per ROB column
  static const Int_t fgkPadsPerMCM = 18;   // readout pads per MCM
  static const Int_t fgkMCMperROBRow = 4;  // MCMs per ROB row

  static const Int_t fgkMaxLinkPairs=4;    // number of linkpairs used during configuration
  static const Int_t fgkMcmlistSize=256;     // list of MCMs to which a value has to be written

  AliTRDltuParam     ltuParam;             // ltuParam class for the actual calculation of the parameters

  UInt_t fRestrictiveMask;                 // mask to restrict subsequent commands to specified chambers

  AliTRDtrapConfig *fTrapConfig;           // pointer to TRAP config in use
  AliTRDCalOnlineGainTable fGtbl;          // gain table

  ClassDef(AliTRDtrapConfigHandler,0)
};

#endif
 AliTRDtrapConfigHandler.h:1
 AliTRDtrapConfigHandler.h:2
 AliTRDtrapConfigHandler.h:3
 AliTRDtrapConfigHandler.h:4
 AliTRDtrapConfigHandler.h:5
 AliTRDtrapConfigHandler.h:6
 AliTRDtrapConfigHandler.h:7
 AliTRDtrapConfigHandler.h:8
 AliTRDtrapConfigHandler.h:9
 AliTRDtrapConfigHandler.h:10
 AliTRDtrapConfigHandler.h:11
 AliTRDtrapConfigHandler.h:12
 AliTRDtrapConfigHandler.h:13
 AliTRDtrapConfigHandler.h:14
 AliTRDtrapConfigHandler.h:15
 AliTRDtrapConfigHandler.h:16
 AliTRDtrapConfigHandler.h:17
 AliTRDtrapConfigHandler.h:18
 AliTRDtrapConfigHandler.h:19
 AliTRDtrapConfigHandler.h:20
 AliTRDtrapConfigHandler.h:21
 AliTRDtrapConfigHandler.h:22
 AliTRDtrapConfigHandler.h:23
 AliTRDtrapConfigHandler.h:24
 AliTRDtrapConfigHandler.h:25
 AliTRDtrapConfigHandler.h:26
 AliTRDtrapConfigHandler.h:27
 AliTRDtrapConfigHandler.h:28
 AliTRDtrapConfigHandler.h:29
 AliTRDtrapConfigHandler.h:30
 AliTRDtrapConfigHandler.h:31
 AliTRDtrapConfigHandler.h:32
 AliTRDtrapConfigHandler.h:33
 AliTRDtrapConfigHandler.h:34
 AliTRDtrapConfigHandler.h:35
 AliTRDtrapConfigHandler.h:36
 AliTRDtrapConfigHandler.h:37
 AliTRDtrapConfigHandler.h:38
 AliTRDtrapConfigHandler.h:39
 AliTRDtrapConfigHandler.h:40
 AliTRDtrapConfigHandler.h:41
 AliTRDtrapConfigHandler.h:42
 AliTRDtrapConfigHandler.h:43
 AliTRDtrapConfigHandler.h:44
 AliTRDtrapConfigHandler.h:45
 AliTRDtrapConfigHandler.h:46
 AliTRDtrapConfigHandler.h:47
 AliTRDtrapConfigHandler.h:48
 AliTRDtrapConfigHandler.h:49
 AliTRDtrapConfigHandler.h:50
 AliTRDtrapConfigHandler.h:51
 AliTRDtrapConfigHandler.h:52
 AliTRDtrapConfigHandler.h:53
 AliTRDtrapConfigHandler.h:54
 AliTRDtrapConfigHandler.h:55
 AliTRDtrapConfigHandler.h:56
 AliTRDtrapConfigHandler.h:57
 AliTRDtrapConfigHandler.h:58
 AliTRDtrapConfigHandler.h:59
 AliTRDtrapConfigHandler.h:60
 AliTRDtrapConfigHandler.h:61
 AliTRDtrapConfigHandler.h:62
 AliTRDtrapConfigHandler.h:63
 AliTRDtrapConfigHandler.h:64
 AliTRDtrapConfigHandler.h:65
 AliTRDtrapConfigHandler.h:66
 AliTRDtrapConfigHandler.h:67
 AliTRDtrapConfigHandler.h:68
 AliTRDtrapConfigHandler.h:69
 AliTRDtrapConfigHandler.h:70
 AliTRDtrapConfigHandler.h:71
 AliTRDtrapConfigHandler.h:72
 AliTRDtrapConfigHandler.h:73
 AliTRDtrapConfigHandler.h:74
 AliTRDtrapConfigHandler.h:75
 AliTRDtrapConfigHandler.h:76
 AliTRDtrapConfigHandler.h:77
 AliTRDtrapConfigHandler.h:78
 AliTRDtrapConfigHandler.h:79
 AliTRDtrapConfigHandler.h:80
 AliTRDtrapConfigHandler.h:81
 AliTRDtrapConfigHandler.h:82