From ce487a7fe3b8a370df8aded503494b3d734e0dac Mon Sep 17 00:00:00 2001 From: morsch Date: Wed, 19 Oct 2011 07:17:27 +0000 Subject: [PATCH] Updates on TRD PID Response M. Fasel --- OADB/COMMON/PID/data/TRDPIDParams.root | Bin 2958 -> 3935 bytes OADB/COMMON/PID/data/TRDPIDReferenceLQ1D.root | Bin 28213 -> 29861 bytes STEER/CMakelibSTEERBase.pkg | 1 + STEER/STEERBase/AliPIDResponse.h | 2 +- STEER/STEERBase/AliTRDPIDParams.cxx | 207 ++++++++++++++++++ STEER/STEERBase/AliTRDPIDParams.h | 73 ++++++ STEER/STEERBase/AliTRDPIDResponse.cxx | 34 +-- STEER/STEERBase/AliTRDPIDResponse.h | 8 +- STEER/STEERBaseLinkDef.h | 2 + 9 files changed, 291 insertions(+), 36 deletions(-) create mode 100644 STEER/STEERBase/AliTRDPIDParams.cxx create mode 100644 STEER/STEERBase/AliTRDPIDParams.h diff --git a/OADB/COMMON/PID/data/TRDPIDParams.root b/OADB/COMMON/PID/data/TRDPIDParams.root index 78ed8e6ae1caf698b2e3b51359b2fab36d313c35..f86b290d989f767fc587f0e9ce8b4bb91c25124c 100644 GIT binary patch delta 2402 zcma)+dpy(oAIHCDEX*c^T$U7*(`x0&H6jVeknrPoicM}uX<>1sZH$o1!rXpTGmgqB z%%z6Or8~08Ehe`jVRBF_ZR~9RIln)CfBe3W$NT&Ee7>*u^Y!|CzJI)_nv)1rG#*a? z0M0Q00D=Jk9tZ%SG|9R|Qea6HOJ6boAU`D8*XE*zv>ZzJ#!0@lOGQaZAn7CXDi?)- ziN)eeTNpyxMRSsgHBd^I;_$#YvwUe^`<9H^GKrQdGOuXvGG}*gg~$#|Rr&NS)di3T z0Hy1+c!;Tn1T5JCjsF2bX%Y~Jw2+W5rAD&5CFr1ZrIaG6|B4lhMQ#m-vO*B_A6j1H z|B40IN@JmKx4>gkbNL}!6bMBQ1p{xP!0$3k|Kj3xPN;9Ty7ScyN}N6A_I2FLD0B2I zpr?UwOGc`N6g|sQjcqzyDiM4$@uxV>21JFTrfXr)q`!Ob z-W=n}*ER1RuF-aZU|B!oZ9bSUC#+4F<1eVu0KBYg_TdNX z?m!JGUCro{_0ZSUAe^G%efMk_Y2)+!+0Q7?MW4s4H@un@#^d{f$co}6Pr+!0YwP~=Qfo_fJ?pPZPhJ`B0PBjEQesb_WKkZRnM9Agq+F!P>sGzy? zKS~vUoY2bGH2ZP}apfKP)Z9(?Hz{MeB)(M*RK|NGYy^HGWQQ}TxT64k4QXKuNv^Mo zazxyn@w>?H>Vg{ks)=Nvi1MZaU{SaB6Jh))n)?UF$A)#v|3Sbu(MT-uhgg&lXtu4R zOr0Aw$=2nf?S7-IUyCp_besALZsOFz3(9H)Bpepu?KXifb1PDef@%+9VbxeZ!0UZZo;^!AVa zHfGzCVoX7R#>kB_mMt;c0!KOIV*s;1J2twrOfWdtPQ7yZ)AyDmer)TO{4=TcaR=r< zOcr@OO=*}}^Xd+7nOJ=ENzS9!y4n|5-KBNTj+y+>Gh;;>wip zCts~sO~}+++LWt}MHn*?bJ}=(a9lhQ-tm0z2_!ZcPu(ud|gMLcMP#nS{^8D zArqIgUaSQgPZia_=OyAmW_m2^wJ7#b)vt_kQWvexWQ?$$-d)g!|5@M=+MHN0z0>c-@)b1`OUZN<=1K;gWJ;?1k1=_KoFWUP%S(n*3>JGHhb3UKeL+~TgFaS1 zi1hO2>m2_5Gn#eg(Yu>Zht%C*-`6FH8V=C|I`LllB`F>r1It~(% zvIzN)>_-bUvrTs22~+sJq_5f||5gY--|Tug!zm7)I&XFFdXJmOeiGS4W%w zeB!=`qS5Dr!%F}}KYkkPkV-unva^@Lk=b&Z;4D^mI zSC14}y>es)^jvPEOiEnwoWu@)VZsn{lr!eer01Bf@ozlCNq|qd0G0%K?YkyUEUsg7eJ-v7%IRCv+W9Bw@ie zSfWbv%miMz#Oii0tsMyxC*m1@4)$mZOSzQ$?RuLjT(oc2$Qkbi%bzOla%|&?Rek+t zhA>Jcsds4q0!;C7S4rN1Z!0>fh|)zaf;4+6mO>ny?OnSNc|mWl#u8Tf_k?bH#-7i? zDFQc9D&ytH;gTk+UF6vT!BGViH`?eZL4{*;_93x922v#~r}8ETx4a-<3vYI1`a2n{Hody)8~5axKDNQhx+cJu6I5sVV2zn%#3KdT7~TNqjL`l zQUKfAtMfCiQoPCA@_+5_)PxQIk zwSjN_3eydKrvJCYd{$K9Y`$A{gLvs?lh>uUdmxBi9M5ak m<@!%&I%khGJ_}WGJXmMH-Cy^NWn%cEKT@0=4p5Ewzx@p;?Oibd delta 1556 zcmZ`#d0f(W82%v$9)x6MI`g3ND#bICIVY52hT_>eurfhyr-!CQnVGZZPoN!YQbW=P+@!z>Ysdw( za7!(OM}nL{BVx2%L(a*~g@9VEPUH#UYfJ&gG73X1RGtT-v;fF64U1lozSU!SRhVYo zUTuY-{YzA6S7-y;q2=oHiG}Yl0AU$T<-LMCflMgC*9T5PWIKbCF#+h)-bda%Ub(Kd z=QcveDciVT2gYF_x((#ZgFrx6dmFFH&>hsc!o1WoBdvIF zA*Pzi_e8+q+xWS6!g*wQ?$(4+rhFAyn(;b@OOGZVT{E#KPtn)cM+oeNS6j5LhQ#V^ zlH*y${7ZMsTJ$#UAd}Z$t2dotkjCK*q06GbzG*}PWSj7Z-`uQ+NKpiryIEs`khr7z z_QM8l{7aWp;b_3d?ld~l=hX~|UIElLGV=l8f0TNH51@eDK;tkgdMdSFI42ZV_X_p0 z2|{GgVm`hMOT8d>sax>+PE_K;M9ey4zE*{XAK(-D7X_ztph)~YWghE+i(A~}~lbic-ybJ%C1ODR<+Xh{W zWTAIt-XsWN>(-i@B5zYr_g^Qz? zD7UH{U+Z=u=?uC|oc}iBBnxpxqmvJYc_zcX3kkS{S;! zLcX)rvc4cZ{!;~>JYg2#Ja2^_P$vnZEtMrX{q3@**^{Ntl@F!DyMJvsF^f;$=(V0X z>v(6RP0kuUlZL%2i*L7k=rbL)DBov5zkv9`D*otn`!hYt=j!Qz#LD6MvE_^0x35s;Ue|tT#q%&hhO&&=W`V^*P(yGTp{jIdsYMB)_LB1kj;l9}bs9+&1%z zZS>>~rrEM|Cz?FIEH4S2jss^EuUl6_AiymdfHo7(4aBnsWmrgIPF72XrN)LYb^414)gO2V{>{JE`Sh*B*oNx*h zj}MDdU<#|R{Q@n(o;7OM`oD{{Ajg%4n6yTkS}k=8)cNamqed+gL% Phk)_Jk^-Qj&F976Pa&%D diff --git a/OADB/COMMON/PID/data/TRDPIDReferenceLQ1D.root b/OADB/COMMON/PID/data/TRDPIDReferenceLQ1D.root index 698080e2ce9161a8771847278e4be4fdc40a0114..bdf0ddd2d925705190775002798e9ec24360f683 100644 GIT binary patch literal 29861 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 literal 28213 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%0D~4__7U$TqdFt;i#`C6Jm$zvzQewejJ^L#mF{ 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 z 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 Kg>nJHV*Y<)xM)WJ diff --git a/STEER/CMakelibSTEERBase.pkg b/STEER/CMakelibSTEERBase.pkg index 2140c2aa6a8..20e516762f7 100644 --- a/STEER/CMakelibSTEERBase.pkg +++ b/STEER/CMakelibSTEERBase.pkg @@ -61,6 +61,7 @@ set ( SRCS STEERBase/AliQA.cxx STEERBase/AliITSPidParams.cxx STEERBase/AliTRDPIDReference.cxx + STEERBase/AliTRDPIDParams.cxx STEERBase/AliPIDResponse.cxx STEERBase/AliITSPIDResponse.cxx STEERBase/AliTPCPIDResponse.cxx diff --git a/STEER/STEERBase/AliPIDResponse.h b/STEER/STEERBase/AliPIDResponse.h index e34ae654427..17a265ee2aa 100644 --- a/STEER/STEERBase/AliPIDResponse.h +++ b/STEER/STEERBase/AliPIDResponse.h @@ -120,7 +120,7 @@ private: TObjArray *fArrPidResponseMaster; //! TPC pid splines TF1 *fResolutionCorrection; //! TPC resolution correction - TObjArray *fTRDPIDParams; //! TRD PID Params + AliTRDPIDParams *fTRDPIDParams; //! TRD PID Params AliTRDPIDReference *fTRDPIDReference; //! TRD PID References UInt_t fTRDslicesForPID[2]; //! TRD PID slices diff --git a/STEER/STEERBase/AliTRDPIDParams.cxx b/STEER/STEERBase/AliTRDPIDParams.cxx new file mode 100644 index 00000000000..f0be60afbf0 --- /dev/null +++ b/STEER/STEERBase/AliTRDPIDParams.cxx @@ -0,0 +1,207 @@ +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ +// +// Container for TRD Threshold parameters stored in the OADB +// +// Author: Markus Fasel +// +#include +#include + +#include "AliLog.h" + +#include "AliTRDPIDParams.h" + +ClassImp(AliTRDPIDParams) + +const Double_t AliTRDPIDParams::kVerySmall = 1e-5; + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDParams(): + TNamed(), + fEntries(NULL) +{ + // + // Dummy constructor + // +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDParams(const char *name) : + TNamed(name, ""), + fEntries(NULL) +{ + // + // Default constructor + // + fEntries = new TSortedList; +} + +//____________________________________________________________ +AliTRDPIDParams::~AliTRDPIDParams(){ + // + // Destructor + // + delete fEntries; +} + +//____________________________________________________________ +Bool_t AliTRDPIDParams::GetThresholdParameters(Int_t ntracklets, Double_t efficiency, Double_t *params) const{ + // + // Retrieve params + // Use IsEqual definition + // + AliTRDPIDThresholds test(ntracklets, efficiency); + TObject *result = fEntries->FindObject(&test); + if(!result){ + AliDebug(1, Form("No threshold params found for %d tracklets and an electron efficiency of %f", ntracklets, efficiency)); + return kFALSE; + } + AliTRDPIDThresholds *parResult = static_cast(result); + AliDebug(1, Form("Threshold params found: NTracklets %d, Electron Efficiency %f", parResult->GetNTracklets(), parResult->GetElectronEfficiency())); + memcpy(params, parResult->GetThresholdParams(), sizeof(Double_t) * 4); + return kTRUE; +} + +//____________________________________________________________ +void AliTRDPIDParams::SetThresholdParameters(Int_t ntracklets, Double_t effMin, Double_t effMax, Double_t *params){ + // + // Store new Params in the Object + // + if(effMin > effMax){ + AliError("Min. efficiency has to be >= max. efficiency"); + return; + } + AliDebug(1, Form("Save Parameters for %d tracklets at and electron efficiency of [%f|%f]", ntracklets, effMin, effMax)); + fEntries->Add(new AliTRDPIDThresholds(ntracklets, effMin, effMax, params)); +} + +//____________________________________________________________ +void AliTRDPIDParams::Print(Option_t *) const { + printf("Available thresholds:\n"); + printf("_________________________________________\n"); + TIter objects(fEntries); + AliTRDPIDThresholds *par; + while((par = dynamic_cast(objects()))){ + printf("Number of tracklets %d, Electron efficiency %f\n", par->GetNTracklets(), par->GetElectronEfficiency()); + } +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDThresholds::AliTRDPIDThresholds(): + TObject(), + fNTracklets(0) +{ + // + // Default constructor + // + memset(fParams, 0, sizeof(Double_t) * 4); + memset(fEfficiency, 0, sizeof(Double_t) * 2); +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDThresholds::AliTRDPIDThresholds(Int_t nTracklets, Double_t effMin, Double_t effMax, Double_t *params) : + TObject(), + fNTracklets(nTracklets) +{ + // + // Default Constructor + // + fEfficiency[0] = effMin; + fEfficiency[1] = effMax; + if(params) memcpy(fParams, params, sizeof(Double_t) * 4); + else memset(fParams, 0, sizeof(Double_t) * 4); +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDThresholds::AliTRDPIDThresholds(Int_t nTracklets, Double_t eff, Double_t *params) : + TObject(), + fNTracklets(nTracklets) +{ + // + // Constructor used to find object in sorted list + // + fEfficiency[0] = fEfficiency[1] = eff; + if(params) memcpy(fParams, params, sizeof(Double_t) * 4); + else memset(fParams, 0, sizeof(Double_t) * 4); +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDThresholds::AliTRDPIDThresholds(const AliTRDPIDThresholds &ref) : + TObject(ref), + fNTracklets(ref.fNTracklets) +{ + // + // Copy constructor + // + memcpy(fParams, ref.fParams, sizeof(Double_t) * 4); + memcpy(fEfficiency, ref.fEfficiency, sizeof(Double_t) * 2); +} + +//____________________________________________________________ +AliTRDPIDParams::AliTRDPIDThresholds &AliTRDPIDParams::AliTRDPIDThresholds::operator=(const AliTRDPIDThresholds &ref){ + // + // Assignment operator + // + TObject::operator=(ref); + + fNTracklets = ref.fNTracklets; + memcpy(fEfficiency, ref.fEfficiency, sizeof(Double_t) * 2); + memcpy(fParams, ref.fParams, sizeof(Double_t) * 4); + return *this; +} + +//____________________________________________________________ +Int_t AliTRDPIDParams::AliTRDPIDThresholds::Compare(const TObject *ref) const{ + // + // Compares two objects + // Order: + // First compare number of tracklets, if they are equal compare electron efficiency + // + const AliTRDPIDThresholds *refObj = static_cast(ref); + if(fNTracklets < refObj->GetNTracklets()) return -1; + else if(fNTracklets > refObj->GetNTracklets()) return 1; + else{ + if(fEfficiency[1] < refObj->GetElectronEfficiency(0)) return -1; + else if(fEfficiency[0] > refObj->GetElectronEfficiency(1)) return 1; + else return 0; + } +} + +//____________________________________________________________ +Bool_t AliTRDPIDParams::AliTRDPIDThresholds::IsEqual(const TObject *ref) const { + // + // Check for equality + // Tracklets and Efficiency are used + // + const AliTRDPIDThresholds *refObj = dynamic_cast(ref); + if(!refObj) return kFALSE; + Bool_t eqNTracklets = fNTracklets == refObj->GetNTracklets(); + Bool_t eqEff = kFALSE; + Bool_t hasRange = TMath::Abs(fEfficiency[1] - fEfficiency[0]) > kVerySmall; + Bool_t hasRangeRef = TMath::Abs(refObj->GetElectronEfficiency(1) - refObj->GetElectronEfficiency(0)) > kVerySmall; + if(hasRange && hasRangeRef){ + // Both have ranges, check if they match + eqEff = TMath::Abs(fEfficiency[0] - refObj->GetElectronEfficiency(0)) < kVerySmall && TMath::Abs(fEfficiency[1] - refObj->GetElectronEfficiency(1)) < kVerySmall; + } else if(hasRange){ + // this object has ranges, check if the efficiency of ref is inside the range + eqEff = refObj->GetElectronEfficiency(0) >= fEfficiency[0] && refObj->GetElectronEfficiency(0) < fEfficiency[1]; + } else { + // ref has ranges, check if this is in range + eqEff = fEfficiency[0] >= refObj->GetElectronEfficiency(0) && fEfficiency[0] < refObj->GetElectronEfficiency(1); + } + + return eqNTracklets && eqEff; +} diff --git a/STEER/STEERBase/AliTRDPIDParams.h b/STEER/STEERBase/AliTRDPIDParams.h new file mode 100644 index 00000000000..bbadcae79bd --- /dev/null +++ b/STEER/STEERBase/AliTRDPIDParams.h @@ -0,0 +1,73 @@ +/************************************************************************** +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ +// +// Container for TRD thresholds stored in the OADB +// +#ifndef ALITRDPIDPARAMS_H +#define ALITRDPIDPARAMS_H + +#ifndef ROOT_TNamed +#include +#endif + +class TSortedList; + +class AliTRDPIDParams : public TNamed{ + public: + AliTRDPIDParams(); + AliTRDPIDParams(const char *name); + virtual ~AliTRDPIDParams(); + virtual void Print(Option_t *) const; + + Bool_t GetThresholdParameters(Int_t ntracklets, Double_t efficiency, Double_t *params) const; + void SetThresholdParameters(Int_t ntracklets, Double_t effMin, Double_t effMax, Double_t *params); + + private: + class AliTRDPIDThresholds : public TObject{ + public: + AliTRDPIDThresholds(); + AliTRDPIDThresholds(Int_t nTracklets, Double_t effMin, Double_t effMax, Double_t *params = NULL); + AliTRDPIDThresholds(Int_t nTracklets, Double_t eff, Double_t *params = NULL); + AliTRDPIDThresholds(const AliTRDPIDThresholds &); + AliTRDPIDThresholds &operator=(const AliTRDPIDThresholds &); + virtual ~AliTRDPIDThresholds() {} + + Int_t GetNTracklets() const { return fNTracklets; } + Double_t GetElectronEfficiency(Int_t step = 0) const { if(step == 0) return fEfficiency[0]; else return fEfficiency[1]; } + const Double_t *GetThresholdParams() const { return fParams; } + + virtual Bool_t IsSortable() const { return kTRUE; } + virtual Int_t Compare(const TObject *ref) const; + virtual Bool_t IsEqual(const TObject *ref) const; + + private: + Int_t fNTracklets; // + Double_t fEfficiency[2]; // + Double_t fParams[4]; // + + ClassDef(AliTRDPIDThresholds, 1); + }; + + static const Double_t kVerySmall; + + AliTRDPIDParams(const AliTRDPIDParams &); + AliTRDPIDParams &operator=(const AliTRDPIDParams &); + + TSortedList *fEntries; // + + ClassDef(AliTRDPIDParams, 1); +}; +#endif + diff --git a/STEER/STEERBase/AliTRDPIDResponse.cxx b/STEER/STEERBase/AliTRDPIDResponse.cxx index e9256a145cd..edff1a18725 100644 --- a/STEER/STEERBase/AliTRDPIDResponse.cxx +++ b/STEER/STEERBase/AliTRDPIDResponse.cxx @@ -33,10 +33,10 @@ #include #include #include -#include #include "AliLog.h" +#include "AliTRDPIDParams.h" #include "AliTRDPIDReference.h" #include "AliTRDPIDResponse.h" @@ -262,39 +262,13 @@ Bool_t AliTRDPIDResponse::IdentifiedAsElectron(Int_t nTracklets, const Double_t return kTRUE; } Double_t probEle = like[AliPID::kElectron]/(like[AliPID::kElectron] + like[AliPID::kPion]); - const TVectorD *params = GetParams(nTracklets, level); - if(!params){ + Double_t params[4]; + if(!fkPIDParams->GetThresholdParameters(nTracklets, level, params)){ AliError("No Params found for the given configuration"); return kTRUE; } - Double_t threshold = 1. - (*params)[0] - (*params)[1] * p - (*params)[2] * TMath::Exp(-(*params)[3] * p); + Double_t threshold = 1. - params[0] - params[1] * p - params[2] * TMath::Exp(-params[3] * p); if(probEle > TMath::Max(TMath::Min(threshold, 0.99), 0.2)) return kTRUE; // truncate the threshold upperwards to 0.999 and lowerwards to 0.2 and exclude unphysical values return kFALSE; } -//____________________________________________________________ -const TVectorD* AliTRDPIDResponse::GetParams(Int_t ntracklets, Double_t level) const { - // - // returns the threshold for a given number of tracklets and a given efficiency level - //tby definition the lower of step is given. - // - if(ntracklets > 6 || ntracklets <=0) return NULL; - TObjArray * entry = dynamic_cast(fkPIDParams->At(ntracklets - 1)); - if(!entry) return NULL; - - TObjArray*cut = NULL; - TVectorF *effLevel = NULL; const TVectorD *parameters = NULL; - Float_t currentLower = 0.; - TIter cutIter(entry); - while((cut = dynamic_cast(cutIter()))){ - effLevel = static_cast(cut->At(0)); - if((*effLevel)[0] > currentLower && (*effLevel)[0] <= level){ - // New Lower entry found - parameters = static_cast(cut->At(1)); - currentLower = (*effLevel)[0]; - } - } - AliDebug(2, Form("Taking params for %d tracklets and %f electron Efficiency\n", ntracklets, currentLower)); - - return parameters; -} diff --git a/STEER/STEERBase/AliTRDPIDResponse.h b/STEER/STEERBase/AliTRDPIDResponse.h index cb462a4eb4d..53d90de4a7e 100644 --- a/STEER/STEERBase/AliTRDPIDResponse.h +++ b/STEER/STEERBase/AliTRDPIDResponse.h @@ -28,10 +28,9 @@ #include "AliPID.h" #endif -#include - class TObjArray; class AliVTrack; +class AliTRDPIDParams; class AliTRDPIDReference; class AliTRDPIDResponse : public TObject { public: @@ -66,7 +65,7 @@ class AliTRDPIDResponse : public TObject { void SetOwner(); void SetPIDmethod(ETRDPIDMethod m) {fPIDmethod=m;} void SetGainNormalisationFactor(Double_t gainFactor) { fGainNormalisationFactor = gainFactor; } - void SetPIDParams(const TObjArray * params) { fkPIDParams = params; } + void SetPIDParams(const AliTRDPIDParams * params) { fkPIDParams = params; } Bool_t Load(const Char_t *filename = NULL, const Char_t *refName = "RefTRDLQ1D"); Bool_t Load(const AliTRDPIDReference *ref) { fkPIDReference = ref; return kTRUE; } @@ -76,10 +75,9 @@ class AliTRDPIDResponse : public TObject { private: Bool_t CookdEdx(Int_t nSlice, const Double_t * const in, Double_t *out) const; Double_t GetProbabilitySingleLayer(Int_t species, Double_t plocal, Double_t dEdx) const; - const TVectorD * GetParams(Int_t ntracklets, Double_t level) const; const AliTRDPIDReference *fkPIDReference; // PID References - const TObjArray *fkPIDParams; // PID Params + const AliTRDPIDParams *fkPIDParams; // PID Params Double_t fGainNormalisationFactor; // Gain normalisation factor ETRDPIDMethod fPIDmethod; // PID method selector diff --git a/STEER/STEERBaseLinkDef.h b/STEER/STEERBaseLinkDef.h index a17a7b4fcbc..8710cba474d 100644 --- a/STEER/STEERBaseLinkDef.h +++ b/STEER/STEERBaseLinkDef.h @@ -85,6 +85,8 @@ #pragma link C++ class AliQA+; #pragma link C++ class AliTRDPIDReference+; +#pragma link C++ class AliTRDPIDParams+; +#pragma link C++ class AliTRDPIDParams::AliTRDPIDThresholds+; #pragma link C++ class AliITSPidParams+; #pragma link C++ class AliPIDResponse+; #pragma link C++ class AliITSPIDResponse+; -- 2.31.1