/* $Id$ */
+/* History of cvs commits:
+ *
+ * $Log$
+ */
+
//_________________________________________________________________________
-// Short description
+// Class provides correspondence between "raw numbers" i.e. number of crustall
+// in prototype and PHOT AbsId numer, used in reconstruction.
+// First it calculates correspondence automatically, assuming, that
+// prototype, having N raws and M columns is situated in the center
+// of middle (third) PHOS module. Then this correspondence can be edited
+// manually. One can convert Raw->AbsId and visa versa AbsId->RawId.
//
-//*-- Author : (SUBATECH)
+//*-- Author : D.Peressounko ("RRC Kurchatov Institute")
//////////////////////////////////////////////////////////////////////////////
// --- ROOT system ---
// --- Standard library ---
// --- AliRoot header files ---
+#include "AliLog.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSConTableDB.h"
//____________________________________________________________________________
AliPHOSConTableDB::AliPHOSConTableDB():TNamed("AliPHOSConTableDB","Beamtest2002")
{
+//default constructor, nothing created.
fNcrInProto = 0 ;
fProtoRaws = 0 ;
fProtoColumns = 0 ;
fColOffset = 0 ;
fGeom = 0;
fAbsIdMap = 0 ;
+ fRawIdMap = 0 ;
}
//____________________________________________________________________________
AliPHOSConTableDB::AliPHOSConTableDB(const char * title):TNamed("AliPHOSConTableDB",title)
{
+ //Normally used constructor
fNcrInProto = 0 ;
fProtoRaws = 0 ;
fProtoColumns = 0 ;
fRawOffset = 0 ;
fColOffset = 0 ;
+ fAbsIdMap = 0 ;
+ fRawIdMap = 0 ;
- fGeom = AliPHOSGeometry::GetInstance("GPS2","") ;
+ fGeom = AliPHOSGeometry::GetInstance("IHEP","") ;
}
+//____________________________________________________________________________
+AliPHOSConTableDB::AliPHOSConTableDB(const AliPHOSConTableDB& cdb):TNamed(cdb.GetName(), cdb.GetTitle())
+{
+ //Copy constructor
+
+ fProtoRaws=cdb.fProtoRaws ; // Parameters
+ fProtoColumns=cdb.fProtoColumns ; // used to calculate
+ fRawOffset=cdb.fRawOffset ; // correspondance
+ fColOffset=cdb.fColOffset ; // map
+ fNcrInProto=cdb.fNcrInProto ; //Number of channels in prototype
+ fMinAbsId=cdb.fMinAbsId ; //Minimal AbsId, corresponding to some prototype cristall.
+ fMaxAbsId=cdb.fMaxAbsId ; //Maximal AbsId, corresponding to some prototype cristall
+ fAbsIdMap=new TArrayS(*(cdb.fAbsIdMap)) ; //Map of correspondance between Raw and PHOS ID
+ fRawIdMap=new TArrayS(*(cdb.fRawIdMap)) ; //Map of correspondance between AbsId and Raw
+}
+
//____________________________________________________________________________
AliPHOSConTableDB::~AliPHOSConTableDB()
{
if(fAbsIdMap)
- delete [] fAbsIdMap ;
+ delete fAbsIdMap ;
+ if(fRawIdMap)
+ delete fRawIdMap ;
}
//____________________________________________________________________________
//assuming, that prototype is centered in the third module of the PHOS
fNcrInProto =fProtoRaws*fProtoColumns ;
if(!fNcrInProto){
- Error("BuildDB", "configuratio of prototype is not known!!!\n Specify number of raws and columns in prototype") ;
+ AliError(Form("configuratio of prototype is not known!!!\n Specify number of raws and columns in prototype"));
return ;
}
fRawOffset = (fGeom->GetNPhi() - fProtoRaws)/2 ;
fColOffset = (fGeom->GetNZ() - fProtoColumns )/ 2 ;
fAbsIdMap = new TArrayS(fNcrInProto) ;
- for(Int_t raw =0; raw < fProtoRaws; raw ++){
+ fMinAbsId = fGeom->GetNCristalsInModule()*2 +
+ fRawOffset*fGeom->GetNZ()+fColOffset+1 ;
+ fMaxAbsId = fGeom->GetNCristalsInModule()*2 +
+ (fRawOffset + fProtoRaws)*fGeom->GetNZ()-
+ fColOffset ;
+ fRawIdMap = new TArrayS(fMaxAbsId-fMinAbsId+1) ;
+ for(Int_t raw =0; raw < fProtoRaws ; raw ++){
for(Int_t col = 0; col < fProtoColumns ; col ++){
- Int_t rawId = col*fProtoRaws + raw ;
+ Int_t rawId = raw*fProtoColumns + col ;
Int_t rel[4] = {3,0,0,0} ; //We assume, that we deal with third module
- rel[2]=raw + fRawOffset ;
- rel[3]=col + fColOffset ;
+ rel[2]=raw + fRawOffset+1 ;
+ rel[3]=col + fColOffset+1 ;
Int_t absId ;
fGeom->RelToAbsNumbering(rel,absId) ;
fAbsIdMap->AddAt(static_cast<UInt_t>(absId),rawId) ;
+ fRawIdMap->AddAt(static_cast<UInt_t>(rawId),absId-fMinAbsId) ;
}
}
}
//____________________________________________________________________________
-Int_t AliPHOSConTableDB::Raw2AbsId(Int_t rawId){
+Int_t AliPHOSConTableDB::AbsId2Raw(Int_t absId)const{
+ //converts numbering of modules in PHOS into
+ //numbering in prototype
+ if(absId >= fMinAbsId && absId<=fMaxAbsId){
+ return fRawIdMap->At(absId-fMinAbsId) ;
+ }
+ else
+ return -1 ;
+}
+//____________________________________________________________________________
+Int_t AliPHOSConTableDB::Raw2AbsId(Int_t rawId)const{
//converts numbering of modules in prototipe into
//numbering in PHOS
if(rawId >= 0 && rawId<fNcrInProto)
return 0 ;
}
//____________________________________________________________________________
-void AliPHOSConTableDB::Print(Option_t * option)const {
+void AliPHOSConTableDB::Print(const Option_t *)const {
+//prints configuraion
TString message ;
message = " %s %s\n" ;
else
message += " null \n" ;
- Info("Print", message.Data(), GetName(), GetTitle(), fGeom->GetName(), fGeom->GetTitle() ) ;
+ AliInfo(Form(message.Data(), GetName(), GetTitle(), fGeom->GetName(), fGeom->GetTitle() )) ;
- message = "-------Prototype parameters--------\n" ;
- message += " number of columns: %d" ;
- message += " number of raws: %d" ;
- message += " centered in third PHOS module with offsets: " ;
+ message = "\n-------Prototype parameters--------\n" ;
+ message += " number of columns: %d \n" ;
+ message += " number of raws: %d \n" ;
+ message += " centered in third PHOS module with offsets: \n " ;
message += " raw: %d of %d\n" ;
message += " col: %d of %d\n" ;
- message += "------------------------------------" ;
+ message += "------------------------------------ \n" ;
- Info("Print", message.Data(), fProtoColumns, fProtoRaws, fRawOffset, fGeom->GetNPhi(), fColOffset,fGeom->GetNZ() );
+ AliInfo(Form(message.Data(), fProtoColumns, fProtoRaws, fRawOffset, fGeom->GetNPhi(), fColOffset,fGeom->GetNZ() ));
}
+//____________________________________________________________________________
+AliPHOSConTableDB& AliPHOSConTableDB::operator=(const AliPHOSConTableDB& cdb){
+//Operator for coding convetion
+ fGeom=cdb.fGeom ; //! PHOS geometry class
+ fProtoRaws=cdb.fProtoRaws ; // Parameters
+ fProtoColumns=cdb.fProtoColumns ; // used to calculate
+ fRawOffset=cdb.fRawOffset ; // correspondance
+ fColOffset=cdb.fColOffset ; // map
+ fNcrInProto=cdb.fNcrInProto ; //Number of channels in prototype
+ fMinAbsId=cdb.fMinAbsId ; //Minimal AbsId, corresponding to some prototype cristall.
+ fMaxAbsId=cdb.fMaxAbsId ; //Maximal AbsId, corresponding to some prototype cristall
+ fAbsIdMap=new TArrayS(*(cdb.fAbsIdMap)) ; //Map of correspondance between Raw and PHOS ID
+ fRawIdMap=new TArrayS(*(cdb.fRawIdMap)) ; //Map of correspondance between AbsId and Raw
+ return *this ;
+}
+
+
+