]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PHOS/AliPHOSConTableDB.cxx
Modified file access mode
[u/mrichter/AliRoot.git] / PHOS / AliPHOSConTableDB.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 /* History of cvs commits:
19  *
20  * $Log$
21  * Revision 1.11  2005/05/28 14:19:04  schutz
22  * Compilation warnings fixed by T.P.
23  *
24  */
25
26 //_________________________________________________________________________
27 // Class provides correspondence between "raw numbers" i.e. number of crustall 
28 // in prototype and PHOT AbsId numer, used in reconstruction.
29 // First it calculates correspondence automatically, assuming, that 
30 // prototype, having N raws and M columns is situated in the center 
31 // of middle (third) PHOS module. Then this correspondence can be edited 
32 // manually. One can convert Raw->AbsId and visa versa AbsId->RawId.
33 //
34 //*-- Author :  D.Peressounko ("RRC Kurchatov Institute") 
35 //////////////////////////////////////////////////////////////////////////////
36
37 // --- ROOT system ---
38 #include "TArrayS.h"
39 #include "TH2S.h"
40
41 // --- Standard library ---
42
43 // --- AliRoot header files ---
44 #include "AliLog.h"
45 #include "AliPHOSGeometry.h"
46 #include "AliPHOSConTableDB.h"
47
48 ClassImp(AliPHOSConTableDB)
49
50
51 //____________________________________________________________________________ 
52 AliPHOSConTableDB::AliPHOSConTableDB():
53   TNamed("AliPHOSConTableDB","Beamtest2002"),
54   fGeom(0),
55   fProtoRaws(0),
56   fProtoColumns(0),
57   fRawOffset(0),
58   fColOffset(0),
59   fNcrInProto(0),
60   fMinAbsId(0),
61   fMaxAbsId(0),
62   fAbsIdMap(0),
63   fRawIdMap(0)
64 {
65   //default constructor, nothing created.
66 }
67
68 //____________________________________________________________________________ 
69 AliPHOSConTableDB::AliPHOSConTableDB(const char * title):
70   TNamed("AliPHOSConTableDB",title),
71   fGeom(0),
72   fProtoRaws(0),
73   fProtoColumns(0),
74   fRawOffset(0),
75   fColOffset(0),
76   fNcrInProto(0),
77   fMinAbsId(0),
78   fMaxAbsId(0),
79   fAbsIdMap(0),
80   fRawIdMap(0)
81 {
82   //Normally used constructor 
83   fGeom = AliPHOSGeometry::GetInstance("IHEP","") ;
84 }
85
86 //____________________________________________________________________________ 
87 AliPHOSConTableDB::AliPHOSConTableDB(const AliPHOSConTableDB& cdb):
88   TNamed(cdb.GetName(), cdb.GetTitle()),
89   fGeom(0),
90   fProtoRaws(cdb.fProtoRaws),
91   fProtoColumns(cdb.fProtoColumns),
92   fRawOffset(cdb.fRawOffset),
93   fColOffset(cdb.fColOffset),
94   fNcrInProto(cdb.fNcrInProto),
95   fMinAbsId(cdb.fMinAbsId),
96   fMaxAbsId(cdb.fMaxAbsId),
97   fAbsIdMap(new TArrayS(*(cdb.fAbsIdMap))),
98   fRawIdMap(new TArrayS(*(cdb.fRawIdMap)))
99 {
100   //Copy constructor
101 }
102
103 //____________________________________________________________________________ 
104   AliPHOSConTableDB::~AliPHOSConTableDB()
105 {
106   if(fAbsIdMap)
107     delete fAbsIdMap ;
108   if(fRawIdMap)
109     delete fRawIdMap ;
110 }
111
112 //____________________________________________________________________________ 
113 void  AliPHOSConTableDB::BuildDB(void)
114
115   //Make a map between Protopype cristalls and PHOS crystalls
116   //assuming, that prototype is centered in the third module of the PHOS
117   fNcrInProto =fProtoRaws*fProtoColumns ;
118   if(!fNcrInProto){
119     AliError(Form("configuratio of prototype is not known!!!\n Specify number of raws and columns in prototype"));
120     return ;
121   }
122   fRawOffset = (fGeom->GetNPhi() - fProtoRaws)/2 ;
123   fColOffset = (fGeom->GetNZ() - fProtoColumns )/ 2 ;
124   fAbsIdMap = new TArrayS(fNcrInProto) ;
125   fMinAbsId = fGeom->GetNCristalsInModule()*2 +
126     fRawOffset*fGeom->GetNZ()+fColOffset+1 ;
127   fMaxAbsId = fGeom->GetNCristalsInModule()*2 +
128     (fRawOffset + fProtoRaws)*fGeom->GetNZ()- 
129      fColOffset ;
130   fRawIdMap = new TArrayS(fMaxAbsId-fMinAbsId+1) ;
131   for(Int_t raw =0; raw < fProtoRaws ; raw ++){
132     for(Int_t col = 0; col < fProtoColumns ; col ++){
133       Int_t rawId = raw*fProtoColumns + col ;
134       Int_t rel[4] = {3,0,0,0} ; //We assume, that we deal with third module
135       rel[2]=raw + fRawOffset+1 ;
136       rel[3]=col + fColOffset+1 ;
137       Int_t absId ;
138       fGeom->RelToAbsNumbering(rel,absId) ;
139       fAbsIdMap->AddAt(static_cast<UInt_t>(absId),rawId) ;
140       fRawIdMap->AddAt(static_cast<UInt_t>(rawId),absId-fMinAbsId) ;
141     }
142   }
143
144 }
145 //____________________________________________________________________________ 
146 void AliPHOSConTableDB::PlotProtoMap(Option_t * opt)
147 {
148   //Visualyse connection table
149
150   TH2S * hMapProto = new TH2S("hMap","Map of Prototype ids",
151                               fGeom->GetNPhi(),0,fGeom->GetNPhi(),
152                               fGeom->GetNZ(),0,fGeom->GetNZ()) ;
153   TH2S * hMapPHOS = new TH2S("hMapPHOS","Map of PHOS ids",
154                              fGeom->GetNPhi(),0,fGeom->GetNPhi(),
155                              fGeom->GetNZ(),0,fGeom->GetNZ()) ;
156   TH2C * hMapBox = new TH2C("hMapBox","Map of Prototype ids",
157                               fGeom->GetNPhi(),0,fGeom->GetNPhi(),
158                               fGeom->GetNZ(),0,fGeom->GetNZ()) ; 
159   for(Int_t raw =0; raw <fGeom->GetNPhi() ; raw ++)
160     for(Int_t col = 0; col <fGeom->GetNZ() ; col ++)
161       hMapBox->SetBinContent(raw+1,col+1,1) ;
162   
163   for(Int_t raw =0; raw < fProtoRaws; raw ++){
164     for(Int_t col = 0; col < fProtoColumns ; col ++){
165       Int_t rawId = col*fProtoRaws + raw ;
166       Int_t rel[4] = {3,0,0,0} ; //We assume, that we deal with third module
167       rel[2]=raw + fRawOffset ;
168       rel[3]=col + fColOffset ;
169       hMapProto->SetBinContent(rel[2]+1,rel[3]+1,rawId);
170       Int_t absId ;
171       fGeom->RelToAbsNumbering(rel,absId) ;
172       hMapPHOS->SetBinContent(rel[2]+1,rel[3]+1,absId) ;
173     }
174   }
175
176
177   if(strstr(opt,"Zoom")||strstr(opt,"zoom")){
178     static_cast<TAxis *>(hMapBox->GetXaxis())->SetRange(fRawOffset+1,fGeom->GetNPhi()-fRawOffset) ;
179     static_cast<TAxis *>(hMapBox->GetYaxis())->SetRange(fColOffset+1,fGeom->GetNZ()-fColOffset) ;    
180   }
181    hMapBox->Draw("box") ;
182    if(strstr(opt,"PHOS"))
183      hMapPHOS->Draw("textsame") ;
184    else
185      hMapProto->Draw("textsame") ;
186
187
188 //____________________________________________________________________________ 
189 Int_t AliPHOSConTableDB::AbsId2Raw(Int_t absId)const{
190   //converts numbering of modules in PHOS into
191   //numbering in prototype
192   if(absId >= fMinAbsId && absId<=fMaxAbsId){    
193     return fRawIdMap->At(absId-fMinAbsId) ;
194   }
195   else
196     return -1 ;
197 }
198 //____________________________________________________________________________ 
199 Int_t AliPHOSConTableDB::Raw2AbsId(Int_t rawId)const{
200   //converts numbering of modules in prototipe into
201   //numbering in PHOS
202   if(rawId >= 0 && rawId<fNcrInProto)
203     return fAbsIdMap->At(rawId) ;
204   else
205     return 0 ;
206 }
207 //____________________________________________________________________________ 
208 void AliPHOSConTableDB::Print(const Option_t *)const {
209 //prints configuraion
210
211   TString message ; 
212   message  = " %s %s\n" ;
213   message += "PHOS Geometry configured for " ; 
214   if(fGeom)
215     message += "%s %s \n" ;
216   else
217     message += " null \n"  ;
218
219   AliInfo(Form(message.Data(), GetName(), GetTitle(), fGeom->GetName(), fGeom->GetTitle() )) ; 
220
221   message  = "\n-------Prototype parameters--------\n" ;
222   message += "    number of columns: %d \n" ; 
223   message += "    number of raws:    %d \n" ;
224   message += "    centered in third PHOS module with offsets: \n " ;
225   message += "    raw: %d of %d\n" ;
226   message += "    col: %d of %d\n" ; 
227   message += "------------------------------------ \n" ;
228
229   AliInfo(Form(message.Data(), fProtoColumns, fProtoRaws, fRawOffset, fGeom->GetNPhi(), fColOffset,fGeom->GetNZ() ));   
230 }
231 //____________________________________________________________________________
232 AliPHOSConTableDB& AliPHOSConTableDB::operator=(const AliPHOSConTableDB& cdb){
233 //Operator for coding convetion
234   fGeom=cdb.fGeom ;   //! PHOS geometry class
235   fProtoRaws=cdb.fProtoRaws ;        //  Parameters
236   fProtoColumns=cdb.fProtoColumns ;     //  used to calculate
237   fRawOffset=cdb.fRawOffset ;        //  correspondance
238   fColOffset=cdb.fColOffset ;        //  map
239   fNcrInProto=cdb.fNcrInProto ;       //Number of channels in prototype
240   fMinAbsId=cdb.fMinAbsId ;         //Minimal AbsId, corresponding to some prototype cristall.
241   fMaxAbsId=cdb.fMaxAbsId ;         //Maximal AbsId, corresponding to some prototype cristall
242   fAbsIdMap=new TArrayS(*(cdb.fAbsIdMap)) ;         //Map of correspondance between Raw and PHOS ID
243   fRawIdMap=new TArrayS(*(cdb.fRawIdMap)) ;         //Map of correspondance between AbsId and Raw
244   return *this ;
245 }
246
247
248