X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSClusterFinderV2SDD.cxx;h=21a4880d2bb1b81d75b87936897875314369534f;hb=070fc781673a42b9fbb4b146fbbe46f060fb76f4;hp=c06bf78a9579997f03f55881f087b86c3a419cd8;hpb=ad98389f0bcad69c3d95cde5f76f2c8ed6f15141;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSClusterFinderV2SDD.cxx b/ITS/AliITSClusterFinderV2SDD.cxx index c06bf78a957..21a4880d2bb 100644 --- a/ITS/AliITSClusterFinderV2SDD.cxx +++ b/ITS/AliITSClusterFinderV2SDD.cxx @@ -28,6 +28,7 @@ #include #include "AliITSClusterFinderV2SDD.h" #include "AliITSRecPoint.h" +#include "AliITSRecPointContainer.h" #include "AliITSDetTypeRec.h" #include "AliRawReader.h" #include "AliITSRawStreamSDD.h" @@ -46,7 +47,10 @@ AliITSClusterFinderV2SDD::AliITSClusterFinderV2SDD(AliITSDetTypeRec* dettyp):Ali fNAnodes(0), fNTimeBins(0), fNZbins(0), - fNXbins(0) + fNXbins(0), + fCutOnPeakLoose(0.), + fCutOnPeakTight(0.), + fMaxDrTimeForTightCut(0.) { //Default constructor @@ -59,6 +63,7 @@ AliITSClusterFinderV2SDD::AliITSClusterFinderV2SDD(AliITSDetTypeRec* dettyp):Ali for(Int_t iHyb=0;iHybUncheckedAt(i); Int_t ian=d->GetCoord1(); Int_t itb=d->GetCoord2(); - Int_t iSide=0; - if (ian >= fNAnodes) iSide=1; + //Int_t iSide=0; + //if (ian >= fNAnodes) iSide=1; Float_t gain=cal->GetChannelGain(ian)/fDetTypeRec->GetAverageGainSDD(); Float_t charge=d->GetSignal(); // returns expanded signal // (10 bit, low threshold already added) @@ -185,32 +190,40 @@ FindClustersSDD(AliBin* bins[2], TBits* anodeFired[2], if (npeaks==0) continue; Int_t k,l; - for (k=0; k1 || dj>1) continue; - if (bins[s][idx[k]].GetQ() > bins[s][idx[l]].GetQ()) { - msk[l]=msk[k]; - idx[l]*=-1; - } else { - msk[k]=msk[l]; - idx[k]*=-1; - break; - } + Int_t nClust; + if(repa->GetUseUnfoldingInClusterFinderSDD()){ + for (k=0; k1 || dj>1) continue; + if (bins[s][idx[k]].GetQ() > bins[s][idx[l]].GetQ()) { + msk[l]=msk[k]; + idx[l]*=-1; + } else { + msk[k]=msk[l]; + idx[k]*=-1; + break; + } + } } + nClust=npeaks; + }else{ + for (k=1; kGetUseUnfoldingInClusterFinderSDD()==kFALSE) msk[k]=msk[0]; + if(idx[k]>0. && bins[s][idx[k]].GetQ() > maxADC) maxADC=bins[s][idx[k]].GetQ(); MarkPeak(TMath::Abs(idx[k]), fNZbins, bins[s], msk[k]); } - - for (k=0; k=kMaxBin) continue; - AliBin *b=&bins[s][index]; - Int_t jAnode=index%fNZbins-1; - Int_t adcSignal=b->GetQ(); - if(adcSignal>cal->GetThresholdAnode(jAnode)){ - if (di>maxi) maxi=di; - if (dimaxj) maxj=dj; - if (djUncheckedAt(b->GetIndex()); - for (Int_t itrack=0;itrack<10;itrack++){ - Int_t track = (d->GetTracks())[itrack]; - if (track>=0) { - AddLabel(milab, track); - } + if(digits) { + for (Int_t di=-2; di<=2;di++){ + for (Int_t dj=-2;dj<=2;dj++){ + index = idx[k]+di+dj*fNZbins; + if (index<0) continue; + if (index>=kMaxBin) continue; + AliBin *b=&bins[s][index]; + if(b->GetQ()<0.1) continue; + AliITSdigitSDD* d=(AliITSdigitSDD*)digits->UncheckedAt(b->GetIndex()); + for (Int_t itrack=0;itrack<10;itrack++){ + Int_t track = (d->GetTracks())[itrack]; + if (track>=0) { + AddLabel(milab, track); } } } } + } + else { // raw data + if (fRawID2ClusID) milab[0] = fNClusters+1; // RS: store clID+1 as a reference to the cluster } - Int_t clSizAnode=maxi-mini+1; - Int_t clSizTb=maxj-minj+1; + + + Int_t clSizAnode=fZmax-fZmin+1; + Int_t clSizTb=fXmax-fXmin+1; if(repa->GetUseSDDClusterSizeSelection()){ if(clSizTb==1) continue; // cut common mode noise spikes - if(clSizAnode>3) continue; // cut common mode noise spikes + if(clSizAnode>5) continue; // cut common mode noise spikes if(clSizTb>10) continue; // cut clusters on noisy anodes + if(cal-> IsAMAt20MHz() && clSizTb>8) continue; // cut clusters on noisy anodes } AliITSresponseSDD* rsdd = fDetTypeRec->GetResponseSDD(); @@ -266,7 +274,9 @@ FindClustersSDD(AliBin* bins[2], TBits* anodeFired[2], Float_t zdet = GetSeg()->GetLocalZFromAnode(zAnode); Float_t driftTimeUncorr = GetSeg()->GetDriftTimeFromTb(timebin)+jitter*rsdd->GetCarlosRXClockPeriod(); Float_t driftTime=driftTimeUncorr-rsdd->GetTimeZero(fModule); - Float_t driftSpeed = cal->GetDriftSpeedAtAnode(zAnode) + rsdd->GetDeltaVDrift(fModule); + if(driftTimeGetDriftSpeedAtAnode(zAnode) + rsdd->GetDeltaVDrift(fModule,zAnode>255); Float_t driftPathMicron = driftTime*driftSpeed; const Double_t kMicronTocm = 1.0e-4; Float_t xdet=(driftPathMicron-GetSeg()->Dx())*kMicronTocm; // xdet is negative @@ -284,35 +294,39 @@ FindClustersSDD(AliBin* bins[2], TBits* anodeFired[2], y=trk[1]; z=trk[2]; - q/=rsdd->GetADC2keV(); - q+=(driftTime*rsdd->GetChargevsTime()); // correction for zero supp. + q+=(driftTime*rsdd->GetADCvsDriftTime(fModule)); // correction for zero supp. + q/=rsdd->GetADCtokeV(fModule); if(cal-> IsAMAt20MHz()) q*=2.; // account for 1/2 sampling freq. if(qGetMinClusterChargeSDD()) continue; // remove noise clusters - Float_t hit[5] = {y, z, 0.0030*0.0030, 0.0020*0.0020, q}; + Float_t hit[6] = {y, z, 0.0030*0.0030, 0.0020*0.0020, q, 0.}; Int_t info[3] = {clSizTb, clSizAnode, fNlayer[fModule]}; if (digits) CheckLabels2(milab); milab[3]=fNdet[fModule]; AliITSRecPoint cc(milab,hit,info); - cc.SetType(npeaks); + cc.SetType(nClust*100+npeaks); cc.SetDriftTime(driftTimeUncorr); + cc.SetDriftSide(s); + cc.SetChargeRatio(maxADC); if(clusters) new (cl[ncl]) AliITSRecPoint(cc); else { fDetTypeRec->AddRecPoint(cc); } + fNClusters++; // RS ncl++; } } } } - + AliDebug(2,Form("Clusters found on SDD module %d (unfolding %d) = %d\n",fModule,repa->GetUseUnfoldingInClusterFinderSDD(),ncl)); + } //______________________________________________________________________ -void AliITSClusterFinderV2SDD::RawdataToClusters(AliRawReader* rawReader,TClonesArray** clusters){ +void AliITSClusterFinderV2SDD::RawdataToClusters(AliRawReader* rawReader){ //------------------------------------------------------------ // This function creates ITS clusters from raw data //------------------------------------------------------------ - + fNClusters = 0; //RS AliITSRawStream* inputSDD=AliITSRawStreamSDD::CreateRawStreamSDD(rawReader); AliDebug(1,Form("%s is used",inputSDD->ClassName())); @@ -335,16 +349,16 @@ void AliITSClusterFinderV2SDD::RawdataToClusters(AliRawReader* rawReader,TClones } } } - FindClustersSDD(inputSDD,clusters); + FindClustersSDD(inputSDD); delete inputSDD; } -void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, - TClonesArray** clusters) +void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input) { //------------------------------------------------------------ // Actual SDD cluster finder for raw data //------------------------------------------------------------ + AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance(); Int_t nClustersSDD = 0; AliBin *bins[2]; TBits* anodeFired[2]; @@ -357,6 +371,9 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, for(Int_t iMod=0; iModReset(); //RS if array was provided, we shall store the rawID -> ClusterID + // while (input->Next()) { Int_t iModule = input->GetModuleID(); if(iModule<0){ @@ -377,13 +394,13 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, for(Int_t iMod=0; iMod=0){ fModule = vectModId[iMod]; - clusters[fModule] = new TClonesArray("AliITSRecPoint"); + TClonesArray* clusters = rpc->UncheckedGetClusters(fModule); bins[0]=fDDLBins[iMod*2]; // first hybrid of the module bins[1]=fDDLBins[iMod*2+1]; // second hybrid of the module anodeFired[0]=ddlAnodeFired[iMod*2]; anodeFired[1]=ddlAnodeFired[iMod*2+1]; - FindClustersSDD(bins, anodeFired, NULL, clusters[fModule],jitter); - Int_t nClusters = clusters[fModule]->GetEntriesFast(); + FindClustersSDD(bins, anodeFired, NULL, clusters,jitter); + Int_t nClusters = clusters->GetEntriesFast(); nClustersSDD += nClusters; vectModId[iMod]=-1; } @@ -428,6 +445,7 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, fDDLBins[iHybrid][index].SetQ(q); fDDLBins[iHybrid][index].SetMask(1); fDDLBins[iHybrid][index].SetIndex(index); + fDDLBins[iHybrid][index].SetRawID(countRW); //RS register raw id ddlAnodeFired[iHybrid]->SetBitNumber(iz); }else{ AliWarning(Form("Invalid SDD cell: Anode=%d TimeBin=%d",iz,itb)); @@ -435,15 +453,16 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, } } } + countRW++; //RS } for(Int_t iHyb=0;iHyb