]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSDriftSpeedSDD.h
macros developed by Luca Barioglio for patterns analysis
[u/mrichter/AliRoot.git] / ITS / AliITSDriftSpeedSDD.h
1 #ifndef ALIITSDRIFTSPEEDSDD_H
2 #define ALIITSDRIFTSPEEDSDD_H
3 /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ///////////////////////////////////////////////////////////////////
9 //                                                               //
10 // Class for SDD drift speed extracted from injector triggers    //
11 // drift speed dependence on anode number is parametrized via    //
12 // a polynomial function (3rd degree by default, max. 5th degree)//
13 // Origin: F.Prino, Torino, prino@to.infn.it                     //
14 //                                                               //
15 ///////////////////////////////////////////////////////////////////
16
17 #include<TObject.h>
18 #include<TMath.h>
19
20 class AliITSDriftSpeedSDD : public TObject {
21  public:
22   AliITSDriftSpeedSDD();
23   AliITSDriftSpeedSDD(Int_t ev, UInt_t timest, Int_t deg, Double_t *coeff);
24   AliITSDriftSpeedSDD(const AliITSDriftSpeedSDD& drSpeed);
25   AliITSDriftSpeedSDD& operator=(const AliITSDriftSpeedSDD& drSpeed); 
26   virtual ~AliITSDriftSpeedSDD(){};
27
28   static Float_t DefaultDriftSpeed() {return fgkDriftSpeedDefault;}
29   virtual Bool_t IsEqual(const TObject *obj) const 
30     {return fEvNum == ((AliITSDriftSpeedSDD*)obj)->fEvNum;}
31   virtual Bool_t      IsSortable() const { return kTRUE; }
32   virtual Int_t       Compare(const TObject *obj) const 
33     {if(fEvNum<((AliITSDriftSpeedSDD*)obj)->fEvNum) return -1;
34     else if(fEvNum>((AliITSDriftSpeedSDD*)obj)->fEvNum) return 1;
35     else return 0; }
36
37   void PrintDriftSpeedParameters() const;
38   void SetDegreeofPoly(Int_t deg) {fPolDeg = deg>fgkMaxPolDeg ? fgkMaxPolDeg : deg;}
39   Int_t GetDegreeofPoly() const {return fPolDeg;}
40   Int_t GetEventNumber() const {return fEvNum;}
41   UInt_t GetEventTimestamp() const {return fTimestamp;}
42   Float_t GetDriftSpeedParameter(Int_t i) const {return fDriftSpeedParam[i];}
43   void    SetDriftSpeedParameter(Int_t i,Float_t par)  {if (i<=fPolDeg) fDriftSpeedParam[i] = par;}
44   Double_t GetDriftSpeedAtAnode(Double_t nAnode) const{
45     Double_t drSpeed=fDriftSpeedParam[fgkMaxPolDeg];
46     for(Int_t i=fgkMaxPolDeg-1; i>=0; --i) drSpeed=fDriftSpeedParam[i]+nAnode*drSpeed;
47     return drSpeed;
48   }
49   static UShort_t GetMaxPolDeg() {return fgkMaxPolDeg;}
50
51  protected:
52   static const Float_t fgkDriftSpeedDefault; // default for drift speed
53   static const UShort_t fgkMaxPolDeg=5; // max. degree of the poly fit
54
55   Int_t fEvNum;  // event number of injector event
56   UInt_t fTimestamp; // event timestamp
57   Char_t fPolDeg;    // degree of the ploy fit to drift speed vs. anode
58                      // saved as char since 1 byte is enough
59   Float_t fDriftSpeedParam[fgkMaxPolDeg+1];  // coefficients of the poly fit
60   ClassDef(AliITSDriftSpeedSDD,4);
61 };
62 #endif