X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSClusterFinderV2SPD.cxx;h=75e1dac79628d09b0a23128996a6159526f68d62;hb=01ef1bd446eccc961da25099a569486cacd722d7;hp=7bc163403971e4b0709212bd6d431041fa9e2c84;hpb=d6d232ba51d5d08a951bf4f981e1ede32aaa921d;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSClusterFinderV2SPD.cxx b/ITS/AliITSClusterFinderV2SPD.cxx index 7bc16340397..75e1dac7962 100644 --- a/ITS/AliITSClusterFinderV2SPD.cxx +++ b/ITS/AliITSClusterFinderV2SPD.cxx @@ -21,6 +21,7 @@ //////////////////////////////////////////////////////////////////////////// +#include "AliITSCalibrationSPD.h" #include "AliITSClusterFinderV2SPD.h" #include "AliITSRecPoint.h" #include "AliITSgeomTGeo.h" @@ -30,10 +31,13 @@ #include "AliITSRawStreamSPD.h" #include #include "AliITSdigitSPD.h" +#include "AliITSFOSignalsSPD.h" +#include "AliITSRecPointContainer.h" ClassImp(AliITSClusterFinderV2SPD) -AliITSClusterFinderV2SPD::AliITSClusterFinderV2SPD(AliITSDetTypeRec* dettyp):AliITSClusterFinderV2(dettyp), +//__________________________________________________________________________ +AliITSClusterFinderV2SPD::AliITSClusterFinderV2SPD(AliITSDetTypeRec* dettyp):AliITSClusterFinder(dettyp), fLastSPD1(AliITSgeomTGeo::GetModuleIndex(2,1,1)-1), fNySPD(256), fNzSPD(160), @@ -62,36 +66,71 @@ fHlSPD(3.48){ } } - - +//__________________________________________________________________________ void AliITSClusterFinderV2SPD::FindRawClusters(Int_t mod){ - //Find clusters V2 SetModule(mod); FindClustersSPD(fDigits); } - -void AliITSClusterFinderV2SPD::RawdataToClusters(AliRawReader* rawReader, TClonesArray** clusters){ - //------------------------------------------------------------ +//__________________________________________________________________________ +void AliITSClusterFinderV2SPD::RawdataToClusters(AliRawReader* rawReader){ + //------------------------------------------------------------ // This function creates ITS clusters from raw data //------------------------------------------------------------ rawReader->Reset(); AliITSRawStreamSPD inputSPD(rawReader); - FindClustersSPD(&inputSPD, clusters); + FindClustersSPD(&inputSPD); } - +//__________________________________________________________________________ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,TClonesArray* clusters,Int_t maxBins,Int_t nzbins,Int_t iModule,Bool_t rawdata){ //Cluster finder for SPD (from digits and from rawdata) + static AliITSRecoParam *repa = NULL; + if(!repa){ + repa = (AliITSRecoParam*) AliITSReconstructor::GetRecoParam(); + if(!repa){ + repa = AliITSRecoParam::GetHighFluxParam(); + AliWarning("Using default AliITSRecoParam class"); + } + } const TGeoHMatrix *mT2L=AliITSgeomTGeo::GetTracking2LocalMatrix(iModule); + + if (repa->GetSPDRemoveNoisyFlag()) { + // Loop on noisy pixels and reset them + AliITSCalibrationSPD *cal = + (AliITSCalibrationSPD*) fDetTypeRec->GetCalibrationModel(iModule); + for(Int_t ipix = 0; ipixGetNrBad(); ipix++){ + Int_t row, col; + cal->GetBadPixel(ipix,row,col); + //PH printf(" module %d row %d col %d \n",iModule,row,col); + Int_t index = (row+1) * nzbins + (col+1); + + bins[index].SetQ(0); + bins[index].SetMask(0xFFFFFFFE); + } + } + + if (repa->GetSPDRemoveDeadFlag()) { + // Loop on dead pixels and reset them + AliITSCalibrationSPD *cal = + (AliITSCalibrationSPD*) fDetTypeRec->GetSPDDeadModel(iModule); + if (cal->IsBad()) return 0; // if all ladder is dead, return to save time + for(Int_t ipix = 0; ipixGetNrBad(); ipix++){ + Int_t row, col; + cal->GetBadPixel(ipix,row,col); + Int_t index = (row+1) * nzbins + (col+1); + bins[index].SetQ(0); + bins[index].SetMask(0xFFFFFFFE); + } + } Int_t nclu=0; for(Int_t iBin =0; iBin < maxBins;iBin++){ if(bins[iBin].IsUsed()) continue; - Int_t nBins = 0; + Int_t nBins = 0; Int_t idxBins[200]; FindCluster(iBin,nzbins,bins,nBins,idxBins); if (nBins == 200){ @@ -119,6 +158,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T zmin=dig->GetCoord1(); zmax=zmin; } + //PH if(iModule == 24 || iModule == 25) printf("\n"); for (Int_t idx = 0; idx < nBins; idx++) { Int_t iy; Int_t iz; @@ -130,6 +170,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T AliITSdigitSPD* dig = (AliITSdigitSPD*)digits->UncheckedAt(idxBins[idx]); iy = dig->GetCoord2(); iz = dig->GetCoord1(); + //if(iModule == 24 || iModule == 25) printf(" || iy %d iz %d in Module %d \n",iy,iz,iModule); } if (ymin > iy) ymin = iy; if (ymax < iy) ymax = iy; @@ -156,11 +197,11 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T Int_t idz=3; // Switch the unfolding OFF/ON - if(!AliITSReconstructor::GetRecoParam()->GetUseUnfoldingInClusterFinderSPD()) { + if(!repa->GetUseUnfoldingInClusterFinderSPD()) { idy=ymax-ymin+1; idz=zmax-zmin+1; } - + for(Int_t iiz=zmin; iiz<=zmax;iiz+=idz){ for(Int_t iiy=ymin;iiy<=ymax;iiy+=idy){ @@ -183,7 +224,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T if(TMath::Abs(iz-iiz)>0.75*idz) continue; } ndigits++; - Float_t qBin; + Float_t qBin=0.; if(rawdata) qBin = bins[idxBins[idx]].GetQ(); if(!rawdata){ AliITSdigitSPD* dig = (AliITSdigitSPD*)digits->UncheckedAt(idxBins[idx]); @@ -194,6 +235,7 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T q+= qBin; }// for idx if(ndigits==0) continue; + y /= q; z /= q; y -= fHwSPD; @@ -214,12 +256,15 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T Int_t info[3] = {ymax-ymin+1,zmax-zmin+1,fNlayer[iModule]}; if(!rawdata){ AliITSRecPoint cl(milab,hit,info); + cl.SetType(nBins); fDetTypeRec->AddRecPoint(cl); } else{ Int_t label[4]={milab[0],milab[1],milab[2],milab[3]}; + AliITSRecPoint cl(label, hit,info); + cl.SetType(nBins); new (clusters->AddrAt(nclu)) - AliITSRecPoint(label, hit,info); + AliITSRecPoint(cl); } nclu++; }// for iiy @@ -228,16 +273,15 @@ Int_t AliITSClusterFinderV2SPD::ClustersSPD(AliBin* bins, TClonesArray* digits,T return nclu; } - - - - -void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input, - TClonesArray** clusters) +//__________________________________________________________________________ +void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStreamSPD* input) { //------------------------------------------------------------ - // Actual SPD cluster finder for raw data + // SPD cluster finder for raw data (this method is called once per event) + // Now also fills fast-or fired map //------------------------------------------------------------ + + AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance(); Int_t nClustersSPD = 0; Int_t kNzBins = fNzSPD + 2; Int_t kNyBins = fNySPD + 2; @@ -254,8 +298,8 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input, // when all data from a module was read, search for clusters if (bins) { - clusters[iModule] = new TClonesArray("AliITSRecPoint"); - Int_t nClusters = ClustersSPD(bins,0,clusters[iModule],kMaxBin,kNzBins,iModule,kTRUE); + TClonesArray* clusters = rpc->UncheckedGetClusters(iModule); + Int_t nClusters = ClustersSPD(bins,0,clusters,kMaxBin,kNzBins,iModule,kTRUE); nClustersSPD += nClusters; bins = NULL; } @@ -265,24 +309,38 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(AliITSRawStream* input, memcpy(binsSPD,binsSPDInit,sizeof(AliBin)*kMaxBin); } - // fill the current digit into the bins array - Int_t index = (input->GetCoord2()+1) * kNzBins + (input->GetCoord1()+1); - bins[index].SetIndex(index); - bins[index].SetMask(1); - bins[index].SetQ(1); + if (next && bins) { + // fill the current digit into the bins array + Int_t index = (input->GetCoord2()+1) * kNzBins + (input->GetCoord1()+1); + bins[index].SetIndex(index); + bins[index].SetQ(1); + bins[index].SetMask(1); + } } delete [] binsSPDInit; delete [] binsSPD; - Info("FindClustersSPD", "found clusters in ITS SPD: %d", nClustersSPD); + AliDebug(1,Form("found clusters in ITS SPD: %d", nClustersSPD)); + + + // Fill the FastOr fired map + for (UInt_t eq=0; eq<20; eq++) { + for (UInt_t hs=0; hs<6; hs++) { + for (UInt_t chip=0; chip<10; chip++) { + if (input->GetFastOrSignal(eq,hs,chip)) { + fDetTypeRec->SetFastOrFiredMapOnline(eq,hs,chip); + } + } + } + } + } - - - +//__________________________________________________________________________ void AliITSClusterFinderV2SPD::FindClustersSPD(TClonesArray *digits) { //------------------------------------------------------------ - // Actual SPD cluster finder + // SPD cluster finder for digits (this method is called for each module) + // Now also fills the fast-or fired map //------------------------------------------------------------ @@ -292,21 +350,36 @@ void AliITSClusterFinderV2SPD::FindClustersSPD(TClonesArray *digits) { Int_t ndigits=digits->GetEntriesFast(); AliBin *bins=new AliBin[kMAXBIN]; - Int_t k; - AliITSdigitSPD *d=0; - for (k=0; kUncheckedAt(k); - Int_t i=d->GetCoord2()+1; //y - Int_t j=d->GetCoord1()+1; - Int_t index=i*kNzBins+j; - bins[index].SetIndex(k); - bins[index].SetMask(1); + Int_t idig; + AliITSdigitSPD *digit=0; + for (idig=0; idigUncheckedAt(idig); + Int_t i=digit->GetCoord2()+1; //y + Int_t j=digit->GetCoord1()+1; + Int_t index=i*kNzBins+j; + + bins[index].SetIndex(idig); + bins[index].SetQ(1); + bins[index].SetMask(1); } + Int_t nClustersSPD = ClustersSPD(bins,digits,0,kMAXBIN,kNzBins,fModule,kFALSE); delete [] bins; - Info("FindClustersSPD", "found clusters in ITS SPD: %d", nClustersSPD); + AliDebug(1,Form("found clusters in ITS SPD: %d", nClustersSPD)); + + // Fill the FastOr fired map + AliITSFOSignalsSPD* foSignals = fDetTypeRec->GetFOSignals(); + if (foSignals) { + UInt_t eq = AliITSRawStreamSPD::GetOnlineEqIdFromOffline(fModule); + UInt_t hs = AliITSRawStreamSPD::GetOnlineHSFromOffline(fModule); + for(UInt_t ch=0; ch<5; ch++) { + UInt_t chip = AliITSRawStreamSPD::GetOnlineChipFromOffline(fModule,ch*32); + if (foSignals->GetSignal(eq,hs,chip)) { + fDetTypeRec->SetFastOrFiredMapOnline(eq,hs,chip); + } + } + } + } - -