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

/* $Id: AliTRDgtuParam.h 27496 2008-07-22 08:35:45Z cblume $ */

// --------------------------------------------------------
//
// Singleton class to hold the parameters steering the GTU
// tracking
//
// --------------------------------------------------------

#include "TObject.h"

class AliTRDgeometry;

class AliTRDgtuParam : public TObject {
 public:
  virtual ~AliTRDgtuParam();

  static AliTRDgtuParam *Instance(); // Singleton

  static Int_t GetNLinks() { return fgkNLinks; }
  static Int_t GetNLayers() { return fgkNLinks/2; }
  static Int_t GetNZChannels() { return fgkNZChannels; }
  static Int_t GetNRefLayers() { return fgkNRefLayers; }

  static Float_t GetChamberThickness() { return 3.0; }

  // ----- Bin widths (granularity) -----
  static Float_t GetBinWidthY() { return fgkBinWidthY; }
  static Float_t GetBinWidthdY() { return fgkBinWidthdY; }

  // ----- Bit Widths (used for internal representation) -----
  static Int_t GetBitWidthY() { return fgkBitWidthY; }
  static Int_t GetBitWidthdY() { return fgkBitWidthdY; }
  static Int_t GetBitWidthYProj() { return fgkBitWidthYProj; }
  static Int_t GetBitExcessY() { return fgkBitExcessY; }
  static Int_t GetBitExcessAlpha() { return fgkBitExcessAlpha; }
  static Int_t GetBitExcessYProj() { return fgkBitExcessYProj; }

  Float_t GetInnerPadLength(Int_t stack, Int_t layer) const {
      return (stack == 2) ? 9. : fgkInnerPadLength[layer];
  }
  Float_t GetOuterPadLength(Int_t stack, Int_t layer) const {
      return (stack == 2) ? 8. : fgkOuterPadLength[layer];
  }
  Float_t GetZrow(Int_t stack, Int_t layer, Int_t padrow) const {
    Float_t zRowCorrected = fgkRow0Pos[layer][stack] - GetOuterPadLength(stack, layer) + GetInnerPadLength(stack, layer);
    return zRowCorrected - (0.5 + padrow) * GetInnerPadLength(stack, layer);
  }

  AliTRDgeometry* GetGeo() const { return fGeo; }
  Float_t GetVertexSize() const { return fVertexSize; }
  Int_t GetCiAlpha(Int_t layer) const;
  Int_t GetCiYProj(Int_t layer) const;
  Int_t GetYt(Int_t stack, Int_t layer, Int_t zrow) const;
  Int_t GetDeltaY() const { return fgDeltaY; }
  Int_t GetDeltaAlpha() const { return fgDeltaAlpha; }
  Int_t GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const;
  static Int_t GetRefLayer(Int_t refLayerIdx);
//  Bool_t GetFitParams(TVectorD &rhs, Int_t k); // const
  Bool_t GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2); // const
  static Int_t GetPt(Int_t layerMask, Int_t a, Float_t b, Float_t x1, Float_t x2, Float_t magField);

  Bool_t IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const;

  void SetVertexSize(Float_t vertexsize) { fVertexSize = vertexsize; }

  static void SetDeltaY(Int_t dy) { fgDeltaY = dy; }
  static void SetDeltaAlpha(Int_t da) { fgDeltaAlpha = da; }

  static void SetUseGTUconst(Bool_t b) { fgUseGTUconst = b; }
  static Bool_t GetUseGTUconst() { return fgUseGTUconst; }

  static void SetUseGTUmerge(Bool_t b) { fgUseGTUmerge = b; }
  static Bool_t GetUseGTUmerge() { return fgUseGTUmerge; }

  static void SetLimitNoTracklets(Bool_t b) { fgLimitNoTracklets = b; }
  static Bool_t GetLimitNoTracklets() { return fgLimitNoTracklets; }

  static void SetMaxNoTracklets(Int_t max) { fgMaxNoTracklets = max; }
  static Int_t GetMaxNoTracklets() { return fgMaxNoTracklets; }

  // z-channel map
  Int_t GenerateZChannelMap(); // could have different modes (for beam-beam, cosmics, ...)
  Bool_t DisplayZChannelMap(Int_t zchannel = -1, Int_t subch = 0) const;

  // variables for pt-reconstruction (not used at the moment)
  Bool_t GenerateRecoCoefficients(Int_t trackletMask);
  Int_t   GetAki(Int_t k, Int_t i);
  Float_t GetBki(Int_t k, Int_t i);
  Float_t GetCki(Int_t k, Int_t i);
//  Float_t GetD(Int_t k) const;

  // B-field
  void SetMagField(Float_t field) { fMagField = field; }
  Float_t GetMagField() const { return fMagField; }

  static const Int_t fgkNZChannels = 3; // No. of z-channels
  static const Int_t fgkNLinks = 12;	// No. of links
  static const Int_t fgkFixLayer = 2;	// which layer is fixed for the generation of the z-channel map
  static const Int_t fgkNRefLayers = 3;	 // no. of reference layers

  static const Float_t fgkBinWidthY; // bin width for y-position
  static const Float_t fgkBinWidthdY; // bin width for deflection length

  static const Int_t fgkBitWidthY; // bit width for y-position
  static const Int_t fgkBitWidthdY; // bit width for deflection length
  static const Int_t fgkBitWidthYProj; // bit width for projected y-position
  static const Int_t fgkBitExcessY; // excess bits for y-position
  static const Int_t fgkBitExcessAlpha; // excess bits for alpha
  static const Int_t fgkBitExcessYProj; // excess bits for projected y-position

  static const Int_t fgkPtInfinity; // infinite pt as obtained when a == 0

 protected:
  static       Int_t fgDeltaY;    	// accepted deviation in y_proj, default: 9
  static       Int_t fgDeltaAlpha;      // accepted deviation in alpha, default: 11

  static       Int_t fgRefLayers[3];    // reference layers for track finding

  static       Bool_t fgUseGTUconst;    // use constants as in the GTU for the calculations
					       // instead of geometry derived quantities
  static       Bool_t fgUseGTUmerge;    // use merge algorithm exactly as in hardware
  static       Bool_t fgLimitNoTracklets; // limit the number of tracklets per layer
  static       Int_t  fgMaxNoTracklets;   // max number of tracklets per layer if limited
  static const Bool_t fgZChannelMap[5][16][6][16]; // z-channel tables as in GTU
  static const Float_t fgkRadius[6];    // layer radius as used in the GTU code
  static const Float_t fgkThickness;    // drift length as used in the GTU code
  static const Float_t fgkRow0Pos[6][5]; // geometry constant from GTU implementation
  static const Float_t fgkInnerPadLength[6]; // geometry constant from GTU implementation
  static const Float_t fgkOuterPadLength[6]; // geometry constant from GTU implementation
  static const Float_t fgkAcoeff[32][6]; // geometry constant from GTU implementation
  static const Int_t   fgkMaskID[64]; // geometry constant from GTU implementation

  Float_t fVertexSize;		// assumed vertex size (z-dir.) for the z-channel map

  Int_t fZChannelMap[5][16][6][16];		  // must be changed
  Int_t fZSubChannel[5][fgkNZChannels][6][16];    // must be changed

  Int_t fCurrTrackletMask; // current tracklet mask for which the coefficients have been calculated
  Float_t fAki[6]; // coefficients used for the fit, calculated for the current tracklet mask
  Float_t fBki[6]; // coefficients used for the fit, calculated for the current tracklet mask
  Float_t fCki[6]; // coefficients used for the fit, calculated for the current tracklet mask

  Float_t fMagField;            // magnetic field in T

  AliTRDgeometry *fGeo;		//! pointer to the TRD geometry

 private:
  AliTRDgtuParam();			     // instance only via Instance()
  AliTRDgtuParam(const AliTRDgtuParam &rhs); // not implemented
  AliTRDgtuParam& operator=(const AliTRDgtuParam &rhs); // not implemented

  ClassDef(AliTRDgtuParam, 1);
};

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