1 #include "AliITSUTrackCond.h"
2 #include "AliITSUAux.h"
5 using namespace AliITSUAux;
7 //______________________________________________________________
8 AliITSUTrackCond::AliITSUTrackCond(int nLayers)
17 //______________________________________________________________
18 AliITSUTrackCond::AliITSUTrackCond(const AliITSUTrackCond& src)
20 fNLayers(src.fNLayers)
21 ,fNConditions(src.fNConditions)
22 ,fConditions(src.fConditions)
23 ,fAuxData(src.fAuxData)
28 //______________________________________________________________
29 AliITSUTrackCond& AliITSUTrackCond::operator=(const AliITSUTrackCond& src)
33 fNLayers = src.fNLayers;
34 fNConditions = src.fNConditions;
35 fConditions = src.fConditions;
36 fAuxData = src.fAuxData;
41 //______________________________________________________________
42 void AliITSUTrackCond::AddGroupPattern(UShort_t patt)
44 // add new group pattern to last condition
45 if (fNConditions<1) AliFatal("Can be called only after AddCondition");
46 int ind = fConditions.GetSize();
47 fConditions.Set(ind+1);
48 fConditions[ind] = patt;
49 fAuxData[(fNConditions-1)*kNAuxSz + kNGroups]++;
52 //______________________________________________________________
53 void AliITSUTrackCond::AddNewCondition(Int_t minClusters)
55 // add new track condition
56 fAuxData.Set( (1+fNConditions)*kNAuxSz );
57 fAuxData[fNConditions*kNAuxSz+kCondStart] = fConditions.GetSize();
58 fAuxData[fNConditions*kNAuxSz+kNGroups] = 0;
59 fAuxData[fNConditions*kNAuxSz+kMinClus] = minClusters;
64 //______________________________________________________________
65 Bool_t AliITSUTrackCond::CheckPattern(UShort_t patt) const
67 // check if the pattern matches to some condition
68 Short_t *arrAux = (Short_t*)fAuxData.GetArray();
69 Short_t *arrGrp = (Short_t*)fConditions.GetArray();
70 int ncl = NumberOfBitsSet(patt);
72 for (int ic=0;ic<fNConditions;ic++) {
73 if (arrAux[cntCond+kMinClus]>ncl) {cntCond+=kNAuxSz; continue;} // check number of clusters
74 int grAddr = arrAux[cntCond+kCondStart]; // 1st group pattern address in the condition
76 // if every group of the condition does not match, check next contition
77 for (int ig=arrAux[cntCond+kNGroups];ig--;) if ( !(patt&arrGrp[grAddr++]) ) {ok = kFALSE; break;}
84 //______________________________________________________________
85 void AliITSUTrackCond::Print(Option_t*) const
88 int nc = GetNConditions();
89 Short_t *arrAux = (Short_t*)fAuxData.GetArray();
90 Short_t *arrGrp = (Short_t*)fConditions.GetArray();
92 printf("Conditions set ID=%d : %d entries\n",GetID(),nc);
93 for (int i=0;i<nc;i++) {
94 printf("#%2d: MinCl:%2d | %d groups :",i,arrAux[cntCond+kMinClus],arrAux[cntCond+kNGroups]);
95 int grAddr = arrAux[cntCond+kCondStart];
96 for (int ig=arrAux[cntCond+kNGroups];ig--;) {
98 PrintBits(arrGrp[grAddr++], fNLayers);