// AliTRDmcmSim default constructor
// By default, nothing is initialized.
// It is necessary to issue Init before use.
+
+ for (Int_t iDict = 0; iDict < 3; iDict++)
+ fDict[iDict] = 0x0;
+
+ fFitPtr[0] = 0;
+ fFitPtr[1] = 0;
+ fFitPtr[2] = 0;
+ fFitPtr[3] = 0;
}
AliTRDmcmSim::~AliTRDmcmSim()
continue;
fDict[iDict] = newDict;
-
- if (fDict[iDict]->GetDim() == 0) {
- AliError(Form("Dictionary %i of det. %i has dim. 0", fDetector, iDict));
- continue;
- }
fDict[iDict]->Expand();
}
else {
fDict[iDict] = newDict;
if (fDict[iDict])
fDict[iDict]->Expand();
+ }
+
+ // If there is no data, set dictionary to zero to avoid crashes
+ if (fDict[iDict]->GetDim() == 0) {
+ AliError(Form("Dictionary %i of det. %i has dim. 0", fDetector, iDict));
+ fDict[iDict] = 0x0;
}
}
}
continue;
fDict[iDict] = newDict;
-
- if (fDict[iDict]->GetDim() == 0) {
- AliError(Form("Dictionary %i of det. %i has dim. 0", fDetector, iDict));
- continue;
- }
fDict[iDict]->Expand();
}
else {
if (fDict[iDict])
fDict[iDict]->Expand();
}
+
+ // If there is no data, set dictionary to zero to avoid crashes
+ if (fDict[iDict]->GetDim() == 0) {
+ AliError(Form("Dictionary %i of det. %i has dim. 0", fDetector, iDict));
+ fDict[iDict] = 0x0;
+ }
}
}
// which have been filled in the fit registers.
// parameters in fitred.asm (fit program)
- Int_t decPlaces = 5;
Int_t rndAdd = 0;
- if (decPlaces > 1)
+ Int_t decPlaces = 5; // must be larger than 1 or change the following code
+ // if (decPlaces > 1)
rndAdd = (1 << (decPlaces-1)) + 1;
- else if (decPlaces == 1)
- rndAdd = 1;
+ // else if (decPlaces == 1)
+ // rndAdd = 1;
+
Int_t ndriftDp = 5; // decimal places for drift time
Long64_t shift = ((Long64_t) 1 << 32);
nHits = fit0->fNhits + fit1->fNhits; // number of hits
sumX = fit0->fSumX + fit1->fSumX;
sumX2 = fit0->fSumX2 + fit1->fSumX2;
- denom = nHits*sumX2 - sumX*sumX;
+ denom = ((Long64_t) nHits)*((Long64_t) sumX2) - ((Long64_t) sumX)*((Long64_t) sumX);
mult = mult / denom; // exactly like in the TRAP program
q0 = fit0->fQ0 + fit1->fQ0;
else
{
if (slope > 63 || slope < -64) { // wrapping in TRAP!
- AliError(Form("Overflow in slope: %i, tracklet discarded!", slope));
+ AliDebug(1,Form("Overflow in slope: %i, tracklet discarded!", slope));
fMCMT[cpu] = 0x10001000;
continue;
}
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetNHits(fit0->fNhits + fit1->fNhits);
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetNHits0(nHits0);
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetNHits1(nHits1);
- ((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetQ0(q0);
- ((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetQ1(q1);
+ ((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetQ0(q0 >> fgkAddDigits);
+ ((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetQ1(q1 >> fgkAddDigits);
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetSlope(fitSlope);
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetOffset(fitOffset);
((AliTRDtrackletMCM*) (*fTrackletArray)[fTrackletArray->GetEntriesFast()-1])->SetError(TMath::Sqrt(TMath::Abs(fitError)/nHits));
UInt_t nBinsQ0 = fTrapConfig->GetDmemUnsigned(AliTRDtrapConfig::fgkDmemAddrLUTnbins); // number of bins in q0 / 4 !!
UInt_t pidTotalSize = fTrapConfig->GetDmemUnsigned(AliTRDtrapConfig::fgkDmemAddrLUTLength);
- if(nBinsQ0==0 || pidTotalSize==0) // make sure we don't run into trouble if one of the values is not configured
- return 0;
+ if(nBinsQ0==0 || pidTotalSize==0) // make sure we don't run into trouble if the value for Q0 is not configured
+ return 0; // Q1 not configured is ok for 1D LUT
ULong_t corrQ0 = fTrapConfig->GetDmemUnsigned(AliTRDtrapConfig::fgkDmemAddrLUTcor0, fDetector, fRobPos, fMcmPos);
ULong_t corrQ1 = fTrapConfig->GetDmemUnsigned(AliTRDtrapConfig::fgkDmemAddrLUTcor1, fDetector, fRobPos, fMcmPos);
- if(corrQ0==0 || corrQ1==0) // make sure we don't run into trouble if one of the values is not configured
+ if(corrQ0==0) // make sure we don't run into trouble if one of the values is not configured
return 0;
addrQ0 = corrQ0;
Int_t bufLength = mcm.ProduceRawStream(&buf[0], bufSize);
for (Int_t i = 0; i < bufLength; i++)
- std::cout << "0x" << std::hex << buf[i] << std::endl;
+ std::cout << "0x" << std::hex << buf[i] << std::dec << std::endl;
delete [] buf;
}