#include "AliTRDrecoParam.h"
#include "AliTRDcluster.h"
+#include "AliTRDdigitsParam.h"
#include "AliTRDseedV1.h"
#include "AliTRDtrackV1.h"
#include "AliTRDtrackerV1.h"
#include "AliTRDchamberTimeBin.h"
ClassImp(AliTRDtrackerV1)
+ClassImp(AliTRDtrackerV1::AliTRDLeastSquare)
+ClassImp(AliTRDtrackerV1::AliTRDtrackFitterRieman)
const Float_t AliTRDtrackerV1::fgkMinClustersInTrack = 0.5; //
const Float_t AliTRDtrackerV1::fgkLabelFraction = 0.8; //
fR[ily] = glb[0]+ AliTRDgeometry::AnodePos()-.5*AliTRDgeometry::AmThick() - AliTRDgeometry::DrThick();
}
- // initialize calibration values
- AliTRDcalibDB *trd = NULL;
- if (!(trd = AliTRDcalibDB::Instance())) {
- AliFatal("Could not get calibration.");
- }
- if(!fgNTimeBins) fgNTimeBins = trd->GetNumberOfTimeBins();
-
// initialize cluster containers
for (Int_t isector = 0; isector < AliTRDgeometry::kNsector; isector++) new(&fTrSec[isector]) AliTRDtrackingSector(fGeom, isector);
AliTRDCalibraFillHisto *calibra = AliTRDCalibraFillHisto::Instance(); // Calibration monitor
if (!calibra) AliInfo("Could not get Calibra instance\n");
-
+ if(!fgNTimeBins) CookNTimeBins();
+
// Define scalers
Int_t nFound = 0, // number of tracks found
nSeeds = 0, // total number of ESD seeds
return new ((*fTracklets)[nentries]) AliTRDseedV1(*tracklet);
}
+//____________________________________________________________________
+void AliTRDtrackerV1::CookNTimeBins()
+{
+ // Initialize number of time bins
+
+ if(fgNTimeBins){
+ // first look if set by hand
+ AliDebug(2, Form("NTimeBins [%d] (set by user)", fgNTimeBins));
+ } else if(fkReconstructor && fkReconstructor->HasDigitsParam()) {
+ // second look into digits param to avoid DB query
+ fgNTimeBins = fkReconstructor->GetDigitsParam()->GetNTimeBins();
+ AliDebug(2, Form("NTimeBins [%d] (set from digits param)", fgNTimeBins));
+ } else { // third query DB
+ AliTRDcalibDB *trd(NULL);
+ if((trd = AliTRDcalibDB::Instance())) {
+ if((fgNTimeBins = trd->GetNumberOfTimeBinsDCS()) <= 0){
+ AliError("Corrupted DCS Object in OCDB");
+ fgNTimeBins = 24;
+ AliDebug(2, Form("NTimeBins [%d] (set to default)", fgNTimeBins));
+ } else AliDebug(2, Form("NTimeBins [%d] (set from DB)", fgNTimeBins));
+ } else AliFatal("Could not get DB.");
+ }
+ if(fgNTimeBins<=0){
+ AliFatal("Could not get number of time bins.");
+ }
+}
+
//____________________________________________________________________
AliTRDtrackV1* AliTRDtrackerV1::SetTrack(const AliTRDtrackV1 * const track)
{
//_____________________________________________________________________________
AliTRDtrackerV1::AliTRDLeastSquare::AliTRDLeastSquare(){
- //
- // Constructor of the nested class AliTRDtrackFitterLeastSquare
- //
+//
+// Constructor of the nested class AliTRDtrackFitterLeastSquare
+//
+// Fast solving linear regresion in 2D
+// y=a + bx
+// The data members have the following meaning
+// fParams[0] : a
+// fParams[1] : b
+//
+// fSums[0] : S
+// fSums[1] : Sx
+// fSums[2] : Sy
+// fSums[3] : Sxy
+// fSums[4] : Sxx
+// fSums[5] : Syy
+//
+// fCovarianceMatrix[0] : s2a
+// fCovarianceMatrix[1] : s2b
+// fCovarianceMatrix[2] : cov(ab)
+
memset(fParams, 0, sizeof(Double_t) * 2);
memset(fSums, 0, sizeof(Double_t) * 6);
memset(fCovarianceMatrix, 0, sizeof(Double_t) * 3);
}
//_____________________________________________________________________________
-void AliTRDtrackerV1::AliTRDLeastSquare::Eval(){
+Bool_t AliTRDtrackerV1::AliTRDLeastSquare::Eval(){
//
// Evaluation of the fit:
// Calculation of the parameters
// Calculation of the covariance matrix
//
- Double_t denominator = fSums[0] * fSums[4] - fSums[1] *fSums[1];
- if(denominator==0) return;
+ Double_t det = fSums[0] * fSums[4] - fSums[1] *fSums[1];
+ if(det==0) return kFALSE;
// for(Int_t isum = 0; isum < 5; isum++)
// printf("fSums[%d] = %f\n", isum, fSums[isum]);
// printf("denominator = %f\n", denominator);
- fParams[0] = (fSums[2] * fSums[4] - fSums[1] * fSums[3])/ denominator;
- fParams[1] = (fSums[0] * fSums[3] - fSums[1] * fSums[2]) / denominator;
+ fParams[0] = (fSums[2] * fSums[4] - fSums[1] * fSums[3])/det;
+ fParams[1] = (fSums[0] * fSums[3] - fSums[1] * fSums[2])/det;
// printf("fParams[0] = %f, fParams[1] = %f\n", fParams[0], fParams[1]);
// Covariance matrix
- fCovarianceMatrix[0] = fSums[4] / fSums[0] - fSums[1] * fSums[1] / (fSums[0] * fSums[0]);
+ Double_t den = fSums[0]*fSums[4] - fSums[1]*fSums[1];
+ fCovarianceMatrix[0] = fSums[4] / den;
+ fCovarianceMatrix[1] = fSums[0] / den;
+ fCovarianceMatrix[2] = -fSums[1] / den;
+/* fCovarianceMatrix[0] = fSums[4] / fSums[0] - fSums[1] * fSums[1] / (fSums[0] * fSums[0]);
fCovarianceMatrix[1] = fSums[5] / fSums[0] - fSums[2] * fSums[2] / (fSums[0] * fSums[0]);
- fCovarianceMatrix[2] = fSums[3] / fSums[0] - fSums[1] * fSums[2] / (fSums[0] * fSums[0]);
+ fCovarianceMatrix[2] = fSums[3] / fSums[0] - fSums[1] * fSums[2] / (fSums[0] * fSums[0]);*/
+
+
+
+ return kTRUE;
}
//_____________________________________________________________________________