ROOT logo
/////////////////////////////////////////////////////////////////////////
//
//  HMdcSeg this is the SEGment class of MDC
//
//  Added data members, R.Holzmann 23-June-04
//  R.Schicker 20-May-00
//
/////////////////////////////////////////////////////////////////////////
#ifndef HMDCSEG_H
#define HMDCSEG_H

#include "hsymmat.h"
#include "hmdccellgroup.h"

class HMdcSeg : public HMdcCellGroup12 {

protected: 
  Float_t z;       // z cordinate in sector coordinate sys. [mm]
  Float_t r;       // r coordinate in sector coordinate sys. [mm]
  Float_t theta;   // polar angle theta in sector coordinate sys. [radian]
  Float_t phi;     // azimuthal angle phi in sector coordinate sys. [radian]
  Float_t chi2;    // chi square per degree of freedom
  Int_t   flag;    // Cluster info: number of cells, bins and merged clusters 
  HSymMat4 cov;    // covariance matrix 4x4 in sector system		      
  UInt_t  ind;     // index for hit1/sector
  UInt_t  ind2;    // index for hit2/inner-outer segment
  Float_t zPrime;  // z cordinate wrt axis centered on target position
  Float_t rPrime;  // r coordinate wrt axis centered on target position
  Int_t   clusInd; // index of MDC cluster
  Short_t x1;      // x1,y1 - cross point of the segment line with first mdc layer (in sec.coor.sys.)
  Short_t y1;      // Convert to mm: Float_t(x1)*0.1; Float_t(y1)*0.1;
  Short_t x2;      // x2,y2 - cross point of the segment line with last mdc layer (in sec.coor.sys.)
  Short_t y2;      // Convert to mm: Float_t(x2)*0.1; Float_t(y2)*0.1;

  enum {kIsFake         = BIT(14),   // bit in TObject::fBits for "fake" segment flag
        kOffVertexClust = BIT(20)};  // bit in TObject::fBits for "fake" segment flag
 public:
  HMdcSeg(void); 
  ~HMdcSeg(void);
  
  void Clear(void);
  
  void setZ(const Float_t zl,const Float_t err) {z=zl; cov.setErr(0,err);}
  void setR(const Float_t rl,const Float_t err) {r=rl; cov.setErr(1,err);}
  void setTheta(const Float_t th,const Float_t err) 
    {theta=th; cov.setErr(2,err);}
  void setPhi(const Float_t ph,const Float_t err) {phi=ph; cov.setErr(3,err);}

  void setZR(const Float_t zl,const Float_t erz,const Float_t rl, const Float_t err) { z=zl; cov.setErr(0,erz); r=rl; cov.setErr(1,err);}
  void setThetaPhi(const Float_t th,const Float_t ert,
		 const Float_t ph, const Float_t erp) { 
    theta=th; cov.setErr(2,ert); phi=ph; cov.setErr(3,erp);
  }

  void setPar(const Float_t zl, const Float_t ezl, const Float_t rl, 
	      const Float_t erl, const Float_t th, const Float_t eth, 
	      const Float_t ph, const Float_t eph) {
    z=zl; cov.setErr(0,ezl); r=rl; cov.setErr(1,erl); theta=th; 
    cov.setErr(2,eth); phi=ph; cov.setErr(3,eph);
  }
  
  void setZ(const Float_t zl) {z=zl;}
  void setR(const Float_t rl) {r=rl;}
  void setTheta(const Float_t th) {theta=th;}
  void setPhi(const Float_t ph) {phi=ph;}
  void setPar(const Float_t zl, const Float_t rl, 
	      const Float_t th, const Float_t ph) {
    z=zl; r=rl; theta=th; phi=ph;
  }
  void setZprime(const Float_t zpr) {zPrime=zpr;}
  void setRprime(const Float_t rpr) {rPrime=rpr;}

  void setChi2(const Float_t chl) {chi2=chl;}  
  void setFlag(const Int_t fl) {flag=fl;}

  void setSec(Int_t sec)   { ind  = (sec & 0x7) | (ind & 0x7FFFFF00); }
  void setIOSeg(Int_t seg) { ind2 = (seg & 0x1) | (ind & 0x7FFFFF00); }
  void setHitInd(UInt_t i,UInt_t idx) {
    if(idx > 8388606 || i > 1){
    Warning("setHitInd","max hit= 8388606, ind= %i mdc=0,1 ind= %i",idx,i);
    }
    else {
        UInt_t &indc = i==0 ? ind : ind2;
        idx++;
	indc = (idx << 8) | (indc & 0xFF);
    }
  }
  void setClusIndex(Int_t ind) {clusInd = ind;}

  void setX1(Double_t v)       {x1 = convertToShort(v);}
  void setY1(Double_t v)       {y1 = convertToShort(v);}
  void setX2(Double_t v)       {x2 = convertToShort(v);}
  void setY2(Double_t v)       {y2 = convertToShort(v);}
  void setXYPar(Double_t vx1,Double_t vy1,Double_t vx2,Double_t vy2) {
    x1 = convertToShort(vx1);
    y1 = convertToShort(vy1);
    x2 = convertToShort(vx2);
    y2 = convertToShort(vy2);
  }

  Float_t getZ(void) const         {return z;}
  Float_t getR(void) const         {return r;}
  Float_t getTheta(void) const     {return theta;}
  Float_t getPhi(void) const       {return phi;}
  Float_t getErrZ(void)            {return cov.getErr(0);}
  Float_t getErrR(void)            {return cov.getErr(1);}
  Float_t getErrTheta(void)        {return cov.getErr(2);}
  Float_t getErrPhi(void)          {return cov.getErr(3);} 
  Float_t getZprime(void) const    {return zPrime;}
  Float_t getRprime(void) const    {return rPrime;}
  Int_t   getClusIndex(void) const {return clusInd;}
  
  Float_t getX1(void) const        {return Float_t(x1)*0.1;}  // in [mm]
  Float_t getY1(void) const        {return Float_t(y1)*0.1;}  // in [mm]
  Float_t getX2(void) const        {return Float_t(x2)*0.1;}  // in [mm]
  Float_t getY2(void) const        {return Float_t(y2)*0.1;}  // in [mm]
  Short_t getX1Sh(void) const      {return x1;}               // in hundreds mkm
  Short_t getY1Sh(void) const      {return y1;}               // in hundreds mkm
  Short_t getX2Sh(void) const      {return x2;}               // in hundreds mkm
  Short_t getY2Sh(void) const      {return y2;}               // in hundreds mkm

  void getZ(Float_t& zl,Float_t& err)           { zl=z; err=cov.getErr(0);}
  void getR(Float_t& rl,Float_t& err)           { rl=r; err=cov.getErr(1);}
  void getTheta(Float_t& th,Float_t& err)       { th=theta; err=cov.getErr(2);}
  void getPhi(Float_t& ph,Float_t& err)         { ph=phi; err=cov.getErr(3);}
  void getZR(Float_t& zl,Float_t& erz,Float_t& rl,Float_t& err) { 
    zl=z; erz=cov.getErr(0); rl=r; err=cov.getErr(1);}
  void getThetaPhi(Float_t& th,Float_t& ert,Float_t& ph,Float_t& erp) { 
    th=theta; ert=cov.getErr(2); ph=phi; erp=cov.getErr(3);}
  void getPar(Float_t& p1,Float_t& p2,Float_t& p3,Float_t& p4) const {
    p1=z; p2=r; p3=theta; p4=phi;}
  void getErrPar(Float_t& p1,Float_t& p2,Float_t& p3,Float_t& p4) {
    p1=cov.getErr(0); p2=cov.getErr(1); p3=cov.getErr(2); p4=cov.getErr(3);}
  Float_t getChi2(void) const      {return chi2;}
  HSymMat &getCovariance(void)     {return cov;}
  Int_t getFlag(void) const        {return flag;}

  Int_t getSec(void)   const { return ind  & 0xFF; } // sector number
  Int_t getIOSeg(void) const { return ind2 & 0xFF; } // inner seg=0, outer=1 
  inline Int_t getHitInd(Int_t i) const; // Hit index (-1 --> No hit)
  
  void   setFakeFlag(void)      { SetBit(kIsFake); }
  void   resetFakeFlag(void)    { ResetBit(kIsFake); }
  Bool_t isFake(void) const     { return TestBit(kIsFake); }
  void   setClusInfo(Int_t nBins,Int_t nCells,Int_t nMerClus) {
    if(nMerClus > 99) nMerClus = 99;
    flag = ((nBins & 0x7FFF) << 16) | ((nCells*100 & 0xFFFF) + nMerClus);
  }
  void    setOffVertexClus(void)      { SetBit(kOffVertexClust); }
  Bool_t  isOffVertexClus(void) const { return TestBit(kOffVertexClust); }
  
  Int_t   getNBinsClus(void) const   {return flag >> 16;}
  Int_t   getNCellsClus(void) const  {return (flag & 0xFFFF)/100;}
  Int_t   getNMergedClus(void) const {return (flag & 0xFFFF)%100;}
  void    print(void);
 
protected:
  Short_t convertToShort(Double_t v) const {
    if(v>=0.) return v< 3200. ? Short_t(v*10.+0.5) :  32000;
    else      return v>-3200. ? Short_t(v*10.-0.5) : -32000;
  }

  ClassDef(HMdcSeg,3) // MDC segment
};

inline Int_t HMdcSeg::getHitInd(Int_t i) const {
  Int_t r = i==0 ? (ind >> 8) : (ind2 >> 8);
  return r-1;
}

#endif  /* HMdcSeg_H */


















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