#101318: Patch for various problems in AliROOT
[u/mrichter/AliRoot.git] / TOF / AliTOFResponseParams.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 // *
17 // *
18 // *
19 // * this class defines the TOF object to be stored
20 // * in OCDB in order to have TOF response correction
21 // * and actual resolution
22 // * 
23 // *
24 // *
25 // *
26
27 #include "AliTOFResponseParams.h"
28 #include "TGraph.h"
29
30 ClassImp(AliTOFResponseParams)
31
32 //_________________________________________________________
33
34 AliTOFResponseParams::AliTOFResponseParams() :
35   TObject()
36 {
37   /*
38    * default constructor
39    */
40
41   for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
42     fNPoints[ipart] = 0;
43 }
44
45 //_________________________________________________________
46
47 AliTOFResponseParams::AliTOFResponseParams(Int_t *nPoints) :
48   TObject()
49 {
50   /*
51    * default constructor
52    */
53
54   for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++)
55     fNPoints[ipart] = nPoints[ipart] < fgkMaxPoints ? nPoints[ipart] : fgkMaxPoints;
56 }
57
58 //_________________________________________________________
59
60 AliTOFResponseParams::~AliTOFResponseParams()
61 {
62   /*
63    * default destructor
64    */
65
66 }
67
68 //_________________________________________________________
69
70 AliTOFResponseParams::AliTOFResponseParams(const AliTOFResponseParams &source) :
71   TObject(source)
72 {
73   /*
74    * copy constructor
75    */
76
77   for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
78     fNPoints[ipart] = source.fNPoints[ipart];
79     for (Int_t ipoint = 0; ipoint < fNPoints[ipart]; ipoint++) {
80       fP[ipart][ipoint] = source.fP[ipart][ipoint];
81       fTExpCorr[ipart][ipoint] = source.fTExpCorr[ipart][ipoint];
82     }
83   }
84     
85 }
86
87 //_________________________________________________________
88
89 AliTOFResponseParams &
90 AliTOFResponseParams::operator=(const AliTOFResponseParams &source)
91 {
92   /*
93    * operator=
94    */
95
96   if (this == &source) return *this;
97   TObject::operator=(source);
98   
99   for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
100     fNPoints[ipart] = source.fNPoints[ipart];
101     for (Int_t ipoint = 0; ipoint < fNPoints[ipart]; ipoint++) {
102       fP[ipart][ipoint] = source.fP[ipart][ipoint];
103       fTExpCorr[ipart][ipoint] = source.fTExpCorr[ipart][ipoint];
104     }
105   }
106     
107   return *this;
108 }
109
110 //_________________________________________________________
111
112 TGraph *
113 AliTOFResponseParams::DrawGraph(Int_t ipart, Option_t* option)
114 {
115   /*
116    * draw
117    */
118
119   if (ipart >= AliPID::kSPECIES) return NULL;
120   if (fNPoints[ipart] == 0) return NULL;
121
122   TGraph *graph = new TGraph(fNPoints[ipart], fP[ipart], fTExpCorr[ipart]);
123   graph->Draw(option);
124   return graph;
125 }
126
127 //_________________________________________________________
128
129 Double_t
130 AliTOFResponseParams::EvalTExpCorr(Int_t ipart, Double_t p)
131 {
132   /*
133    * eval corr
134    */
135
136   if (ipart >= AliPID::kSPECIES) return 0.;
137   if (fNPoints[ipart] == 0) return 0.;
138   if (p < fP[ipart][0]) return fTExpCorr[ipart][0];
139   if (p >= fP[ipart][fNPoints[ipart] - 1]) return fTExpCorr[ipart][fNPoints[ipart] - 1];
140   
141   Int_t ipoint;
142   for (ipoint = 0; ipoint < fNPoints[ipart] - 1; ipoint++)
143     if (p >= fP[ipart][ipoint] && p < fP[ipart][ipoint + 1]) break;
144   Double_t coeff = (fTExpCorr[ipart][ipoint + 1] - fTExpCorr[ipart][ipoint]) / (fP[ipart][ipoint + 1] - fP[ipart][ipoint]);
145   Double_t corr = fTExpCorr[ipart][ipoint] + coeff * (p - fP[ipart][ipoint]);
146   return corr;
147 }