#include "AliTRDtrackerV1.h"
#include "AliTRDrecoParam.h"
+#include "TTreeStream.h"
+
#define SETFLG(n,f) ((n) |= f)
#define CLRFLG(n,f) ((n) &= ~f)
SETFLG(fSteerParam, kSteerPID);
memset(fStreamLevel, 0, 5*sizeof(UChar_t));
+ memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * 4);
// Xe tail cancellation parameters
fTCParams[0] = 1.156; // r1
fTCParams[1] = 0.130; // r2
fTCParams[5] = 0.62; // r2
fTCParams[6] = 0.0087;// c1
fTCParams[7] = 0.07; // c2
+ SetBit(kOwner, kTRUE);
}
//_____________________________________________________________________________
{
memcpy(fStreamLevel, r.fStreamLevel, 5*sizeof(UChar_t));
memcpy(fTCParams, r.fTCParams, 8*sizeof(Double_t));
+ memcpy(fDebugStream, r.fDebugStream, sizeof(TTreeSRedirector *) *4);
+ SetBit(kOwner, kFALSE);
}
//_____________________________________________________________________________
if(fgClusters) {
fgClusters->Delete(); delete fgClusters;
}
+ if(TestBit(kOwner)){
+ for(Int_t itask = 0; itask < 4; itask++)
+ if(fDebugStream[itask]) delete fDebugStream[itask];
+ }
}
// Set the stream Level
Int_t level = levelstring.Atoi();
AliTRDReconstructorTask task = kTracker;
- if(taskstr.CompareTo("cl") == 0) task = kClusterizer;
+ if(taskstr.CompareTo("raw") == 0) task = kRawReader;
+ else if(taskstr.CompareTo("cl") == 0) task = kClusterizer;
else if(taskstr.CompareTo("tr") == 0) task = kTracker;
else if(taskstr.CompareTo("pi") == 0) task = kPID;
SetStreamLevel(level, task);
//
// Set the Stream Level for one of the tasks Clusterizer, Tracker or PID
//
- TString taskname;
- switch(task){
- case kClusterizer:
- taskname = "Clusterizer";
- break;
- case kTracker:
- taskname = "Tracker";
- break;
- case kPID:
- taskname = "PID";
- break;
- }
+ TString taskname[4] = {"RawReader", "Clusterizer", "Tracker", "PID"};
+ const Int_t minLevel[4] = {1, 1, 2, 1}; // the minimum debug level upon which a debug stream is created for different tasks
//AliInfo(Form("Setting Stream Level for Task %s to %d", taskname.Data(),level));
fStreamLevel[(Int_t)task] = level;
+ // Initialize DebugStreamer if not yet done
+ if(level >= minLevel[task] && !fDebugStream[task]){
+ TDirectory *savedir = gDirectory;
+ fDebugStream[task] = new TTreeSRedirector(Form("TRD.%sDebug.root", taskname[task].Data()));
+ savedir->cd();
+ }
}
#include "AliTRDrecoParam.h"
class TClonesArray;
+class TTreeSRedirector;
class AliRawReader;
class AliTRDReconstructor: public AliReconstructor
{
,kCosmic = BIT(8)
};
enum AliTRDReconstructorTask {
- kClusterizer = 0
- ,kTracker = 1
- ,kPID = 2
+ kRawReader = 0
+ ,kClusterizer = 1
+ ,kTracker = 2
+ ,kPID = 3
};
enum AliTRDpidMethod {
kLQPID = 0,
kNNslices = 8
,kLQslices = 3
};
+ enum{
+ kOwner = BIT(14)
+ };
AliTRDReconstructor();
AliTRDReconstructor(const AliTRDReconstructor &r);
virtual void ConvertDigits(AliRawReader *rawReader, TTree *digitsTree) const;
virtual AliTracker* CreateTracker() const;
+ TTreeSRedirector* GetDebugStream(AliTRDReconstructorTask task) const { return task < 4 ? fDebugStream[task] : 0x0; }
virtual void FillESD(AliRawReader *, TTree *clusterTree, AliESDEvent *esd) const { FillESD((TTree * )NULL, clusterTree, esd); }
virtual void FillESD(TTree *digitsTree, TTree *clusterTree, AliESDEvent *esd) const;
void SetStreamLevel(Int_t level, AliTRDReconstructorTask task= kTracker);
private:
- UChar_t fStreamLevel[5]; // stream level for each reconstruction task
- UInt_t fSteerParam; // steering flags
- Double_t fTCParams[8]; // Tail Cancellation parameters for drift gases
+ UChar_t fStreamLevel[5]; // stream level for each reconstruction task
+ UInt_t fSteerParam; // steering flags
+ Double_t fTCParams[8]; // Tail Cancellation parameters for drift gases
+ TTreeSRedirector *fDebugStream[4]; // Debug Streamer container;
static TClonesArray *fgClusters; // list of clusters for local reconstructor
#include "AliTRDchamberTimeBin.h"
#include "AliTRDrecoParam.h"
#include "AliTRDReconstructor.h"
-#include "AliTRDtrackerV1.h"
-
ClassImp(AliTRDchamberTimeBin)
// Debug Streaming
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) >= 3){
- TTreeSRedirector &cstream = *AliTRDtrackerV1::DebugStreamer();
+ TTreeSRedirector &cstream = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstream << "BuildIndices"
<< "Plane=" << fPlane
<< "Stack=" << fStack
#include "AliTRDrawStreamBase.h"
#include "AliTRDfeeParam.h"
+#include "TTreeStream.h"
+
#include "Cal/AliTRDCalROC.h"
#include "Cal/AliTRDCalDet.h"
#include "Cal/AliTRDCalSingleChamberStatus.h"
if(fReconstructor){
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kClusterizer) > 1){
TDirectory *savedir = gDirectory;
- //fgDebugStreamer = new TTreeSRedirector("TRD.ClusterizerDebug.root");
+ //fgGetDebugStream = new TTreeSRedirector("TRD.ClusterizerDebug.root");
savedir->cd();
}
}
AliFatal("Could not get calibration object");
}
- // Initialize debug stream
- if (fReconstructor){
- if (fReconstructor->GetStreamLevel(AliTRDReconstructor::kClusterizer) > 1){
- TDirectory *savedir = gDirectory;
- //fgDebugStreamer = new TTreeSRedirector("TRD.ClusterizerDebug.root");
- savedir->cd();
- }
- }
-
fDigitsManager->CreateArrays();
fRawVersion = AliTRDfeeParam::Instance()->GetRAWversion();
return kFALSE;
}
+ TTreeSRedirector *fDebugStream = fReconstructor->GetDebugStream(AliTRDReconstructor::kClusterizer);
+
// Threshold value for the maximum
Float_t maxThresh = fReconstructor->GetRecoParam()->GetClusMaxThresh();
// Threshold value for the digit signal
UChar_t status[3]={0, 0, 0}, ipos = 0;
fIndexesOut->ResetCounters();
+ Int_t nMaximas = 0, nCorrupted = 0;
while (fIndexesOut->NextRCTbinIndex(row, col, time)) {
// reset pad status
ipos = 0; for(Int_t is=3; is--;) status[is] = 0;
}
+ if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kClusterizer) > 2){
+ (*fDebugStream) << "MakeClusters"
+ << "Detector=" << det
+ << "NMaxima=" << nMaximas
+ << "NClusters=" << nClusterROC
+ << "NCorrupted=" << nCorrupted
+ << "\n";
+ }
+
delete digitsOut;
if (fAddLabels) {
Double_t *inADC = new Double_t[nTimeTotal]; // ADC data before tail cancellation
Double_t *outADC = new Double_t[nTimeTotal]; // ADC data after tail cancellation
indexesIn->ResetCounters();
+ TTreeSRedirector *fDebugStream = fReconstructor->GetDebugStream(AliTRDReconstructor::kClusterizer);
while (indexesIn->NextRCIndex(iRow, iCol))
{
Float_t calGainFactorROCValue = calGainFactorROC->GetValue(iCol,iRow);
if (digitsIn->GetPadStatus(iRow, iCol, iTime)) corrupted = kTRUE;
inADC[iTime] /= gain;
outADC[iTime] = inADC[iTime];
+ if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kClusterizer) > 7){
+ (*fDebugStream) << "TailCancellation"
+ << "col=" << iCol
+ << "row=" << iRow
+ << "time=" << iTime
+ << "inADC=" << inADC[iTime]
+ << "gain=" << gain
+ << "outADC=" << outADC[iTime]
+ << "corrupted=" << corrupted
+ << "\n";
+ }
}
if (!corrupted)
{
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker)>=7){
AliTRDtrackingChamber ch(*chamber);
ch.SetOwner();
- (*AliTRDtrackerV1::DebugStreamer()) << "AttachClustersIter"
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
+ cstreamer << "AttachClustersIter"
<< "chamber.=" << &ch
<< "tracklet.=" << this
<< "\n";
-
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
0.0474, 0.0408, 0.0335, 0.0335, 0.0335
};
Int_t AliTRDtrackerV1::fgNTimeBins = 0;
-TTreeSRedirector *AliTRDtrackerV1::fgDebugStreamer = 0x0;
AliRieman* AliTRDtrackerV1::fgRieman = 0x0;
TLinearFitter* AliTRDtrackerV1::fgTiltedRieman = 0x0;
TLinearFitter* AliTRDtrackerV1::fgTiltedRiemanConstrained = 0x0;
// Destructor
//
- if(fgDebugStreamer) delete fgDebugStreamer;
if(fgRieman) delete fgRieman;
if(fgTiltedRieman) delete fgTiltedRieman;
if(fgTiltedRiemanConstrained) delete fgTiltedRiemanConstrained;
}
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "FollowProlongation"
<< "EventNumber=" << eventNumber
<< "ncl=" << nClustersExpected
} // end layers loop
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) > 1){
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
//AliTRDtrackV1 *debugTrack = new AliTRDtrackV1(t);
//debugTrack->SetOwner();
Float_t chi2Z = CalculateChi2Z(tracklets, zref, slope, xref);
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
- TTreeSRedirector &treeStreamer = *fgDebugStreamer;
+ TTreeSRedirector &treeStreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
treeStreamer << "FitTiltedRiemanConstraint"
<< "EventNumber=" << eventNumber
<< "CandidateNumber=" << candidateNumber
}
/* if(fReconstructor->GetStreamLevel() >=5){
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
Double_t chi2z = CalculateChi2Z(tracklets, offset, slope, xref);
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t trackNumber = AliTRDtrackerDebug::GetTrackNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "Clusters2TracksStack"
<< "EventNumber=" << eventNumber
<< "TrackNumber=" << trackNumber
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
AliRieman *rim = GetRiemanFitter();
- TTreeSRedirector &cs0 = *fgDebugStreamer;
+ TTreeSRedirector &cs0 = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cs0 << "MakeSeeds0"
<<"EventNumber=" << eventNumber
<<"CandidateNumber=" << candidateNumber
// AliInfo("Extrapolation done.");
// Debug Stream containing all the 6 tracklets
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) >= 2){
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
TLinearFitter *tiltedRieman = GetTiltedRiemanFitter();
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
}
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) >= 2){
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
TLinearFitter *fitterTC = GetTiltedRiemanFitterConstraint();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
Double_t p[5]; // Track Params for the Debug Stream
track.GetExternalParameters(params[0], p);
- TTreeSRedirector &cs = *fgDebugStreamer;
+ TTreeSRedirector &cs = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cs << "MakeTrack"
<< "EventNumber=" << eventNumber
<< "CandidateNumber=" << candidateNumber
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
TLinearFitter *tiltedRieman = GetTiltedRiemanFitter();
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "ImproveSeedQuality"
<< "EventNumber=" << eventNumber
<< "CandidateNumber=" << candidateNumber
if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) >= 2){
Int_t eventNumber = AliTRDtrackerDebug::GetEventNumber();
Int_t candidateNumber = AliTRDtrackerDebug::GetCandidateNumber();
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "CalculateTrackLikelihood0"
<< "EventNumber=" << eventNumber
<< "CandidateNumber=" << candidateNumber
}
if(nTracklets) mean_ncls /= nTracklets;
// The Debug Stream contains the seed
- TTreeSRedirector &cstreamer = *fgDebugStreamer;
+ TTreeSRedirector &cstreamer = *fReconstructor->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "CookLikelihood"
<< "EventNumber=" << eventNumber
<< "CandidateNumber=" << candidateNumber
//____________________________________________________________________
-void AliTRDtrackerV1::SetReconstructor(const AliTRDReconstructor *rec)
-{
- fReconstructor = rec;
- if(fReconstructor->GetStreamLevel(AliTRDReconstructor::kTracker) > 1){
- if(!fgDebugStreamer){
- TDirectory *savedir = gDirectory;
- fgDebugStreamer = new TTreeSRedirector("TRD.TrackerDebug.root");
- savedir->cd();
- }
- }
-}
//_____________________________________________________________________________
Float_t AliTRDtrackerV1::GetChi2Y(AliTRDseedV1 *tracklets) const
AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];}
Int_t Clusters2Tracks(AliESDEvent *esd);
- static TTreeSRedirector* DebugStreamer() {return fgDebugStreamer;}
AliCluster* GetCluster(Int_t index) const;
AliTRDseedV1* GetTracklet(Int_t index) const;
AliKalmanTrack* GetTrack(Int_t index) const;
Int_t ReadClusters(TClonesArray* &array, TTree *in) const;
Int_t RefitInward(AliESDEvent *event);
static void SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; }
- void SetReconstructor(const AliTRDReconstructor *rec);
+ void SetReconstructor(const AliTRDReconstructor *rec){ fReconstructor = rec; }
void UnloadClusters();
static Int_t Freq(Int_t n, const Int_t *inlist, Int_t *outlist, Bool_t down); // to be removed
static TLinearFitter *fgTiltedRieman; // Fitter for the tilted Rieman fit without vertex constriant
static TLinearFitter *fgTiltedRiemanConstrained; // Fitter for the tilted Rieman fit with vertex constraint
static AliRieman *fgRieman; // Fitter for the untilted Rieman fit
-
- static TTreeSRedirector *fgDebugStreamer; //!Debug streamer
ClassDef(AliTRDtrackerV1, 2) // TRD tracker development class
//for(Int_t i = 0; i < nRows; i++)
// for(Int_t j = 0; j < nCols; j++)
// hist(i,j) = histogram[i][j];
- TTreeSRedirector &cstreamer = *AliTRDtrackerV1::DebugStreamer();
+ TTreeSRedirector &cstreamer = *rec->GetDebugStream(AliTRDReconstructor::kTracker);
cstreamer << "GetSeedingLayer"
<< "layer=" << layer
<< "ymin=" << ymin