]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Fix to track labels associated to SDD rec-points
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 May 2003 14:44:41 +0000 (14:44 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 19 May 2003 14:44:41 +0000 (14:44 +0000)
ITS/AliITSClusterFinderSDD.cxx
ITS/AliITSsegmentationSDD.cxx

index aeae08aed6050f35b7290412725240db84c8507a..549809e3b586e4226faf329e036317173a6a9b99 100644 (file)
@@ -15,6 +15,9 @@
 /*
   $Id$
   $Log$
+  Revision 1.30  2003/03/03 16:34:35  masera
+  Corrections to comply with coding conventions
+
   Revision 1.29  2002/10/25 18:54:22  barbera
   Various improvements and updates from B.S.Nilsen and T. Virgili
 
@@ -1252,7 +1255,75 @@ void AliITSClusterFinderSDD::GetRecPoints(){
         if(idx>ndigits) Error("SDD: GetRecPoints","idx ndigits",idx,ndigits);
         // try peak neighbours - to be done 
         if(idx&&idx<= ndigits) dig =(AliITSdigitSDD*)fDigits->UncheckedAt(idx);
-        if(!dig) {
+       //// debug
+       //      cout<<"R.C. Anode = "<<clusterI->A()<<"; Time= "<<clusterI->T()<<endl;
+       fSegmentation->LocalToDet(clusterI->X(),clusterI->Z(),ix,iz);
+       //      cout<<"From R.C. coordinates- Anode: "<<iz<<" and time: "<<ix<<endl;
+       // end debug
+       Int_t trks[10];
+       Int_t notr=-1;
+       Int_t deger = 0;
+       if(!dig) {
+         Warning("GetRecPoints","Cannot assign the track number\n");
+       }
+       else {
+         fSegmentation->LocalToDet(clusterI->X(),clusterI->Z(),ix,iz);
+         Int_t signal[30];
+         for(Int_t kk=0;kk<9;kk++)trks[kk]=-2;
+         AliITSdigitSDD * pdig = 0;
+         for(Int_t itime=ix-1;itime<=ix+1;itime++){
+           if(itime<0 || itime>=fSegmentation->Npx())continue;
+           for(Int_t ianod=iz-1;ianod<=iz+1;ianod++){
+             if(ianod<0 || ianod>=fSegmentation->Npz())continue;
+             if(iz==(fSegmentation->Npz())/2 && ianod<iz)continue;
+             if(iz==(fSegmentation->Npz())/2-1 && ianod>iz)continue;
+             pdig = (AliITSdigitSDD*)fMap->GetHit(ianod,itime);
+             if(pdig){
+               for(Int_t kk=0;kk<3;kk++){
+                 if(kk == 0 || (kk>0 && pdig->fTracks[kk]>=0)){
+                   notr++;
+                   trks[notr]=pdig->fTracks[kk];
+                   signal[notr]=pdig->fSignal;
+                 }
+               }
+             }
+           }
+         } // for(itime....
+         if((dig->fCoord1<(iz-1) || dig->fCoord1>(iz+1)) 
+            && (dig->fCoord2<(ix-1) || dig->fCoord2>(ix+1)) 
+            && dig->fTracks[0]>=-2){
+           notr++;
+           trks[notr]=dig->fTracks[0];
+           signal[notr]=dig->fSignal;
+         }
+         for(Int_t ii=0; ii<notr;ii++){
+           for(Int_t jj=ii+1; jj<=notr; jj++){
+             if(trks[ii] == trks[jj]){
+               signal[ii]+=signal[jj];
+               signal[jj]=-100;
+               trks[jj]=-jj-100;
+               deger++;
+             }
+           }
+         }
+         Int_t ordtmp;
+         for(Int_t ii=0; ii<notr;ii++){
+           Int_t maxi = ii;
+           for(Int_t jj=ii+1; jj<=notr; jj++){
+             if(signal[jj]>signal[maxi])maxi=jj;
+           }
+           ordtmp = trks[ii];
+           trks[ii]=trks[maxi];
+           trks[maxi]=ordtmp;
+           ordtmp = signal[ii];
+           signal[ii]=signal[maxi];
+           signal[maxi]=ordtmp;
+         }
+       }
+       notr-=deger;
+       notr++;
+       /*
+         if(!dig) {
             // try cog
             fSegmentation->GetPadIxz(clusterI->X(),clusterI->Z(),ix,iz);
             dig = (AliITSdigitSDD*)fMap->GetHit(iz-1,ix-1);
@@ -1261,15 +1332,25 @@ void AliITSClusterFinderSDD::GetRecPoints(){
             if (!dig) dig = (AliITSdigitSDD*)fMap->GetHit(iz-1,ix+1); 
             if (!dig) printf("SDD: cannot assign the track number!\n");
         } //  end if !dig
+       */
         AliITSRecPoint rnew;
         rnew.SetX(clusterI->X());
         rnew.SetZ(clusterI->Z());
         rnew.SetQ(clusterI->Q());   // in KeV - should be ADC
+       //      cout<<"Cluster # "<<i<< " - X,Z,Q= "<<clusterI->X()<<" "<<clusterI->Z()<<" "<<clusterI->Q()<<"; Digit n= "<<idx<<endl;
         rnew.SetdEdX(kconvGeV*clusterI->Q());
         rnew.SetSigmaX2(kRMSx*kRMSx);
         rnew.SetSigmaZ2(kRMSz*kRMSz);
+       if(notr>3)notr=3;
+       if(notr>=0)for(j=0;j<notr;j++)rnew.fTracks[j]=trks[j];
+       /*     
         if(dig){
+         for(j=0;j<dig->GetNTracks();j++){
+           if(j>0 && j%4==0)cout<<endl;
+         }
+         cout<<endl;
            rnew.fTracks[0] = dig->fTracks[0];
+           cout<<"  "<<dig->fTracks[0]<<" assigned to rp 0 "<<rnew.fTracks[0]<<endl;
            rnew.fTracks[1] = -3;
            rnew.fTracks[2] = -3;
            j=1;
@@ -1277,15 +1358,18 @@ void AliITSClusterFinderSDD::GetRecPoints(){
                  j<dig->GetNTracks()) j++;
            if(j<dig->GetNTracks()){
                rnew.fTracks[1] = dig->fTracks[j];
+               cout<<"  Digit "<<j<<" "<<dig->fTracks[j]<<" assigned to rp 1 "<<rnew.fTracks[1]<<endl;
                while((rnew.fTracks[0]==dig->fTracks[j] || 
                       rnew.fTracks[1]==dig->fTracks[j] )&& 
                      j<dig->GetNTracks()) j++;
-               if(j<dig->GetNTracks()) rnew.fTracks[2] = dig->fTracks[j];
+               if(j<dig->GetNTracks()) {
+                 rnew.fTracks[2] = dig->fTracks[j];
+                 cout<<"  Digit "<<j<<" "<<dig->fTracks[j]<<" assigned to rp 2 "<<rnew.fTracks[2]<<endl;
+               }
            } // end if
        } // end if
-        //printf("SDD: i %d track1 track2 track3 %d %d %d x y %f %f\n",
-        //         i,rnew.fTracks[0],rnew.fTracks[1],rnew.fTracks[2],c
-        //         lusterI->X(),clusterI->Z());
+       */
+
         iTS->AddRecPoint(rnew);
     } // I clusters
 //    fMap->ClearMap();
index 73a450b9eb8b5668daea470fb2c5079a775096fc..bacca6149104f0039b4f0b453ac8158940f1fbd2 100644 (file)
@@ -215,8 +215,14 @@ void AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz){
     iz = -1; // default values
     dx = -kconv*Dx(); // lower left edge in cm.
     dz = -0.5*kconv*Dz(); // lower left edge in cm.
-    if(x<dx || x>-dx) return; // outside of defined volume.
-    if(z<dz || z>-dz) return; // outside of defined volume.
+    if(x<dx || x>-dx) {
+      Warning("LocalToDet","input argument %f out of range (%f, %f)",x,dx,-dx);
+      return; // outside of defined volume.
+    }
+    if(z<dz || z>-dz) {
+      Warning("LocalToDet","input argument %f out of range (%f, %f)",z,dz,-dz);
+      return; // outside of defined volume.
+    }
     tb = fDriftSpeed*fTimeStep*kconv; // compute size of time bin.
     if(x>0) dx = -(dx + x)/tb; // distance from + side in time bin units
     else dx = (x - dx)/tb;     // distance from - side in time bin units
@@ -265,8 +271,14 @@ void AliITSsegmentationSDD::DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z)
     if(iz>=Npz()/2) x = kconv*Dx(); // default value for +x side.
     else x = -kconv*Dx(); // default value for -x side.
     z = -0.5*kconv*Dz(); // default value.
-    if(ix<0 || ix>=Npx()) return; // outside of detector
-    if(iz<0 || iz>=Npz()) return; // outside of detctor
+    if(ix<0 || ix>=Npx()) {
+      Warning("DetToLocal","input argument %d out of range (0, %d)",ix,Npx());
+      return; // outside of detector
+    }
+    if(iz<0 || iz>=Npz()) {
+      Warning("DetToLocal","input argument %d out of range (0, %d)",iz,Npz());
+     return; // outside of detctor
+    }
     tb = fDriftSpeed*fTimeStep*kconv; // compute size of time bin.
     if(iz>=Npz()/2) tb *= -1.0; // for +x side decrement frmo Dx().
     for(i=0;i<ix;i++) x += tb; // sum up to cell ix-1