59 #include "Riostream.h"
74 void Dump(
const char* str, UInt_t n, UInt_t* ids, Float_t* values, Bool_t
debug)
81 for ( UInt_t i = 0; i < n; ++i )
86 if ( s.CountChar(
'%')==3 )
88 cout << Form(s.Data(),a,b,values[i]) << endl;
92 cout << Form(s.Data(),a,values[i]) << endl;
98 cout <<
"------" << endl;
99 for ( UInt_t i = 0; i < n; ++i )
104 cout << Form(
"ids[%5d]=%d values[%5d]=%e (a,b)=(%5d,%5d)",
105 i,ids[i],i,values[i],a,b) << endl;
111 Float_t GetValue(UInt_t n, UInt_t* ids, Float_t* values, UInt_t key)
114 Long64_t index = TMath::BinarySearch(n,ids,key);
116 Bool_t found = ( ( index >= 0 ) && ( ids[index] == key ) );
120 return values[index];
128 void Insert(UInt_t n, UInt_t* ids, Float_t* values, UInt_t index, UInt_t key, Float_t value)
132 for ( UInt_t i = n; i > index; --i )
135 values[i] = values[i-1];
138 values[index] = value;
141 Bool_t SetValue(UInt_t n, UInt_t* ids, Float_t* values, UInt_t key, Float_t value)
144 Long64_t index = TMath::BinarySearch(n,ids, key);
146 Bool_t alreadyThere = ( ( index >= 0 ) && ( ids[index] == key ) );
151 values[index] = value;
154 Insert(n,ids,values,index+1,key,value);
158 void Copy(UInt_t n, UInt_t* src, UInt_t*& dest)
165 dest =
new UInt_t[n];
166 memcpy(dest,src,n*
sizeof(UInt_t));
170 void Copy(UInt_t n, Float_t* src, Float_t*& dest)
177 dest =
new Float_t[n];
178 memcpy(dest,src,n*
sizeof(Float_t));
194 fDEIds(new UInt_t[fMaxNofDEs]),
195 fDEProbas(new Float_t[fMaxNofDEs]),
196 fBPIds(new UInt_t[fMaxNofBPs]),
197 fBPProbas(new Float_t[fMaxNofBPs]),
198 fManuIds(new UInt_t[fMaxNofManus]),
199 fManuProbas(new Float_t[fMaxNofManus]),
235 fIsBinary(rl.fIsBinary),
236 fMaxNofDEs(rl.fMaxNofDEs),
237 fMaxNofBPs(rl.fMaxNofBPs),
238 fMaxNofManus(rl.fMaxNofManus),
241 fNofManus(rl.fNofManus),
271 static_cast<TObject&
>(*this)=rl;
339 if (!param)
return 0.0;
360 Bool_t zeroorone = ( proba == 0.0 || proba == 1.0 );
407 for ( Int_t i = 0; i < 2; ++i )
412 AliError(Form(
"Could not get segmentation of DE %d",detElemId));
418 AliError(Form(
"Could not get slat from DE %d",detElemId));
422 for ( Int_t j = 0; j < pcb->
GetSize(); ++j )
447 for ( Int_t i = 0; i < manus->
GetSize(); ++ i )
462 Bool_t
debug(kFALSE);
464 if ( sopt.Contains(
"DEBUG") ) debug=kTRUE;
466 cout << Form(
"We have probabilities for %d detection element(s), %d bus patch(es), %d manu(s)",
Singleton container class for mapping segmentations.
Float_t ManuProbability(Int_t detElemId, Int_t manuId) const
const AliMpVSegmentation * GetMpSegmentation(Int_t detElemId, AliMp::CathodType cath, Bool_t warn=true) const
static AliMpSegmentation * Instance(Bool_t warn=true)
virtual Float_t ValueAsFloat(Int_t i, Int_t j=0) const =0
UInt_t fMaxNofDEs
max number of detection elements (for allocation purposes)
Implementation of AliMUONVCalibParam for tuples of floats.
virtual void SetValueAsFloat(Int_t i, Int_t j, Float_t value)=0
Set one value, for channel i, dimension j. Consider value is a float.
const AliMpSlat * GetSlat(const AliMpVSegmentation *kSegmentation, Bool_t warn=true) const
void Print(Option_t *opt="") const
A PCB for station 3,4 or 5.
virtual ~AliMUONRejectList()
Collection of methods usefull to DCS handling for MUON TRK and TRG.
Int_t GetSize() const
The number of motifs, aka manus.
UInt_t * fDEIds
array of detection element ids
static UInt_t BuildUniqueID(Int_t id0, Int_t id1)
AliMpDetElement * GetDetElement(Int_t detElemId, Bool_t warn=true) const
A slat (building block of stations 3, 4 and 5)
The class defines the electronics properties of detection element.
Float_t * fManuProbas
array of proba for manus
void SetHVProbability(const char *dcsName, Float_t proba=1.0)
UInt_t fMaxNofManus
max number of manus (for allocation purposes)
Float_t DetectionElementProbability(Int_t detElemId) const
void SetDetectionElementProbability(Int_t detElemId, Float_t proba=1.0)
UInt_t fNofManus
actual number of manus for which we have probabilities
Float_t * fDEProbas
array of probabilities of DEs
Container of calibration values for a given number of channels.
static AliMpDDLStore * Instance(Bool_t warn=true)
AliMUONVStore * fChannels
probabilities for all channels
static Int_t ManuNofChannels()
Max number of channels per manu.
Int_t GetID() const
Return motif position ID = manu id.
AliMpPCB * GetPCB(Int_t i) const
Returns the i-th PCB of this slat.
TString DCSAliasFromName(const char *dcsName) const
Bool_t fIsBinary
Whether or not we only store zeros and ones for probabilities.
Float_t ChannelProbability(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
void SetManuProbability(Int_t detElemId, Int_t manuId, Float_t proba=1.0)
Int_t DCSIndexFromDCSAlias(const char *dcsAlias) const
AliMUONRejectList & operator=(const AliMUONRejectList &rl)
Helper class for sorted integer array.
UInt_t fMaxNofBPs
max number of bus patches (for allocation purposes)
AliMpMotifPosition * GetMotifPosition(Int_t i) const
Basic implementation of AliMUONVStore container using AliMpExMap internally.
UInt_t * fManuIds
array of manu ids
UInt_t fNofDEs
actual number of detection elements for which we have probabilities
virtual Bool_t Add(TObject *object)=0
Add an object to the store.
UInt_t * fBPIds
array of bus patch ids
static void DecodeUniqueID(UInt_t uniqueID, Int_t &id0, Int_t &id1)
void SetChannelProbability(Int_t detElemId, Int_t manuId, Int_t manuChannel, Float_t proba=1.0)
void ZeroOrOne(Float_t proba)
The abstract base class for the segmentation.
Object to hold the list of elements we want to reject from the reconstruction.
Float_t BusPatchProbability(Int_t busPatchId) const
const AliMpArrayI * ManusForHV(Int_t hvIndex) const
Int_t GetValue(Int_t index) const
Float_t * fBPProbas
array of proba for bus patches
Int_t DetElemIdFromDCSAlias(const char *dcsAlias) const
Base class for MUON data stores.
void SetPCBProbability(Int_t detElemId, Int_t pcbNumber, Float_t proba=1.0)
void SetBusPatchProbability(Int_t busPatchId, Float_t proba=1.0)
virtual TObject * FindObject(const char *name) const
Find an object by name.
UInt_t fNofBPs
actual number of bus patches for which we have probabilities