ROOT logo
#ifndef HMDCCLUSSIM_H
#define HMDCCLUSSIM_H

#include "hmdcclus.h"

class HMdcClusSim : public HMdcClus {
protected:
  Int_t   nTracks;         // num. of GEANT tracks in cluster
  Int_t   listTr[5];       // list of tracks
  Short_t nTimes[5];       // num. of hits in cluster from track
  UChar_t nLayers[5][2];   // list of layers with hits from track (bits array)
  UChar_t nDigiTimes[5];   // num. of digitized dr.times in segment (or module)
  UChar_t trackStatus[5];  //
  Float_t xGeant[5];       // GEANT hit position on the proj.plane
  Float_t yGeant[5];       // GEANT hit position on the proj.plane
  Char_t  nNotFakeTracks;  // Number of tracks with non fake contribution
  Char_t  ioSMatchStatus;  //  > 0 - num. of not fake tracks with IOseg matching
                           //  = 0 - no matching
                           //  =-1 - old files, cham.clust. or no outer seg.
  
  Int_t   nTracksM[2];     //! [mod] num. of GEANT tracks in cluster
  Int_t   listTrM[2][5];   //! list of tracks
  Short_t nTimesM[2][5];   //! num. of hits in cluster from track
public:
  HMdcClusSim(void) {setDef();}
  HMdcClusSim(HMdcList12GroupCells& lcells)  : HMdcClus(lcells) {setDef();}
  ~HMdcClusSim() {}
  
  void    setDef(void);
  void    setNTracks(Int_t nTrs)                  {nTracks = nTrs; cleanRest();}
  void    cleanRest(void);
  void    clear(void)                             {setDef(); HMdcClus::clear();}
  Int_t   addTrack(Int_t tr,Short_t nTm,UChar_t lM1,UChar_t lM2);
  Bool_t  resetTrack(Int_t ind,Int_t tr,Short_t nTm,UChar_t lM1,UChar_t lM2);
  void    setNTracksM(Int_t modi,Int_t nTrs);
  void    setTrackM(Int_t modi,Int_t ind,Int_t tr,Short_t nTm);
  void    setNDigiTimes(Int_t ind,Int_t nt);
  void    setTrackStatus(Int_t ind,UChar_t status);
  void    setXYGeant(Int_t ind,Float_t xg,Float_t yg);
  void    calcTrList(void);
  void    calcTrListMod(HMdcList12GroupCells& list,Int_t m);
  void    sortTrListByContr(void);

  Bool_t  isGeant(void) const                     {return kTRUE;}
  
  const Int_t*   getTrackList(void) const   {return listTr;}
  const Short_t* getNumWires(void) const    {return nTimes;}
  const UChar_t* getNDigiTimes(void) const  {return nDigiTimes;}
  const UChar_t* getTrackStatus(void) const {return trackStatus;}
  
  
  
  
  Int_t   getArrsSize(void) const                 {return 5;}
  Int_t   getNTracks(void) const                  {return nTracks;}
  Char_t  getNNotFakeTracks(void) const           {return nNotFakeTracks;}
  Int_t   getNMatchedTracks(void) const;
  Int_t   getTrack(Int_t indx) const;
  Short_t getNTimesInTrack(Int_t indx) const;
  Int_t   getNLayersInTrack(Int_t indx,Int_t m=-1) const;
  UChar_t getLayListForMod(Int_t indx,Int_t mi) const;
  UChar_t getNLayOrientation(Int_t indx,Int_t mi=-1) const;
  Bool_t  is40degCross(Int_t indx,Int_t mi=-1) const;
  UChar_t getNDigiTimesInTrack(Int_t indx) const  {return indOk(indx) ? nDigiTimes[indx]:0;}
  
  Int_t   getNTracksMod(Int_t m) const            {return nTracksM[m&1];}
  Int_t   getTrackMod(Int_t m,Int_t indx) const;
  Short_t getNTimesInMod(Int_t m,Int_t indx) const;
  Int_t   getTrackIndex(Int_t tr) const;
  Int_t   getNoiseIndex(void) const;
  const Int_t*   getListTrM(Int_t m) const        {return listTrM[m&1];}
  const Short_t* getNTimesM(Int_t m) const        {return nTimesM[m&1];}
  UChar_t getTrackStatus(Int_t ind) const;
  Bool_t  getXYGeant(Int_t i,Float_t& xg,
                             Float_t& yg) const;
  Float_t getXGeant(Int_t i) const                {return indOk(i) ? xGeant[i]:-10000.;}
  Float_t getYGeant(Int_t i) const                {return indOk(i) ? yGeant[i]:-10000.;}
  Float_t dX(Int_t i) const                       {return indOk(i) ? xGeant[i]-x:-10000.;}
  Float_t dY(Int_t i) const                       {return indOk(i) ? yGeant[i]-y:-10000.;}
  
  Bool_t  isGntTrackOk(Int_t i) const             {return  testBit(i,255);}
  Bool_t  isIOSegMatch(Int_t i) const             {return  testBit(i,1);}
  Bool_t  noIOSegMatch(Int_t i) const             {return !testBit(i,1);}
  Bool_t  isFakeContribution(Int_t i) const       {return !testBit(i,2);}
  Bool_t  isClFnLevelTooHigh(Int_t i) const       {return !testBit(i,4);}
  Bool_t  is1or2HitsNotRec(Int_t i) const         {return !testBit(i,8);}
  Bool_t  isSegNotRec(Int_t i) const              {return !testBit(i,16);}
  Bool_t  isTrackNotRec(Int_t i) const            {return !testBit(i,32);}
  Bool_t  isNoMeta(Int_t i) const                 {return !testBit(i,64);}
  Bool_t  isGEANTBug(Int_t i) const               {return !testBit(i,128);}
  Char_t  getIOSegMatchingStatus(void) const      {return ioSMatchStatus;}
  
  void    printCont(Bool_t fl=kTRUE) const;
  
private:
  Bool_t  indOk(Int_t i) const             {return i>=0 && i<nTracks;}
  UChar_t trackBits(Int_t i) const         {return indOk(i) ? trackStatus[i]:0;}
  Bool_t  testBit(Int_t i,UChar_t b) const {return (trackBits(i)&b) == b;}
  void    exchangeTrPos(Int_t t1,Int_t t2);
  
  ClassDef(HMdcClusSim,1)
};

#endif
 hmdcclussim.h:1
 hmdcclussim.h:2
 hmdcclussim.h:3
 hmdcclussim.h:4
 hmdcclussim.h:5
 hmdcclussim.h:6
 hmdcclussim.h:7
 hmdcclussim.h:8
 hmdcclussim.h:9
 hmdcclussim.h:10
 hmdcclussim.h:11
 hmdcclussim.h:12
 hmdcclussim.h:13
 hmdcclussim.h:14
 hmdcclussim.h:15
 hmdcclussim.h:16
 hmdcclussim.h:17
 hmdcclussim.h:18
 hmdcclussim.h:19
 hmdcclussim.h:20
 hmdcclussim.h:21
 hmdcclussim.h:22
 hmdcclussim.h:23
 hmdcclussim.h:24
 hmdcclussim.h:25
 hmdcclussim.h:26
 hmdcclussim.h:27
 hmdcclussim.h:28
 hmdcclussim.h:29
 hmdcclussim.h:30
 hmdcclussim.h:31
 hmdcclussim.h:32
 hmdcclussim.h:33
 hmdcclussim.h:34
 hmdcclussim.h:35
 hmdcclussim.h:36
 hmdcclussim.h:37
 hmdcclussim.h:38
 hmdcclussim.h:39
 hmdcclussim.h:40
 hmdcclussim.h:41
 hmdcclussim.h:42
 hmdcclussim.h:43
 hmdcclussim.h:44
 hmdcclussim.h:45
 hmdcclussim.h:46
 hmdcclussim.h:47
 hmdcclussim.h:48
 hmdcclussim.h:49
 hmdcclussim.h:50
 hmdcclussim.h:51
 hmdcclussim.h:52
 hmdcclussim.h:53
 hmdcclussim.h:54
 hmdcclussim.h:55
 hmdcclussim.h:56
 hmdcclussim.h:57
 hmdcclussim.h:58
 hmdcclussim.h:59
 hmdcclussim.h:60
 hmdcclussim.h:61
 hmdcclussim.h:62
 hmdcclussim.h:63
 hmdcclussim.h:64
 hmdcclussim.h:65
 hmdcclussim.h:66
 hmdcclussim.h:67
 hmdcclussim.h:68
 hmdcclussim.h:69
 hmdcclussim.h:70
 hmdcclussim.h:71
 hmdcclussim.h:72
 hmdcclussim.h:73
 hmdcclussim.h:74
 hmdcclussim.h:75
 hmdcclussim.h:76
 hmdcclussim.h:77
 hmdcclussim.h:78
 hmdcclussim.h:79
 hmdcclussim.h:80
 hmdcclussim.h:81
 hmdcclussim.h:82
 hmdcclussim.h:83
 hmdcclussim.h:84
 hmdcclussim.h:85
 hmdcclussim.h:86
 hmdcclussim.h:87
 hmdcclussim.h:88
 hmdcclussim.h:89
 hmdcclussim.h:90
 hmdcclussim.h:91
 hmdcclussim.h:92
 hmdcclussim.h:93
 hmdcclussim.h:94
 hmdcclussim.h:95
 hmdcclussim.h:96
 hmdcclussim.h:97
 hmdcclussim.h:98
 hmdcclussim.h:99
 hmdcclussim.h:100
 hmdcclussim.h:101
 hmdcclussim.h:102
 hmdcclussim.h:103
 hmdcclussim.h:104