From 3176641e658e7d123ec8d62d3f66f8645a69af13 Mon Sep 17 00:00:00 2001 From: prino Date: Wed, 19 Nov 2008 09:54:39 +0000 Subject: [PATCH] Module dependent SDD Time Zero in AliITSresponseSDD, needed for proper reconstruction of real data (F. Prino) --- ITS/AliITSClusterFinderV2SDD.cxx | 2 +- ITS/AliITSresponseSDD.cxx | 60 +++++++++++++++++++- ITS/AliITSresponseSDD.h | 48 +++++++++++++++- ITS/Calib/RespSDD/Run0_999999999_v0_s0.root | Bin 2377 -> 2456 bytes ITS/StoreRespSDD.C | 7 ++- 5 files changed, 110 insertions(+), 7 deletions(-) diff --git a/ITS/AliITSClusterFinderV2SDD.cxx b/ITS/AliITSClusterFinderV2SDD.cxx index a15622ef3f7..d3553909c6b 100644 --- a/ITS/AliITSClusterFinderV2SDD.cxx +++ b/ITS/AliITSClusterFinderV2SDD.cxx @@ -227,7 +227,7 @@ FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nzBins, if(s==1) zAnode += GetSeg()->NpzHalf(); // right side has anodes from 256. to 511. Float_t zdet = GetSeg()->GetLocalZFromAnode(zAnode); Float_t driftTimeUncorr = GetSeg()->GetDriftTimeFromTb(timebin)+jitter*rsdd->GetCarlosRXClockPeriod(); - Float_t driftTime=driftTimeUncorr-rsdd->GetTimeOffset(); + Float_t driftTime=driftTimeUncorr-rsdd->GetTimeZero(fModule); Float_t driftPathMicron = cal->GetDriftPath(driftTime,zAnode); const Double_t kMicronTocm = 1.0e-4; Float_t xdet=(driftPathMicron-GetSeg()->Dx())*kMicronTocm; // xdet is negative diff --git a/ITS/AliITSresponseSDD.cxx b/ITS/AliITSresponseSDD.cxx index 914c9afb61c..883b5e37572 100644 --- a/ITS/AliITSresponseSDD.cxx +++ b/ITS/AliITSresponseSDD.cxx @@ -27,6 +27,7 @@ #include #include "AliITSresponseSDD.h" +#include const Float_t AliITSresponseSDD::fgkTimeOffsetDefault = 54.30; const Float_t AliITSresponseSDD::fgkADC2keVDefault = 5.243; @@ -39,6 +40,61 @@ TObject(), fTimeOffset(fgkTimeOffsetDefault), fADC2keV(fgkADC2keVDefault){ // default constructor + for(Int_t i=0; i0) + Int_t minMod,maxMod; + if(lay==3){ + minMod=1; + maxMod=3; + if(lad>kNLaddersLay3){ + AliError(Form("Ladder number %d out of range",lad)); + return; + } + }else if(lay==4){ + minMod=1; + maxMod=4; + if(lad>kNLaddersLay4){ + AliError(Form("Ladder number %d out of range",lad)); + return; + } + }else{ + AliError(Form("Layer number %d out of range",lay)); + return; + } + for(Int_t iMod=minMod; iMod<=maxMod; iMod++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(lay,lad,iMod); + SetModuleTimeZero(modIndex,tzero); + } +} +//_________________________________________________________________________ +void AliITSresponseSDD::SetHalfLadderCTimeZero(Int_t lay, Int_t lad, Float_t tzero){ + // Sets time Zero for all modules of a ladder on side C (Z<0) + Int_t minMod,maxMod; + if(lay==3){ + minMod=4; + maxMod=6; + if(lad>kNLaddersLay3){ + AliError(Form("Ladder number %d out of range",lad)); + return; + } + }else if(lay==4){ + minMod=5; + maxMod=8; + if(lad>kNLaddersLay4){ + AliError(Form("Ladder number %d out of range",lad)); + return; + } + }else{ + AliError(Form("Layer number %d out of range",lay)); + return; + } + for(Int_t iMod=minMod; iMod<=maxMod; iMod++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(lay,lad,iMod); + SetModuleTimeZero(modIndex,tzero); + } } - - diff --git a/ITS/AliITSresponseSDD.h b/ITS/AliITSresponseSDD.h index e4df365e258..71b7b73558e 100644 --- a/ITS/AliITSresponseSDD.h +++ b/ITS/AliITSresponseSDD.h @@ -6,6 +6,7 @@ #include +#include /* $Id$ */ @@ -21,9 +22,42 @@ class AliITSresponseSDD : public TObject { AliITSresponseSDD(); virtual ~AliITSresponseSDD(){}; + virtual void SetSideATimeZero(Float_t tzero){ + SetLayer3ATimeZero(tzero); + SetLayer4ATimeZero(tzero); + } + virtual void SetSideCTimeZero(Float_t tzero){ + SetLayer3CTimeZero(tzero); + SetLayer4CTimeZero(tzero); + } + virtual void SetLayer3ATimeZero(Float_t tzero){ + for(Int_t iLad=1; iLad<=kNLaddersLay3; iLad++) SetHalfLadderATimeZero(3,iLad,tzero); + } + virtual void SetLayer3CTimeZero(Float_t tzero){ + for(Int_t iLad=1; iLad<=kNLaddersLay3; iLad++) SetHalfLadderCTimeZero(3,iLad,tzero); + } + virtual void SetLayer4ATimeZero(Float_t tzero){ + for(Int_t iLad=1; iLad<=kNLaddersLay4; iLad++) SetHalfLadderATimeZero(4,iLad,tzero); + } + virtual void SetLayer4CTimeZero(Float_t tzero){ + for(Int_t iLad=1; iLad<=kNLaddersLay4; iLad++) SetHalfLadderCTimeZero(4,iLad,tzero); + } + virtual void SetHalfLadderATimeZero(Int_t lay, Int_t lad, Float_t tzero); + virtual void SetHalfLadderCTimeZero(Int_t lay, Int_t lad, Float_t tzero); + virtual void SetModuleTimeZero(Int_t modIndex, Float_t tzero){ + if(modIndexkNSPDmods+kNSDDmods) AliError(Form("SDD module number %d out of range",modIndex)); + fTimeZero[modIndex-kNSPDmods]=tzero; + } virtual void SetTimeOffset(Float_t to){fTimeOffset = to;} virtual Float_t GetTimeOffset()const {return fTimeOffset;} + virtual Float_t GetTimeZero(Int_t modIndex){ + if(modIndexkNSPDmods+kNSDDmods){ + AliError(Form("SDD module number %d out of range",modIndex)); + return 0.; + } + return fTimeZero[modIndex-kNSPDmods]; + } static Float_t DefaultTimeOffset() {return fgkTimeOffsetDefault;} virtual void SetADC2keV(Float_t conv){fADC2keV=conv;} @@ -35,19 +69,27 @@ class AliITSresponseSDD : public TObject { protected: + enum {kNSPDmods = 240}; + enum {kNSDDmods = 260}; + enum {kNLaddersLay3 = 14}; + enum {kNLaddersLay4 = 22}; + + static const Float_t fgkTimeOffsetDefault; // default for fTimeOffset static const Float_t fgkADC2keVDefault; // default for fADC2keV static const Float_t fgkCarlosRXClockPeriod; // clock period for CarlosRX - Float_t fTimeOffset; // Time offset due to electronic delays - Float_t fADC2keV; // Conversion factor from ADC to keV + Float_t fTimeOffset; // Time offset due to electronic delays + // --> obsolete, kept for backw. comp. + Float_t fTimeZero[kNSDDmods]; // Time Zero for each module + Float_t fADC2keV; // Conversion factor from ADC to keV private: AliITSresponseSDD(const AliITSresponseSDD &ob); // copy constructor AliITSresponseSDD& operator=(const AliITSresponseSDD & /* source */); // ass. op. - ClassDef(AliITSresponseSDD,15) + ClassDef(AliITSresponseSDD,16) }; #endif diff --git a/ITS/Calib/RespSDD/Run0_999999999_v0_s0.root b/ITS/Calib/RespSDD/Run0_999999999_v0_s0.root index f94a3f6677fc15740aa61c457058626ce8e1727a..bd71133761ac73f8675055e55f8cea8b26d9ce64 100644 GIT binary patch delta 1973 zcmZWq3pms3AOD%=E^A65muVr!TqY(R=9;L3Vkj9Vnb0J;ty!dwssG&Ca!eZSB9e!idQc|Y&_e7{{#hO%u;baX5L zbl(5~01p7N3^CNi@ij3d#CW~qp8zB#f&T;~wu0((xna9TQzVYqzkSg%pM^QNQ_S1} zZ1ZS`Kfkleis2pGUbi9MV{VIxAr{{rGSUC9@z2SBW(kFDEiiIBKPOH?pWF)oNH7pD zaT$jboX733*T#W@rKMDwx9mPKa;8uUtSgR;eTo47C{Jq21Ta^w=1qn=D_3n zAPD9I7;$M|O<2*UQW+VOf<|&j#JNiTKImqv^@_XjU*UJ**Xz^U>aWWgU@|$GA6fdQ zNHo_99SAGcH%Dq!-J(#CR_2W;y(e%BCm8rbrliLKN%P+Q+Bm6uvQmJ$o}K82pW>TB zNI#si+qQe#WdIL8?H+zPR^e1^OlVMKXihpvoy-9PB#799c5HXFy3@Wb-pSzRZwDq0 zK2kBYIj+U&*M-`Tdme5$)8#en*ig_foyNV|F~kuLeXCuDR52uvYTKQ)vmeh$8wl|x zPIPFAA8k|e`EB_L%evX~8Z%Y3j{CwjHOc0!^UppqP|sX*a$zV3#S5o&RU79YSg3oF zpRd>m5AEG!`0G{OCQLtWEqv1kow^n-sZiL$$2lC zITRvBq&RJ5NQf&oRIKyQyCt+IYmxBXozB%mx}KFvex__1Ws%eJ*Lpn)Oe}Ws5oFXP zTl&!&y5B)HZkbAj<>4Y6HU=icqc(=~v0VV>;#>OrsRU2?y@N+J=ja3lGFGERc5nvL zr#v;>V`5u>BCk9at26bEF{>QVp6r!0MN5``ae*}?6F=pK{Ct~`cdZpGdP*FA$Pcty z)0nhvNUA(sS-t9F8zKagc|&?4LpxR$rEjppI>*Py6IEm!xLfCQpC=dZ#lANxLS$z) z-=f+j%E%Wqe>neIe`g(8gJgd7U7k-p^bkKS)!S@=S&p_Unk+3vKYb~ga7@J9qilv7 zA+R~M^+~n;bFj2FR88fjAp4^sO#&~*tZW6m4IYDk#^hvMs++e@vt(jCm6+7r z=uWX~Hz|v3JYZ>dGY5=-O zzci`+`W|ORt0#i7%FPrunzNTsaM4G;Ev`amciagGuDy6BO7^~R^=C+*O`@jw zt5o+~ZX!*W8M<4FF$%BVpN!<9xKF(TLskyC8URasqel0GRd|{ll(Mftkih{Co zD2wSICVmeO=qNtNNl4qgSyOse=rH#34mO8%O2FCJT|`*pu~b6BA*EUe5svxbpX(OR z=ieyw{S+~Bl*AV(Q^(dj6wHWx!R*{|u2=Be@;7`wpM1ksUDQ*tzzkKvj6<2eweJl~ z(*ntz>U+0*bhb_yZKdDc8gcksQXp9BDPK%L^(OwZJ~A1EZ-ViLV|bmtj)uQX8s_Iz zOyc$Py`7#Yczz{C5Ms;T66NK7E6~%QC*-=Rg;vQKfhMv=!;yxM|6u7+i4=&-J>-Tp z%DiNz*CzYJbc4HV$tZKn(b~qGe(89g5taOV+o|?>|CwOof2VbuPRjkUsQ`qvc^zR9d#C$)_JO=x>r zp3Y1|Q%@NL75^5MwFL_j9xD^T+Ter;D!;?a*ZeK9XDBMy7YH zy#^}iDREuT*>|K!7K*=O2SjQk;Z2(hlFuKSU<-~ZVf6E`HcNww9!ks9`tx&QzG delta 1880 zcmZWqcTm&m7X5`l2$H3Q78L10X#td`v=E3(k)l58CPsuGGjs1B_s~T8;3gpiLMQ0-TBY|kqch9-z z&W(|E=knx*Kw5vGXKB=BNjNUY6_;J$L_fYd$3+qLnEk!P8&VdUs;wLD9Cw|^-tdN#;qVfu0xMK80#J9a$`9K%Nrr$Hnd2e6kUNGY z@921X%oS_66CQ32H+Ajw5KoX&O8yWY*T7&g=f~&fV@S6dgUpyhc?hI!c5rHp&Z3Nq zl0*x&1kf3ImB z8oQjT#y9v6*kIK?8*}P=t#YlPDb{aZ2O+I3McxEiX$Vcemy8&=<=fISghgu!u7Tmn z64}|2Sj>u-L!=pVO94F>Piz+~j5*s96k&F9;x1I-Mc2o(J9&T7b(Y&jZAQ8OkPJZI z*X?VJ6|9&@CvpYtM%sT(R9ua-iJ~sKWPb*q6S^mkD|RiXZ!z4{=4ZNOs`Nl(fd>f- zU+PG*RrTW^B9y<*B1(X?Yw+E(&SI+b0TCG?h~bxt-A-f4`{F?hc}udV^8^CbG#Y5* z2Il`TovF5Q6wmcVgQS%Qfu4p+i=MQ|LVZ7S{1$zYIQ!2#VBwdxGf6xrZ5UbCNr}r& zHVkJSv*~UpWhO)tA)(`Tq37JC27a7BZ6eT|t$V<`r0|=ZuGO?|N;9}OH7Wy^F0s2d zT>MZu6)Ekaqgr#U)!Xzf%D}qTq#Kd%kWk^vE`9Ox?RK4x1{IX>I#;83l%FAuB19U} z$N@0olk>(Rl@mzDsgb$@k2t^kl@`mD*pX@0FqknwBaTbwk~d@#6%Dx{!PsRI)1~~9 z&;l}u{yhG^{@%$&yZUHfThm-uB3pG4zu9vFe5Q?S{JbP0_D0!Df1kVN1It@Jav158 z4%SM$xo={J%#m{@6faO+C1PqU7F!pMaa)O?x5! zx|LGF{S|(P<%&+XOg63RJQ+rVdS`tgbn%_`gZZ6)yLYqD#_!uBo4t#Wu%%)4tGTZ` zjfl~}DUgwx@6`LCCV!#Tngx`g-`pu`i6x{PSP|W+K=|;w571jwy4>Z1N4IJCf469`P*j7{&139hKyX z*Q@)iZ;iOF{!Emv!>zBlDF z{IH3sIsXz5o2>pMe~gwkr3YU7)TB{Y;LB9>3A=T$E@M@($);zBY_g~BuI11fT;B^2!?ZFvUBk~DD@~Yjq*5{~+GM`D;(xIWDL#MqRt;3jO&m293 z6;V&i7S6AoG207k4c;Okw`WGS2?6`V#^#4tc3cmy_{T{9Qs;KfxFHJR5(IrxFSVhi zJ!;F?rz}2rc&^X<>8)ueIbvBW0iR)8tF!)5AbN*;!6+ldw8&ef18$Gfubi&tik`Vp zgOGp*Yj1VQR>}vhj2KcTm+LQD7W{a>M+%L!#kDItVAKeLc4E(3r1HZV<*ME^^YR~) z4wvX*37VMh8IAD-|4vQjacx`a4MqLs=5;^Ut2}v^#nRKp4}gbz#3fC8e5FA$b>Xc= z8jRn*IeLSwj;n+(8rqg7MtQbi50et3j8YtvVAPT#^)m&NjAK~Rr)=edbQ9G~ z(&M7~(7iE47R>#C&o2x1Z6#pj)mULPR-rN}uYN#qhWBEscU=lwDDiSsm%_84+qY;} zy;r_dN@l4cB;HJ7t@RBxF@eeUH%VSetTimeOffset(54.3); + rd->SetSideATimeZero(54.3); + rd->SetSideCTimeZero(54.3); +// rd->SetLayer3ATimeZero(235); +// rd->SetLayer3CTimeZero(287); +// rd->SetLayer4ATimeZero(202); +// rd->SetLayer4CTimeZero(230); AliCDBManager::Instance()->GetDefaultStorage()->Put(rd, idRespSDD, md); } -- 2.43.0