]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCclustererMI.h
Remove noisy pads - cut RMS - 2 ADC (3 ADC counts before) (Marian)
[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 AliTPCRecoParam;
23 class AliTPCclusterMI;
24 class AliTPCClustersRow;
25 class AliRawReader;
26 class AliSimDigits;
27 class TTree;
28 class TTreeSRedirector;
29 class  AliRawEventHeaderBase;
30
31 class AliTPCclustererMI : public TObject{
32 public:
33   AliTPCclustererMI(const AliTPCParam* par, const AliTPCRecoParam * recoParam = 0);
34   virtual ~AliTPCclustererMI();
35   virtual void Digits2Clusters();
36   virtual void Digits2Clusters(AliRawReader* rawReader);
37   virtual void SetOldRCUFormat(Bool_t rcuFormat = kFALSE)
38     { fIsOldRCUFormat = rcuFormat; };
39   virtual void SetInput(TTree * tree);  // set input tree with digits    
40   virtual void SetOutput(TTree * tree); //set output tree with 
41 private:
42   Bool_t IsMaximum(Float_t k, Int_t max, const Float_t *bins) const; 
43   void MakeCluster2(Int_t k,Int_t max,Float_t *bins,UInt_t m,
44    AliTPCclusterMI &c);  
45   void MakeCluster(Int_t k,Int_t max,Float_t *bins,UInt_t m,
46    AliTPCclusterMI &c); 
47   Float_t  GetSigmaY2(Int_t iz);
48   Float_t  GetSigmaZ2(Int_t iz);
49   Float_t  FitMax(Float_t vmatrix[5][5], Float_t y, Float_t z, Float_t sigmay, Float_t sigmaz);
50   void AddCluster(AliTPCclusterMI &c);  // add the cluster to the array
51   void UnfoldCluster(Float_t * matrix[7], Float_t recmatrix[5][5], 
52                      Float_t & meani, Float_t & meanj, Float_t & sum, Float_t &overlap );
53   void FindClusters();
54   Double_t  ProcesSignal(Float_t * signal, Int_t nchannels, Int_t id[3], Double_t &rms);
55   void DumpHistos();
56
57
58   Float_t * fBins;       //!digits array
59   Float_t * fResBins;    //!digits array with res. after 1 finder
60   Int_t fLoop;         //loop - cf in 2 loops
61   Int_t fMaxBin;       //current ( for current sector)  maximal bin
62   Int_t fMaxTime;      //current ( for current sector)  maximal time
63   Int_t fMaxPad;       //current ( for current sector)  maximal pad
64   Int_t fSector;      //!current sector
65   Int_t fRow;         //!current row
66   Float_t fSign;      //!current sign 
67   Float_t fRx;        // current radius
68   Float_t fPadWidth;  // the width of the pad
69   Float_t fPadLength;  // the width of the pad
70   Float_t fZWidth;     //the z bin width
71
72   Bool_t  fPedSubtraction; // perform pedestal subtraction or not
73   Bool_t  fIsOldRCUFormat; // assume old RCU raw data format
74   AliRawEventHeaderBase *fEventHeader; //! event header information
75   UInt_t  fTimeStamp;   // Time Stamp
76   UInt_t  fEventType;   // Event Type
77   TTree * fInput;   //!input  tree with digits - object not owner
78   TTree * fOutput;   //!output tree with digits - object not owner
79   AliTPCClustersRow * fRowCl;  //! current cluster row
80   AliSimDigits * fRowDig;      //! current digits row
81   const AliTPCParam * fParam;        //! tpc parameters
82   Int_t fNcluster;             // number of clusters - for given row
83   TObjArray * fAmplitudeHisto;          //! array of histograms of amplitudes
84   TTreeSRedirector *fDebugStreamer;     //!debug streamer
85   const AliTPCRecoParam  * fRecoParam;        //! reconstruction parameters
86   ClassDef(AliTPCclustererMI,1)  // Time Projection Chamber digits
87 };
88
89 inline Bool_t AliTPCclustererMI::IsMaximum(Float_t q,Int_t max,const Float_t *bins) const {
90   //is this a local maximum ?
91   if (bins[-max] >= q) return kFALSE;
92   if (bins[-1  ] >= q) return kFALSE; 
93   if (bins[+max] > q) return kFALSE; 
94   if (bins[+1  ] > q) return kFALSE; 
95   if (bins[-max-1] >= q) return kFALSE;
96   if (bins[+max-1] >= q) return kFALSE; 
97   if (bins[+max+1] > q) return kFALSE; 
98   if (bins[-max+1] >= q) return kFALSE;
99   return kTRUE; 
100 }
101
102
103
104 //-----------------------------------------------------------------
105
106 #endif
107
108