TRD dEdx OADB framework: Nch and Ncls dependence added in the OADB object
authorxlu <xianguo.lu@cern.ch>
Mon, 11 Aug 2014 10:26:45 +0000 (12:26 +0200)
committermorsch <andreas.morsch@cern.ch>
Tue, 30 Sep 2014 13:18:09 +0000 (15:18 +0200)
OADB/COMMON/PID/data/TRDdEdxParams.root
STEER/STEERBase/AliTRDPIDResponse.cxx
STEER/STEERBase/AliTRDdEdxParams.cxx
STEER/STEERBase/AliTRDdEdxParams.h
TRD/makeTRDdEdxOADB.C

index 474bd8b..69422ba 100644 (file)
Binary files a/OADB/COMMON/PID/data/TRDdEdxParams.root and b/OADB/COMMON/PID/data/TRDdEdxParams.root differ
index 7f9794c..7994707 100644 (file)
@@ -156,23 +156,6 @@ Double_t AliTRDPIDResponse::GetSignalDelta( const AliVTrack* track, AliPID::EPar
   //
 
   const Double_t badval = -9999;
-
-  //cut on number of chambers
-  const Double_t cutch = 6;
-
-  //cut on mean number of clusters per chamber
-  const Double_t cutclsperch = 18;
-
-  const Double_t nch = track->GetTRDNchamberdEdx();
-  if(nch < cutch){
-    return badval;
-  }
-
-  const Double_t ncls = track->GetTRDNclusterdEdx();
-  if( ncls/nch < cutclsperch){
-    return badval;
-  }
-
   Double_t pTRD = -999;
   for(Int_t ich=0; ich<6; ich++){
     pTRD = track->GetTRDmomentum(ich);
@@ -188,8 +171,21 @@ Double_t AliTRDPIDResponse::GetSignalDelta( const AliVTrack* track, AliPID::EPar
     return -99999;
   }
 
-  const Float_t *meanpar = (fkTRDdEdxParams->GetMeanParameter(type)).GetMatrixArray();
-  const Float_t *respar  = (fkTRDdEdxParams->GetSigmaParameter(type)).GetMatrixArray();
+  const Double_t nch = track->GetTRDNchamberdEdx();
+  const Double_t ncls = track->GetTRDNclusterdEdx();
+
+  const TVectorF meanvec = fkTRDdEdxParams->GetMeanParameter(type, nch, ncls);
+  if(meanvec.GetNrows()==0){
+    return badval;
+  }
+
+  const TVectorF resvec  = fkTRDdEdxParams->GetSigmaParameter(type, nch, ncls);
+  if(resvec.GetNrows()==0){
+    return badval;
+  }
+
+  const Float_t *meanpar = meanvec.GetMatrixArray();
+  const Float_t *respar  = resvec.GetMatrixArray();
 
   //============================================================================================<<<<<<<<<<<<<
 
index 860c953..e847d94 100644 (file)
@@ -28,40 +28,61 @@ AliTRDdEdxParams::AliTRDdEdxParams(const TString name, const TString title): TNa
   //
 }
 
-void AliTRDdEdxParams::CheckType(const Int_t itype, const TString tag) const 
+Int_t AliTRDdEdxParams::GetIter(const Int_t itype, const Int_t nch, const Int_t ncls) const
 {
   //
-  //check if itype is in range
+  //return array iterator
   //
 
-  if(itype<0 || itype>=MAXNPAR){
-    AliError(Form("AliTRDdEdxParams::CheckType %s itype out of range %d\n", tag.Data(), itype));
+  Int_t itNch = -999, itNcls = -999;
+
+  //hard coded cuts
+  if(nch==6){
+    itNch = 0;
+  }
+  else{
+    itNch = 1;
+  }
+
+  if(ncls/nch>=18){
+    itNcls = 0;
+  }
+  else{
+    itNcls = 1;
   }
+
+  const Int_t finaliter = itype*2*2 +  itNch*2 + itNcls;
+
+  if(finaliter<0 || finaliter>= MAXSIZE){
+    AliError(Form("out of range itype %d nch %d ncls %d\n", itype, nch, ncls));
+  }
+
+  return finaliter;
 }
 
-const TVectorF& AliTRDdEdxParams::GetParameter(const TVectorF par[], const Int_t itype)const
+const TVectorF& AliTRDdEdxParams::GetParameter(const TVectorF par[], const Int_t itype, const Int_t nch, const Int_t ncls)const
 {
   //
   //return parameter for particle itype from par[]
   //
 
-  CheckType(itype, "GetParameter");
+  const Int_t iter = GetIter(itype, nch, ncls);
 
-  return par[itype];
+  return par[iter];
 }
 
-void AliTRDdEdxParams::SetParameter(TVectorF par[], const Int_t itype, const Int_t npar, const Float_t vals[])
+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[])
 {
   //
   //set parameter, vals of dimension npar, for particle itype
   //
 
-  CheckType(itype, "SetParameter");
+  const Int_t iter = GetIter(itype, nch, ncls);
 
   TVectorF p2(npar, vals);
 
-  par[itype].ResizeTo(p2);
-  par[itype] = p2;
+  par[iter].ResizeTo(p2);
+  par[iter] = p2;
 }
 
 void AliTRDdEdxParams::Print(Option_t* option) const
@@ -73,14 +94,14 @@ void AliTRDdEdxParams::Print(Option_t* option) const
   TObject::Print(option);
 
   printf("\n======================= Mean ========================\n");
-  for(Int_t ii=0; ii<MAXNPAR; ii++){
+  for(Int_t ii=0; ii<MAXSIZE; ii++){
     printf("%d: Nrows() %d\n",ii, fMeanPar[ii].GetNrows());
     if(fMeanPar[ii].GetNrows()) fMeanPar[ii].Print();
   }
 
   printf("\n======================= Sigma ========================\n");
 
-  for(Int_t ii=0; ii<MAXNPAR; ii++){
+  for(Int_t ii=0; ii<MAXSIZE; ii++){
     printf("%d: Nrows() %d\n",ii, fSigmaPar[ii].GetNrows());
     if(fSigmaPar[ii].GetNrows()) fSigmaPar[ii].Print();
   }
index 6506c6c..376301e 100644 (file)
@@ -23,8 +23,8 @@
 #include "TVectorT.h"
 #include "TString.h"
 
-//maximum number of paticle types
-#define MAXNPAR 10
+//maximum number of array size
+#define MAXSIZE 100
 
 class AliTRDdEdxParams: public TNamed
 {
@@ -32,22 +32,22 @@ class AliTRDdEdxParams: public TNamed
   AliTRDdEdxParams(const TString name="name", const TString title="title");
   void Print(Option_t* option = "") const;
 
-  const TVectorF& GetMeanParameter(const Int_t itype) const { return GetParameter(fMeanPar, itype);}
-  const TVectorF& GetSigmaParameter(const Int_t itype) const { return GetParameter(fSigmaPar, itype);}
+  const TVectorF& GetMeanParameter( const Int_t itype, const Int_t nch, const Int_t ncls) const { return GetParameter(fMeanPar,  itype, nch, ncls);}
+  const TVectorF& GetSigmaParameter(const Int_t itype, const Int_t nch, const Int_t ncls) const { return GetParameter(fSigmaPar, itype, nch, ncls);}
 
-  void SetMeanParameter(const Int_t itype, const Int_t npar, const Float_t vals[]){ SetParameter(fMeanPar, itype, npar, vals); }
-  void SetSigmaParameter(const Int_t itype, const Int_t npar, const Float_t vals[]){ SetParameter(fSigmaPar, itype, npar, vals); } 
+  void SetMeanParameter( const Int_t itype, const Int_t nch, const Int_t ncls, const Int_t npar, const Float_t vals[]){ SetParameter(fMeanPar,  itype, nch, ncls, npar, vals); }
+  void SetSigmaParameter(const Int_t itype, const Int_t nch, const Int_t ncls, const Int_t npar, const Float_t vals[]){ SetParameter(fSigmaPar, itype, nch, ncls, npar, vals); } 
 
  private:
-  const TVectorF& GetParameter(const TVectorF par[], const Int_t itype) const;
-  void SetParameter(TVectorF par[], const Int_t itype, const Int_t npar, const Float_t vals[]);
+  const TVectorF& GetParameter(const TVectorF par[], const Int_t itype, const Int_t nch, const Int_t ncls) const;
+  void SetParameter(TVectorF par[], const Int_t itype, const Int_t nch, const Int_t ncls, const Int_t npar, const Float_t vals[]);
 
-  TVectorF fMeanPar[MAXNPAR];
-  TVectorF fSigmaPar[MAXNPAR];
+  TVectorF fMeanPar[MAXSIZE];
+  TVectorF fSigmaPar[MAXSIZE];
 
-  void CheckType(const Int_t itype, const TString tag) const;
+  Int_t GetIter(const Int_t itype, const Int_t nch, const Int_t ncls) const;
 
-  ClassDef(AliTRDdEdxParams,1);
+  ClassDef(AliTRDdEdxParams,2);
 };
 
 #endif
index 532590c..31f58bf 100644 (file)
@@ -130,20 +130,41 @@ AliTRDdEdxParams * getDefault()
   const Float_t meanpars[]={1.521e+00 , 7.294e-01 , 8.066e+00 , 2.146e-02 , 3.137e+01 , 7.160e-15 , 2.838e+00 , 1.100e+01};
   const Float_t respars[]={-4.122e-01 , 1.019e+00 , -1.319e-01};
 
-  for(Int_t ipar=0; ipar< MAXNPAR; ipar++){
-    if(ipar == AliPID::kProton){
-      const Float_t tmpproton[]={2.026e+00 , -1.462e-04 , 1.202e+00 , 1.162e-01 , 2.092e+00 , -3.018e-02 , 3.665e+00 , 3.487e-07}; 
-      defobj->SetMeanParameter(ipar, sizeof(tmpproton)/sizeof(Float_t), tmpproton);
+  for(Int_t ipar=0; ipar< 10; ipar++){
+    for(Int_t ich = 0; ich < 2; ich++){
+      for(Int_t icls = 0; icls < 2; icls++){
+
+        TVectorF tmp;
+        //!!! has to be consistent with
+        //Int_t GetIter(const Int_t itype, const Int_t nch, const Int_t ncls) const
+        //in AliTRDdEdxParams
+        const Int_t nch = ich==0? 6 : 1;
+        const Int_t ncls = icls==0? 180 : 1;
+        
+
+        if(ich==0 && icls==0){
+          if(ipar == AliPID::kProton){
+            const Float_t tmpproton[]={2.026e+00 , -1.462e-04 , 1.202e+00 , 1.162e-01 , 2.092e+00 , -3.018e-02 , 3.665e+00 , 3.487e-07}; 
+            defobj->SetMeanParameter(ipar, nch, ncls, sizeof(tmpproton)/sizeof(Float_t), tmpproton);
+          }
+          else if(ipar == AliPID::kPion || ipar ==AliPID::kElectron){       
+            const Float_t tmppe[]={1.508e+00 , 7.356e-01 , 8.002e+00 , 1.932e-02 , 3.058e+01 , 5.114e-18 , 3.561e+00 , 1.408e+01};  
+            defobj->SetMeanParameter(ipar, nch, ncls, sizeof(tmppe)/sizeof(Float_t), tmppe);
+          }
+          else{
+            defobj->SetMeanParameter(ipar, nch, ncls, sizeof(meanpars)/sizeof(Float_t), meanpars);
+          }
+        
+          defobj->SetSigmaParameter(ipar,  nch, ncls, sizeof(respars)/sizeof(Float_t), respars);
+        }
+        else{
+          //bad nch and ncls, 0-size array
+          defobj->SetMeanParameter( ipar, nch, ncls, 0, meanpars);
+          defobj->SetSigmaParameter(ipar,  nch, ncls, 0, respars);
+        }
+
+      }
     }
-    else if(ipar == AliPID::kPion || ipar ==AliPID::kElectron){       
-      const Float_t tmppe[]={1.508e+00 , 7.356e-01 , 8.002e+00 , 1.932e-02 , 3.058e+01 , 5.114e-18 , 3.561e+00 , 1.408e+01};  
-      defobj->SetMeanParameter(ipar, sizeof(tmppe)/sizeof(Float_t), tmppe);
-    }
-    else{
-      defobj->SetMeanParameter(ipar, sizeof(meanpars)/sizeof(Float_t), meanpars);
-    }
-
-    defobj->SetSigmaParameter(ipar,  sizeof(respars)/sizeof(Float_t), respars);
   }
 
   defobj->Print();