]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding static function for the PID visulaization and coparisons
authormivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Jun 2013 14:48:32 +0000 (14:48 +0000)
committermivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Jun 2013 14:48:32 +0000 (14:48 +0000)
STEER/STEERBase/AliTPCPIDResponse.cxx
STEER/STEERBase/AliTPCPIDResponse.h

index 367d8cc2e9115e42dfd91811eaea8623e529de8a..6ae7f8fb728f4c038180d87768ec971c92bf7b44 100644 (file)
 #include "AliVTrack.h"
 #include "AliTPCPIDResponse.h"
 #include "AliTPCdEdxInfo.h"
+#include "TFile.h"
+#include "TSpline.h"
 
 ClassImp(AliTPCPIDResponse);
 
+
+AliTPCPIDResponse *AliTPCPIDResponse::fgInstance =0;
+
 const char* AliTPCPIDResponse::fgkGainScenarioName[fgkNumberOfGainScenarios+1]=
 {
   "", //default - no name
@@ -91,6 +96,7 @@ AliTPCPIDResponse::AliTPCPIDResponse():
 
   
   ResetMultiplicityCorrectionFunctions();
+  fgInstance=this;
 }
 /*TODO remove?
 //_________________________________________________________________________
@@ -145,6 +151,7 @@ AliTPCPIDResponse::~AliTPCPIDResponse()
   
   delete fCorrFuncSigmaMultiplicity;
   fCorrFuncSigmaMultiplicity = 0x0;
+  if (fgInstance==this) fgInstance=0;
 }
 
 
@@ -1492,3 +1499,30 @@ Bool_t AliTPCPIDResponse::TrackApex(const AliVTrack* track, Float_t magField, Do
   position[2]=0.;
   return kTRUE;
 }
+
+Double_t AliTPCPIDResponse::EvaldEdxSpline(Double_t bg,Int_t entry){
+  //
+  // Evaluate the dEdx response for given entry
+  //
+  TSpline * spline = (TSpline*)fSplineArray.At(entry);
+  if (spline) return spline->Eval(bg);
+  return 0;
+}
+
+
+Bool_t   AliTPCPIDResponse::RegisterSpline(const char * name, Int_t index){
+  //
+  // register spline to be used for drawing comparisons
+  // 
+  TFile * fTPCBB = TFile::Open("$ALICE_ROOT/OADB/COMMON/PID/data/TPCPIDResponse.root");
+  TObjArray  *arrayTPCPID= (TObjArray*)  fTPCBB->Get("TPCPIDResponse");
+  if (fSplineArray.GetEntriesFast()<index) fSplineArray.Expand(index*2);
+  TSpline3 *spline=0;
+  if (arrayTPCPID){
+    spline = (TSpline3*)arrayTPCPID->FindObject(name);
+    if (spline) fSplineArray.AddAt(spline->Clone(),index);    
+  }
+  delete arrayTPCPID;
+  delete fTPCBB;
+  return (spline!=0);
+}
index 9bf2639a6b7e54cbcd188e6c7017beb582841a46..6e845284c675e87da5acf52290d5275fcd295ede 100644 (file)
@@ -205,6 +205,10 @@ public:
   Float_t  GetRes0(ETPCgainScenario s)  const { return fRes0[s];  }
   Float_t  GetResN2(ETPCgainScenario s) const { return fResN2[s]; }
 
+  Bool_t   RegisterSpline(const char * name, Int_t index);
+  Double_t EvaldEdxSpline(Double_t bg,Int_t entry);
+  static   Double_t SEvaldEdx(Double_t bg,Int_t entry){ return (fgInstance!=0)? fgInstance->EvaldEdxSpline(bg,entry):0;};
+
 protected:
   Double_t GetExpectedSignal(const AliVTrack* track,
                              AliPID::EParticleType species,
@@ -230,7 +234,9 @@ protected:
   
   Double_t GetSigmaPar1(const AliVTrack *track, AliPID::EParticleType species,
                         Double_t dEdx, const TSpline3* responseFunction) const;
-  
+  //
+  // function for numberical debugging 0 registed splines can be used in the TFormula and tree visualizations
+  //
 private:
   Float_t fMIP;          // dEdx for MIP
   Float_t fRes0[fgkNumberOfGainScenarios];  // relative dEdx resolution  rel sigma = fRes0*sqrt(1+fResN2/npoint)
@@ -268,9 +274,14 @@ private:
   TF1* fCorrFuncMultiplicityTanTheta; //! Function to correct the additional tanTheta dependence of the multiplicity dependence of the TPC dEdx
   TF1* fCorrFuncSigmaMultiplicity; //! Function to correct for the multiplicity dependence of the TPC dEdx resolution
 
+  //
+  //
+  static AliTPCPIDResponse*   fgInstance;     //! Instance of this class (singleton implementation)
+  TObjArray                   fSplineArray;   //array of registered splines
   ClassDef(AliTPCPIDResponse,6)   // TPC PID class
 };
 
+
 #endif