Geometry corrected for an overlap
[u/mrichter/AliRoot.git] / PHOS / AliPHOSConTableDB.cxx
CommitLineData
f74edaba 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//_________________________________________________________________________
19// Short description
20//
21//*-- Author : (SUBATECH)
22//////////////////////////////////////////////////////////////////////////////
23
24// --- ROOT system ---
25#include "TArrayS.h"
26#include "TH2S.h"
27
28// --- Standard library ---
21cd0c07 29
f74edaba 30// --- AliRoot header files ---
31#include "AliPHOSGeometry.h"
32#include "AliPHOSConTableDB.h"
33
34ClassImp(AliPHOSConTableDB)
35
36
37//____________________________________________________________________________
38 AliPHOSConTableDB::AliPHOSConTableDB():TNamed("AliPHOSConTableDB","Beamtest2002")
39{
40 fNcrInProto = 0 ;
41 fProtoRaws = 0 ;
42 fProtoColumns = 0 ;
43 fRawOffset = 0 ;
44 fColOffset = 0 ;
45 fGeom = 0;
46 fAbsIdMap = 0 ;
503394a6 47 fRawIdMap = 0 ;
f74edaba 48}
49
50//____________________________________________________________________________
51 AliPHOSConTableDB::AliPHOSConTableDB(const char * title):TNamed("AliPHOSConTableDB",title)
52{
53 fNcrInProto = 0 ;
54 fProtoRaws = 0 ;
55 fProtoColumns = 0 ;
56 fRawOffset = 0 ;
57 fColOffset = 0 ;
503394a6 58 fAbsIdMap = 0 ;
59 fRawIdMap = 0 ;
f74edaba 60
61 fGeom = AliPHOSGeometry::GetInstance("GPS2","") ;
62
63}
64
65//____________________________________________________________________________
66 AliPHOSConTableDB::~AliPHOSConTableDB()
67{
68 if(fAbsIdMap)
69 delete [] fAbsIdMap ;
503394a6 70 if(fRawIdMap)
71 delete [] fRawIdMap ;
f74edaba 72}
73
74//____________________________________________________________________________
75void AliPHOSConTableDB::BuildDB(void)
76{
77 //Make a map between Protopype cristalls and PHOS crystalls
78 //assuming, that prototype is centered in the third module of the PHOS
79 fNcrInProto =fProtoRaws*fProtoColumns ;
80 if(!fNcrInProto){
21cd0c07 81 Error("BuildDB", "configuratio of prototype is not known!!!\n Specify number of raws and columns in prototype") ;
f74edaba 82 return ;
83 }
84 fRawOffset = (fGeom->GetNPhi() - fProtoRaws)/2 ;
85 fColOffset = (fGeom->GetNZ() - fProtoColumns )/ 2 ;
86 fAbsIdMap = new TArrayS(fNcrInProto) ;
503394a6 87 fMinAbsId = fGeom->GetNCristalsInModule()*2 +
88 fRawOffset*fGeom->GetNZ()+fColOffset+1 ;
89 fMaxAbsId = fGeom->GetNCristalsInModule()*2 +
90 (fRawOffset + fProtoRaws)*fGeom->GetNZ()-
91 fColOffset ;
92 fRawIdMap = new TArrayS(fMaxAbsId-fMinAbsId+1) ;
93 for(Int_t raw =0; raw < fProtoRaws ; raw ++){
f74edaba 94 for(Int_t col = 0; col < fProtoColumns ; col ++){
503394a6 95 Int_t rawId = raw*fProtoColumns + col ;
f74edaba 96 Int_t rel[4] = {3,0,0,0} ; //We assume, that we deal with third module
503394a6 97 rel[2]=raw + fRawOffset+1 ;
98 rel[3]=col + fColOffset+1 ;
f74edaba 99 Int_t absId ;
100 fGeom->RelToAbsNumbering(rel,absId) ;
101 fAbsIdMap->AddAt(static_cast<UInt_t>(absId),rawId) ;
503394a6 102 fRawIdMap->AddAt(static_cast<UInt_t>(rawId),absId-fMinAbsId) ;
f74edaba 103 }
104 }
105
106}
107//____________________________________________________________________________
108void AliPHOSConTableDB::PlotProtoMap(Option_t * opt)
109{
110 //Visualyse connection table
111
112 TH2S * hMapProto = new TH2S("hMap","Map of Prototype ids",
113 fGeom->GetNPhi(),0,fGeom->GetNPhi(),
114 fGeom->GetNZ(),0,fGeom->GetNZ()) ;
115 TH2S * hMapPHOS = new TH2S("hMapPHOS","Map of PHOS ids",
116 fGeom->GetNPhi(),0,fGeom->GetNPhi(),
117 fGeom->GetNZ(),0,fGeom->GetNZ()) ;
118 TH2C * hMapBox = new TH2C("hMapBox","Map of Prototype ids",
119 fGeom->GetNPhi(),0,fGeom->GetNPhi(),
120 fGeom->GetNZ(),0,fGeom->GetNZ()) ;
121 for(Int_t raw =0; raw <fGeom->GetNPhi() ; raw ++)
122 for(Int_t col = 0; col <fGeom->GetNZ() ; col ++)
123 hMapBox->SetBinContent(raw+1,col+1,1) ;
124
125 for(Int_t raw =0; raw < fProtoRaws; raw ++){
126 for(Int_t col = 0; col < fProtoColumns ; col ++){
127 Int_t rawId = col*fProtoRaws + raw ;
128 Int_t rel[4] = {3,0,0,0} ; //We assume, that we deal with third module
129 rel[2]=raw + fRawOffset ;
130 rel[3]=col + fColOffset ;
131 hMapProto->SetBinContent(rel[2]+1,rel[3]+1,rawId);
132 Int_t absId ;
133 fGeom->RelToAbsNumbering(rel,absId) ;
134 hMapPHOS->SetBinContent(rel[2]+1,rel[3]+1,absId) ;
135 }
136 }
137
138
139 if(strstr(opt,"Zoom")||strstr(opt,"zoom")){
140 static_cast<TAxis *>(hMapBox->GetXaxis())->SetRange(fRawOffset+1,fGeom->GetNPhi()-fRawOffset) ;
141 static_cast<TAxis *>(hMapBox->GetYaxis())->SetRange(fColOffset+1,fGeom->GetNZ()-fColOffset) ;
142 }
143 hMapBox->Draw("box") ;
144 if(strstr(opt,"PHOS"))
145 hMapPHOS->Draw("textsame") ;
146 else
147 hMapProto->Draw("textsame") ;
148
149}
150//____________________________________________________________________________
503394a6 151Int_t AliPHOSConTableDB::AbsId2Raw(Int_t absId){
152 //converts numbering of modules in PHOS into
153 //numbering in prototype
154 if(absId >= fMinAbsId && absId<=fMaxAbsId){
155 return fRawIdMap->At(absId-fMinAbsId) ;
156 }
157 else
158 return -1 ;
159}
160//____________________________________________________________________________
f74edaba 161Int_t AliPHOSConTableDB::Raw2AbsId(Int_t rawId){
162 //converts numbering of modules in prototipe into
163 //numbering in PHOS
164 if(rawId >= 0 && rawId<fNcrInProto)
165 return fAbsIdMap->At(rawId) ;
166 else
167 return 0 ;
168}
169//____________________________________________________________________________
170void AliPHOSConTableDB::Print(Option_t * option)const {
171
21cd0c07 172 TString message ;
173 message = " %s %s\n" ;
174 message += "PHOS Geometry configured for " ;
f74edaba 175 if(fGeom)
21cd0c07 176 message += "%s %s \n" ;
f74edaba 177 else
21cd0c07 178 message += " null \n" ;
179
180 Info("Print", message.Data(), GetName(), GetTitle(), fGeom->GetName(), fGeom->GetTitle() ) ;
181
182 message = "-------Prototype parameters--------\n" ;
183 message += " number of columns: %d" ;
184 message += " number of raws: %d" ;
185 message += " centered in third PHOS module with offsets: " ;
186 message += " raw: %d of %d\n" ;
187 message += " col: %d of %d\n" ;
188 message += "------------------------------------" ;
189
190 Info("Print", message.Data(), fProtoColumns, fProtoRaws, fRawOffset, fGeom->GetNPhi(), fColOffset,fGeom->GetNZ() );
f74edaba 191}