#include "AliITSUTrackCond.h" #include "AliITSUAux.h" #include "AliLog.h" #include using namespace AliITSUAux; using namespace TMath; Char_t AliITSUTrackCond::fgkClSharing = 0; Int_t AliITSUTrackCond::fgkMaxBranches = 50; Int_t AliITSUTrackCond::fgkMaxCandidates = 500; Float_t AliITSUTrackCond::fgkMaxTr2ClChi2 = 50.; Float_t AliITSUTrackCond::fgkMaxChi2GloNrm = 50.; Float_t AliITSUTrackCond::fgkMissPenalty = 2.; Float_t AliITSUTrackCond::fgkMaxMatchChi2 = 15.; Float_t AliITSUTrackCond::fgkMaxITSSAChi2 = 15; //______________________________________________________________ AliITSUTrackCond::AliITSUTrackCond(int nLayers) :fInitDone(kFALSE) ,fActiveLrInner(0) ,fActiveLrOuter(0) ,fAllowLayers(0) ,fNLayers(0) ,fMaxClus(0) ,fMaxITSTPCMatchChi2(fgkMaxMatchChi2) ,fClSharing(0) ,fMaxBranches(0) ,fMaxCandidates(0) ,fMaxITSSAChi2(0) ,fMaxTr2ClChi2(0) ,fMaxChi2GloNrm(0) ,fMissPenalty(0) ,fNSigmaRoadY(0) ,fNSigmaRoadZ(0) ,fNConditions(0) ,fConditions(0) ,fAuxData(0) { // def c-tor if (nLayers) SetNLayers(nLayers); } //______________________________________________________________ AliITSUTrackCond::AliITSUTrackCond(const AliITSUTrackCond& src) :TObject(src) ,fInitDone(src.fInitDone) ,fActiveLrInner(src.fActiveLrInner) ,fActiveLrOuter(src.fActiveLrOuter) ,fAllowLayers(src.fAllowLayers) ,fNLayers(0) ,fMaxClus(0) ,fMaxITSTPCMatchChi2(src.fMaxITSTPCMatchChi2) ,fClSharing(0) ,fMaxBranches(0) ,fMaxCandidates(0) ,fMaxITSSAChi2(0) ,fMaxTr2ClChi2(0) ,fMaxChi2GloNrm(0) ,fMissPenalty(0) ,fNSigmaRoadY(0) ,fNSigmaRoadZ(0) ,fNConditions(src.fNConditions) ,fConditions(src.fConditions) ,fAuxData(src.fAuxData) { // copy c-tor SetNLayers(src.fNLayers); fMaxClus = src.fMaxClus; for (int i=fNLayers;i--;) { SetMaxBranches(i,src.GetMaxBranches(i)); SetMaxCandidates(i,src.GetMaxCandidates(i)); SetMaxTr2ClChi2(i,src.GetMaxTr2ClChi2(i)); SetMaxChi2GloNrm(i,src.GetMaxChi2GloNrm(i)); SetMissPenalty(i,src.GetMissPenalty(i)); SetNSigmaRoadY(i,src.GetNSigmaRoadY(i)); SetNSigmaRoadZ(i,src.GetNSigmaRoadZ(i)); SetClSharing(i,src.GetClSharing(i)); } // for (int i=fMaxClus;i--;) SetMaxITSSAChi2(1+i,src.GetMaxITSSAChi2(1+i)); // } //______________________________________________________________ AliITSUTrackCond& AliITSUTrackCond::operator=(const AliITSUTrackCond& src) { // copy op. if (this!=&src) { fInitDone = src.fInitDone; fActiveLrInner = src.fActiveLrInner; fActiveLrOuter = src.fActiveLrOuter; // fAllowLayers = src.fAllowLayers; fNConditions = src.fNConditions; fConditions = src.fConditions; fMaxITSTPCMatchChi2 = src.fMaxITSTPCMatchChi2; // SetNLayers(src.fNLayers); // for (int i=fNLayers;i--;) { SetMaxBranches(i,src.GetMaxBranches(i)); SetMaxCandidates(i,src.GetMaxCandidates(i)); SetMaxTr2ClChi2(i,src.GetMaxTr2ClChi2(i)); SetMaxChi2GloNrm(i,src.GetMaxChi2GloNrm(i)); SetMissPenalty(i,src.GetMissPenalty(i)); SetNSigmaRoadY(i,src.GetNSigmaRoadY(i)); SetNSigmaRoadZ(i,src.GetNSigmaRoadZ(i)); SetClSharing(i,src.GetClSharing(i)); } for (int i=fMaxClus;i--;) SetMaxITSSAChi2(1+i,src.GetMaxITSSAChi2(1+i)); // fAuxData = src.fAuxData; } return *this; } //______________________________________________________________ void AliITSUTrackCond::SetNLayers(int nLayers) { // set number of layers fInitDone = kFALSE; if (fNLayers) { delete[] fClSharing; delete[] fMaxBranches; delete[] fMaxCandidates; delete[] fMaxTr2ClChi2; delete[] fMaxChi2GloNrm; delete[] fMissPenalty; delete[] fNSigmaRoadY; delete[] fNSigmaRoadZ; delete[] fMaxITSSAChi2; } fNLayers = nLayers; fMaxClus = 2*fNLayers; fAllowLayers = 0; // if (fNLayers>0) { fActiveLrInner = 0; fActiveLrOuter = fNLayers-1; fClSharing = new Char_t[fNLayers]; fMaxBranches = new Short_t[fNLayers]; fMaxCandidates = new Short_t[fNLayers]; fMaxTr2ClChi2 = new Float_t[fNLayers]; fMaxChi2GloNrm = new Float_t[fNLayers]; fMissPenalty = new Float_t[fNLayers]; fNSigmaRoadY = new Float_t[fNLayers]; fNSigmaRoadZ = new Float_t[fNLayers]; fMaxITSSAChi2 = new Float_t[fMaxClus]; for (int i=fNLayers;i--;) { fAllowLayers |= 0x1<int(AliITSUAux::kMaxLayers)) AliFatal(Form("Requested Nlayers=%d exceeds max alowed %d",minCl,AliITSUAux::kMaxLayers)); if (minCl<1) AliFatal(Form("Requested Nlayers=%d for pattern %x",minCl,patt)); int ind = fConditions.GetSize(); fConditions.Set(ind+1); fConditions[ind] = (patt&AliITSUAux::kMaxLrMask) | (minCl<ncl) {cntCond+=kNAuxSz; continue;} // check number of clusters int grAddr = arrAux[cntCond+kCondStart]; // 1st group pattern address in the condition Bool_t ok = kTRUE; // if every group of the condition does not match, check next contition for (int ig=arrAux[cntCond+kNGroups];ig--;) { UInt_t pattReq = arrGrp[grAddr++]; UShort_t actLr = (pattReq&AliITSUAux::kMaxLrMask)&patt; // patter of active layers satisfying to mask if (!actLr || NumberOfBitsSet(actLr)>kShiftNcl)) {ok = kFALSE; break;} } if (ok) return kTRUE; cntCond += kNAuxSz; } return kFALSE; } //______________________________________________________________ void AliITSUTrackCond::Print(Option_t*) const { // print conditions int nc = GetNConditions(); Short_t *arrAux = (Short_t*)fAuxData.GetArray(); UInt_t *arrGrp = (UInt_t*)fConditions.GetArray(); int cntCond = 0; printf("Conditions set ID=%d : %d entries\n",GetID(),nc); for (int i=0;i>kShiftNcl); grAddr++; } printf("\n"); cntCond += kNAuxSz; } if (fAllowLayers) { printf("Allowed Layers: "); for (int i=0;i1e-6) printf("\t%d: %.2f",i,GetMaxITSSAChi2(i)); printf("\n"); // } //______________________________________________________________ void AliITSUTrackCond::Init() { // finalize and check consistency if (fInitDone) return; // fActiveLrInner = -1; for (int ilr=0;ilr