Adding detection elment data member to AliMUONRawCLuster class (Bruce)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 May 2005 05:09:39 +0000 (05:09 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 19 May 2005 05:09:39 +0000 (05:09 +0000)
MUON/AliMUONClusterFinderVS.cxx
MUON/AliMUONClusterFinderVS.h
MUON/AliMUONClusterInput.cxx
MUON/AliMUONClusterInput.h
MUON/AliMUONRawCluster.cxx
MUON/AliMUONRawCluster.h
MUON/MUONCheck.C

index 0418dd5..810f05d 100644 (file)
@@ -96,7 +96,7 @@ void AliMUONClusterFinderVS::Decluster(AliMUONRawCluster *cluster)
 //____________________________________________________________________________
 void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
 {
-// Split complex cluster by local maxima 
+  // Split complex cluster by local maxima 
     Int_t cath, i;
 
     fInput->SetCluster(c);
@@ -183,11 +183,11 @@ void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
          c->SetX(0, fSeg2[0]->GetAnod(fInput->DetElemId(), c->GetX(0)));
          c->SetX(1, fSeg2[1]->GetAnod(fInput->DetElemId(), c->GetX(1)));
        }
-       
-// If reasonable chi^2 add result to the list of rawclusters
+       //      c->SetDetElementID(fInput->DetElemId());
+       // If reasonable chi^2 add result to the list of rawclusters
        if (chi2 < 0.3) {
            AddRawCluster(*c);
-// If not try combined double Mathieson Fit
+           // If not try combined double Mathieson Fit
        } else {
                AliDebug(1," MAUVAIS CHI2 !!!\n");
            if (fNLocal[0]==1 &&  fNLocal[1]==1) {
@@ -226,7 +226,7 @@ void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
            } else {
              AliDebug(1,"Do not Split");
                // Don't split
-               AddRawCluster(*c);
+             AddRawCluster(*c);
            }
        }
 
@@ -360,7 +360,7 @@ void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
 // No combinations found between the 2 cathodes
 // We keep the center of gravity of the cluster
        if (iacc==0) {
-           AddRawCluster(*c);
+         AddRawCluster(*c);
        }
 
 // ******* iacc = 1 *******
@@ -456,7 +456,6 @@ void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
                                cnew.SetX(cath, Float_t(xm[ico][1]));
                                cnew.SetY(cath, Float_t(ym[ico][0]));
                                cnew.SetZ(cath, fZPlane);
-                               
                                cnew.SetMultiplicity(cath,c->GetMultiplicity(cath));
                                for (i=0; i<fMul[cath]; i++) {
                                  cnew.SetIndex(i, cath, c->GetIndex(i,cath));
@@ -989,6 +988,7 @@ void AliMUONClusterFinderVS::SplitByLocalMaxima(AliMUONRawCluster *c)
                    FillCluster(&cnew,cath);
                } 
                cnew.SetClusterType(cnew.PhysicsContribution());
+               //              cnew.SetDetElementID(fInput->DetElemId());
                AddRawCluster(cnew);
                fNPeaks++;
            }
@@ -1264,160 +1264,163 @@ void AliMUONClusterFinderVS::FindLocalMaxima(AliMUONRawCluster* /*c*/)
 
 void  AliMUONClusterFinderVS::FillCluster(AliMUONRawCluster* c, Int_t flag, Int_t cath) 
 {
-//
-//  Completes cluster information starting from list of digits
-//
-    AliMUONDigit* dig;
-    Float_t x, y, z;
-    Int_t  ix, iy;
-    
-    if (cath==1) {
-       c->SetPeakSignal(cath,c->GetPeakSignal(0));     
-    } else {
-       c->SetPeakSignal(cath,0);
-    }
-    
-    
-    if (flag) {
-       c->SetX(cath,0.);
-       c->SetY(cath,0.);
-       c->SetCharge(cath,0);
-    }
-
-    AliDebug(1,Form("\n fPeakSignal %d\n",c->GetPeakSignal(cath)));
-    for (Int_t i=0; i<c->GetMultiplicity(cath); i++)
+  //
+  //  Completes cluster information starting from list of digits
+  //
+  AliMUONDigit* dig;
+  Float_t x, y, z;
+  Int_t  ix, iy;
+  
+  if (cath==1) {
+    c->SetPeakSignal(cath,c->GetPeakSignal(0));        
+  } else {
+    c->SetPeakSignal(cath,0);
+  }
+  
+  
+  if (flag) {
+    c->SetX(cath,0.);
+    c->SetY(cath,0.);
+    c->SetCharge(cath,0);
+  }
+  
+  AliDebug(1,Form("\n fPeakSignal %d\n",c->GetPeakSignal(cath)));
+  for (Int_t i=0; i<c->GetMultiplicity(cath); i++)
     {
-       dig= fInput->Digit(cath,c->GetIndex(i,cath));
-       ix=dig->PadX()+c->GetOffset(i,cath);
-       iy=dig->PadY();
-       Int_t q=dig->Signal();
-       if (!flag) q=Int_t(q*c->GetContrib(i,cath));
-//     fprintf(stderr,"q %d c->fPeakSignal[ %d ] %d\n",q,cath,c->fPeakSignal[cath]);
-       if (dig->Physics() >= dig->Signal()) {
-           c->SetPhysics(i,2);
-       } else if (dig->Physics() == 0) {
-           c->SetPhysics(i,0);
-       } else  c->SetPhysics(i,1);
-//
-// 
-       AliDebug(2,Form("q %d c->fPeakSignal[cath] %d\n",q,c->GetPeakSignal(cath)));
-// peak signal and track list
-       if (q>c->GetPeakSignal(cath)) {
-           c->SetPeakSignal(cath, q);
-           c->SetTrack(0,dig->Hit());
-           c->SetTrack(1,dig->Track(0));
-           c->SetTrack(2,dig->Track(1));
-//         fprintf(stderr," c->fTracks[0] %d c->fTracks[1] %d\n",dig->fHit,dig->fTracks[0]);
-       }
-//
-       if (flag) {
-         if (fSegmentationType == 1) 
-           fSeg[cath]->GetPadC(ix, iy, x, y, z);
-         else
-           fSeg2[cath]->GetPadC(fInput->DetElemId(), ix, iy, x, y, z);
-       
-           c->AddX(cath, q*x);
-           c->AddY(cath, q*y);
-           c->AddCharge(cath, q);
-       }
-    } // loop over digits
-    AliDebug(1," fin du cluster c\n");
-
-
-    if (flag) {
-       c->SetX(cath, c->GetX(cath)/c->GetCharge(cath));
-// Force on anod
+      dig= fInput->Digit(cath,c->GetIndex(i,cath));
+      ix=dig->PadX()+c->GetOffset(i,cath);
+      iy=dig->PadY();
+      Int_t q=dig->Signal();
+      if (!flag) q=Int_t(q*c->GetContrib(i,cath));
+      //       fprintf(stderr,"q %d c->fPeakSignal[ %d ] %d\n",q,cath,c->fPeakSignal[cath]);
+      if (dig->Physics() >= dig->Signal()) {
+       c->SetPhysics(i,2);
+      } else if (dig->Physics() == 0) {
+       c->SetPhysics(i,0);
+      } else  c->SetPhysics(i,1);
+      //
+      // 
+      AliDebug(2,Form("q %d c->fPeakSignal[cath] %d\n",q,c->GetPeakSignal(cath)));
+      // peak signal and track list
+      if (q>c->GetPeakSignal(cath)) {
+       c->SetPeakSignal(cath, q);
+       c->SetTrack(0,dig->Hit());
+       c->SetTrack(1,dig->Track(0));
+       c->SetTrack(2,dig->Track(1));
+       //          fprintf(stderr," c->fTracks[0] %d c->fTracks[1] %d\n",dig->fHit,dig->fTracks[0]);
+      }
+      //
+      if (flag) {
        if (fSegmentationType == 1) 
-         c->SetX(cath, fSeg[cath]->GetAnod(c->GetX(cath)));
-       else
-         c->SetX(cath, fSeg2[cath]->GetAnod(fInput->DetElemId(), c->GetX(cath)));
-       c->SetY(cath, c->GetY(cath)/c->GetCharge(cath)); 
-//
-//  apply correction to the coordinate along the anode wire
-//
-       x=c->GetX(cath);   
-       y=c->GetY(cath);
-       TF1* cogCorr;
-       Int_t isec;
-       if (fSegmentationType == 1) {
-         fSeg[cath]->GetPadI(x, y, fZPlane, ix, iy);
          fSeg[cath]->GetPadC(ix, iy, x, y, z);
-         isec=fSeg[cath]->Sector(ix,iy);
-         cogCorr = fSeg[cath]->CorrFunc(isec-1);
-       } else {
-         fSeg2[cath]->GetPadI(fInput->DetElemId(), x, y, fZPlane, ix, iy);
+       else
          fSeg2[cath]->GetPadC(fInput->DetElemId(), ix, iy, x, y, z);
-         isec=fSeg2[cath]->Sector(fInput->DetElemId(), ix,iy);
-         cogCorr = fSeg2[cath]->CorrFunc(fInput->DetElemId(), isec-1);
-       }
        
-       if (cogCorr) {
-         Float_t yOnPad;
-         if (fSegmentationType == 1) 
-           yOnPad=(c->GetY(cath)-y)/fSeg[cath]->Dpy(isec);
-         else 
-           yOnPad=(c->GetY(cath)-y)/fSeg2[cath]->Dpy(fInput->DetElemId(), isec);
-
-         c->SetY(cath, c->GetY(cath)-cogCorr->Eval(yOnPad, 0, 0));
-       }
+       c->AddX(cath, q*x);
+       c->AddY(cath, q*y);
+       c->AddCharge(cath, q);
+      }
+    } // loop over digits
+  AliDebug(1," fin du cluster c\n");
+  
+  
+  if (flag) {
+    c->SetX(cath, c->GetX(cath)/c->GetCharge(cath));
+    // Force on anod
+    if (fSegmentationType == 1) 
+      c->SetX(cath, fSeg[cath]->GetAnod(c->GetX(cath)));
+    else
+      c->SetX(cath, fSeg2[cath]->GetAnod(fInput->DetElemId(), c->GetX(cath)));
+    c->SetY(cath, c->GetY(cath)/c->GetCharge(cath)); 
+    //
+    //  apply correction to the coordinate along the anode wire
+    //
+    x=c->GetX(cath);   
+    y=c->GetY(cath);
+    TF1* cogCorr;
+    Int_t isec;
+    if (fSegmentationType == 1) {
+      fSeg[cath]->GetPadI(x, y, fZPlane, ix, iy);
+      fSeg[cath]->GetPadC(ix, iy, x, y, z);
+      isec=fSeg[cath]->Sector(ix,iy);
+      cogCorr = fSeg[cath]->CorrFunc(isec-1);
+    } else {
+      fSeg2[cath]->GetPadI(fInput->DetElemId(), x, y, fZPlane, ix, iy);
+      fSeg2[cath]->GetPadC(fInput->DetElemId(), ix, iy, x, y, z);
+      isec=fSeg2[cath]->Sector(fInput->DetElemId(), ix,iy);
+      cogCorr = fSeg2[cath]->CorrFunc(fInput->DetElemId(), isec-1);
+    }
+    
+    if (cogCorr) {
+      Float_t yOnPad;
+      if (fSegmentationType == 1) 
+       yOnPad=(c->GetY(cath)-y)/fSeg[cath]->Dpy(isec);
+      else 
+       yOnPad=(c->GetY(cath)-y)/fSeg2[cath]->Dpy(fInput->DetElemId(), isec);
+      
+      c->SetY(cath, c->GetY(cath)-cogCorr->Eval(yOnPad, 0, 0));
+      // slat ID from digit
+      
     }
+  }
 }
 
 void  AliMUONClusterFinderVS::FillCluster(AliMUONRawCluster* c, Int_t cath) 
 {
-//
-//  Completes cluster information starting from list of digits
-//
-    static Float_t dr0;
-
-    AliMUONDigit* dig;
-
-    if (cath==0) {
-       dr0 = 10000;
-    }
-    
-    Float_t xpad, ypad, zpad;
-    Float_t dx, dy, dr;
-
-    for (Int_t i=0; i<c->GetMultiplicity(cath); i++)
+  //
+  //  Completes cluster information starting from list of digits
+  //
+  static Float_t dr0;
+  
+  AliMUONDigit* dig;
+  
+  if (cath==0) {
+    dr0 = 10000;
+  }
+  
+  Float_t xpad, ypad, zpad;
+  Float_t dx, dy, dr;
+  
+  for (Int_t i=0; i<c->GetMultiplicity(cath); i++)
     {
-       dig = fInput->Digit(cath,c->GetIndex(i,cath));
-       if (fSegmentationType == 1) 
-         fSeg[cath]->
-           GetPadC(dig->PadX(),dig->PadY(),xpad,ypad, zpad);
-       else
-         fSeg2[cath]->
-           GetPadC(fInput->DetElemId(),dig->PadX(),dig->PadY(),xpad,ypad, zpad);
-       AliDebug(1,Form("x %f y %f cx %f cy %f\n",xpad,ypad,c->GetX(0),c->GetY(0)));
-       dx = xpad - c->GetX(0);
-       dy = ypad - c->GetY(0);
-       dr = TMath::Sqrt(dx*dx+dy*dy);
-
-       if (dr < dr0) {
-           dr0 = dr;
-           AliDebug(1,Form(" dr %f\n",dr));
-           Int_t q=dig->Signal();
-           if (dig->Physics() >= dig->Signal()) {
-               c->SetPhysics(i,2);
-           } else if (dig->Physics() == 0) {
-               c->SetPhysics(i,0);
-           } else  c->SetPhysics(i,1);
-           c->SetPeakSignal(cath,q);
-           c->SetTrack(0,dig->Hit());
-           c->SetTrack(1,dig->Track(0));
-           c->SetTrack(2,dig->Track(1));
-           AliDebug(1,Form(" c->fTracks[0] %d c->fTracks[1] %d\n",dig->Hit(),
-                   dig->Track(0)));
-       }
-//
+      dig = fInput->Digit(cath,c->GetIndex(i,cath));
+      if (fSegmentationType == 1) 
+       fSeg[cath]->
+         GetPadC(dig->PadX(),dig->PadY(),xpad,ypad, zpad);
+      else
+       fSeg2[cath]->
+         GetPadC(fInput->DetElemId(),dig->PadX(),dig->PadY(),xpad,ypad, zpad);
+      AliDebug(1,Form("x %f y %f cx %f cy %f\n",xpad,ypad,c->GetX(0),c->GetY(0)));
+      dx = xpad - c->GetX(0);
+      dy = ypad - c->GetY(0);
+      dr = TMath::Sqrt(dx*dx+dy*dy);
+      
+      if (dr < dr0) {
+       dr0 = dr;
+       AliDebug(1,Form(" dr %f\n",dr));
+       Int_t q=dig->Signal();
+       if (dig->Physics() >= dig->Signal()) {
+         c->SetPhysics(i,2);
+       } else if (dig->Physics() == 0) {
+         c->SetPhysics(i,0);
+       } else  c->SetPhysics(i,1);
+       c->SetPeakSignal(cath,q);
+       c->SetTrack(0,dig->Hit());
+       c->SetTrack(1,dig->Track(0));
+       c->SetTrack(2,dig->Track(1));
+       
+       AliDebug(1,Form(" c->fTracks[0] %d c->fTracks[1] %d\n",dig->Hit(),
+                       dig->Track(0)));
+      }
+      //
     } // loop over digits
-
-//  apply correction to the coordinate along the anode wire
-// Force on anod
-    if (fSegmentationType == 1) 
-      c->SetX(cath,fSeg[cath]->GetAnod(c->GetX(cath)));
-    else
-      c->SetX(cath,fSeg2[cath]->GetAnod(fInput->DetElemId(), c->GetX(cath)));
+  
+  //  apply correction to the coordinate along the anode wire
+  // Force on anod
+  if (fSegmentationType == 1) 
+    c->SetX(cath,fSeg[cath]->GetAnod(c->GetX(cath)));
+  else
+    c->SetX(cath,fSeg2[cath]->GetAnod(fInput->DetElemId(), c->GetX(cath)));
 }
 
 void  AliMUONClusterFinderVS::FindCluster(Int_t i, Int_t j, Int_t cath, AliMUONRawCluster &c){
@@ -1626,7 +1629,7 @@ void AliMUONClusterFinderVS::FindRawClusters()
     } else {
       fSeg2[0] = fInput->Segmentation2(0);
       fSeg2[1] = fInput->Segmentation2(1);
-
+      
       fHitMap[0]  = new AliMUONHitMapA1(fInput->DetElemId(), fSeg2[0], fInput->Digits(0));
       fHitMap[1]  = new AliMUONHitMapA1(fInput->DetElemId(), fSeg2[1], fInput->Digits(1));
     }
@@ -1641,90 +1644,90 @@ void AliMUONClusterFinderVS::FindRawClusters()
 //
 //  Outer Loop over Cathodes
     for (cath=0; cath<2; cath++) {
-
+      
        for (ndig=0; ndig<fInput->NDigits(cath); ndig++) {
-           dig = fInput->Digit(cath, ndig);
-           Int_t padx = dig->PadX();
-           Int_t pady = dig->PadY();
-           if (fHitMap[cath]->TestHit(padx,pady)==kUsed ||fHitMap[0]->TestHit(padx,pady)==kEmpty) {
-               nskip++;
-               continue;
-           }
-           AliDebug(1,Form("\n CATHODE %d CLUSTER %d\n",cath,ncls));
-           AliMUONRawCluster clus;
-           clus.SetMultiplicity(0, 0);
-           clus.SetMultiplicity(1, 0);
-           clus.SetPeakSignal(cath,dig->Signal());
-           clus.SetTrack(0, dig->Hit());
-           clus.SetTrack(1, dig->Track(0));
-           clus.SetTrack(2, dig->Track(1));
-
-           AliDebug(1,Form("idDE %d Padx %d Pady %d", fInput->DetElemId(), padx, pady));
-
-           // tag the beginning of cluster list in a raw cluster
-           clus.SetNcluster(0,-1);
-           Float_t xcu, ycu;
-           if (fSegmentationType == 1) {
-             fSeg[cath]->GetPadC(padx,pady, xcu, ycu, fZPlane);
-             fSector= fSeg[cath]->Sector(padx,pady)/100;
-           } else {
-             fSeg2[cath]->GetPadC(fInput->DetElemId(), padx, pady, xcu, ycu, fZPlane);
-             fSector= fSeg2[cath]->Sector(fInput->DetElemId(), padx, pady)/100;
-           }
-
-
-            
-           FindCluster(padx,pady,cath,clus);
-//          ^^^^^^^^^^^^^^^^^^^^^^^^
-           // center of gravity
-           if (clus.GetX(0)!=0.) clus.SetX(0, clus.GetX(0)/clus.GetCharge(0)); // clus.fX[0] /= clus.fQ[0];
-
-           // Force on anod
-           if (fSegmentationType == 1) 
-             clus.SetX(0,fSeg[0]->GetAnod(clus.GetX(0)));
-           else 
-             clus.SetX(0,fSeg2[0]->GetAnod(fInput->DetElemId(), clus.GetX(0)));
-           if (clus.GetY(0)!=0.) clus.SetY(0, clus.GetY(0)/clus.GetCharge(0)); // clus.fY[0] /= clus.fQ[0];
-           
-           if(clus.GetCharge(1)!=0.) clus.SetX(1, clus.GetX(1)/clus.GetCharge(1));  // clus.fX[1] /= clus.fQ[1];
-                                       
-          // Force on anod
-           if (fSegmentationType == 1) 
-             clus.SetX(1, fSeg[0]->GetAnod(clus.GetX(1)));
-           else 
-             clus.SetX(1, fSeg2[0]->GetAnod(fInput->DetElemId(),clus.GetX(1)));
-           if(clus.GetCharge(1)!=0.) clus.SetY(1, clus.GetY(1)/clus.GetCharge(1));// clus.fY[1] /= clus.fQ[1];
-           
-           clus.SetZ(0, fZPlane);
-           clus.SetZ(1, fZPlane);          
-
-               AliDebug(1,Form("\n Cathode 1 multiplicite %d X(CG) %f Y(CG) %f\n",
-                       clus.GetMultiplicity(0),clus.GetX(0),clus.GetY(0)));
-               AliDebug(1,Form(" Cathode 2 multiplicite %d X(CG) %f Y(CG) %f\n",
-                       clus.GetMultiplicity(1),clus.GetX(1),clus.GetY(1)));
-//      Analyse cluster and decluster if necessary
-//     
-       ncls++;
-       clus.SetNcluster(1,fNRawClusters);
-       clus.SetClusterType(clus.PhysicsContribution());
-
-       fNPeaks=0;
-//
-//
-       Decluster(&clus);
-//
-//      reset Cluster object
-       { // begin local scope
+         dig = fInput->Digit(cath, ndig);
+         Int_t padx = dig->PadX();
+         Int_t pady = dig->PadY();
+         if (fHitMap[cath]->TestHit(padx,pady)==kUsed ||fHitMap[0]->TestHit(padx,pady)==kEmpty) {
+           nskip++;
+           continue;
+         }
+         AliDebug(1,Form("\n CATHODE %d CLUSTER %d\n",cath,ncls));
+         AliMUONRawCluster clus;
+         clus.SetMultiplicity(0, 0);
+         clus.SetMultiplicity(1, 0);
+         clus.SetPeakSignal(cath,dig->Signal());
+         clus.SetTrack(0, dig->Hit());
+         clus.SetTrack(1, dig->Track(0));
+         clus.SetTrack(2, dig->Track(1));
+         
+         AliDebug(1,Form("idDE %d Padx %d Pady %d", fInput->DetElemId(), padx, pady));
+         
+         // tag the beginning of cluster list in a raw cluster
+         clus.SetNcluster(0,-1);
+         Float_t xcu, ycu;
+         if (fSegmentationType == 1) {
+           fSeg[cath]->GetPadC(padx,pady, xcu, ycu, fZPlane);
+           fSector= fSeg[cath]->Sector(padx,pady)/100;
+         } else {
+           fSeg2[cath]->GetPadC(fInput->DetElemId(), padx, pady, xcu, ycu, fZPlane);
+           fSector= fSeg2[cath]->Sector(fInput->DetElemId(), padx, pady)/100;
+         }
+         
+         
+         
+         FindCluster(padx,pady,cath,clus);
+         //^^^^^^^^^^^^^^^^^^^^^^^^
+         // center of gravity
+         if (clus.GetX(0)!=0.) clus.SetX(0, clus.GetX(0)/clus.GetCharge(0)); // clus.fX[0] /= clus.fQ[0];
+         
+         // Force on anod
+         if (fSegmentationType == 1) 
+           clus.SetX(0,fSeg[0]->GetAnod(clus.GetX(0)));
+         else 
+           clus.SetX(0,fSeg2[0]->GetAnod(fInput->DetElemId(), clus.GetX(0)));
+         if (clus.GetY(0)!=0.) clus.SetY(0, clus.GetY(0)/clus.GetCharge(0)); // clus.fY[0] /= clus.fQ[0];
+         
+         if(clus.GetCharge(1)!=0.) clus.SetX(1, clus.GetX(1)/clus.GetCharge(1));  // clus.fX[1] /= clus.fQ[1];
+         
+         // Force on anod
+         if (fSegmentationType == 1) 
+           clus.SetX(1, fSeg[0]->GetAnod(clus.GetX(1)));
+         else 
+           clus.SetX(1, fSeg2[0]->GetAnod(fInput->DetElemId(),clus.GetX(1)));
+         if(clus.GetCharge(1)!=0.) clus.SetY(1, clus.GetY(1)/clus.GetCharge(1));// clus.fY[1] /= clus.fQ[1];
+         
+         clus.SetZ(0, fZPlane);
+         clus.SetZ(1, fZPlane);            
+         
+         AliDebug(1,Form("\n Cathode 1 multiplicite %d X(CG) %f Y(CG) %f\n",
+                         clus.GetMultiplicity(0),clus.GetX(0),clus.GetY(0)));
+         AliDebug(1,Form(" Cathode 2 multiplicite %d X(CG) %f Y(CG) %f\n",
+                         clus.GetMultiplicity(1),clus.GetX(1),clus.GetY(1)));
+         //      Analyse cluster and decluster if necessary
+         //    
+         ncls++;
+         clus.SetNcluster(1,fNRawClusters);
+         clus.SetClusterType(clus.PhysicsContribution());
+         
+         fNPeaks=0;
+         //
+         //
+         Decluster(&clus);
+         //
+         //      reset Cluster object
+         { // begin local scope
            for (int k=0;k<clus.GetMultiplicity(0);k++) clus.SetIndex(k, 0, 0);
-       } // end local scope
-
-       { // begin local scope
+         } // end local scope
+         
+         { // begin local scope
            for (int k=0;k<clus.GetMultiplicity(1);k++) clus.SetIndex(k, 1, 0);
-       } // end local scope
-       
-       clus.SetMultiplicity(0,0);
-       clus.SetMultiplicity(1,0);
-
+         } // end local scope
+         
+         clus.SetMultiplicity(0,0);
+         clus.SetMultiplicity(1,0);
+         
        
        } // end loop ndig
     } // end loop cathodes
@@ -2324,26 +2327,27 @@ void AliMUONClusterFinderVS::Split(AliMUONRawCluster* c)
            }
            FillCluster(&cnew,0,cath);
        } // cathode loop
-       
        cnew.SetClusterType(cnew.PhysicsContribution());
        if (cnew.GetCharge(0)>0 && cnew.GetCharge(1)>0) AddRawCluster(cnew);
        fNPeaks++;
     }
 }
-void AliMUONClusterFinderVS::AddRawCluster(const AliMUONRawCluster& c)
+void AliMUONClusterFinderVS::AddRawCluster(AliMUONRawCluster& c)
 {
   //
   // Add a raw cluster copy to the list
   //
-
-//     AliMUON *pMUON=(AliMUON*)gAlice->GetModule("MUON");
-//     pMUON->GetMUONData()->AddRawCluster(fInput->Chamber(),c); 
-//     fNRawClusters++;
-
+  //     AliMUON *pMUON=(AliMUON*)gAlice->GetModule("MUON");
+  //     pMUON->GetMUONData()->AddRawCluster(fInput->Chamber(),c); 
+  //     fNRawClusters++;
+  
+  // Setting detection element in raw cluster for alignment
+  // BB 19/05/05
+  c.SetDetElementID(fInput->DetElemId());
   
-    TClonesArray &lrawcl = *fRawClusters;
-    new(lrawcl[fNRawClusters++]) AliMUONRawCluster(c);
-    AliDebug(1,Form("\nfNRawClusters %d\n",fNRawClusters));
+  TClonesArray &lrawcl = *fRawClusters;
+  new(lrawcl[fNRawClusters++]) AliMUONRawCluster(c);
+  AliDebug(1,Form("\nfNRawClusters %d\n",fNRawClusters));
 }
 
 AliMUONClusterFinderVS& AliMUONClusterFinderVS
index 822063d..9b2c56a 100644 (file)
@@ -53,7 +53,7 @@ class AliMUONClusterFinderVS : public TObject
     virtual void   FillCluster(AliMUONRawCluster *cluster, Int_t cath);
     virtual void   FillCluster(AliMUONRawCluster *cluster) {FillCluster(cluster,1,0);}
 // Add a new raw cluster    
-    virtual void AddRawCluster(const AliMUONRawCluster& cluster);
+    virtual void AddRawCluster(AliMUONRawCluster& cluster);
 //  Set tracks for debugging    
     virtual void SetTracks(Int_t t1, Int_t t2) {fTrack[0]=t1; fTrack[1]=t2;}
 //  debug level
@@ -82,13 +82,13 @@ class AliMUONClusterFinderVS : public TObject
     Float_t                 fGhostChi2Cut;       // Cut in charge matching chi2
                                                 // (2 degrees of freedom)
                                                  // Used by ghost removal
-// Current decluster result    
+    // Current decluster result    
     Int_t                   fMul[2];             // current multiplicity
     Int_t                   fNPeaks;             // number of local maxima
     Int_t                   fNRawClusters;       // Number of Raw Clusters
     TClonesArray*           fRawClusters;        // array of cluster per ch.
 
-// Local data store    
+    // Local data store    
     AliMUONDigit*           fDig[100][2];        // current list of digits 
     Int_t                   fIx[100][2];         // current list of x-pad-coord.
     Int_t                   fIy[100][2];         // current list of y-pad-coord.
@@ -101,7 +101,7 @@ class AliMUONClusterFinderVS : public TObject
     Float_t                 fZPlane;             // currenz z-plane position
     Int_t                   fSector;             // current sector
     
-// Current Fit
+    // Current Fit
     Double_t                 fXFit[2];         // x-coordinate
     Double_t                 fYFit[2];         // y-coordinate
     Double_t                 fQrFit[2];        // charge ratio
@@ -111,15 +111,15 @@ class AliMUONClusterFinderVS : public TObject
     Float_t                  fQrInit[2];       // start values
     Int_t                    fFitStat;         // status of fit
     
-// Selected track for debugging
+    // Selected track for debugging
     Int_t                    fTrack[2];        // Only digits with main contributions from these tracks are
-                                               // considered 
+    // considered 
     Int_t                    fDebugLevel;      // prinout control
     Int_t                    fSegmentationType;// new seg
-
-//  Return pointer to raw clusters    
+    
+    //  Return pointer to raw clusters    
     ClassDef(AliMUONClusterFinderVS,2) //Class for clustering and reconstruction of space points
-};
+      };
 #endif
 
 
index b99ab7f..ab82979 100644 (file)
@@ -40,7 +40,7 @@ AliMUONClusterInput::AliMUONClusterInput()
     fChargeCorrel(1.),
     fSegmentationType(1),
     fDetElemId(0)
-
+  
 {
   fDigits[0]=0;
   fDigits[1]=0;
@@ -192,20 +192,20 @@ void AliMUONClusterInput::SetDigits(Int_t chamber, Int_t idDE, TClonesArray* dig
 void  AliMUONClusterInput::SetCluster(AliMUONRawCluster* cluster)
 {
 // Set the current cluster
-    //PH printf("\n %p \n", cluster);
-    fCluster=cluster;
-    Float_t qtot;
-    Int_t   i, cath, ix, iy;
-    AliMUONDigit* digit;
-    fNmul[0]=cluster->GetMultiplicity(0);
-    fNmul[1]=cluster->GetMultiplicity(1);
-    //PH printf("\n %p %p ", fDigits[0], fDigits[1]);
-    
-    for (cath=0; cath<2; cath++) {
-       qtot=0;
-       for (i=0; i<fNmul[cath]; i++) {
-           // pointer to digit
-           digit =(AliMUONDigit*)
+  //PH printf("\n %p \n", cluster);
+  fCluster=cluster;
+  Float_t qtot;
+  Int_t   i, cath, ix, iy;
+  AliMUONDigit* digit;
+  fNmul[0]=cluster->GetMultiplicity(0);
+  fNmul[1]=cluster->GetMultiplicity(1);
+  //PH printf("\n %p %p ", fDigits[0], fDigits[1]);
+  
+  for (cath=0; cath<2; cath++) {
+    qtot=0;
+    for (i=0; i<fNmul[cath]; i++) {
+      // pointer to digit
+      digit =(AliMUONDigit*)
                (fDigits[cath]->UncheckedAt(cluster->GetIndex(i,cath)));
            // pad coordinates
            ix = digit->PadX();
@@ -225,7 +225,6 @@ void  AliMUONClusterInput::SetCluster(AliMUONRawCluster* cluster)
              fSegmentation[cath]->GetPadC(ix,iy,xc,yc,fZ);
            else 
              fSegmentation2[cath]->GetPadC(fDetElemId,ix,iy,xc,yc,fZ);
-           
        } // loop over cluster digits
        fQtot[cath]=qtot;
        fChargeTot[cath]=Int_t(qtot);  
index 7bebd39..16b41ab 100644 (file)
@@ -84,7 +84,7 @@ class AliMUONClusterInput : public TObject
     Float_t              fZ;               // ! Current z-position
     Float_t              fChargeCorrel;    // ! charge correlation 
     Int_t                fSegmentationType;// ! Segmentation type old or new
-    Int_t                fDetElemId;       // ! detection elt id
+    Int_t                fDetElemId;       // ! detection elt id    
 
     // Fitter
     static TMinuit*      fgMinuit;          // ! Fitter
index 2c915ac..70e56aa 100644 (file)
@@ -50,6 +50,7 @@ AliMUONRawCluster::AliMUONRawCluster()
     }
     fNcluster[0]=fNcluster[1]=-1;
     fGhost=0;
+    fDetElementID = 0;
 }
 //____________________________________________________
 Int_t AliMUONRawCluster::Compare(const TObject *obj) const
@@ -397,3 +398,4 @@ Int_t AliMUONRawCluster::SetChi2(Int_t i, Float_t chi2)
   }
   else return 0;
 }
+
index 91de82c..02ae22d 100644 (file)
@@ -15,7 +15,6 @@
 #include <TObject.h>
 #include <TMath.h> // because of inline funtion GetRadius
 #include <TArrayF.h>
-
 class AliMUONRawCluster : public TObject {
 
 public:
@@ -49,11 +48,13 @@ public:
    Int_t        GetOffset(Int_t i, Int_t j) const;
    Float_t      GetContrib(Int_t i, Int_t j) const;
    Int_t        GetPhysics(Int_t i) const;
+   Int_t        GetDetElementID() const ; // BB added
 
    Int_t        SetCharge(Int_t i,Int_t Q);
    Int_t        SetX(Int_t i, Float_t X);
    Int_t        SetY(Int_t i, Float_t Y);
    Int_t        SetZ(Int_t i, Float_t Z);
+   void         SetDetElementID(Int_t ID); // BB Added
    Int_t        SetTrack(Int_t i, Int_t track);
    Int_t        SetPeakSignal(Int_t i, Int_t peaksignal);
    Int_t        SetMultiplicity(Int_t i, Int_t mul);
@@ -87,7 +88,7 @@ private:
                                   // 2 none give satisfactory chi2
    Int_t       fNcluster[2];      // Number of clusters
    Float_t     fChi2[2];          // Chi**2 of fit
-
+   Int_t       fDetElementID;         // ID number of the detection element (slat) on which the cluster is found. 
    ClassDef(AliMUONRawCluster,1)  //Cluster class for MUON
 };
 
@@ -117,6 +118,11 @@ inline  void  AliMUONRawCluster::SetContrib(Int_t i, Int_t j, Float_t contrib)
 inline  void  AliMUONRawCluster::SetPhysics(Int_t i, Int_t physics)
 { fPhysicsMap[i] = physics; }
 
+inline void AliMUONRawCluster::SetDetElementID(Int_t ID)
+{ fDetElementID = ID; }
+
+inline Int_t AliMUONRawCluster::GetDetElementID() const
+{ return fDetElementID;}
 #endif
 
 
index 81dceaa..33aceae 100644 (file)
@@ -239,10 +239,9 @@ void MUONrecpoints(char * filename="galice.root", Int_t event2Check=0) {
       printf(">>> Chamber %d\n",ichamber);
       sprintf(branchname,"MUONRawClusters%d",ichamber+1);
       //printf(">>>  branchname %s\n",branchname);
-  
       Int_t irecpoint, nrecpoints;
       nrecpoints = (Int_t) muondata.RawClusters(ichamber)->GetEntriesFast();
-      
+      printf("number of recpoints = %6d \n",nrecpoints);
       for(irecpoint=0; irecpoint<nrecpoints; irecpoint++) {
        mRecPoint = static_cast<AliMUONRawCluster*>(muondata.RawClusters(ichamber)->At(irecpoint));
 //     Int_t       fTracks[3];        //labels of overlapped tracks
@@ -278,9 +277,12 @@ void MUONrecpoints(char * filename="galice.root", Int_t event2Check=0) {
        Float_t z1 = mRecPoint->GetZ(1);
        Float_t chi2_0 =  mRecPoint->GetChi2(0);
        Float_t chi2_1 =  mRecPoint->GetChi2(1);
-
-       printf(">>> RecPoint %4d x %6.3f %6.3f y %6.3f %6.3f z %6.3f %6.3f Q0 %4d  Q1 %4d Hit %4d Track1 %4d Track2 %4d Chi2 %6.3f %6.3f \n",
-irecpoint, x0, x1, y0, y1, z0, z1, Q0, Q1, Track0, Track1, Track2, chi2_0, chi2_1);
+       //      Int_t de = mRecPoint->GetDetElementID();
+       Int_t de = mRecPoint->DetElemId();
+       //      printf(">>> RecPoint %4d x %6.3f %6.3f y %6.3f %6.3f z %6.3f %6.3f Q0 %4d  Q1 %4d Hit %4d Track1 %4d Track2 %4d Chi2 %6.3f %6.3f \n",
+       //irecpoint, x0, x1, y0, y1, z0, z1, Q0, Q1, Track0, Track1, Track2, chi2_0, chi2_1);
+       cout << mRecPoint->DetElemId() << endl;
+       printf(">>> RecPoint %4d x %6.3f y %6.3f z %6.3f DetElem %2d \n",irecpoint,x0,y0,z0,de);
       } // end recpoint loop
     } // end chamber loop
     muondata.ResetRawClusters();