]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSClusterizerv1.cxx
Some other problem with the HP compiler fixed.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSClusterizerv1.cxx
index 057127704288ad631a7370614239720225791983..9936bbdd519850fafb0b5788593dafc4c673b9f9 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 //_________________________________________________________________________
-// A brief description of the class
-//*-- Author : Yves Schutz  SUBATECH 
+//  Implementation version 1 of the clusterization algorithm 
+// 
+//*-- Author: Yves Schutz (SUBATECH) 
 //////////////////////////////////////////////////////////////////////////////
 
 // --- ROOT system ---
@@ -24,7 +27,7 @@
 
 // --- Standard library ---
 
-#include <iostream>
+#include <iostream.h>
 
 // --- AliRoot header files ---
 
@@ -40,6 +43,8 @@ ClassImp(AliPHOSClusterizerv1)
 //____________________________________________________________________________
 AliPHOSClusterizerv1::AliPHOSClusterizerv1()
 {
+  // default ctor (to be used)
+
   fA                       = 0.;
   fB                       = 0.01 ;
   fNumberOfEmcClusters     = 0 ; 
@@ -55,9 +60,13 @@ AliPHOSClusterizerv1::AliPHOSClusterizerv1()
 //____________________________________________________________________________
 Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)
 {
-  // neigbours are defined as digits having at least common vertex
-  // The order of A and B in AreNeighbours(A,B) is important: first (A) should be digit 
-  // in cluster, which compared with digits not clusterized yet  
+  // Gives the neighbourness of two digits = 0 are not neighbour but continue searching 
+  //                                       = 1 are neighbour
+  //                                       = 2 are not neighbour but do not continue searching
+  // neighbours are defined as digits having at least common vertex
+  // The order of d1 and d2 is important: first (d1) should be a digit already in a cluster 
+  //                                      which is compared to a digit (d2)  not yet in a cluster  
+
   Int_t rv = 0 ; 
 
   AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;
@@ -69,10 +78,10 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)
   geom->AbsToRelNumbering(d2->GetId(), relid2) ; 
  
   if ( (relid1[0] == relid2[0]) && (relid1[1]==relid2[1]) ) { // inside the same PHOS module and the same PPSD Module 
-    Int_t RowDiff = TMath::Abs( relid1[2] - relid2[2] ) ;  
-    Int_t ColDiff = TMath::Abs( relid1[3] - relid2[3] ) ;  
+    Int_t rowdiff = TMath::Abs( relid1[2] - relid2[2] ) ;  
+    Int_t coldiff = TMath::Abs( relid1[3] - relid2[3] ) ;  
     
-    if (( ColDiff<=1 )  && ( RowDiff <= 1 )){
+    if (( coldiff <= 1 )  && ( rowdiff <= 1 )){
       rv = 1 ; 
     }
     else {
@@ -94,7 +103,7 @@ Int_t AliPHOSClusterizerv1::AreNeighbours(AliPHOSDigit * d1, AliPHOSDigit * d2)
 //____________________________________________________________________________
 void AliPHOSClusterizerv1::FillandSort(const DigitsList * dl, TObjArray * tl) 
 {
-  // copies the digits with energy above thershold and sorts the list
+  // Copies the digits with energy above thershold and sorts the list
   // according to increasing Id number
 
   AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;
@@ -103,20 +112,28 @@ void AliPHOSClusterizerv1::FillandSort(const DigitsList * dl, TObjArray * tl)
   TIter next(dl) ; 
   AliPHOSDigit * digit ;
   
+
   while ( (digit = (AliPHOSDigit *)next()) ) { 
-    
+
+//     cout << " clusterizerv1 " << endl ;
+//     int nprim = digit->GetNprimary() ;
+//     int * aprim = digit->GetPrimary() ;
+//     for ( int ii = 0 ; ii < nprim ; ii++)
+//       cout << ii << " prim = " << aprim[ii] << endl ;
+
     Int_t id    = digit->GetId() ; 
     Float_t ene = Calibrate(digit->GetAmp()) ; 
     geom->AbsToRelNumbering(id, relid) ;
-    
     if(relid[1]==0){ // EMC
-      if ( ene > fEmcEnergyThreshold ) 
+      if ( ene > fEmcEnergyThreshold )
        tl->Add(digit) ;
     }
 
     else { //Ppsd
       if ( ene > fPpsdEnergyThreshold )
-       tl->Add(digit) ;        
+       tl->Add(digit) ; 
     }
 
   }
@@ -126,13 +143,18 @@ void AliPHOSClusterizerv1::FillandSort(const DigitsList * dl, TObjArray * tl)
 //____________________________________________________________________________
 void AliPHOSClusterizerv1:: GetNumberOfClustersFound(Int_t * numb) 
 {
- numb[0] = fNumberOfEmcClusters ; 
- numb[1] = fNumberOfPpsdClusters ; 
+  // Fills numb with the number of EMC  (numb[0]) clusters found
+  //                               PPSD (numb[1]) clusters found
+
+  numb[0] = fNumberOfEmcClusters ; 
+  numb[1] = fNumberOfPpsdClusters ; 
 }
 
 //____________________________________________________________________________
 Bool_t AliPHOSClusterizerv1::IsInEmc(AliPHOSDigit * digit) 
 {
+  // Tells if (true) or not (false) the digit is in a PHOS-EMC module
   Bool_t rv = kFALSE ; 
 
   AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;  
@@ -147,65 +169,76 @@ Bool_t AliPHOSClusterizerv1::IsInEmc(AliPHOSDigit * digit)
 }
 
 //____________________________________________________________________________
-void AliPHOSClusterizerv1::MakeClusters(const DigitsList * dl, RecPointsList * emcl, RecPointsList * ppsdl)
+void AliPHOSClusterizerv1::MakeClusters(const DigitsList * dl, 
+                                       AliPHOSRecPoint::RecPointsList * emcl, 
+                                       AliPHOSRecPoint::RecPointsList * ppsdl)
 {
+  // Steering method to construct the clusters stored in a list of Reconstructed Points
+  // A cluster is defined as a list of neighbour digits
+  
   // Fill and sort the working digits list
-  TObjArray TempoDigitsList( dl->GetEntries() ) ;
-  FillandSort(dl, &TempoDigitsList) ; 
+  TObjArray tempodigitslist( dl->GetEntries() ) ;
+  FillandSort(dl, &tempodigitslist) ; 
 
   // Clusterization starts  
-  TIter nextdigit(&TempoDigitsList) ; 
+  TIter nextdigit(&tempodigitslist) ; 
   AliPHOSDigit * digit ; 
-  Bool_t NotRemoved = kTRUE ;
-  cout << "Cluster1" << endl;
+  Bool_t notremoved = kTRUE ;
+
   while ( (digit = (AliPHOSDigit *)nextdigit()) ) { // scan over the list of digits
     AliPHOSRecPoint * clu ; 
    
-    int * ClusterDigitsList[dl->GetEntries()] ;   
+    AliPHOSDigit ** clusterdigitslist = new AliPHOSDigit*[dl->GetEntries()] ;   
     Int_t index ;
     if (( ( IsInEmc(digit) ) && ( Calibrate(digit->GetAmp() ) > fEmcClusteringThreshold ) ) || 
         ( ( !IsInEmc(digit) ) && ( Calibrate(digit->GetAmp() ) > fPpsdClusteringThreshold ) ) ) {
   
       Int_t iDigitInCluster = 0 ; 
 
-      if  ( IsInEmc(digit) ) { 
-        emcl->Print("");
-       cout << "Cluster2 EMC" << endl;  
-        new ((*emcl)[fNumberOfEmcClusters]) AliPHOSEmcRecPoint(fW0, fLocMaxCut) ; // start a new EMC RecPoint
+      if  ( IsInEmc(digit) ) {   
+       // start a new EMC RecPoint
+       //        new ((*emcl)[fNumberOfEmcClusters]) AliPHOSEmcRecPoint(fW0, fLocMaxCut) ; if TClonesArray
+       (*emcl)[fNumberOfEmcClusters] = new  AliPHOSEmcRecPoint(fW0, fLocMaxCut) ;
+
        clu = (AliPHOSEmcRecPoint *) (*emcl)[fNumberOfEmcClusters] ; 
        fNumberOfEmcClusters++ ; 
        clu->AddDigit(*digit, Calibrate(digit->GetAmp())) ; 
 
-       ClusterDigitsList[iDigitInCluster] = (int* ) digit ;    
+       clusterdigitslist[iDigitInCluster] = digit ;    
        iDigitInCluster++ ; 
-       TempoDigitsList.Remove(digit) ; 
+       tempodigitslist.Remove(digit) ; 
+
+
       }
 
       else { 
-       cout << "Cluster2 PPSD" << endl;
-       new ((*ppsdl)[fNumberOfPpsdClusters]) AliPHOSPpsdRecPoint() ; // start a new PPSD cluster
+       
+       // start a new PPSD cluster
+       // new ((*ppsdl)[fNumberOfPpsdClusters]) AliPHOSPpsdRecPoint() ;  if TClonesArray
+       (*ppsdl)[fNumberOfPpsdClusters] = new AliPHOSPpsdRecPoint() ;
+       
        clu =  (AliPHOSPpsdRecPoint *) ppsdl->At(fNumberOfPpsdClusters)  ;  
        fNumberOfPpsdClusters++ ; 
-       clu->AddDigit(*digit, 0.) ;     
-       ClusterDigitsList[iDigitInCluster] = (int* ) digit ;    
+       clu->AddDigit(*digit, Calibrate(digit->GetAmp()) ) ;    
+       clusterdigitslist[iDigitInCluster] = digit  ;   
        iDigitInCluster++ ; 
-       TempoDigitsList.Remove(digit) ; 
+       tempodigitslist.Remove(digit) ; 
         nextdigit.Reset() ;
        
        // Here we remove resting EMC digits, which cannot make cluster
 
-        if( NotRemoved ) { 
+        if( notremoved ) { 
          
          while( ( digit = (AliPHOSDigit *)nextdigit() ) ) {
            
             if( IsInEmc(digit) ) 
-             TempoDigitsList.Remove(digit) ;
+             tempodigitslist.Remove(digit) ;
             else 
              break ;
          
          } // while digit  
          
-       } // if NotRemoved 
+       } // if notremoved 
        
       } // else        
       
@@ -214,7 +247,7 @@ void AliPHOSClusterizerv1::MakeClusters(const DigitsList * dl, RecPointsList * e
       AliPHOSDigit * digitN ; 
       index = 0 ;
       while (index < iDigitInCluster){ // scan over digits already in cluster 
-       digit = (AliPHOSDigit *) ClusterDigitsList[index]  ;      
+       digit =  clusterdigitslist[index]  ;      
        index++ ; 
         while ( (digitN = (AliPHOSDigit *)nextdigit()) ) { // scan over the reduced list of digits 
          Int_t ineb = AreNeighbours(digit, digitN);   //  call (digit,digitN) in THAT oder !!!!!
@@ -222,10 +255,10 @@ void AliPHOSClusterizerv1::MakeClusters(const DigitsList * dl, RecPointsList * e
           case 0 :   // not a neighbour
            break ;      
          case 1 :   // are neighbours 
-           clu->AddDigit( *digitN, Calibrate( digitN->GetAmp() ) ) ;
-           ClusterDigitsList[iDigitInCluster] =(int*) digitN ; 
+           clu->AddDigit(*digitN, Calibrate( digitN->GetAmp() ) ) ;
+           clusterdigitslist[iDigitInCluster] = digitN ; 
            iDigitInCluster++ ; 
-           TempoDigitsList.Remove(digitN) ;
+           tempodigitslist.Remove(digitN) ;
            break ;
           case 2 :   // too far from each other
            goto endofloop;   
@@ -240,14 +273,19 @@ void AliPHOSClusterizerv1::MakeClusters(const DigitsList * dl, RecPointsList * e
  
    }  //below energy theshold  
   
+    delete[] clusterdigitslist ; 
+    
   } // while digit
 
-  TempoDigitsList.Clear() ; 
+  tempodigitslist.Clear() ; 
+
 }
 
 //____________________________________________________________________________
 void AliPHOSClusterizerv1::PrintParameters() 
 {
+  // Print the energy thresholds 
+
   cout << "PHOS Clusterizer version 1 :" << endl 
        << "                       EMC  Clustering threshold = " << fEmcClusteringThreshold << endl
        << "                       EMC  Energy threshold     = " << fEmcEnergyThreshold << endl