/* $Id$ */
+/* History of cvs commits:
+ *
+ * $Log$
+ * Revision 1.26 2007/06/18 07:02:44 kharlov
+ * Change the signature of EvalLocalPosition() to obey the method virtuality from the parent class
+ *
+ * Revision 1.25 2007/03/06 06:47:28 kharlov
+ * DP:Possibility to use actual vertex position added
+ */
+
//_________________________________________________________________________
// RecPoint implementation for PHOS-CPV
// An CpvRecPoint is a cluster of digits
-//*-- Author: Yuri Kharlov
+//-- Author: Yuri Kharlov
// (after Dmitri Peressounko (RRC KI & SUBATECH))
// 30 October 2000
// --- ROOT system ---
-#include "TPad.h"
-#include "TH2.h"
+
#include "TMath.h"
-#include "TCanvas.h"
#include "TClonesArray.h"
// --- Standard library ---
-#include <iostream.h>
-
// --- AliRoot header files ---
-
+#include "AliLog.h"
+#include "AliPHOSGeometry.h"
+#include "AliPHOSDigit.h"
#include "AliPHOSCpvRecPoint.h"
-#include "AliPHOSPpsdRecPoint.h"
+#include "AliPHOSLoader.h"
ClassImp(AliPHOSCpvRecPoint)
//____________________________________________________________________________
-AliPHOSCpvRecPoint::AliPHOSCpvRecPoint() : AliPHOSEmcRecPoint()
+AliPHOSCpvRecPoint::AliPHOSCpvRecPoint() :
+ AliPHOSEmcRecPoint(),
+ fLengX(-1),
+ fLengZ(-1)
{
// ctor
+}
- fLengX = -1;
- fLengZ = -1;
+//____________________________________________________________________________
+AliPHOSCpvRecPoint::AliPHOSCpvRecPoint(const char * opt) :
+ AliPHOSEmcRecPoint(opt),
+ fLengX(-1),
+ fLengZ(-1)
+{
+ // ctor
}
//____________________________________________________________________________
// dtor
}
-
//____________________________________________________________________________
Bool_t AliPHOSCpvRecPoint::AreNeighbours(AliPHOSDigit * digit1, AliPHOSDigit * digit2 ) const
{
Bool_t aren = kFALSE ;
- AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ;
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance() ;
+
Int_t relid1[4] ;
phosgeom->AbsToRelNumbering(digit1->GetId(), relid1) ;
Int_t rv ;
- if( (strcmp(obj->ClassName() , "AliPHOSPpsdRecPoint" )) == 0) // PPSD Rec Point
- {
- AliPHOSPpsdRecPoint * clu = (AliPHOSPpsdRecPoint *)obj ;
- if(this->GetPHOSMod() < clu->GetPHOSMod() )
- rv = -1 ;
- else
- rv = 1 ;
- return rv ;
- }
- else
- {
- AliPHOSCpvRecPoint * clu = (AliPHOSCpvRecPoint *) obj ;
-
- Int_t phosmod1 = GetPHOSMod() ;
- Int_t phosmod2 = clu->GetPHOSMod() ;
-
- TVector3 locpos1;
- GetLocalPosition(locpos1) ;
- TVector3 locpos2;
- clu->GetLocalPosition(locpos2) ;
-
- if(phosmod1 == phosmod2 ) {
- Int_t rowdif = (Int_t)TMath::Ceil(locpos1.X()/delta)-(Int_t)TMath::Ceil(locpos2.X()/delta) ;
- if (rowdif> 0)
- rv = 1 ;
- else if(rowdif < 0)
- rv = -1 ;
- else if(locpos1.Z()>locpos2.Z())
- rv = -1 ;
- else
- rv = 1 ;
- }
-
- else {
- if(phosmod1 < phosmod2 )
- rv = -1 ;
- else
- rv = 1 ;
- }
-
- return rv ;
- }
+ AliPHOSCpvRecPoint * clu = (AliPHOSCpvRecPoint *) obj ;
+
+ Int_t phosmod1 = GetPHOSMod() ;
+ Int_t phosmod2 = clu->GetPHOSMod() ;
+
+ TVector3 locpos1;
+ GetLocalPosition(locpos1) ;
+ TVector3 locpos2;
+ clu->GetLocalPosition(locpos2) ;
+
+ if(phosmod1 == phosmod2 ) {
+ Int_t rowdif = (Int_t)TMath::Ceil(locpos1.X()/delta)-(Int_t)TMath::Ceil(locpos2.X()/delta) ;
+ if (rowdif> 0)
+ rv = 1 ;
+ else if(rowdif < 0)
+ rv = -1 ;
+ else if(locpos1.Z()>locpos2.Z())
+ rv = -1 ;
+ else
+ rv = 1 ;
+ }
+
+ else {
+ if(phosmod1 < phosmod2 )
+ rv = -1 ;
+ else
+ rv = 1 ;
+ }
+
+ return rv ;
+
}
//______________________________________________________________________________
-void AliPHOSCpvRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py) const
+void AliPHOSCpvRecPoint::ExecuteEvent(Int_t, Int_t, Int_t ) /*const*/
{
// // Execute action corresponding to one event
// // This member function is called when a AliPHOSRecPoint is clicked with the locator
// // static Int_t pxold, pyold;
-// AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
+// AliPHOSLoader * gime = AliPHOSLoader::GetInstance() ;
// static TGraph * digitgraph = 0 ;
}
//____________________________________________________________________________
-void AliPHOSCpvRecPoint::EvalAll(Float_t logWeight,TClonesArray * digits)
+void AliPHOSCpvRecPoint::EvalAll(TClonesArray * digits)
+{
+ // Evaluate local coordinate assuming the vertex in (000) and no inclination
+ AliPHOSEmcRecPoint::EvalAll(digits) ;
+}
+//____________________________________________________________________________
+void AliPHOSCpvRecPoint::EvalAll(Float_t logWeight, TVector3 &vtx, TClonesArray * digits)
{
// wraps other methods
- AliPHOSEmcRecPoint::EvalAll(logWeight,digits) ;
+ TVector3 vInc(0,1,0);
+ AliPHOSEmcRecPoint::EvalAll(logWeight,vtx,digits) ;
+ EvalLocalPosition(logWeight, vtx, digits,vInc) ;
EvalClusterLengths(digits) ;
}
//____________________________________________________________________________
-void AliPHOSCpvRecPoint::EvalLocalPosition(Float_t logWeight,TClonesArray * digits)
+void AliPHOSCpvRecPoint::EvalLocalPosition(Float_t logWeight, TVector3 & /*vtx */, TClonesArray * digits, TVector3 &/* vInc */)
{
// Calculates the center of gravity in the local PHOS-module coordinates
AliPHOSDigit * digit ;
- AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ;
-
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance();
+
Int_t iDigit;
for(iDigit=0; iDigit<fMulDigit; iDigit++) {
Float_t zi ;
phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
phosgeom->RelPosInModule(relid, xi, zi);
- Float_t w = TMath::Max( 0., logWeight + TMath::Log( fEnergyList[iDigit] / fAmp ) ) ;
- x += xi * w ;
- z += zi * w ;
- wtot += w ;
+ if (fAmp>0 && fEnergyList[iDigit]>0) {
+ Float_t w = TMath::Max( 0., logWeight + TMath::Log( fEnergyList[iDigit] / fAmp ) ) ;
+ x += xi * w ;
+ z += zi * w ;
+ wtot += w ;
+ }
+ else
+ AliError(Form("Wrong energy %f and/or amplitude %f\n", fEnergyList[iDigit], fAmp));
}
if (wtot != 0) {
} else {
x = -1e6 ;
z = -1e6 ;
- if (fMulDigit != 0) cout << "AliPHOSCpvRecPoint: too low log weight factor "
- << "to evaluate cluster's center\n";
+ if (fMulDigit != 0)
+ AliWarning(Form("Too low log weight factor to evaluate cluster's center" )) ;
}
fLocPos.SetX(x) ;
fLocPos.SetY(0.) ;
AliPHOSDigit * digit ;
- AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ;
+ AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance();
const Int_t kMaxLeng=20;
Int_t idX[kMaxLeng], idZ[kMaxLeng];
}
}
-
-
//____________________________________________________________________________
-void AliPHOSCpvRecPoint::Print(Option_t * option)
+void AliPHOSCpvRecPoint::Print(const Option_t *) const
{
// Print the list of digits belonging to the cluster
- cout << "AliPHOSCpvRecPoint: " << endl ;
-
+ TString message ;
+ message = "AliPHOSCpvRecPoint: " ;
+ message += "Digits # " ;
+ AliInfo(message.Data()) ;
+
Int_t iDigit;
- cout << "Digits # " ;
for(iDigit=0; iDigit<fMulDigit; iDigit++)
- cout << fDigitsList[iDigit] << " " ;
- cout << endl ;
+ printf(" %d \n", fDigitsList[iDigit]) ;
- cout << "Energies: " ;
+ printf("Energies: \n") ;
for(iDigit=0; iDigit<fMulDigit; iDigit++)
- cout << fEnergyList[iDigit] << " " ;
- cout << endl ;
+ printf(" %f ", fEnergyList[iDigit]) ;
- cout << " Multiplicity = " << fMulDigit << endl ;
- cout << " Cluster Energy = " << fAmp << endl ;
- cout << " Stored at position " << GetIndexInList() << endl ;
+ message = " Multiplicity = %d\n" ;
+ message += " Cluster Energy = %f\n" ;
+ message += " Stored at position %d\n" ;
+ printf(message.Data(), fMulDigit, fAmp, GetIndexInList() ) ;
+
}