ROOT logo
#ifndef __HPARTICLEBTCLUSTERF_H__
#define __HPARTICLEBTCLUSTERF_H__

#include "TObject.h"
//#include "hreconstructor.h"

class HParticleBtPar;
class HParticleBtRingF;
class TF2;
class HVertex;
class HParticleBtRingInfo;
using namespace std;


class HParticleBtClusterF : public TObject {



protected:

    HParticleBtPar* fBtPar;
    HParticleBtRingF* fRing;

    Int_t fPadUp;
    Int_t fPadUpRight;
    Int_t fPadRight;
    Int_t fPadDownRight;
    Int_t fPadDown;
    Int_t fPadDownLeft;
    Int_t fPadLeft;
    Int_t fPadUpLeft;

    Float_t fChargeLimit[6];
    Float_t fChargeLimitMaximum[6];
    Float_t fPadWidthX;
    Float_t fPadWidthY;
  
    Float_t fNSigma;
    Float_t fMaxSigmaRange;
    Float_t fMaxSigmaRangeSmall;
    Float_t fSigmaErrorPad;
   
    UInt_t  fNMaxLimit;
    UInt_t  fClusSizeLimit;
    Float_t fMinimumSigmaValue;

    Int_t    fMaximumType;
    Float_t  fSigmaGaus[2]; //x,y
    Float_t  fSigmaGausRange[2];//x,y

    Float_t  fChargeDiagonalPar[3];  //3 Params per function
    Float_t  fChargeVerticalPar[3];
    Float_t  fChargeHorizontalPar[3];

    Float_t  fPhiOff[6];
    Float_t  fPhiOff2[6];
    Int_t    fPhiOffsetPar;

    Int_t    fNRingSeg;
    Int_t    fNRingSegStep;
    Int_t    fNRingSegOffset;

    Int_t    fNVertex;
    Int_t    fNParMean;
    Int_t    fNParSigma;
    Float_t  fParThetaAngleMin;
    Float_t  fParThetaAngleMax;

    vector <vector <TF2*> >   fPol2DMean;
    vector <vector <TF2*> >   fPol2DSigma;

    vector <Float_t> fRad2Deg;
    vector <Float_t> fRad2DegX;
    vector <Float_t> fRad2DegY;


    //Pads in clusters
    vector<Int_t> fIsInCluster;
    //Cluster track relation
    vector<vector <Int_t> >  fClusTrackNoShared;

    //Cluster information
    vector<Bool_t>           fClusIsGood;
    vector<Int_t>            fClusPadSum;
    vector<Int_t>            fClusPadRing;
    vector<Float_t>          fClusChargeSum;
    vector<Float_t>          fClusChargeRing;
    vector<Float_t>          fClusPosX;
    vector<Float_t>          fClusPosY;
    vector<Int_t>            fClusClass;
  
    //Maxima and maxima position
    vector<vector <Int_t> >              fClusNMaxima;
    vector<vector <vector  <Int_t> > >   fClusNMaximaPad;
    vector<vector <vector  <Float_t> > > fClusNMaximaPosX;
    vector<vector <vector  <Float_t> > > fClusNMaximaPosY;

    //Chi2
    vector<vector <vector  <Float_t> > > fClusChi2;
    vector<vector <vector  <Float_t> > > fClusChi2XMM;
    vector<vector <vector  <Float_t> > > fClusChi2YMM;

    //Debug info
    vector<vector <vector  <Float_t> > > fClusCircleX;
    vector<vector <vector  <Float_t> > > fClusCircleY;
    vector<vector <vector  <Float_t> > > fClusSig1X;
    vector<vector <vector  <Float_t> > > fClusSig1Y;
    vector<vector <vector  <Float_t> > > fClusSig2X;
    vector<vector <vector  <Float_t> > > fClusSig2Y;

    //RingInfo
    vector < vector<Int_t> >* fPrediction;
    vector <Int_t>          * fRichHitAdd;
    vector <Float_t>        * fRichHitCharge;
    vector <Float_t>         fRingMeanDistX;
    vector <Float_t>         fRingMeanDistY;



public:

    HParticleBtClusterF(void);

    ~HParticleBtClusterF(void);

    // -----------------------------------------------------

    Bool_t init(void);

    // -----------------------------------------------------

    void setRingF(HParticleBtRingF* ring);

    void    calcCluster(Int_t trackNo);
    void    noHitFound();
    void    clearCluster(void);

    Int_t   getPadsRing(  const Int_t trackNo);
    Int_t   getPadsSum(   const Int_t trackNo);
    Float_t getChargeRing(const Int_t trackNo);
    Float_t getChargeSum( const Int_t trackNo);

    Int_t   getNClusters(   const Int_t trackNo);
    Int_t   getMaxima(      const Int_t trackNo);
    Float_t getMaximaCharge(const Int_t trackNo);
    Int_t   getNearbyMaxima(const Int_t trackNo);

    Float_t getChi2Value(       const Int_t trackNo);
    Float_t getChi2ValuePrimary(const Int_t trackNo);

    Int_t   getMaximaShared(           const Int_t trackNo);
    Int_t   getMaximaSharedBad(        const Int_t trackNo);
    Int_t   getMaximaSharedTrack(      const Int_t trackNo, const Int_t trackNo2);
    Int_t   getMaximaSharedBadTrack(      const Int_t trackNo, const Int_t trackNo2);
    Float_t getMaximaChargeShared(     const Int_t trackNo);
    Float_t getMaximaChargeSharedTrack(const Int_t trackNo, const Int_t trackNo2);
    Float_t getMaximaChargeSharedBad(     const Int_t trackNo);
    Float_t getMaximaChargeSharedBadTrack(const Int_t trackNo, const Int_t trackNo2);
    Int_t   getNearbyMaximaShared(     const Int_t trackNo);
    Int_t   getNearbyMaximaSharedTrack(const Int_t trackNo, const Int_t trackNo2);
  
    Float_t getMeanDistX(const Int_t trackNo);
    Float_t getMeanDistY(const Int_t trackNo);
    Float_t getMeanDist( const Int_t trackNo);


    Bool_t fillRingInfo(HParticleBtRingInfo* BtRingInfo);
    //Double_t gaussf(Double_t *x, Double_t *par);


private:

    // -----------------------------------------------------
    //Helper functions
    void     addressToColRow(const Int_t address, Int_t &sec, Int_t &row, Int_t &col);
    Float_t  getPadCharge(const Int_t pos);
    Int_t    getShared(const Int_t trackNo,const Int_t clusNum, const Float_t sigmaRange, const Bool_t trackType, const Int_t trackNo2);
    Float_t  getSharedCharge(const Int_t trackNo,const Int_t clusNum, const Float_t sigmaRange, const Bool_t trackType, const Int_t trackNo2);
    void     addressIsShared(Int_t address);
    Float_t  sharedChargeDiagonal(const Float_t maximumCharge);
    Float_t  sharedChargeVertical(const Float_t maximumCharge);
    Float_t  sharedChargeHorizontal(const Float_t maximumCharge);


    //Cluster info calculation functions
    void findNeighbour( const Int_t trackNo, const Int_t address);
    void fillCluster(const Int_t trackNo, const UInt_t beginclus);
    void nMaxima(const Int_t trackNo, const  UInt_t beginclus);
    void fitMaximaPos(const UInt_t beginclus);
    void calcChi2(const Int_t trackNo);
    void setGoodClus(void);
    void findClusterShape(const UInt_t beginclus);
    void calcRingShift(const Int_t trackNo);
   
    ClassDef(HParticleBtClusterF, 0)

};


#endif  // __HPARTICLEBTCLUSTER_H__

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