X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSOnlineSDDBase.cxx;h=15d619da88980d472529b5608be21fbe89584523;hb=09ed5594a8b7db55b0a7fe70f025be11aefad2f3;hp=c317890ec98bffc53f0dad795c807ff53828acfb;hpb=348f80b79a97a16e83f66c1e06869caa95584920;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSOnlineSDDBase.cxx b/ITS/AliITSOnlineSDDBase.cxx index c317890ec98..15d619da889 100644 --- a/ITS/AliITSOnlineSDDBase.cxx +++ b/ITS/AliITSOnlineSDDBase.cxx @@ -25,10 +25,13 @@ // // /////////////////////////////////////////////////////////////////// +/* $Id$ */ + +const Int_t AliITSOnlineSDDBase::fgkMaxCorr=63; // 6 but correction ClassImp(AliITSOnlineSDDBase) //______________________________________________________________________ - AliITSOnlineSDDBase::AliITSOnlineSDDBase():AliITSOnlineSDD(),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.) + AliITSOnlineSDDBase::AliITSOnlineSDDBase():AliITSOnlineSDD(),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fGoldenBaseline(0.),fLowThrFact(0.),fHighThrFact(0.) { // default constructor Reset(); @@ -37,9 +40,11 @@ ClassImp(AliITSOnlineSDDBase) SetMinRawNoise(); SetMaxRawNoise(); SetNSigmaNoise(); + SetGoldenBaselineValue(); + SetZeroSuppThresholds(); } //______________________________________________________________________ - AliITSOnlineSDDBase::AliITSOnlineSDDBase(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.) +AliITSOnlineSDDBase::AliITSOnlineSDDBase(Int_t nddl, Int_t ncarlos, Int_t sid):AliITSOnlineSDD(nddl,ncarlos,sid),fNEvents(0),fMinBaseline(0.),fMaxBaseline(0.),fMinRawNoise(0.),fMaxRawNoise(0.),fNSigmaNoise(0.),fGoldenBaseline(0.),fLowThrFact(0.),fHighThrFact(0.) { // default constructor Reset(); @@ -48,6 +53,8 @@ ClassImp(AliITSOnlineSDDBase) SetMinRawNoise(); SetMaxRawNoise(); SetNSigmaNoise(); + SetGoldenBaselineValue(); + SetZeroSuppThresholds(); } //______________________________________________________________________ AliITSOnlineSDDBase::~AliITSOnlineSDDBase(){ @@ -55,6 +62,7 @@ AliITSOnlineSDDBase::~AliITSOnlineSDDBase(){ } //______________________________________________________________________ void AliITSOnlineSDDBase::Reset(){ + // reset all counters fNEvents=0; for(Int_t i=0;ifMaxBaseline || GetAnodeBaseline(ian)fMaxRawNoise || GetAnodeRawNoise(ian)fNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0; + Float_t basel=GetAnodeBaseline(ian); + Float_t rawn=GetAnodeRawNoise(ian); + Float_t ratio=0.; + if(rawn>0) ratio=basel/rawn; + if(basel>fMaxBaseline || baselfMaxRawNoise || rawnfNSigmaNoise*CalcMeanRawNoise()) fGoodAnode[ian]=0; + else if(ratio<3.) fGoodAnode[ian]=0; } } //______________________________________________________________________ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){ - // + // analyzes one event and adds its ontribution to the various counters + fNEvents++; - Float_t tbmax=(Float_t)hrawd->GetNbinsX(); + const Int_t kTimeBins=fLastGoodTB+1; Float_t sum[fgkNAnodes]; for(Int_t ian=0;ianGetBinContent(itb+1,ian+1); - sumQ+=TMath::Power(hrawd->GetBinContent(itb+1,ian+1),2); + Int_t cnt=0; + for(Int_t itb=fFirstGoodTB;itb<=fLastGoodTB;itb++){ + Float_t cbin=hrawd->GetBinContent(itb+1,ian+1); + sum[ian]+=cbin; + sumQ+=cbin*cbin; + cnt++; + } + if(cnt != 0){ + sum[ian]/=(Float_t)cnt; + sumQ/=(Float_t)cnt; } - sum[ian]/=tbmax; - sumQ/=tbmax; fSumBaseline[ian]+=sum[ian]; fSumRawNoise[ian]+=sumQ; - if(fNEvents==1) ValidateAnodes(); } + if(fNEvents==1) ValidateAnodes(); - - const Int_t itbmax=int(tbmax); - Float_t *cmnEven = new Float_t[itbmax]; - Float_t *cmnOdd = new Float_t[itbmax]; - for(Int_t itb=0;itbGetBinContent(itb+1,ian+1)-sum[ian]; countOdd++; } - cmnEven[itb]=sumEven/countEven; - cmnOdd[itb]=sumOdd/countOdd; + if(countEven>0) cmnEven[itb]=sumEven/countEven; + if(countOdd>0) cmnOdd[itb]=sumOdd/countOdd; } for(Int_t ian=0;ianGetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef; - den+=TMath::Power(cmnCoef,2); + den+=cmnCoef*cmnCoef; } if(den!=0) fSumCMN[ian]+=num/den; } @@ -129,8 +147,31 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){ delete [] cmnOdd; } //______________________________________________________________________ -Float_t AliITSOnlineSDDBase::CalcMeanRawNoise(){ - // +void AliITSOnlineSDDBase::GetMinAndMaxBaseline(Float_t &basMin, Float_t &basMax) const { + // fills mininum and maximum baseline values + basMin=1008.; + basMax=0.; + for(Int_t ian=0;ian0 && bas < basMin) basMin=bas; + if(bas>0 && bas > basMax) basMax=bas; + } +} +//______________________________________________________________________ +Float_t AliITSOnlineSDDBase::GetMinimumBaseline() const { + // returns anode with minum baseline value in hybrid + Float_t basMin=1008.; + for(Int_t ian=0;ian0 && bas < basMin) basMin=bas; + } + return basMin; +} +//______________________________________________________________________ +Float_t AliITSOnlineSDDBase::CalcMeanRawNoise() const{ + // compute mean value of raw noise Float_t meanns=0.; Int_t cnt=0; for(Int_t ian=0;ianfGoldenBaseline && basMaxfGoldenBaseline+fgkMaxCorr) finalVal=basMax-fgkMaxCorr; + + Float_t avNoise=CalcMeanRawNoise(); + Int_t thrL=(Int_t)(finalVal+fLowThrFact*avNoise+0.5); + Int_t thrH=(Int_t)(finalVal+fHighThrFact*avNoise+0.5); + if(CountGoodAnodes()==0) thrH=255; + + outfilnam.Form("SDDbase_step1_ddl%02dc%02d_sid%d.data",fDDL,fCarlos,fSide); + FILE* outf=fopen(outfilnam.Data(),"w"); + fprintf(outf,"%d\n",thrH); + fprintf(outf,"%d\n",thrL); Float_t corrnoise=2.; for(Int_t ian=0;ianfgkMaxCorr) corr=fgkMaxCorr; // only 6 bits in jtag for correction + if(corr<0) corr=0; // avoid negative numbers + fprintf(outf,"%d %d %11.6f %d %d %11.6f %11.6f %11.6f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),(Int_t)finalVal,corr,GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise); } fclose(outf); }