AliRoot Core  a565103 (a565103)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMUONPainterPadStore.cxx
Go to the documentation of this file.
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 #include "AliMUONPainterPadStore.h"
19 
20 #include "AliMUONCalibParamND.h"
21 #include "AliMUON2DMap.h"
22 #include "AliMUONVStore.h"
23 #include "AliMUONVDigit.h"
24 #include "AliLog.h"
25 #include <Riostream.h>
26 #include <TArrayI.h>
27 #include <TVector2.h>
28 
34 
35 using std::cout;
36 using std::endl;
40 
41 //_____________________________________________________________________________
42 AliMUONPainterPadStore::AliMUONPainterPadStore(TRootIOCtor* /*dummy*/) : TObject(),
43 fPadStore(0x0)
44 {
46 }
47 
48 //_____________________________________________________________________________
50  fPadStore(new AliMUON2DMap(kTRUE))
51 {
53 }
54 
55 //_____________________________________________________________________________
57 {
59  delete fPadStore;
60 }
61 
62 //_____________________________________________________________________________
63 Int_t
64 AliMUONPainterPadStore::FindPadID(const TArrayI& pads, Double_t x, Double_t y) const
65 {
68 
69  for ( Int_t i = 0; i < pads.GetSize(); ++i )
70  {
71  Int_t id = pads.At(i);
72 
73  TVector2 position;
74  TVector2 dimensions;
75 
76  GetPadGeometry(id,position,dimensions);
77 
78  TVector2 bl(position-dimensions);
79  TVector2 ur(position+dimensions);
80  if ( bl.X() <= x && ur.X() >= x && bl.Y() <= y && ur.Y() >= y )
81  {
82  return id;
83  }
84  }
85  return -1;
86 }
87 
88 
89 //_____________________________________________________________________________
91 AliMUONPainterPadStore::Get(Int_t detElemId, Int_t manuId) const
92 {
94 
95  AliMUONVCalibParam* param =
96  static_cast<AliMUONVCalibParam*>(fPadStore->FindObject(detElemId,manuId));
97 
98  if (!param)
99  {
100  param = new AliMUONCalibParamND(4,64,detElemId,manuId,-1.0);
101  fPadStore->Add(param);
102  }
103 
104  return param;
105 }
106 
107 //_____________________________________________________________________________
108 void
110  Double_t& xmin,
111  Double_t& ymin,
112  Double_t& xmax,
113  Double_t& ymax) const
114 {
116 
117  xmin=ymin=1E9;
118  xmax=ymax=-1E9;
119 
120  for ( Int_t i = 0; i < pads.GetSize(); ++i )
121  {
122  Int_t id = pads.At(i);
123 
124  TVector2 position;
125  TVector2 dimensions;
126 
127  GetPadGeometry(id,position,dimensions);
128 
129  TVector2 bl(position-dimensions);
130  TVector2 ur(position+dimensions);
131  xmin = TMath::Min(xmin,bl.X());
132  ymin = TMath::Min(ymin,bl.Y());
133  xmax = TMath::Max(xmax,ur.X());
134  ymax = TMath::Max(ymax,ur.Y());
135  }
136 }
137 
138 //_____________________________________________________________________________
139 void
141  TVector2& position,
142  TVector2& dimensions) const
143 {
145 
146  if ( padId < 0 )
147  {
148  AliError(Form("padId is < 0 : %d",padId));
149  position.Set(0.0,0.0);
150  dimensions.Set(-1.0,-1.0);
151  return;
152  }
153 
154  Int_t detElemId = AliMUONVDigit::DetElemId(padId);
155  Int_t manuId = AliMUONVDigit::ManuId(padId);
156  Int_t manuChannel = AliMUONVDigit::ManuChannel(padId);
157 
158  AliMUONVCalibParam* param =
159  static_cast<AliMUONVCalibParam*>(fPadStore->FindObject(detElemId,manuId));
160 
161  if (!param)
162  {
163  AliError(Form("Could not find object DE %d manu %d",detElemId,manuId));
164  position.Set(0.0,0.0);
165  dimensions.Set(-1.0,-1.0);
166  return;
167  }
168 
169  position.Set(param->ValueAsDouble(manuChannel,0),
170  param->ValueAsDouble(manuChannel,1));
171 
172  dimensions.Set(param->ValueAsDouble(manuChannel,2),
173  param->ValueAsDouble(manuChannel,3));
174 
175 }
176 
177 //_____________________________________________________________________________
178 Int_t
180 {
182 
183  TIter next(fPadStore->CreateIterator());
184  AliMUONVCalibParam* param;
185  Int_t n(0);
186 
187  while ( ( param = static_cast<AliMUONVCalibParam*>(next()) ) )
188  {
189  for ( Int_t i = 0; i < param->Size(); ++i )
190  {
191  if ( param->ValueAsDouble(i,2) >= 0 && param->ValueAsDouble(i,3) >= 0 )
192  {
193  ++n;
194  }
195  }
196  }
197 
198  return n;
199 }
200 
201 //_____________________________________________________________________________
202 void
203 AliMUONPainterPadStore::PrintPads(const TArrayI& pads) const
204 {
206  cout << "n=" << pads.GetSize() << endl;
207 
208  for ( Int_t i = 0; i < pads.GetSize(); ++i )
209  {
210  Int_t id = pads.At(i);
211  TVector2 position, dimensions;
212  GetPadGeometry(id,position,dimensions);
213  cout << Form("i %4d DE %4d ManuID %4d ManuChannel %2d (X,Y)=(%7.3f,%7.3f)"
214  " (DX,DY)=(%7.3f,%7.3f)",
215  i,
219  position.X(),position.Y(),
220  dimensions.X(),dimensions.Y()) << endl;
221  }
222 }
223 
virtual TIterator * CreateIterator() const =0
Return an iterator to loop over the whole store.
virtual Int_t ManuChannel() const =0
The channel within ManuId() this digit belongs to (manuChannel for tracker, localBoardChannel for tri...
Int_t FindPadID(const TArrayI &pads, Double_t x, Double_t y) const
void PrintPads(const TArrayI &pads) const
AliMUONVStore * fPadStore
the pad container
virtual Double_t ValueAsDouble(Int_t i, Int_t j=0) const
virtual Int_t DetElemId() const =0
The detection element this digit belongs to.
AliMUONVCalibParam * Get(Int_t detElemId, Int_t manuId) const
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
Container of calibration values for a given number of channels.
Implementation of AliMUONVCalibParam for tuples of double.
Basic implementation of AliMUONVStore container using AliMpExMap internally.
Definition: AliMUON2DMap.h:20
virtual Bool_t Add(TObject *object)=0
Add an object to the store.
virtual Int_t ManuId() const =0
The electronic card id this digit belongs to (manuId for tracker, localboardId for trigger) ...
void GetBoundaries(const TArrayI &pads, Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax) const
void GetPadGeometry(Int_t padID, TVector2 &position, TVector2 &dimensions) const
virtual TObject * FindObject(const char *name) const
Find an object by name.