AliRoot Core  edcc906 (edcc906)
AliMUON2DStoreValidator.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 
19 
20 #include "AliLog.h"
21 #include "AliMUONCheckItem.h"
22 #include "AliMUONVCalibParam.h"
23 #include "AliMUONVStore.h"
24 #include "AliMpConstants.h"
25 #include "AliMpDDLStore.h"
26 #include "AliMpDEManager.h"
27 #include "AliMpDetElement.h"
28 #include "AliMpManuIterator.h"
29 #include <Riostream.h>
30 #include <TList.h>
31 #include <TObjArray.h>
32 #include <TObjString.h>
33 
34 //-----------------------------------------------------------------------------
62 //-----------------------------------------------------------------------------
63 
67 
68 //_____________________________________________________________________________
70 : TObject(),
71  fChambers(0x0),
72  fStatus(0x0)
73 {
75 }
76 
77 //_____________________________________________________________________________
79 {
81  delete fChambers;
82  delete fStatus;
83 }
84 
85 //_____________________________________________________________________________
88 {
91 
92  if ( chamberID < 0 || chamberID >= AliMpConstants::NofTrackingChambers() )
93  {
94  AliFatal(Form("Invalid chamber number %d",chamberID));
95  return 0x0;
96  }
97 
98  if (!fChambers)
99  {
101  }
102 
103  AliMUONCheckItem* chamber =
104  static_cast<AliMUONCheckItem*>(fChambers->At(chamberID));
105 
106  if (!chamber)
107  {
108  chamber = new AliMUONCheckItem(chamberID,
110  "Chamber");
111  fChambers->AddAt(chamber,chamberID);
112  }
113  return chamber;
114 }
115 
116 //_____________________________________________________________________________
119 {
121 
122  Int_t chamberID = AliMpDEManager::GetChamberId(detElemId);
123  AliMUONCheckItem* chamber = GetChamber(chamberID);
124  AliMUONCheckItem* de =
125  static_cast<AliMUONCheckItem*>(chamber->GetItem(detElemId));
126  if (!de)
127  {
128  AliDebug(3,Form("Did not find DE %4d into chamber %d, will create it",
129  detElemId,chamberID));
130  de = new AliMUONCheckItem(detElemId,
131  AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofManus(),
132  "Detection Element");
133  Bool_t ok = chamber->AddItem(detElemId,de);
134  if (!ok)
135  {
136  AliError(Form("Could not add DE %4d into chamber %2d",detElemId,chamberID));
137  }
138  }
139  return de;
140 }
141 
142 //_____________________________________________________________________________
144 AliMUON2DStoreValidator::GetManu(Int_t detElemId, Int_t manuId)
145 {
147 
148  AliMUONCheckItem* de = GetDE(detElemId);
149  AliMUONCheckItem* manu = static_cast<AliMUONCheckItem*>(de->GetItem(manuId));
150  if (!manu)
151  {
152  manu = new AliMUONCheckItem(manuId,AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofChannelsInManu(manuId),"Manu");
153  Bool_t ok = de->AddItem(manuId,manu);
154  if (!ok)
155  {
156  AliError(Form("Could not add manu %4d into DE %4d",manuId,detElemId));
157  }
158 
159  }
160  return manu;
161 }
162 
163 //_____________________________________________________________________________
164 void
166  Int_t manuId, Int_t manuChannel)
167 {
169 
170  AliDebug(3,Form("DE %4d Manu %4d Channel %2d is missing",
171  detElemId,manuId,manuChannel));
172 
173  AliMUONCheckItem* manu = GetManu(detElemId,manuId);
174  Bool_t ok = manu->AddItem(manuChannel,new TObjString(Form("%2d",manuChannel)));
175  if (!ok)
176  {
177  AliError(Form("Could not add channel %2d to manuId %4d in DE %4d",
178  manuChannel,manuId,detElemId));
179  }
180 }
181 
182 //_____________________________________________________________________________
183 void
184 AliMUON2DStoreValidator::AddMissingManu(Int_t detElemId, Int_t manuId)
185 {
187 
188  AliDebug(3,Form("DE %4d Manu %4d is completely missing",
189  detElemId,manuId));
190 
191  Int_t n(AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofChannelsInManu(manuId));
192 
193  for ( Int_t i = 0; i < n; ++i )
194  {
195  AddMissingChannel(detElemId,manuId,i);
196  }
197 }
198 
199 //_____________________________________________________________________________
200 void
202 {
204 
205  TObjString* channel(0x0);
206  TIter next(manu.CreateIterator());
207 
208  while ( ( channel = static_cast<TObjString*>(next()) ) )
209  {
210  lines.Add(new TObjString(Form("\t\t\tChannel %s is missing or dead",
211  channel->GetString().Data())));
212  }
213 
214 }
215 
216 //_____________________________________________________________________________
217 void
219 {
221  AliMUONCheckItem* manu(0x0);
222 
223  TIter next(de.CreateIterator());
224 
225  lines.Add(new TObjString(Form("DE %5d",de.GetID())));
226 
227 
228  while ( ( manu = static_cast<AliMUONCheckItem*>(next()) ) )
229  {
230  if ( manu->IsDead() )
231  {
232  lines.Add(new TObjString(Form("\t\tManu %4d is missing or dead",manu->GetID())));
233  }
234  else
235  {
236  ReportManu(lines,*manu);
237  }
238  }
239 }
240 
241 //_____________________________________________________________________________
242 void
244 {
246 
247  AliMUONCheckItem* de(0x0);
248  TIter next(chamber.CreateIterator());
249 
250  while ( ( de = static_cast<AliMUONCheckItem*>(next()) ) )
251  {
252  if ( de->IsDead() )
253  {
254  lines.Add(new TObjString(Form("\tDE %4d is missing or dead",de->GetID())));
255  }
256  else
257  {
258  ReportDE(lines,*de);
259  }
260  }
261 }
262 
263 //_____________________________________________________________________________
264 void
266 {
268  if (fChambers)
269  {
270  Report(lines,*fChambers);
271  }
272 }
273 
274 //_____________________________________________________________________________
275 void
276 AliMUON2DStoreValidator::Report(TList& lines, const TObjArray& chambers)
277 {
279 
280  for ( Int_t iChamber = 0; iChamber <= chambers.GetLast(); ++iChamber )
281  {
282  AliMUONCheckItem* chamber = static_cast<AliMUONCheckItem*>(chambers.At(iChamber));
283  if ( chamber )
284  {
285  if ( chamber->IsDead() )
286  {
287  lines.Add(new TObjString(Form("Chamber %2d is missing or dead",iChamber)));
288  }
289  else
290  {
291  ReportChamber(lines,*chamber);
292  }
293  }
294  }
295 }
296 
297 //_____________________________________________________________________________
298 TObjArray*
300  AliMUONVStore* config)
301 {
305 
306  Bool_t (*kCheck)(const AliMUONVCalibParam&,Int_t) = 0x0;
307  return Validate(store,kCheck,config);
308 }
309 
310 //_____________________________________________________________________________
311 TObjArray*
313  Bool_t (*check)(const AliMUONVCalibParam&,Int_t),
314  AliMUONVStore* config)
315 {
319 
320  delete fChambers;
321  fChambers = 0x0;
322 
323  // Now checks if some full manus are missing
324 
326 
327  Int_t detElemId;
328  Int_t manuId;
329 
330  while ( it.Next(detElemId,manuId) )
331  {
333  static_cast<AliMUONVCalibParam*>(store.FindObject(detElemId,manuId));
334  if (!test)
335  {
336  // completely missing manu
337  if ( !config || ( config && config->FindObject(detElemId,manuId ) ) )
338  {
339  // manu is in the config but not in the store : that's an error
340  AddMissingManu(detElemId,manuId);
341  }
342  }
343  else
344  {
345  if (!check) continue;
346 
348 
349  // manu is there, check all its channels
350  for ( Int_t manuChannel = 0 ; manuChannel < test->Size(); ++manuChannel )
351  {
352  if ( de->IsConnectedChannel(manuId,manuChannel) &&
353  !check(*test,manuChannel) )
354  {
355  AddMissingChannel(detElemId,manuId,manuChannel);
356  }
357  }
358  }
359  }
360  return fChambers;
361 
362 }
363 
364 
365 //_____________________________________________________________________________
366 TObjArray*
368  Float_t invalidFloatValue,
369  AliMUONVStore* config)
370 {
374 
375  delete fChambers;
376  fChambers = 0x0;
377 
378  // Now checks if some full manus are missing
379 
381  Int_t detElemId;
382  Int_t manuId;
383 
384  while ( it.Next(detElemId,manuId) )
385  {
387  static_cast<AliMUONVCalibParam*>(store.FindObject(detElemId,manuId));
388  if (!test)
389  {
390  if ( !config || ( config && config->FindObject(detElemId,manuId ) ) )
391  {
392  // completely missing manu
393  AddMissingManu(detElemId,manuId);
394  }
395  }
396  else
397  {
398  // manu is there, check all its channels
400 
401  for ( Int_t manuChannel = 0 ; manuChannel < test->Size(); ++manuChannel )
402  {
403  if ( de->IsConnectedChannel(manuId,manuChannel) &&
404  ( test->ValueAsFloat(manuChannel,0) == invalidFloatValue ||
405  test->ValueAsFloat(manuChannel,1) == invalidFloatValue ) )
406  {
407  AddMissingChannel(detElemId,manuId,manuChannel);
408  }
409  }
410  }
411  }
412  return fChambers;
413 }
414 
415 
TObject * GetItem(Int_t id) const
AliMUONCheckItem * GetChamber(Int_t chamberID)
virtual Float_t ValueAsFloat(Int_t i, Int_t j=0) const =0
#define TObjArray
virtual Int_t Size() const =0
The number of channels handled by this object.
TIterator * CreateIterator() const
Int_t GetID() const
Return the identifier of this item.
static void ReportChamber(TList &list, const AliMUONCheckItem &chamber)
Bool_t AddItem(Int_t id, TObject *item)
static void ReportManu(TList &list, const AliMUONCheckItem &manu)
void AddMissingManu(Int_t detElemId, Int_t manuId)
AliMpDetElement * GetDetElement(Int_t detElemId, Bool_t warn=true) const
TObjArray * fChambers
! Array of AliMUONCheckItem.
The class defines the electronics properties of detection element.
Bool_t Next(Int_t &detElemId, Int_t &manuId)
Class to loop over all manus of MUON Tracker.
AliMUONVStore * fStatus
! Statuses
Container of calibration values for a given number of channels.
static AliMpDDLStore * Instance(Bool_t warn=true)
static Int_t GetChamberId(Int_t detElemId, Bool_t warn=true)
static Int_t GetNofDEInChamber(Int_t chamberId, Bool_t warn=true)
void AddMissingChannel(Int_t detElemId, Int_t manuId, Int_t manuChannel)
AliMUONCheckItem * GetManu(Int_t detElemId, Int_t manuId)
#define AliFatal(message)
Definition: AliLog.h:640
TObjArray * Validate(const AliMUONVStore &store, Float_t invalidFloatValue, AliMUONVStore *config=0x0)
void test()
Definition: interpolTest.C:100
A structure used to gather information at different levels (ch,manu,de,chamber)
#define AliDebug(logLevel, message)
Definition: AliLog.h:300
void Report(TList &lines) const
Reports what is missing, trying to be as concise as possible.
Bool_t IsDead() const
static void ReportDE(TList &list, const AliMUONCheckItem &de)
#define AliError(message)
Definition: AliLog.h:591
Bool_t IsConnectedChannel(Int_t manuId, Int_t manuChannel) const
Determine which channels, manus, DEs, stations are missing from a 2DStore.
Base class for MUON data stores.
Definition: AliMUONVStore.h:22
AliMUONCheckItem * GetDE(Int_t detElemId)
static Int_t NofTrackingChambers()
Return number of tracking chambers.
virtual TObject * FindObject(const char *name) const
Find an object by name.