]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCclustererMI.h
Clusterization of raw data (T.Kuhr)
[u/mrichter/AliRoot.git] / TPC / AliTPCclustererMI.h
1 #ifndef ALITPCCLUSTERERMI_H
2 #define ALITPCCLUSTERERMI_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9
10
11 //-------------------------------------------------------
12 //                       TPC clusterer
13 //
14 //   Origin: Marian Ivanov  
15 //-------------------------------------------------------
16 #include <Rtypes.h>
17 #include <TObject.h>
18 #define kMAXCLUSTER 2500
19
20 class TFile;
21 class AliTPCParam;
22 class AliTPCclusterMI;
23 class AliTPCClustersRow;
24 class AliSimDigits;
25 class TTree;
26
27 class AliTPCclustererMI : public TObject{
28 public:
29   AliTPCclustererMI(const AliTPCParam* par);
30   virtual void Digits2Clusters(const AliTPCParam *par, Int_t eventn=1);
31   virtual void Digits2Clusters(const char* fileName = "AltroFormatDDL.dat");
32   virtual void SetInput(TTree * tree);  // set input tree with digits    
33   virtual void SetOutput(TTree * tree); //set output tree with 
34 private:
35   Bool_t IsMaximum(Int_t k, Int_t max, const Int_t *bins); 
36   void MakeCluster2(Int_t k,Int_t max,Int_t *bins,UInt_t m,
37    AliTPCclusterMI &c);  
38   void MakeCluster(Int_t k,Int_t max,Int_t *bins,UInt_t m,
39    AliTPCclusterMI &c); 
40   Float_t  GetSigmaY2(Int_t iz);
41   Float_t  GetSigmaZ2(Int_t iz);
42   Float_t  FitMax(Float_t vmatrix[5][5], Float_t y, Float_t z, Float_t sigmay, Float_t sigmaz);
43   void AddCluster(AliTPCclusterMI &c);  // add the cluster to the array
44   void UnfoldCluster(Int_t * matrix[7], Float_t recmatrix[5][5], 
45                      Float_t & meani, Float_t & meanj, Float_t & sum, Float_t &overlap );
46   void FindClusters();
47
48
49
50   Int_t * fBins;       //!digits array
51   Int_t * fResBins;    //!digits array with res. after 1 finder
52   Int_t fLoop;         //loop - cf in 2 loops
53   Int_t fMaxBin;
54   Int_t fMaxTime;
55   Int_t fMaxPad;
56   Int_t fSector;      //!current sector
57   Float_t fSign;      //!current sign 
58   Float_t fRx;        // current radius
59   Float_t fPadWidth;  // the width of the pad
60   Float_t fPadLength;  // the width of the pad
61   Float_t fZWidth;     //the z bin width
62
63   TTree * fInput;   //!input  tree with digits - object not owner
64   TTree * fOutput;   //!output tree with digits - object not owner
65   AliTPCClustersRow * fRowCl;  //! current cluster row
66   AliSimDigits * fRowDig;      //! current digits row
67   const AliTPCParam * fParam;        //! tpc parameters
68   Int_t fNcluster;             // number of clusters - for given row
69   ClassDef(AliTPCclustererMI,1)  // Time Projection Chamber digits
70 };
71
72 inline Bool_t AliTPCclustererMI::IsMaximum(Int_t q,Int_t max,const Int_t *bins){
73   //is this a local maximum ?
74   if (bins[-max] >= q) return kFALSE;
75   if (bins[-1  ] >= q) return kFALSE; 
76   if (bins[+max] > q) return kFALSE; 
77   if (bins[+1  ] > q) return kFALSE; 
78   if (bins[-max-1] >= q) return kFALSE;
79   if (bins[+max-1] >= q) return kFALSE; 
80   if (bins[+max+1] > q) return kFALSE; 
81   if (bins[-max+1] >= q) return kFALSE;
82   return kTRUE; 
83 }
84
85
86
87 //-----------------------------------------------------------------
88
89 #endif
90
91