X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSClusterFinderV2SDD.cxx;h=27ab937fcad107f957a8e1a6d93e6f61554c149c;hb=5ca852447b1219e62747538898f57c00503a8cfc;hp=d2379b277c7970a621f83383980db4272f9b6c89;hpb=404c1c297c072fb64512604eb4141dabc30cda4e;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSClusterFinderV2SDD.cxx b/ITS/AliITSClusterFinderV2SDD.cxx index d2379b277c7..27ab937fcad 100644 --- a/ITS/AliITSClusterFinderV2SDD.cxx +++ b/ITS/AliITSClusterFinderV2SDD.cxx @@ -12,6 +12,9 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ + +/* $Id$*/ + //////////////////////////////////////////////////////////////////////////// // Implementation of the ITS clusterer V2 class // // // @@ -25,28 +28,26 @@ #include "AliITSRecPoint.h" #include "AliITSDetTypeRec.h" #include "AliRawReader.h" -#include "AliITSRawStreamSDDv3.h" +#include "AliITSRawStreamSDD.h" #include "AliITSCalibrationSDD.h" #include "AliITSDetTypeRec.h" #include "AliITSsegmentationSDD.h" #include #include "AliITSdigitSDD.h" -#include "AliAlignObj.h" - +#include "AliITSgeomTGeo.h" ClassImp(AliITSClusterFinderV2SDD) AliITSClusterFinderV2SDD::AliITSClusterFinderV2SDD(AliITSDetTypeRec* dettyp):AliITSClusterFinderV2(dettyp), fNySDD(256), fNzSDD(256), -fYpitchSDD(0.01825), fZpitchSDD(0.02940), fHwSDD(3.5085), fHlSDD(3.7632), -fYoffSDD(0.0425){ +fTimeOffsetSDD(0.){ //Default constructor - + SetTimeOffset(); } @@ -69,21 +70,22 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(TClonesArray *digits) { bins[0]=new AliBin[kMAXBIN]; bins[1]=new AliBin[kMAXBIN]; AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(fModule); - + AliITSresponseSDD* res = (AliITSresponseSDD*)cal->GetResponse(); + const char *option=res->ZeroSuppOption(); AliITSdigitSDD *d=0; Int_t i, ndigits=digits->GetEntriesFast(); for (i=0; iUncheckedAt(i); - Float_t baseline = cal->GetBaseline(d->GetCoord1()); - Int_t y=d->GetCoord2()+1; //y Int_t z=d->GetCoord1()+1; //z Int_t q=d->GetSignal(); - + if(!((strstr(option,"1D")) || (strstr(option,"2D")))){ + Float_t baseline = cal->GetBaseline(d->GetCoord1()); + if(q>baseline) q-=(Int_t)baseline; + else q=0; + } if(qGetThresholdAnode(d->GetCoord1())) continue; - if(q>baseline) q-=(Int_t)baseline; - else q=0; - + //if (q<3) continue; if (z <= fNzSDD) { @@ -111,6 +113,8 @@ FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nzBins, //------------------------------------------------------------ // Actual SDD cluster finder //------------------------------------------------------------ + + const TGeoHMatrix *mT2L=AliITSgeomTGeo::GetTracking2LocalMatrix(fModule); AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(fModule); Int_t ncl=0; TClonesArray &cl=*clusters; @@ -160,95 +164,59 @@ FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nzBins, Int_t maxi=0,mini=0,maxj=0,minj=0; //AliBin *bmax=&bins[s][idx[k]]; //Float_t max = TMath::Max(TMath::Abs(bmax->GetQ())/5.,3.); - Float_t max=3; + for (Int_t di=-2; di<=2;di++) for (Int_t dj=-3;dj<=3;dj++){ Int_t index = idx[k]+di+dj*nzBins; if (index<0) continue; if (index>=nMaxBin) continue; AliBin *b=&bins[s][index]; - if (TMath::Abs(b->GetQ())>max){ - 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 (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); } } } - } + } } - /* - Float_t s2 = c.GetSigmaY2()/c.GetQ() - c.GetY()*c.GetY(); - Float_t w=par->GetPadPitchWidth(sec); - c.SetSigmaY2(s2); - if (s2 != 0.) { - c.SetSigmaY2(c.GetSigmaY2()*0.108); - if (secGetNInnerSector()) c.SetSigmaY2(c.GetSigmaY2()*2.07); - } - s2 = c.GetSigmaZ2()/c.GetQ() - c.GetZ()*c.GetZ(); - w=par->GetZWidth(); - c.SetSigmaZ2(s2); - - if (s2 != 0.) { - c.SetSigmaZ2(c.GetSigmaZ2()*0.169); - if (secGetNInnerSector()) c.SetSigmaZ2(c.GetSigmaZ2()*1.77); - } - */ - - c.SetSigmaY2(0.0030*0.0030); - c.SetSigmaZ2(0.0020*0.0020); - c.SetDetectorIndex(fNdet[fModule]); + Float_t y=c.GetY(),z=c.GetZ(), q=c.GetQ(); y/=q; z/=q; - // - //Float_t s2 = c.GetSigmaY2()/c.GetQ() - y*y; - // c.SetSigmaY2(s2); - //s2 = c.GetSigmaZ2()/c.GetQ() - z*z; - //c.SetSigmaZ2(s2); - // + Float_t yyyy = y; - //y=(y-0.5)*fYpitchSDD; - //y-=fHwSDD; - //y-=fYoffSDD; //delay ? - //if (s) y=-y; z=(z-0.5)*fZpitchSDD; z-=fHlSDD; Float_t zdet = z; - // y=-(-y+fYshift[fModule]); - // z= -z+fZshift[fModule]; - // c.SetY(y); - // c.SetZ(z); - Float_t xdet = cal->GetDriftPath((yyyy-0.5)*25,0); - xdet=xdet/10000.-fHwSDD-fYoffSDD; + Float_t timebin = GetSeg()->Dpx(0); + Float_t driftTime = (yyyy-0.5)*timebin - fTimeOffsetSDD; + Float_t xdet = cal->GetDriftPath(driftTime,0); + xdet=xdet/10000.-fHwSDD; if (s) xdet=-xdet; CorrectPosition(zdet,xdet); - y=-(-xdet+fYshift[fModule]); - z= -zdet+fZshift[fModule]; - - c.SetY(y); - c.SetZ(z); - c.SetNy(maxj-minj+1); - c.SetNz(maxi-mini+1); - c.SetType(npeaks); - c.SetQ(q/12.7); //this WAS consistent with SSD. To be reassessed - // 23-MAR-2007 - - //if (c.GetQ() < 20.) continue; //noise cluster + { + Double_t loc[3]={xdet,0.,zdet},trk[3]={0.,0.,0.}; + mT2L->MasterToLocal(loc,trk); + y=trk[1]; + z=trk[2]; + } + q/=5.243; //to have MPV 1 MIP = 86.4 KeV --> this must go to calibr. + Float_t hit[5] = {y, z, 0.0030*0.0030, 0.0020*0.0020, q}; + Int_t info[3] = {maxj-minj+1, maxi-mini+1, fNlayer[fModule]}; if (digits) { // AliBin *b=&bins[s][idx[k]]; @@ -260,21 +228,21 @@ FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nzBins, //lab[2]=(d->GetTracks())[2]; //CheckLabels(lab); CheckLabels2(milab); - c.SetLabel(milab[0],0); - c.SetLabel(milab[1],1); - c.SetLabel(milab[2],2); - c.SetLayer(fNlayer[fModule]); - UShort_t id=AliAlignObj::LayerToVolUID(fNlayer[fModule]+AliAlignObj::kSPD1,fNdet[fModule]); - c.SetVolumeId(id); } } - if(clusters) new (cl[ncl]) AliITSRecPoint(c); + milab[3]=fNdet[fModule]; + + AliITSRecPoint cc(milab,hit,info); + cc.SetType(npeaks); + + if(clusters) new (cl[ncl]) AliITSRecPoint(cc); else { - fDetTypeRec->AddRecPoint(c); + fDetTypeRec->AddRecPoint(cc); } ncl++; } } + } @@ -284,7 +252,7 @@ void AliITSClusterFinderV2SDD::RawdataToClusters(AliRawReader* rawReader,TClones // This function creates ITS clusters from raw data //------------------------------------------------------------ rawReader->Reset(); - AliITSRawStreamSDDv3 inputSDD(rawReader); + AliITSRawStreamSDD inputSDD(rawReader); FindClustersSDD(&inputSDD,clusters); } @@ -316,8 +284,7 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, FindClustersSDD(bins, kMaxBin, kNzBins, NULL, clusters[iModule]); Int_t nClusters = clusters[iModule]->GetEntriesFast(); nClustersSDD += nClusters; - bins[0] = bins[1] = NULL; - + bins[0] = bins[1] = NULL; } if (!next) break; @@ -329,12 +296,22 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, } // fill the current digit into the bins array - if(input->GetSignal()>=3) { + AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(input->GetModuleID()); + AliITSresponseSDD* res = (AliITSresponseSDD*)cal->GetResponse(); + const char *option=res->ZeroSuppOption(); + Int_t q=input->GetSignal(); + if(!((strstr(option,"1D")) || (strstr(option,"2D")))){ + Float_t baseline = cal->GetBaseline(input->GetCoord1()); + if(q>baseline) q-=(Int_t)baseline; + else q=0; + } + if(q>=cal->GetThresholdAnode(input->GetCoord1())) { Int_t iz = input->GetCoord1()+1; - Int_t side = ((iz <= fNzSDD) ? 0 : 1); - iz -= side*fNzSDD; + //Int_t side = ((iz <= fNzSDD) ? 0 : 1); + Int_t side = ((AliITSRawStreamSDD*)input)->GetChannel(); + // iz -= side*fNzSDD; Int_t index = (input->GetCoord2()+1) * kNzBins + iz; - bins[side][index].SetQ(input->GetSignal()); + bins[side][index].SetQ(q); bins[side][index].SetMask(1); bins[side][index].SetIndex(index); } @@ -344,7 +321,6 @@ void AliITSClusterFinderV2SDD::FindClustersSDD(AliITSRawStream* input, delete[] binsSDDInit; Info("FindClustersSDD", "found clusters in ITS SDD: %d", nClustersSDD); - } @@ -354,18 +330,18 @@ void AliITSClusterFinderV2SDD::CorrectPosition(Float_t &z, Float_t&y){ //correction of coordinates using the maps stored in the DB AliITSCalibrationSDD* cal = (AliITSCalibrationSDD*)GetResp(fModule); - static const Int_t nbint = cal->GetMapTimeNBin(); - static const Int_t nbina = cal->Chips()*cal->Channels(); + static const Int_t knbint = cal->GetMapTimeNBin(); + static const Int_t knbina = cal->Chips()*cal->Channels(); Float_t stepa = (GetSeg()->Dpz(0))/10000.; //anode pitch in cm Float_t stept = (GetSeg()->Dx()/cal->GetMapTimeNBin()/2.)/10.; Int_t bint = TMath::Abs((Int_t)(y/stept)); - if(y>=0) bint+=(Int_t)(nbint/2.); - if(bint>nbint) AliError("Wrong bin number!"); + if(y>=0) bint+=(Int_t)(knbint/2.); + if(bint>knbint) AliError("Wrong bin number!"); Int_t bina = TMath::Abs((Int_t)(z/stepa)); - if(z>=0) bina+=(Int_t)(nbina/2.); - if(bina>nbina) AliError("Wrong bin number!"); + if(z>=0) bina+=(Int_t)(knbina/2.); + if(bina>knbina) AliError("Wrong bin number!"); Float_t devz = cal->GetMapACell(bina,bint)/10000.; Float_t devx = cal->GetMapTCell(bina,bint)/10000.;