X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSOnlineSDDInjectors.cxx;h=4e8bae94197cbd5b28792da49a4e7af347bb1618;hb=9b5048fe034a3c6e2aaf93c9dc36bbfea418ca13;hp=135d074733d3089326bdc7284ea4ba472917dcc4;hpb=06bb3583e3e9db7234eddd67146703047a858775;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSOnlineSDDInjectors.cxx b/ITS/AliITSOnlineSDDInjectors.cxx index 135d074733d..4e8bae94197 100644 --- a/ITS/AliITSOnlineSDDInjectors.cxx +++ b/ITS/AliITSOnlineSDDInjectors.cxx @@ -12,7 +12,9 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ +#include #include "AliITSOnlineSDDInjectors.h" +#include "AliLog.h" #include #include #include @@ -35,22 +37,25 @@ const Float_t AliITSOnlineSDDInjectors::fgkDefaultMinSpeed = 5.5; const Float_t AliITSOnlineSDDInjectors::fgkDefaultMaxSpeed = 9.0; const Float_t AliITSOnlineSDDInjectors::fgkDefaultMaxErr = 1.5; const Int_t AliITSOnlineSDDInjectors::fgkDefaultPolOrder = 3; -const UShort_t AliITSOnlineSDDInjectors::fgkDefaultTbMin[kInjLines] = {20,90,170}; -const UShort_t AliITSOnlineSDDInjectors::fgkDefaultTbMax[kInjLines] = {50,160,240}; +const Float_t AliITSOnlineSDDInjectors::fgkDefaultTimeStep = 50.; +const UShort_t AliITSOnlineSDDInjectors::fgkDefaultTbMin[kInjLines] = {10,50,100}; +const UShort_t AliITSOnlineSDDInjectors::fgkDefaultTbMax[kInjLines] = {20,70,120}; //______________________________________________________________________ -AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors():AliITSOnlineSDD(),fHisto(),fTbZero(0.),fParam(),fPolOrder(0),fMinDriftSpeed(0.),fMaxDriftSpeed(0.),fMaxDriftSpeedErr(0.),fLowThreshold(0.),fHighThreshold(0.),fFirstPadForFit(0),fLastPadForFit(0),fPadStatusCutForFit(0) +AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors():AliITSOnlineSDD(),fHisto(),fTbZero(0.),fRMSTbZero(0.),fNEvents(0),fParam(),fPolOrder(0),fMinDriftSpeed(0.),fMaxDriftSpeed(0.),fMaxDriftSpeedErr(0.),fLowThreshold(0.),fHighThreshold(0.),fFirstPadForFit(0),fLastPadForFit(0),fPadStatusCutForFit(0),fTimeStep(0.),fUseTimeZeroSignal(kFALSE) { // default constructor SetPositions(); SetDefaults(); + SetTimeStep(fgkDefaultTimeStep); } //______________________________________________________________________ -AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid):AliITSOnlineSDD(nddl,ncarlos,sid),fHisto(),fTbZero(0.),fParam(),fPolOrder(0),fMinDriftSpeed(0.),fMaxDriftSpeed(0.),fMaxDriftSpeedErr(0.),fLowThreshold(0.),fHighThreshold(0.),fFirstPadForFit(0),fLastPadForFit(0),fPadStatusCutForFit(0) +AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid):AliITSOnlineSDD(nddl,ncarlos,sid),fHisto(),fTbZero(0.),fRMSTbZero(0.),fNEvents(0),fParam(),fPolOrder(0),fMinDriftSpeed(0.),fMaxDriftSpeed(0.),fMaxDriftSpeedErr(0.),fLowThreshold(0.),fHighThreshold(0.),fFirstPadForFit(0),fLastPadForFit(0),fPadStatusCutForFit(0),fTimeStep(0.),fUseTimeZeroSignal(kFALSE) { // standard constructor SetPositions(); SetDefaults(); + SetTimeStep(fgkDefaultTimeStep); } //______________________________________________________________________ AliITSOnlineSDDInjectors::~AliITSOnlineSDDInjectors(){ @@ -75,8 +80,8 @@ void AliITSOnlineSDDInjectors::SetDefaults(){ //______________________________________________________________________ void AliITSOnlineSDDInjectors::SetPositions(){ // - Float_t xLinFromCenterUm[kInjLines]={31860.,17460.,660.}; - Float_t xAnodeFromCenterUm=35085; + Double_t xLinFromCenterUm[kInjLines]={31860.,17460.,660.}; + Double_t xAnodeFromCenterUm=35085; for(Int_t i=0;i1){ + Double_t rms=GetRMSDriftSpeed(i); + if(rms>0.) fDriftSpeedErr[i]=rms/TMath::Sqrt(fNEvents); + } + } FitDriftSpeedVsAnode(); } //______________________________________________________________________ @@ -158,26 +202,42 @@ TGraphErrors* AliITSOnlineSDDInjectors::GetSelectedDriftSpeedGraph(Int_t minAcce } //______________________________________________________________________ void AliITSOnlineSDDInjectors::CalcTimeBinZero(){ - // - Float_t tzero=0.,intCont=0.; + // Get time zero from trigger signal + Double_t tzero=0.,intCont=0.,rmsPeak=0.; + Bool_t isTbUsed[256]; + Int_t nTbUsed=0; + for(Int_t i=0;i<256;i++) isTbUsed[i]=0; for(Int_t ian=0;ianGetBinContent(itb,ian+1); + Double_t cont=fHisto->GetBinContent(itb,ian+1); + Double_t contm1=fHisto->GetBinContent(itb+1,ian+1); + Double_t contp1=fHisto->GetBinContent(itb-1,ian+1); if(cont>fLowThreshold){ - tzero+=cont*float(itb); - intCont+=cont; + if(contm1>fHighThreshold || cont>fHighThreshold || contp1>fHighThreshold){ + tzero+=cont*float(itb); + rmsPeak+=cont*float(itb)*float(itb); + intCont+=cont; + if(!isTbUsed[itb]){ + isTbUsed[itb]=1; + ++nTbUsed; + } + } } } } - if(intCont>0) fTbZero=tzero/intCont; + if(intCont>0){ + fTbZero=tzero/intCont; + fRMSTbZero=TMath::Sqrt(rmsPeak/intCont-fTbZero*fTbZero); + } + if(nTbUsed==1) fRMSTbZero=0.5; } //______________________________________________________________________ void AliITSOnlineSDDInjectors::FitDriftSpeedVsAnode(){ // fits the anode dependence of drift speed with a polynomial function const Int_t kNn=fPolOrder+1; - Float_t **mat = new Float_t*[kNn]; - for(Int_t i=0; i < kNn; i++) mat[i] = new Float_t[kNn]; - Float_t *vect = new Float_t[kNn]; + Double_t **mat = new Double_t*[kNn]; + for(Int_t i=0; i < kNn; i++) mat[i] = new Double_t[kNn]; + Double_t *vect = new Double_t[kNn]; for(Int_t k1=0;k10 && GetInjPadStatus(jpad)>fPadStatusCutForFit){ vect[k1]+=fDriftSpeed[jpad]*TMath::Power(x,k1)/TMath::Power(fDriftSpeedErr[jpad],2); if(k1==0) npts++; @@ -200,7 +260,7 @@ void AliITSOnlineSDDInjectors::FitDriftSpeedVsAnode(){ } if(npts1){ - Float_t slope=(sumWEI*sumXY-sumY*sumX)/(sumWEI*sumXX-sumX*sumX); - Float_t eslope=TMath::Sqrt(sumWEI/(sumWEI*sumXX-sumX*sumX)); - if(slope!=0){ - vel=1./slope*10000./25.;// micron/ns - evel=eslope/slope/slope*10000./25.;// micron/ns + if(fUseTimeZeroSignal){ + sumY+=fTbZero/fRMSTbZero/fRMSTbZero; + sumX+=0.; + sumXX+=0.; + sumYY+=fTbZero*fTbZero/fRMSTbZero/fRMSTbZero; + sumXY+=0.; + sumWEI+=1./fRMSTbZero/fRMSTbZero; } + slope=(sumWEI*sumXY-sumY*sumX)/(sumWEI*sumXX-sumX*sumX); + eslope=TMath::Sqrt(sumWEI/(sumWEI*sumXX-sumX*sumX)); } - if(npt==1){ - Float_t slope=(sumY-tzero)/sumX; - Float_t eslope=erry/sumX; - if(slope!=0){ - vel=1./slope*10000./25.;// micron/ns - evel=eslope/slope/slope*10000./25.;// micron/ns - } + + Double_t vel=0,evel=0; + if(slope!=0. && fTimeStep>0.){ + vel=1./slope*10000./fTimeStep;// micron/ns + evel=eslope/slope/slope*10000./fTimeStep;// micron/ns } if(vel>fMaxDriftSpeed||velfMaxDriftSpeedErr){ vel=0.; @@ -366,10 +432,12 @@ void AliITSOnlineSDDInjectors::FindGoodInjectors(){ for(Int_t jjj=fTbMin[jlin];jjjGetBinContent(jjj,ian+1); Float_t c2=fHisto->GetBinContent(jjj+1,ian+1); - Float_t c3=fHisto->GetBinContent(jjj+2,ian+1); - if(c1>fLowThreshold && c2>fHighThreshold && c3>fLowThreshold){ - fGoodInj[jpad][jlin]=1; - break; + // Float_t c3=fHisto->GetBinContent(jjj+2,ian+1); + if(c1>fLowThreshold && c2>fLowThreshold){ + if(c1>fHighThreshold || c2>fHighThreshold){ + fGoodInj[jpad][jlin]=1; + break; + } } } } @@ -382,41 +450,41 @@ void AliITSOnlineSDDInjectors::FindCentroids(){ Int_t ian=GetAnodeNumber(jpad); for(Int_t jlin=0;jlinGetBinContent(jjj,ian+1); + Double_t cont=fHisto->GetBinContent(jjj,ian+1); if(cont>maxcont){ maxcont=cont; ilmax=jjj; } } - Float_t intCont=0; + Double_t intCont=0; Int_t jjj=ilmax; while(1){ - Float_t cont=fHisto->GetBinContent(jjj,ian+1); + Double_t cont=fHisto->GetBinContent(jjj,ian+1); if(contGetBinContent(jjj,ian+1); + Double_t cont=fHisto->GetBinContent(jjj,ian+1); if(cont0){ fCentroid[jpad][jlin]/=intCont; - fRMSCentroid[jpad][jlin]=TMath::Sqrt(fRMSCentroid[jpad][jlin]/intCont-fCentroid[jpad][jlin]*fCentroid[jpad][jlin]); + fRMSCentroid[jpad][jlin]=TMath::Sqrt(fRMSCentroid[jpad][jlin]/intCont-fCentroid[jpad][jlin]*fCentroid[jpad][jlin])/TMath::Sqrt(intCont); } else{ fCentroid[jpad][jlin]=0.; @@ -459,3 +527,29 @@ void AliITSOnlineSDDInjectors::WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_ fprintf(outf,"\n"); fclose(outf); } +//______________________________________________________________________ +Bool_t AliITSOnlineSDDInjectors::WriteToROOT(TFile *fil) const { + // + if(fil==0){ + AliWarning("Invalid pointer to ROOT file"); + return kFALSE; + } + Char_t hisnam[20]; + fil->cd(); + sprintf(hisnam,"hdrsp%02dc%02ds%d",fDDL,fCarlos,fSide); + TH1F hdsp(hisnam,"",kInjPads,-0.5,kInjPads-0.5); + if(fNEvents==0){ + AliWarning("Zero analyzed events"); + return kFALSE; + } + + for(Int_t i=0;i0.) err=rms/TMath::Sqrt(fNEvents); + hdsp.SetBinError(i+1,err); + } + hdsp.Write(); + return kTRUE; +}