From a8da174913bdc8ead16334a85dc478aa0ec92e92 Mon Sep 17 00:00:00 2001 From: xlu Date: Mon, 11 Aug 2014 12:26:45 +0200 Subject: [PATCH 1/1] TRD dEdx OADB framework: Nch and Ncls dependence added in the OADB object --- OADB/COMMON/PID/data/TRDdEdxParams.root | Bin 2215 -> 2594 bytes STEER/STEERBase/AliTRDPIDResponse.cxx | 34 ++++++++--------- STEER/STEERBase/AliTRDdEdxParams.cxx | 47 +++++++++++++++++------- STEER/STEERBase/AliTRDdEdxParams.h | 24 ++++++------ TRD/makeTRDdEdxOADB.C | 47 +++++++++++++++++------- 5 files changed, 95 insertions(+), 57 deletions(-) diff --git a/OADB/COMMON/PID/data/TRDdEdxParams.root b/OADB/COMMON/PID/data/TRDdEdxParams.root index 474bd8bb5a75e2832141fcd133ff259721d7400d..69422ba09962f94846e6162f05d20963bd8383e4 100644 GIT binary patch delta 1911 zcmZvddpy(oAIHDjG|go$lS_uR+;0anjWo*kqRtTx14kXNoyVe$l2Cffk4_mnvZg%O@ZuGDrri#KoM81 zb|3_R%ztRp5+}=nB68Nj;fO_9U(;c;?+ z@P?vHw7w=vzu!m|(_E`^4LM$G0{@ZHS=E??dE#>g^SH3yNL`X`0I0i8cQ8zQCgO*b zPpv|#CvX(B`sXu)(U|*BqY#F<+5DK>jg=1*sZ9x=H3BN!P(60Oqql~;9ui*s&bmc6 z=s$P7GK04Q$!d1{?iJ1=x8vs*XrH=wf7KL!Bs8Y`pWw~?7=K^CXZ`Z%_|3TT(0Tbh zt9TZFOa3p#KQt#5^iR!JfY+A+c80)t!hF|&p$}9yERxiRP@A6;LZ7r9B8?oLrGOo> z&44Z;q0wsLr|Fa$+Xa?$LO`&KiN8Hvt?s4+Lm|S;?M#(f)gICSR2{Gu&(h3ka!Y28 zQx@!`Fpw(7fD%#b<(oA9P(ryoVQ7 z1V#W3x1qPtc5yWZ7ZQ#mmVGsXJEwlU>h0V6M5t7KdoR{2>F~{Hv88k-eS zp-z5Y)3~KsqM18H{B&Tcd(zC%+KTzsR0OSl;5OC=ny-z_N{!5{{3~RJtCeq2;K+KK z@jA%(=+#p@JUZRbb1`Zwd@Dp)<9lHGhJEOz?3yAft6I{xq-TecPfk-_LXmrSU@h`q ze#*ayvh}}q>q*^k$gA;k9T@$=OmM8CIYx8_+S*>y^R)yK^X#Dd(T=|KwMQ@=*v)s7 zgCX1#V+}o|oZ6$!jxDN-5iP3ejQ!N{zWXRrL2e;a{Caukit4y)<7T zIab-XS@MnUF=_okc!kq={}DM5zd)Y;o=zAfB|P*p)@lw#1h)U|tWT%PuRmwFz+o%#rawE_`Id)~H{mtR`5ut4A*C^Z6R^v-OWI`0$Tt zfeWei*w`%O=Sb_{4`=%Av7jmc1WSMm$C5aRpmT46T%Aj`TCiSOrV@N$QSUB{b(B|e zjLY8RDEU?7PGsLsb|rnZL~mKB0Qyk$m^PFjpN*lOr0hP4Y{>9QzPpYZ0guG^-iNKk z<3f*_@*1)rS5O;FN7ng(R)ssOE#@tj*m`Y`)@h!;M&p_x8(gJku6x!)$Gs4lymUSD zn|ueFO{-U5)Jz;Kd;dnv=5OzEgQb~4?A6{~n-Daq6~a*8=n9L1tn0eyU40z|3uY@e znjXD+^k$!IsK!yj`M`Uy|;J5i?f=}TJog7+s)^n;a|LfSQby3^KW-Qdz?q!b98 zO?v1n{f{`%S2BEHWcVwded+66efPQ{}i+{~12Zudmk>}pGP_dv@C`Z(P~%LJ!#XaAauYWm+Mk&c?%i~{X| zeQu29R|3F06_AIDmx#CU1&@pfkz9mMkYAoHcuVD8Ph`BEpQU_-&*l`)Uh0k{&zK|h zFp>|94ec+q`c>Y-0Ho*`NKD`weUV+ydGk541~?( zlH}fpr<{Y1x^=4KCMeNq+}6>dn#=6uP=^mf=eX6yMIN+k9t$s5Jh*#1hqTS-@Eb~3 zG%kgEMa($;wzw#}ZAgM4Ta34@(civqU&ciU&+6(ktJbx1CXHX}xqBvRE0N+xl&9=T z2gfMw!4$S!kC+r&(Jc+*C+3S}X?H%kJeuHuPW#k-F;(Z}EE zGtTag1Poz{U%+gT?e&g^1oz!1O~V&C1RZaq5{kCB(bR|y4grbA?Q38#LeWppKb_%g LOaD|?18(s@oZvUY delta 1530 zcmZ`(c{J2(82Rkg9Px@Pr+47cT?fuTW?apY#4~(SDSSI>ny2L0p-(+ z7r%NXQwzeC7n5Ny=S{hau#ZXwmHK32md&;^@T0XI!{lRP0vY-~?xtEqsJDLMzNsE2 zA_q8no*QAF6Ry!F)uz^3S?i0gFlTPMytQD3H0YlAJKqmmw^=SH=a$vCtDPo=k20xf zUyn$MS$I8?%FQn`fDo0G7IQopS6*1Ub#Al1W@W-n15uG?z8(3J9@Mp%rZs+>DgDyH z=H2#m)o^LTBOJ=)LaZ-;{7ID$eLL=@z@_@OKRBex0i&<5bhPZqS2&2pE5sf6ifu;)QpoUy#* z!v@rU1`}xzb$lfhAoH?K>ck9SMJ%O$v_`EIK7-xztm4r@n%POns?duY)`m`GkJi^- zl8rvH*QA~1|GEFer|{P8{8ql>NDXpAx|pXiZt9EX0T+(R=#wOzTAVj}bvE>-bD}&G zJ-7FX^n^6PV(sYMOS3Aol1UTy>nPbBX+yOqqJ6~hJ;D8@u~oZ#DSH-JuUAHPJouLJ z_ep)E51kz!?IcO|n+J}0bkU=Gzr1o5osjI)5qSAMZmran+$maY-Wy3V5~2Q{b-{JT zLE896CgZi>qXda|h;UMIjI(|18yjCUg);a9I_6=m{!Ej|8gtpiqi&^p#2{G6%T2;x z*YQR*zHkm{QmO=#44k&7q&y((>??#%MU^;}Q%E>kZivgbx)w|+k+3C?_NgajS?8oy z5v(JuiV7CGlF3Lvew=MK{9t3I*7n=?`vEu8vyIn7O1k2GED`16Wv^Yw`j>hyYxUF- zm>40P4FWa^-_eQbh6MLTy9VVecIP7ll<~d4rlR%Q-85u)AZ6FWB95==3zP`nHdyx4 zkC`X7+RTSk+}3+PiyfLJSdVHuB7Khy3Da_el>&!yHVMOExUCG!w57T6jK#_ZtEcb} zOz(MJ#+G};NT$X3)>_8(bHz7O&~?41j^7QEyhaTmJ*N&D(%`gQ9Yfz`0Y09wRXif0 z()8Z+)BO}#?x!tEM!VBvw)H{C#UfD;mU-8bk!p_68CU6BJG@NpAa%FUAS2!8j6sOO z^DEbh{g5Z@AKztiM6TG%4GD>G8AipK=1LjFEj- z&X+tSXyW^!2X$DG3NF&6c$7Y?qTIZoJPZ*%X9r%FT!d5uhDm))Hc!ixHY`4ySrA4eYRYFMqe2WDzOS?R_;EToLJHgOondH_up^aeNg|y%To5m(m7}ic|0@j ziyfc;@IY#o#{gYf&EH)rpFXu(L}jGMJ2A{Q+6SFtxeFc<4B6IkLra`tp@W6jCwfO=Ig9m4WX-Q=pSY?8=_Q~lm7 zK2}y`TW5P)Dvp{;A{Z}kXw~4}zb=={y5dIl^xGX33g3wC#QdZ`~9A3g%0RIC1 CcBpFr diff --git a/STEER/STEERBase/AliTRDPIDResponse.cxx b/STEER/STEERBase/AliTRDPIDResponse.cxx index 7f9794c5b98..7994707dec4 100644 --- a/STEER/STEERBase/AliTRDPIDResponse.cxx +++ b/STEER/STEERBase/AliTRDPIDResponse.cxx @@ -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(); //============================================================================================<<<<<<<<<<<<< diff --git a/STEER/STEERBase/AliTRDdEdxParams.cxx b/STEER/STEERBase/AliTRDdEdxParams.cxx index 860c953d91e..e847d9417e2 100644 --- a/STEER/STEERBase/AliTRDdEdxParams.cxx +++ b/STEER/STEERBase/AliTRDdEdxParams.cxx @@ -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; iiSetMeanParameter(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(); -- 2.43.0