ROOT logo
///////////////////////////////////////////////////////////////////////////
//  HGeantRpc
//  GEANT RPC hit data
///////////////////////////////////////////////////////////////////////////

#ifndef HGEANTRPC_H
#define HGEANTRPC_H

#include "hlinkeddataobject.h"

class HGeantRpc : public HLinkedDataObject
{
private:

  Int_t    trackNumber;       // GEANT track number
  Float_t  trackLength;       // track length at the RPC gap/cell.                                   [mm]
  Float_t  loctrackLength;    // local track length (inside the gap/cell).                           [mm]
  Float_t  eHit;              // energy deposited in the RPC gap/cell.                               [MeV]
  Float_t  xHit;              // x at the RPC gap/cell, in module ref. system (EBOX).                [mm]
  Float_t  yHit;              // y at the RPC gap/cell, in module ref. system (EBOX).                [mm]
  Float_t  zHit;              // z at the RPC gap/cell, in module ref. system (EBOX).                [mm]
  Float_t  tofHit;            // time of flight at the RPC gap/cell.                                 [ns]
  Float_t  momHit;            // momentum at the RPC gap/cell.                                       [MeV/c]
  Float_t  thetaHit;          // polar angle at the RPC gap/cell, in module ref. system (EBOX).      [deg]
  Float_t  phiHit;            // azimuthal angle at the RPC gap/cell, in module ref. system (EBOX).  [deg]
  Short_t  detectorID;        // detector ID (codified sector/column/cell/gap info)
  // New elements after Jan 2013.
  Float_t  loctrackLength1;   // local track length (inside the gap).                                [mm]
  Float_t  eHit1;             // energy deposited in the RPC gap.                                    [MeV]
  Float_t  xHit1;             // x at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  yHit1;             // y at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  momHit1;           // momentum at the RPC gap.                                            [MeV/c]
  Float_t  loctrackLength2;   // local track length (inside the gap).                                [mm]
  Float_t  eHit2;             // energy deposited in the RPC gap.                                    [MeV]
  Float_t  xHit2;             // x at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  yHit2;             // y at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  momHit2;           // momentum at the RPC gap.                                            [MeV/c]
  Float_t  loctrackLength3;   // local track length (inside the gap).                                [mm]
  Float_t  eHit3;             // energy deposited in the RPC gap.                                    [MeV]
  Float_t  xHit3;             // x at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  yHit3;             // y at the RPC gap, in module ref. system (EBOX).                     [mm]
  Float_t  momHit3;           // momentum at the RPC gap.                                            [MeV/c]
  Short_t  HGeantRpc_version; //! HGeantRpc class version when reading from file.

public:
  HGeantRpc(void);
//  HGeantRpc(HGeantRpc &aRpc);
  ~HGeantRpc(void);


  // Functions setVariable
  inline void    setTrack(Int_t atrackNumber) {trackNumber = atrackNumber;}
  inline void    setDetectorID(Short_t adetectorID) {detectorID = adetectorID;}
  inline void    setAddress(Int_t sec, Int_t col, Int_t cel, Int_t gap);
  inline void    setVersion(Int_t aHGeantRpc_version) {HGeantRpc_version = aHGeantRpc_version;}
         void    setIncidence(Float_t athetaHit, Float_t aphiHit);
  //
  // OLD set functions for backward compatibility.
  //
         void    setHit(Float_t axHit, Float_t ayHit, Float_t azHit, Float_t atofHit,
                        Float_t amomHit, Float_t eHit);
         void    setTLength(Float_t atracklength, Float_t aloctracklength);
  //
  // NEW HIT set functions.
  //
         void    setHit(Float_t axHit, Float_t ayHit, Float_t azHit, Float_t atofHit,
                        Float_t amomHit, Float_t eHit, Float_t aloctracklength);
  //
         void    setGap(Int_t nGap, Float_t axHit, Float_t ayHit, Float_t amomHit,
                        Float_t eHit, Float_t aloctrackLength);
  inline void    setTLengthHit(Float_t atrackLength) {trackLength = atrackLength;};
  inline void    setZHit(Float_t azHit) {zHit = azHit;};
  inline void    setTofHit(Float_t atofHit) {tofHit = atofHit;};


  // Functions getVariable
  inline Int_t   getSector(void) const;
  inline Int_t   getColumn(void) const;
  inline Int_t   getCell(void)   const;
  inline Int_t   getGap(void)    const;

  inline Int_t   getTrack(void)      {return trackNumber;};
  inline Int_t   getDetectorID(void) {return detectorID;};
  inline Int_t   getNLocationIndex(void) {return 4;};
  inline Int_t   getLocationIndex(Int_t i);
  inline Int_t   getVersion(void) {return HGeantRpc_version;};
  //
  //  OLD get functions for backward compatibility.
  //
         void    getIncidence(Float_t& athetaHit, Float_t& aphiHit);
         void    getTLength(Float_t& atracklength, Float_t& aloctracklength);
         void    getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                        Float_t& atofHit, Float_t& amomHit, Float_t& aeHit);
  //
  // NEW GAP get functions.
  //
  // Various options are available to avoid retrieving unnecessary information.
         Float_t getlocTLengthGap(Int_t nGap);
         void    getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
                        Float_t& aeHit, Float_t& aloctrackLength);
         void    getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
                        Float_t& aeHit);
         void    getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit);
  //
  // NEW HIT get functions.
  //
  inline Float_t getTLengthHit(void) {return trackLength;};
  inline Float_t getZHit(void) {return zHit;};
  inline Float_t getTofHit(void) {return tofHit;};
  // Various options are available to avoid retrieving unnecessary information.
         void    getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit,
                        Float_t& amomHit, Float_t& aeHit, Float_t& aloctrackLength);
         void    getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit,
                        Float_t& amomHit);
         void    getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit);
  // Optimized for digitizer.
         void    getHitDigi(Float_t& axHit, Float_t& atofHit, Float_t& amomHit,
                            Float_t& aloctrackLength);
  //
  // NEW CELL get functions.
  //
  // Various options are available to avoid retrieving unnecessary information.
         void    getCellAverage(Float_t gap, Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                                Float_t& atofHit, Float_t& amomHit, Float_t& aeHit,
                                Float_t& aloctrackLength);
         void    getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                                Float_t& atofHit, Float_t& amomHit, Float_t& aeHit);
         void    getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                                Float_t& atofHit, Float_t& amomHit);
         void    getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
                                Float_t& atofHit);
  // Optimized for digitizer.
         void    getCellAverageDigi(Float_t gap, Float_t& axHit, Float_t& atofHit,
                                    Float_t& amomHit, Float_t& aloctrackLength);
  //
  ClassDef(HGeantRpc,5)
};

inline Int_t  HGeantRpc::getSector(void) const{
  if (detectorID<0) return -1*(detectorID+1);
  else return detectorID>>11;
}

inline Int_t  HGeantRpc::getColumn(void) const{
  if (detectorID<0) return -1;
  else return ((detectorID>>8)  & 7);
}

inline Int_t  HGeantRpc::getCell(void) const{
  if (detectorID<0) return -1;
  else return ((detectorID>>2)  & 63);
}

inline Int_t  HGeantRpc::getGap(void) const {
  if (detectorID<0) return -1;
  else return (detectorID & 3);
}

inline void HGeantRpc::setAddress(Int_t sec, Int_t col, Int_t cel, Int_t gap) {
  detectorID = (sec<<11) + (col<<8) + (cel<<2) + gap;
}

inline Int_t HGeantRpc::getLocationIndex(Int_t i) {
  switch (i) {
    case 0 : return getSector();
    case 1 : return getColumn();
    case 2 : return getCell();
    case 3 : return getGap();
  }
  return -1;
}


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