Coding violations corrected
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationDetectionElement.cxx
CommitLineData
74f8c8e3 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// Segmentation classes for MUON Detection Elements
19// Gines MARTINEZ, SUBATECH July 04
20// This class interfaces with the mapping and segmentation
21// files MUON.
22// This files are placed by default in
23// $ALICE_ROOT/MUON/mapping/data/Stationxxx/yyy_plane/
24// There are in tracking 23 types of detection elements
25// 8 SectorSt1, 8 SectorSt2, 2 122000SR1, 2 122000NR1, 4 112200SR2, 4 112200NR2
26// 4 122200S, 4 122200N, 8 222000N,8 220000N, 8 330000N, 4 122300N, 8 112230NR3
27// 8 112230N, 8 222330N, 8 223300N, 16 333000N, 4 122330N, 8 112233NR3, 8 112233N
28// 8 222333N, 8 223330N, 8 333300N
29// Detailed information in Alice Technical Note xxxxxxxx (2004)
30//===========================================================
31
32#include <Riostream.h>
33
34#include "TClonesArray.h"
35#include "TMap.h"
36
37#include "AliMUONSegmentationDetectionElement.h"
38#include "AliMUONSegmentManuIndex.h"
39#include "AliMUONSegmentPosition.h"
40#include "AliMUONSegmentIndex.h"
41
74f8c8e3 42//___________________________________________
43ClassImp(AliMUONSegmentationDetectionElement)
44
45//static data member
46const TString AliMUONSegmentationDetectionElement::fgkDefaultTop =getenv("ALICE_ROOT") ;
47const TString AliMUONSegmentationDetectionElement::fgkStationDir = "/MUON/mapping/data/station";
48const TString AliMUONSegmentationDetectionElement::fgkBendingDir= "/bending_plane";
49const TString AliMUONSegmentationDetectionElement::fgkNonBendingDir= "/non-bending_plane";
50const TString AliMUONSegmentationDetectionElement::fgkFileExt = ".map";
51const TString AliMUONSegmentationDetectionElement::fgkBendingExt = ".Bending";
52const TString AliMUONSegmentationDetectionElement::fgkNonBendingExt = ".NonBending";
53
54//___________________________________________
55
56AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement() : TObject()
57{
212bb69d 58 //Default constructor
74f8c8e3 59 fMapManuIndexIndex= 0x0;
60 fMapIndexManuIndex= 0x0;
61 fMapIndexPosition= 0x0;
212bb69d 62 fMapPositionIndex=0X0;
74f8c8e3 63}
64
65
66// AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement(const char* ElementType)
67// {
68
69// fMapManuIndexIndex= 0x0;
70// fMapIndexManuIndex= 0x0;
71// fMapIndexPosition= 0x0;
74f8c8e3 72// }
73
74//________________________________________________
75AliMUONSegmentationDetectionElement::AliMUONSegmentationDetectionElement(const AliMUONSegmentationDetectionElement& rhs): TObject(rhs)
76{
77// Protected copy constructor
78
79 Fatal("AliMUONSegmentationDetectionElementModule", "Not implemented.");
80}
81//_________________________________________________
82AliMUONSegmentationDetectionElement::~AliMUONSegmentationDetectionElement(){
212bb69d 83 //Class destructor
74f8c8e3 84 fListOfIndexes->Delete();
85 fListOfManuIndexes->Delete();
86 fListOfPositions->Delete();
87 fMapManuIndexIndex->Clear();
88 fMapIndexManuIndex->Clear();
89 fMapIndexPosition->Clear();
212bb69d 90 fMapPositionIndex->Clear();
91}
92
93//_________________________________________________
94AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::GetIndex(Int_t manu, Int_t channel) const
95{
96 // Getting AliMUONSegmentIndex from ManuIndex
97 return GetIndex( AliMUONSegmentManuIndex::Name(manu, channel).Data() ) ;
74f8c8e3 98}
99//_________________________________________________
212bb69d 100AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::GetIndex( const char * SegmentManuIndexName) const
74f8c8e3 101{
212bb69d 102 // Getting AliMUONSegmentIndex from name of AliMUONSegmentManuIndex
74f8c8e3 103 if (fMapManuIndexIndex) return (AliMUONSegmentIndex*) fMapManuIndexIndex->GetValue(SegmentManuIndexName);
104 else {
105 Warning("GetIndex","SegmentManuIndex %s out of DetectionElement Mapping %s",
106 SegmentManuIndexName,fDetectionElementType.Data());
107 return 0x0;
108 }
109}
74f8c8e3 110//_________________________________________________
212bb69d 111AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::GetManuIndex(Int_t padx, Int_t pady, Int_t cathode ) const
112{
113 // Getting ManuIndex from Index
114 return GetManuIndex( AliMUONSegmentIndex::Name(padx, pady, cathode).Data() );
115}
116//_________________________________________________
117AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::GetManuIndex( const char * SegmentIndexName) const
74f8c8e3 118{
212bb69d 119 // Getting ManuIndex from manuname
74f8c8e3 120 if (fMapIndexManuIndex) return (AliMUONSegmentManuIndex*) fMapIndexManuIndex->GetValue(SegmentIndexName);
121 else {
122 Warning("GetManuIndex","SegmentIndex %s out of Detection Element mapping %s",
123 SegmentIndexName,fDetectionElementType.Data());
124 return 0x0;
125 }
126}
74f8c8e3 127//_________________________________________________
212bb69d 128AliMUONSegmentPosition * AliMUONSegmentationDetectionElement::GetPosition(Int_t padx, Int_t pady, Int_t cathode ) const
129{
130 //Getting position from index
131 return GetPosition( AliMUONSegmentIndex::Name(padx, pady, cathode).Data() );
132}
133//_________________________________________________
134AliMUONSegmentPosition * AliMUONSegmentationDetectionElement::GetPosition( const char * SegmentIndexName) const
74f8c8e3 135{
212bb69d 136 // Getting position from indexname
74f8c8e3 137 if (fMapIndexPosition) return (AliMUONSegmentPosition*) fMapIndexPosition->GetValue(SegmentIndexName);
138 else {
139 Warning("GetPosition","SegmentIndex %s out of DetectionElement mapping %s",
140 SegmentIndexName, fDetectionElementType.Data());
141 return 0x0;
142 }
143}
212bb69d 144//_________________________________________________
145AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::GetIndexFromPosition(Float_t x, Float_t y, Int_t cathode) const
146{
147 // Getting Index from position if position is a center pad position
148 return GetIndexFromPosition( AliMUONSegmentPosition::Name(x,y, cathode).Data() );
149}
150//_________________________________________________
151AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::GetIndexFromPosition( const char * PositionName) const
152{
153 // Getting index form positionname
154 if (fMapPositionIndex) return (AliMUONSegmentIndex*) fMapPositionIndex->GetValue(PositionName);
155 else {
156 Warning("GetIndexFromPosition","SegmentPosition %s out of DetectionElement Mapping %s",
157 PositionName,fDetectionElementType.Data());
158 return 0x0;
159 }
160}
74f8c8e3 161
162//_________________________________________________
212bb69d 163AliMUONSegmentManuIndex * AliMUONSegmentationDetectionElement::FindManuIndex( const char* ManuIndexName)const
74f8c8e3 164{
212bb69d 165 // Getting AliMUONSegmentManuIndex objecto from manu index
74f8c8e3 166 if (fMapManuIndexIndex) return (AliMUONSegmentManuIndex*) fMapManuIndexIndex->FindObject(ManuIndexName);
167 else {
168 Warning("FindManuIndex","SegmentManuIndex %s out of DetectionElement mapping %s",
169 ManuIndexName,fDetectionElementType.Data());
170 return 0x0;
171 }
172}
173
174//_________________________________________________
212bb69d 175AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::FindIndex(const char* IndexName) const
74f8c8e3 176{
212bb69d 177 // Getting
178 if (fMapIndexPosition) return (AliMUONSegmentIndex *) fMapIndexPosition->FindObject(IndexName);
74f8c8e3 179 else {
180 Warning("FindIndex","SegmentIndex %s out of DetectionElement mapping %s",
181 IndexName,fDetectionElementType.Data());
182 return 0x0;
183 }
184}
212bb69d 185//_________________________________________________
186AliMUONSegmentIndex * AliMUONSegmentationDetectionElement::FindIndexFromPosition(Float_t /*x*/, Float_t /*y*/, Int_t /*cathode*/ ) const
187{
74f8c8e3 188
212bb69d 189 // char * name = AliMUONSegmentPosition::Name(x,y);
190
191// if (GetIndexFromPosition( AliMUONSegmentPosition::Name(x,y)) )
192// return GetIndexFromPosition( AliMUONSegmentPosition::Name(x,y) );
193
194// Float_t xl= ((Int_t) x*10 )/10.;
195// Float_t yl= ((Int_t) y*10 )/10.;
196// Int_t ix,iy, ixp;
197
198// for(ix=1; ix<4; ix++) {
199// xl = ((Int_t) 0.5+10.*(x + ((Float_t) ix )*0.1))/10.;
200// for(iy=-ix; iy<ix+1; iy++) {
201// printf("A %d and %d and %f and %f \n",ix,iy,xl,yl);
202// yl = ((Int_t) 10.*(y + ((Float_t) iy )*0.1))/10. ;
203// sprintf(name,"%5.1f-%5.1f",xl, yl);
204// if (GetIndexFromPosition(name)) break;
205// }
206// if (GetIndexFromPosition(name)) break;
207
208
209// for(ixp=ix-1; ixp>-ix-1; ixp--) {
210// xl = ((Int_t) 0.5+10.*(x + ((Float_t) ixp )*0.1))/10. ;
211// printf("B %d and %d and %f and %f \n",ixp,ix, xl, yl);
212// sprintf(name,"%5.1f-%5.1f",xl, yl);
213// if (GetIndexFromPosition(name)) break;
214// }
215// if (GetIndexFromPosition(name)) break;
216
217// for(iy=ix-1; iy>-ix-1; iy--) {
218// yl = ((Int_t) 0.5+10.*(y + ((Float_t) iy )*0.1))/10. ;
219// printf("C %d and %d and %f and %f \n",-ix,iy,xl,yl);
220// sprintf(name,"%5.1f-%5.1f",xl, yl);
221// if (GetIndexFromPosition(name)) break;
222// }
223// if (GetIndexFromPosition(name)) break;
224
225// for(ixp=-ix+1; ixp<ix+1; ixp++) {
226// xl = ((Int_t) 0.5+10.*(x + ((Float_t) ixp )*0.1))/10. ;
227// printf("D %d and %d and %f and %f \n",ixp,-ix,xl,yl);
228// sprintf(name,"%5.1f-%5.1f",xl, yl);
229// if (GetIndexFromPosition(name)) break;
230// }
231// if (GetIndexFromPosition(name)) break;
232// }
233// return GetIndexFromPosition(name);
234 return 0x0;
235}
74f8c8e3 236//_________________________________________________
237void AliMUONSegmentationDetectionElement::Init(const char * DetectionElementType)
238{
212bb69d 239 TString elementType(DetectionElementType);
240 fSegmentationMappingFileBending = fgkDefaultTop+fgkStationDir+"345"
241 +fgkBendingDir+"/"+elementType+fgkBendingExt+fgkFileExt;
242 printf("file is %s\n", fSegmentationMappingFileBending.Data());
243 fSegmentationMappingFileNonBending = fgkDefaultTop+fgkStationDir+"345"
244 +fgkNonBendingDir+"/"+elementType+fgkNonBendingExt+fgkFileExt;
74f8c8e3 245
246 if (fMapManuIndexIndex==0x0) {
212bb69d 247 fListOfIndexes = new TObjArray(15000);
248 fListOfManuIndexes =new TObjArray(15000);
249 fListOfPositions =new TObjArray(15000);
74f8c8e3 250 fMapManuIndexIndex= new TMap();
251 fMapIndexManuIndex = new TMap();
252 fMapIndexPosition = new TMap();
212bb69d 253 fMapPositionIndex = new TMap();
74f8c8e3 254 }
255 else {
256 fListOfIndexes->Delete();
257 fListOfManuIndexes->Delete();
258 fListOfPositions->Delete();
259 fMapManuIndexIndex->Clear();
260 fMapIndexManuIndex->Clear();
261 fMapIndexPosition->Clear();
212bb69d 262 fMapPositionIndex->Clear();
74f8c8e3 263 }
74f8c8e3 264 Int_t icathode;
265 //Bendingplane
266 icathode=0;
212bb69d 267 ReadingSegmentationMappingFile(fSegmentationMappingFileBending ,icathode);
74f8c8e3 268 //NonBendingplane
269 icathode=1;
212bb69d 270 ReadingSegmentationMappingFile(fSegmentationMappingFileNonBending,icathode);
74f8c8e3 271
272}
273//_______________________________________________________________
274void AliMUONSegmentationDetectionElement::ReadingSegmentationMappingFile(TString infile, Int_t cathode)
275{
276 ifstream in( infile, ios::in);
277 if (!in) {
278 // Error("ReadingSegmentationMappingFile", "File not found.");
279 }
280 else {
281 Int_t id, ix, iy, idmanu, idchannel;
282 Float_t x, y;
283 while ( !in.eof()) {
284 in >> id >> ix >> iy >> x >> y >> idmanu >> idchannel;
212bb69d 285 printf("id=%d ix=%d iy=%d x=%f y=%f idmanu=%d and idchannel=%d\n",id, ix, iy, x, y,idmanu, idchannel);
74f8c8e3 286
287 fListOfIndexes->AddAt( new AliMUONSegmentIndex(id,ix,iy,cathode), id);
288 fListOfManuIndexes->AddAt( new AliMUONSegmentManuIndex(id,idmanu,0,idchannel), id);;
289 fListOfPositions->AddAt( new AliMUONSegmentPosition(id, x, y,cathode), id);;
290
291 ( (AliMUONSegmentIndex* )fListOfIndexes->At(id))->Print();
292 ( (AliMUONSegmentManuIndex*)fListOfManuIndexes->At(id))->Print();
293 ( (AliMUONSegmentPosition*)fListOfPositions->At(id))->Print();
294
295 fMapManuIndexIndex->Add( fListOfManuIndexes->At(id), fListOfIndexes->At(id));
296 fMapIndexManuIndex->Add( fListOfIndexes->At(id), fListOfManuIndexes->At(id));
297 fMapIndexPosition->Add( fListOfIndexes->At(id), fListOfPositions->At(id));
212bb69d 298 fMapPositionIndex->Add( fListOfPositions->At(id), fListOfIndexes->At(id) );
74f8c8e3 299 }
300 }
301 in.close();
302}