X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSOnlineSDDBase.cxx;h=4dfdf52c4213fae6c0ffde2694bc45efac80e0a0;hb=f10094af4cc0bf7d3bcbe3005faf6d55dd105367;hp=683b62e4b6b034192cf724ab2479a9360e821c3a;hpb=d8303ac823b56e97c20df5f5f36f29431cb8afb4;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSOnlineSDDBase.cxx b/ITS/AliITSOnlineSDDBase.cxx index 683b62e4b6b..4dfdf52c421 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,7 +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++; - const Int_t kTimeBins=fLastGoodTB-fFirstGoodTB+1; + 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); + Float_t cbin=hrawd->GetBinContent(itb+1,ian+1); + sum[ian]+=cbin; + sumQ+=cbin*cbin; + cnt++; } - sum[ian]/=(Float_t)kTimeBins; - sumQ/=(Float_t)kTimeBins; + sum[ian]/=(Float_t)cnt; + sumQ/=(Float_t)cnt; fSumBaseline[ian]+=sum[ian]; fSumRawNoise[ian]+=sumQ; - if(fNEvents==1) ValidateAnodes(); } - + if(fNEvents==1) ValidateAnodes(); Float_t *cmnEven = new Float_t[kTimeBins]; Float_t *cmnOdd = new Float_t[kTimeBins]; @@ -121,7 +136,7 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){ Float_t cmnCoef=cmnOdd[itb]; if(ian%2==0) cmnCoef=cmnEven[itb]; num+=(hrawd->GetBinContent(itb+1,ian+1)-sum[ian])*cmnCoef; - den+=TMath::Power(cmnCoef,2); + den+=cmnCoef*cmnCoef; } if(den!=0) fSumCMN[ian]+=num/den; } @@ -130,9 +145,23 @@ void AliITSOnlineSDDBase::AddEvent(TH2F* hrawd){ delete [] cmnOdd; } //______________________________________________________________________ +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; } @@ -140,7 +169,7 @@ Float_t AliITSOnlineSDDBase::GetMinimumBaseline() const { } //______________________________________________________________________ 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;ian63) corr=63; // only 6 bits in jtag for correction - fprintf(outf,"%d %d %11.6f %d %d %11.6f %11.6f %11.6f\n",ian,IsAnodeGood(ian),GetAnodeBaseline(ian),(Int_t)basMin,corr,GetAnodeRawNoise(ian),GetAnodeCommonMode(ian),corrnoise); + Int_t corr=(Int_t)(bas-finalVal+0.5); + if(corr>fgkMaxCorr) 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); }