ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//////////////////////////////////////////////////////////////////////////////
//  Clusterization class for IHEP reconstruction.
// Performs clusterization (collects neighbouring active cells)
// It differs from AliPHOSClusterizerv1 in neighbour definition only
//*-- Author: Boris Polichtchouk, IHEP

// --- ROOT system ---
#include "TBenchmark.h"

// --- Standard library ---

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliPHOSClusterizerv2.h"
#include "AliPHOSEvalRecPoint.h"
#include "AliPHOSRecCpvManager.h"
#include "AliPHOSRecEmcManager.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSDigit.h"

ClassImp(AliPHOSClusterizerv2)

//____________________________________________________________________________
AliPHOSClusterizerv2::AliPHOSClusterizerv2() : AliPHOSClusterizerv1() 
{}

//____________________________________________________________________________
AliPHOSClusterizerv2::AliPHOSClusterizerv2(AliPHOSGeometry *geom):
AliPHOSClusterizerv1(geom)
{}

//____________________________________________________________________________
void AliPHOSClusterizerv2::GetNumberOfClustersFound(int* numb) const
{
  // Returns the number of found EMC and CPV rec.points

  numb[0] = fEMCRecPoints->GetEntries();  
  numb[1] = fCPVRecPoints->GetEntries();  
}

//____________________________________________________________________________
void AliPHOSClusterizerv2::Digits2Clusters(Option_t* option)
{
  // Steering method

  if(strstr(option,"tim"))
    gBenchmark->Start("PHOSClusterizer"); 
  
  if(strstr(option,"print"))
    Print() ; 
}
//   AliPHOSGetter * gime = AliPHOSGetter::Instance() ; 

//   TFolder* wPoolF =  gime->PhosLoader()->GetDetectorDataFolder();
  
//   TObjArray* wPool = new TObjArray(400);
//   wPool->SetName("SmartPoints");
//   wPoolF->Add(wPool);
//   wPoolF->Add(this);

//   Int_t nevents = gime->MaxEvent() ;
//   Int_t ievent ;

//   for(ievent = 0; ievent<nevents; ievent++) {
    
//     gime->Event(ievent,"D") ;
    
//     AliInfo(Form("MakeClusters invoked..")) ;
//     MakeClusters() ;
//     AliInfo(Form("MakeClusters done.")) ;


//     //SmartRecPoints will communicate with wPool.

//     AliPHOSEvalRecPoint* rp=0;

//     // CPV reconstruction

//     AliPHOSRecCpvManager* recCpv = new AliPHOSRecCpvManager();
//     wPoolF->Add(recCpv);

//     Int_t iPoint; //loop variable

//     for(iPoint=0; iPoint<gime->CpvRecPoints()->GetEntriesFast(); iPoint++) {
//       rp = new AliPHOSEvalRecPoint(iPoint, kTRUE);
//       rp->MakeJob();
//     }

//     AliPHOSEvalRecPoint pt;
//     pt.UpdateWorkingPool();

//     TObjArray * cpvRecPoints = gime->CpvRecPoints() ; 
//     Int_t nOldCpv = cpvRecPoints->GetEntries();
//     cpvRecPoints->Delete();
//     cpvRecPoints->Compress();

//     Int_t i; //loop variable

//     for(i=0; i<wPool->GetEntries(); i++)
//       cpvRecPoints->Add(wPool->At(i));

//     wPool->Clear();
//     wPool->Compress();

//     wPoolF->Remove(recCpv);
//     delete recCpv;

//     AliInfo(Form("       %d", gime->CpvRecPoints()->GetEntries() )) ;
//     AliInfo(Form("       %d cpvRecPoints", cpvRecPoints->GetEntries() )) ;


//     // Now Emc reconstruction

//     AliPHOSRecEmcManager* recEmc = new AliPHOSRecEmcManager();
//     wPoolF->Add(recEmc);

//     for(iPoint=0; iPoint<gime->EmcRecPoints()->GetEntriesFast(); iPoint++) {
//       rp = new AliPHOSEvalRecPoint(iPoint, kFALSE);
//       rp->MakeJob();
//     }

//     pt.UpdateWorkingPool();

//     TObjArray * emcRecPoints = gime->EmcRecPoints() ; 
//     Int_t nOldEmc = emcRecPoints->GetEntries();
//     emcRecPoints->Delete();
//     emcRecPoints->Compress();

//     for(i=0; i<wPool->GetEntries(); i++)
//       emcRecPoints->Add(wPool->At(i));

//     wPool->Clear();
//     wPool->Compress();

//     wPoolF->Remove(recEmc);
//     delete recEmc;

//     TString message ; 
//     message  = "       %d  OLD cpvRecPoints\n" ; 
//     message += "       %d\n" ; 
//     message += "       %d cpvRecPoints\n" ; 

//     message += "       %d OLD emcRecPoints " ; 
//     message += "       %d\n" ;
//     message += "       %d emcRecPoints\n" ;

//     AliInfo(Form("%s", message.Data(), 
// 	 nOldCpv, 
// 	 gime->CpvRecPoints()->GetEntries(),cpvRecPoints->GetEntries(), 
// 	 nOldEmc, 
// 	 gime->EmcRecPoints()->GetEntries(), emcRecPoints->GetEntries() )); 
    

//     WriteRecPoints();


//   } // loop over events

//   if(strstr(option,"tim")) {
//     gBenchmark->Stop("PHOSClusterizer");
//     AliInfo(Form("took %f seconds for Clusterizing", gBenchmark->GetCpuTime("PHOSClusterizer") )) ;
//   }
// }

//____________________________________________________________________________
Int_t AliPHOSClusterizerv2::AreNeighbours(AliPHOSDigit* d1, AliPHOSDigit* d2) const
{
  // Points are neighbours if they have common edge.
  // Points with common vertex are NOT neighbours.
  // This treatment of neighbourship is the part of 
  // IHEP algorithm of clusterization.

  // 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
  // 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 ; 

  Int_t relid1[4] ; 
  fGeom->AbsToRelNumbering(d1->GetId(), relid1) ; 

  Int_t relid2[4] ; 
  fGeom->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] ) ;  
    
    if ( ( (coldiff < 1) && (rowdiff <= 1) ) || ( ( coldiff <= 1 )  && ( rowdiff < 1 ) ) ){
      rv = 1 ; 
    }
    else {
      if((relid2[2] > relid1[2]) && (relid2[3] > relid1[3]+1)) 
	rv = 2; //  Difference in row numbers is too large to look further 
    }

  } 
  else {
    
    if( (relid1[0] < relid2[0]) || (relid1[1] < relid2[1]) )  
      rv=2 ;

  }

  return rv ; 

}
 AliPHOSClusterizerv2.cxx:1
 AliPHOSClusterizerv2.cxx:2
 AliPHOSClusterizerv2.cxx:3
 AliPHOSClusterizerv2.cxx:4
 AliPHOSClusterizerv2.cxx:5
 AliPHOSClusterizerv2.cxx:6
 AliPHOSClusterizerv2.cxx:7
 AliPHOSClusterizerv2.cxx:8
 AliPHOSClusterizerv2.cxx:9
 AliPHOSClusterizerv2.cxx:10
 AliPHOSClusterizerv2.cxx:11
 AliPHOSClusterizerv2.cxx:12
 AliPHOSClusterizerv2.cxx:13
 AliPHOSClusterizerv2.cxx:14
 AliPHOSClusterizerv2.cxx:15
 AliPHOSClusterizerv2.cxx:16
 AliPHOSClusterizerv2.cxx:17
 AliPHOSClusterizerv2.cxx:18
 AliPHOSClusterizerv2.cxx:19
 AliPHOSClusterizerv2.cxx:20
 AliPHOSClusterizerv2.cxx:21
 AliPHOSClusterizerv2.cxx:22
 AliPHOSClusterizerv2.cxx:23
 AliPHOSClusterizerv2.cxx:24
 AliPHOSClusterizerv2.cxx:25
 AliPHOSClusterizerv2.cxx:26
 AliPHOSClusterizerv2.cxx:27
 AliPHOSClusterizerv2.cxx:28
 AliPHOSClusterizerv2.cxx:29
 AliPHOSClusterizerv2.cxx:30
 AliPHOSClusterizerv2.cxx:31
 AliPHOSClusterizerv2.cxx:32
 AliPHOSClusterizerv2.cxx:33
 AliPHOSClusterizerv2.cxx:34
 AliPHOSClusterizerv2.cxx:35
 AliPHOSClusterizerv2.cxx:36
 AliPHOSClusterizerv2.cxx:37
 AliPHOSClusterizerv2.cxx:38
 AliPHOSClusterizerv2.cxx:39
 AliPHOSClusterizerv2.cxx:40
 AliPHOSClusterizerv2.cxx:41
 AliPHOSClusterizerv2.cxx:42
 AliPHOSClusterizerv2.cxx:43
 AliPHOSClusterizerv2.cxx:44
 AliPHOSClusterizerv2.cxx:45
 AliPHOSClusterizerv2.cxx:46
 AliPHOSClusterizerv2.cxx:47
 AliPHOSClusterizerv2.cxx:48
 AliPHOSClusterizerv2.cxx:49
 AliPHOSClusterizerv2.cxx:50
 AliPHOSClusterizerv2.cxx:51
 AliPHOSClusterizerv2.cxx:52
 AliPHOSClusterizerv2.cxx:53
 AliPHOSClusterizerv2.cxx:54
 AliPHOSClusterizerv2.cxx:55
 AliPHOSClusterizerv2.cxx:56
 AliPHOSClusterizerv2.cxx:57
 AliPHOSClusterizerv2.cxx:58
 AliPHOSClusterizerv2.cxx:59
 AliPHOSClusterizerv2.cxx:60
 AliPHOSClusterizerv2.cxx:61
 AliPHOSClusterizerv2.cxx:62
 AliPHOSClusterizerv2.cxx:63
 AliPHOSClusterizerv2.cxx:64
 AliPHOSClusterizerv2.cxx:65
 AliPHOSClusterizerv2.cxx:66
 AliPHOSClusterizerv2.cxx:67
 AliPHOSClusterizerv2.cxx:68
 AliPHOSClusterizerv2.cxx:69
 AliPHOSClusterizerv2.cxx:70
 AliPHOSClusterizerv2.cxx:71
 AliPHOSClusterizerv2.cxx:72
 AliPHOSClusterizerv2.cxx:73
 AliPHOSClusterizerv2.cxx:74
 AliPHOSClusterizerv2.cxx:75
 AliPHOSClusterizerv2.cxx:76
 AliPHOSClusterizerv2.cxx:77
 AliPHOSClusterizerv2.cxx:78
 AliPHOSClusterizerv2.cxx:79
 AliPHOSClusterizerv2.cxx:80
 AliPHOSClusterizerv2.cxx:81
 AliPHOSClusterizerv2.cxx:82
 AliPHOSClusterizerv2.cxx:83
 AliPHOSClusterizerv2.cxx:84
 AliPHOSClusterizerv2.cxx:85
 AliPHOSClusterizerv2.cxx:86
 AliPHOSClusterizerv2.cxx:87
 AliPHOSClusterizerv2.cxx:88
 AliPHOSClusterizerv2.cxx:89
 AliPHOSClusterizerv2.cxx:90
 AliPHOSClusterizerv2.cxx:91
 AliPHOSClusterizerv2.cxx:92
 AliPHOSClusterizerv2.cxx:93
 AliPHOSClusterizerv2.cxx:94
 AliPHOSClusterizerv2.cxx:95
 AliPHOSClusterizerv2.cxx:96
 AliPHOSClusterizerv2.cxx:97
 AliPHOSClusterizerv2.cxx:98
 AliPHOSClusterizerv2.cxx:99
 AliPHOSClusterizerv2.cxx:100
 AliPHOSClusterizerv2.cxx:101
 AliPHOSClusterizerv2.cxx:102
 AliPHOSClusterizerv2.cxx:103
 AliPHOSClusterizerv2.cxx:104
 AliPHOSClusterizerv2.cxx:105
 AliPHOSClusterizerv2.cxx:106
 AliPHOSClusterizerv2.cxx:107
 AliPHOSClusterizerv2.cxx:108
 AliPHOSClusterizerv2.cxx:109
 AliPHOSClusterizerv2.cxx:110
 AliPHOSClusterizerv2.cxx:111
 AliPHOSClusterizerv2.cxx:112
 AliPHOSClusterizerv2.cxx:113
 AliPHOSClusterizerv2.cxx:114
 AliPHOSClusterizerv2.cxx:115
 AliPHOSClusterizerv2.cxx:116
 AliPHOSClusterizerv2.cxx:117
 AliPHOSClusterizerv2.cxx:118
 AliPHOSClusterizerv2.cxx:119
 AliPHOSClusterizerv2.cxx:120
 AliPHOSClusterizerv2.cxx:121
 AliPHOSClusterizerv2.cxx:122
 AliPHOSClusterizerv2.cxx:123
 AliPHOSClusterizerv2.cxx:124
 AliPHOSClusterizerv2.cxx:125
 AliPHOSClusterizerv2.cxx:126
 AliPHOSClusterizerv2.cxx:127
 AliPHOSClusterizerv2.cxx:128
 AliPHOSClusterizerv2.cxx:129
 AliPHOSClusterizerv2.cxx:130
 AliPHOSClusterizerv2.cxx:131
 AliPHOSClusterizerv2.cxx:132
 AliPHOSClusterizerv2.cxx:133
 AliPHOSClusterizerv2.cxx:134
 AliPHOSClusterizerv2.cxx:135
 AliPHOSClusterizerv2.cxx:136
 AliPHOSClusterizerv2.cxx:137
 AliPHOSClusterizerv2.cxx:138
 AliPHOSClusterizerv2.cxx:139
 AliPHOSClusterizerv2.cxx:140
 AliPHOSClusterizerv2.cxx:141
 AliPHOSClusterizerv2.cxx:142
 AliPHOSClusterizerv2.cxx:143
 AliPHOSClusterizerv2.cxx:144
 AliPHOSClusterizerv2.cxx:145
 AliPHOSClusterizerv2.cxx:146
 AliPHOSClusterizerv2.cxx:147
 AliPHOSClusterizerv2.cxx:148
 AliPHOSClusterizerv2.cxx:149
 AliPHOSClusterizerv2.cxx:150
 AliPHOSClusterizerv2.cxx:151
 AliPHOSClusterizerv2.cxx:152
 AliPHOSClusterizerv2.cxx:153
 AliPHOSClusterizerv2.cxx:154
 AliPHOSClusterizerv2.cxx:155
 AliPHOSClusterizerv2.cxx:156
 AliPHOSClusterizerv2.cxx:157
 AliPHOSClusterizerv2.cxx:158
 AliPHOSClusterizerv2.cxx:159
 AliPHOSClusterizerv2.cxx:160
 AliPHOSClusterizerv2.cxx:161
 AliPHOSClusterizerv2.cxx:162
 AliPHOSClusterizerv2.cxx:163
 AliPHOSClusterizerv2.cxx:164
 AliPHOSClusterizerv2.cxx:165
 AliPHOSClusterizerv2.cxx:166
 AliPHOSClusterizerv2.cxx:167
 AliPHOSClusterizerv2.cxx:168
 AliPHOSClusterizerv2.cxx:169
 AliPHOSClusterizerv2.cxx:170
 AliPHOSClusterizerv2.cxx:171
 AliPHOSClusterizerv2.cxx:172
 AliPHOSClusterizerv2.cxx:173
 AliPHOSClusterizerv2.cxx:174
 AliPHOSClusterizerv2.cxx:175
 AliPHOSClusterizerv2.cxx:176
 AliPHOSClusterizerv2.cxx:177
 AliPHOSClusterizerv2.cxx:178
 AliPHOSClusterizerv2.cxx:179
 AliPHOSClusterizerv2.cxx:180
 AliPHOSClusterizerv2.cxx:181
 AliPHOSClusterizerv2.cxx:182
 AliPHOSClusterizerv2.cxx:183
 AliPHOSClusterizerv2.cxx:184
 AliPHOSClusterizerv2.cxx:185
 AliPHOSClusterizerv2.cxx:186
 AliPHOSClusterizerv2.cxx:187
 AliPHOSClusterizerv2.cxx:188
 AliPHOSClusterizerv2.cxx:189
 AliPHOSClusterizerv2.cxx:190
 AliPHOSClusterizerv2.cxx:191
 AliPHOSClusterizerv2.cxx:192
 AliPHOSClusterizerv2.cxx:193
 AliPHOSClusterizerv2.cxx:194
 AliPHOSClusterizerv2.cxx:195
 AliPHOSClusterizerv2.cxx:196
 AliPHOSClusterizerv2.cxx:197
 AliPHOSClusterizerv2.cxx:198
 AliPHOSClusterizerv2.cxx:199
 AliPHOSClusterizerv2.cxx:200
 AliPHOSClusterizerv2.cxx:201
 AliPHOSClusterizerv2.cxx:202
 AliPHOSClusterizerv2.cxx:203
 AliPHOSClusterizerv2.cxx:204
 AliPHOSClusterizerv2.cxx:205
 AliPHOSClusterizerv2.cxx:206
 AliPHOSClusterizerv2.cxx:207
 AliPHOSClusterizerv2.cxx:208
 AliPHOSClusterizerv2.cxx:209
 AliPHOSClusterizerv2.cxx:210
 AliPHOSClusterizerv2.cxx:211
 AliPHOSClusterizerv2.cxx:212
 AliPHOSClusterizerv2.cxx:213
 AliPHOSClusterizerv2.cxx:214
 AliPHOSClusterizerv2.cxx:215
 AliPHOSClusterizerv2.cxx:216
 AliPHOSClusterizerv2.cxx:217
 AliPHOSClusterizerv2.cxx:218
 AliPHOSClusterizerv2.cxx:219
 AliPHOSClusterizerv2.cxx:220
 AliPHOSClusterizerv2.cxx:221
 AliPHOSClusterizerv2.cxx:222
 AliPHOSClusterizerv2.cxx:223
 AliPHOSClusterizerv2.cxx:224
 AliPHOSClusterizerv2.cxx:225
 AliPHOSClusterizerv2.cxx:226