X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSresponseSDD.cxx;h=b56e192259748cee1f171ab51ff07f5bdf850800;hb=caadc8fb9473aa141b450956573539aa0079a840;hp=d4975403176a4eef8bda1f15c02ba0716fb270f5;hpb=4952f440b26b0f0d63ac458277a72658cc52c4d4;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSresponseSDD.cxx b/ITS/AliITSresponseSDD.cxx index d4975403176..b56e1922597 100644 --- a/ITS/AliITSresponseSDD.cxx +++ b/ITS/AliITSresponseSDD.cxx @@ -27,99 +27,142 @@ #include #include "AliITSresponseSDD.h" +#include -const Int_t AliITSresponseSDD::fgkMaxAdcDefault = 1024; -const Float_t AliITSresponseSDD::fgkDynamicRangeDefault = 132.; -const Float_t AliITSresponseSDD::fgkfChargeLossDefault = 0; -const Float_t AliITSresponseSDD::fgkDiffCoeffDefault = 3.23; -const Float_t AliITSresponseSDD::fgkDiffCoeff1Default = 30.; -const TString AliITSresponseSDD::fgkParam1Default = "same"; -const TString AliITSresponseSDD::fgkParam2Default = "same"; -const TString AliITSresponseSDD::fgkOptionDefault = "1D"; -const Float_t AliITSresponseSDD::fgkDriftSpeedDefault = 7.3; -const Float_t AliITSresponseSDD::fgkTimeOffsetDefault = 55.07; -const Float_t AliITSresponseSDD::fgkADC2keVDefault = 5.243; -const Float_t AliITSresponseSDD::fgkNsigmasDefault = 3.; -const Int_t AliITSresponseSDD::fgkNcompsDefault = 121; - +const Float_t AliITSresponseSDD::fgkTimeOffsetDefault = 54.30; +const Float_t AliITSresponseSDD::fgkADC2keVDefault = 3.34; +const Float_t AliITSresponseSDD::fgkChargevsTimeDefault = 0.00355; +const Float_t AliITSresponseSDD::fgkADCvsDrTimeDefault = 0.0101; +const Float_t AliITSresponseSDD::fgkCarlosRXClockPeriod = 25.; ClassImp(AliITSresponseSDD) //_________________________________________________________________________ AliITSresponseSDD::AliITSresponseSDD(): -AliITSresponse(), -fJitterError(0.), -fDynamicRange(0.), -fChargeLoss(0.), -fTimeOffset(fgkTimeOffsetDefault), -fADC2keV(fgkADC2keVDefault), -fElectronics(0), -fMaxAdc(fgkMaxAdcDefault), -fNsigmas(fgkNsigmasDefault), -fGaus(), -fNcomps(0), -fBitComp(kFALSE), -fOption(), -fParam1(), -fParam2() { +TObject(), + fTimeOffset(fgkTimeOffsetDefault), + fADC2keV(fgkADC2keVDefault), + fChargevsTime(fgkChargevsTimeDefault) +{ // default constructor - fGaus = 0; - SetDiffCoeff(fgkDiffCoeffDefault,fgkDiffCoeff1Default); - // SetNLookUp(fgkNcompsDefault); - - SetJitterError(); - SetElectronics(); - SetDynamicRange(fgkDynamicRangeDefault); - SetChargeLoss(fgkfChargeLossDefault); - SetParamOptions(fgkParam1Default.Data(),fgkParam2Default.Data()); - SetZeroSupp(fgkOptionDefault); - SetDo10to8(); - SetOutputOption(); + 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); + } } - - -//______________________________________________________________________ -Int_t AliITSresponseSDD::Convert8to10(Int_t signal) const { - // Undo the lossive 10 to 8 bit compression. - // code from Davide C. and Albert W. - - if(Do10to8()){ // kTRUE if the compression is active - if (signal < 0 || signal > 255) { - Warning("Convert8to10","out of range signal=%d",signal); - return 0; - } // end if signal <0 || signal >255 - - if (signal < 128) return signal; - if (signal < 192) { - if (TMath::Odd(signal)) return (128+((signal-128)<<1)); - else return (128+((signal-128)<<1)+1); - } // end if signal < 192 - if (signal < 224) { - if (TMath::Odd(signal)) return (256+((signal-192)<<3)+3); - else return (256+((signal-192)<<3)+4); - } // end if signal < 224 - if (TMath::Odd(signal)) return (512+((signal-224)<<4)+7); - return (512+((signal-224)<<4)+8); +//_________________________________________________________________________ +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); + } +} +//_________________________________________________________________________ +void AliITSresponseSDD::PrintChargeCalibrationParams() const{ + // Dump charge calibration parameters + + printf("ADC vs. drift time corr=%f\n",GetChargevsTime()); + printf("-------------------------------------\n"); + printf("Layer 3\n"); + for(Int_t ilad=1; ilad<=14; ilad++){ + for(Int_t idet=1; idet<=6;idet++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(3,ilad,idet); + Float_t tz=GetADCtokeV(modIndex); + printf("%7.2f ",tz); + } + printf("\n"); } - else { - return signal; + printf("\n"); + printf("Layer 4\n"); + for(Int_t ilad=1; ilad<=22; ilad++){ + for(Int_t idet=1; idet<=8;idet++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(4,ilad,idet); + Float_t tz=GetADCtokeV(modIndex); + printf("%7.2f ",tz); + } + printf("\n"); + } +} +//_________________________________________________________________________ +void AliITSresponseSDD::PrintTimeZeroes() const{ + // Dump time zero values + + printf("Layer 3\n"); + for(Int_t ilad=1; ilad<=14; ilad++){ + for(Int_t idet=1; idet<=6;idet++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(3,ilad,idet); + Float_t tz=GetTimeZero(modIndex); + printf("%7.2f ",tz); + } + printf("\n"); } + printf("\n"); + printf("Layer 4\n"); + for(Int_t ilad=1; ilad<=22; ilad++){ + for(Int_t idet=1; idet<=8;idet++){ + Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(4,ilad,idet); + Float_t tz=GetTimeZero(modIndex); + printf("%7.2f ",tz); + } + printf("\n"); + } + } +//_________________________________________________________________________ +void AliITSresponseSDD::PrintVdriftCorerctions() const{ + // Dump corrections to vdrift -//________________________________________________________________________ -void AliITSresponseSDD::SetNLookUp(Int_t p1){ - // Set number of sigmas over which cluster disintegration is performed - fNcomps=p1; - if (fGaus) delete fGaus; - fGaus = new TArrayF(fNcomps+1); - for(Int_t i=0; i<=fNcomps; i++) { - Float_t x = -fNsigmas + (2.*i*fNsigmas)/(fNcomps-1); - (*fGaus)[i] = exp(-((x*x)/2)); + for(Int_t iMod=240; iMod<500; iMod++){ + printf("Module %d dVleft=%f dVright=%f\n",iMod,GetDeltaVDrift(iMod,0),GetDeltaVDrift(iMod,1)); } }