e847d9417e2d56fe8fe884d784966a2619e9e42e
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTRDdEdxParams.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 //  Xianguo Lu <lu@physi.uni-heidelberg.de>
17 //
18
19 #include "AliLog.h"
20 #include "AliTRDdEdxParams.h"
21
22 ClassImp(AliTRDdEdxParams);
23
24 AliTRDdEdxParams::AliTRDdEdxParams(const TString name, const TString title): TNamed(name,title)
25 {
26   //
27   //constructor
28   //
29 }
30
31 Int_t AliTRDdEdxParams::GetIter(const Int_t itype, const Int_t nch, const Int_t ncls) const
32 {
33   //
34   //return array iterator
35   //
36
37   Int_t itNch = -999, itNcls = -999;
38
39   //hard coded cuts
40   if(nch==6){
41     itNch = 0;
42   }
43   else{
44     itNch = 1;
45   }
46
47   if(ncls/nch>=18){
48     itNcls = 0;
49   }
50   else{
51     itNcls = 1;
52   }
53
54   const Int_t finaliter = itype*2*2 +  itNch*2 + itNcls;
55
56   if(finaliter<0 || finaliter>= MAXSIZE){
57     AliError(Form("out of range itype %d nch %d ncls %d\n", itype, nch, ncls));
58   }
59
60   return finaliter;
61 }
62
63 const TVectorF& AliTRDdEdxParams::GetParameter(const TVectorF par[], const Int_t itype, const Int_t nch, const Int_t ncls)const
64 {
65   //
66   //return parameter for particle itype from par[]
67   //
68
69   const Int_t iter = GetIter(itype, nch, ncls);
70
71   return par[iter];
72 }
73
74 void AliTRDdEdxParams::SetParameter(TVectorF par[], const Int_t itype, const Int_t nch, const Int_t ncls, const Int_t npar, const Float_t vals[])
75 {
76   //
77   //set parameter, vals of dimension npar, for particle itype
78   //
79
80   const Int_t iter = GetIter(itype, nch, ncls);
81
82   TVectorF p2(npar, vals);
83
84   par[iter].ResizeTo(p2);
85   par[iter] = p2;
86 }
87
88 void AliTRDdEdxParams::Print(Option_t* option) const
89 {
90   //
91   //print all members
92   //
93
94   TObject::Print(option);
95
96   printf("\n======================= Mean ========================\n");
97   for(Int_t ii=0; ii<MAXSIZE; ii++){
98     printf("%d: Nrows() %d\n",ii, fMeanPar[ii].GetNrows());
99     if(fMeanPar[ii].GetNrows()) fMeanPar[ii].Print();
100   }
101
102   printf("\n======================= Sigma ========================\n");
103
104   for(Int_t ii=0; ii<MAXSIZE; ii++){
105     printf("%d: Nrows() %d\n",ii, fSigmaPar[ii].GetNrows());
106     if(fSigmaPar[ii].GetNrows()) fSigmaPar[ii].Print();
107   }
108   printf("AliTRDdEdxParams::Print done.\n\n");
109 }