]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/UPGRADE/AliITSUTrackCond.cxx
reco update
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUTrackCond.cxx
1 #include "AliITSUTrackCond.h"
2 #include "AliITSUAux.h"
3 #include "AliLog.h"
4
5 using namespace AliITSUAux;
6
7 //______________________________________________________________
8 AliITSUTrackCond::AliITSUTrackCond(int nLayers)
9   :fNLayers(nLayers)
10   ,fNConditions(0)
11   ,fConditions(0)
12   ,fAuxData(0)
13 {
14   // def c-tor
15 }
16
17 //______________________________________________________________
18 AliITSUTrackCond::AliITSUTrackCond(const AliITSUTrackCond& src)
19   :TObject(src),
20    fNLayers(src.fNLayers)
21   ,fNConditions(src.fNConditions)
22   ,fConditions(src.fConditions)
23   ,fAuxData(src.fAuxData)
24 {
25   // copy c-tor
26 }
27
28 //______________________________________________________________
29 AliITSUTrackCond& AliITSUTrackCond::operator=(const AliITSUTrackCond& src)
30 {
31   // copy op.
32   if (this!=&src) {
33     fNLayers = src.fNLayers;
34     fNConditions = src.fNConditions;
35     fConditions  = src.fConditions;
36     fAuxData = src.fAuxData;
37   }
38   return *this;
39 }
40
41 //______________________________________________________________
42 void AliITSUTrackCond::AddGroupPattern(UShort_t patt)
43 {
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]++;
50 }
51
52 //______________________________________________________________
53 void AliITSUTrackCond::AddNewCondition(Int_t minClusters)
54 {
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;
60   fNConditions++;
61   //
62 }
63
64 //______________________________________________________________
65 Bool_t AliITSUTrackCond::CheckPattern(UShort_t patt) const
66 {
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);
71   int cntCond = 0;
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
75     Bool_t ok = kTRUE;
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;}
78     if (ok) return kTRUE;
79     cntCond += kNAuxSz;
80   }
81   return kFALSE;
82 }
83
84 //______________________________________________________________
85 void AliITSUTrackCond::Print(Option_t*) const
86 {
87   // print conditions
88   int nc = GetNConditions();  
89   Short_t *arrAux = (Short_t*)fAuxData.GetArray();
90   Short_t *arrGrp = (Short_t*)fConditions.GetArray();  
91   int cntCond = 0;
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--;) {
97       printf("{");
98       PrintBits(arrGrp[grAddr++], fNLayers);
99       printf("}");
100     }
101     printf("\n");
102     cntCond += kNAuxSz;
103   }
104 }