#include <TF1.h>
#include <TGaxis.h>
#include <TGraph.h>
+#include <TGraphErrors.h>
#include <TLegend.h>
#include <TLinearFitter.h>
#include <TMath.h>
#include <TMap.h>
+#include <TProfile2D.h>
#include <TObjArray.h>
#include <TObject.h>
#include <TObjString.h>
delete fGeo;
}
-//_______________________________________________________
-void AliTRDcheckDET::ConnectInputData(Option_t *opt){
- //
- // Connect the Input data with the task
- //
- AliTRDrecoTask::ConnectInputData(opt);
- fEventInfo = dynamic_cast<AliTRDeventInfo *>(GetInputData(2));
-}
-
//_______________________________________________________
void AliTRDcheckDET::UserCreateOutputObjects(){
//
// Create Output Objects
//
- OpenFile(1,"RECREATE");
+ if(!HasFunctorList()) InitFunctorList();
fContainer = Histos();
if(!fTriggerNames) fTriggerNames = new TMap();
}
// Execution function
// Filling TRD quality histos
//
- if(!HasMCdata() && fEventInfo->GetEventHeader()->GetEventType() != 7) return; // For real data we select only physical events
+
+ fEventInfo = dynamic_cast<AliTRDeventInfo *>(GetInputData(2));
+ AliDebug(2, Form("EventInfo[%p] Header[%p]", (void*)fEventInfo, (void*)(fEventInfo?fEventInfo->GetEventHeader():NULL)));
+
AliTRDrecoTask::UserExec(opt);
Int_t nTracks = 0; // Count the number of tracks per event
Int_t triggermask = fEventInfo->GetEventHeader()->GetTriggerMask();
Float_t ok = h->GetBinContent(1);
Int_t nerr = h->GetNbinsX();
for(Int_t ierr=nerr; ierr--;){
- h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/ok);
+ h->SetBinContent(ierr+1, ok>0.?1.e2*h->GetBinContent(ierr+1)/ok:0.);
}
h->SetBinContent(1, 0.);
Float_t okB = h->GetBinContent(1);
Int_t nerrB = h->GetNbinsX();
for(Int_t ierr=nerrB; ierr--;){
- h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/okB);
+ h->SetBinContent(ierr+1, okB>0.?1.e2*h->GetBinContent(ierr+1)/okB:0.);
}
h->SetBinContent(1, 0.);
}
return kTRUE;
}
+//_______________________________________________________
+void AliTRDcheckDET::MakeSummary(){
+ //
+ // Create summary plots for TRD check DET
+ // This function creates 2 summary plots:
+ // - General Quantities
+ // - PHS
+ // The function will reuse GetRefFigure
+ //
+
+ TCanvas *cOut = new TCanvas(Form("summary%s1", GetName()), Form("Summary 1 for task %s", GetName()), 1024, 768);
+ cOut->Divide(3,3);
+
+ // Create figures using GetRefFigure
+ cOut->cd(1); GetRefFigure(kFigNtracksEvent);
+ cOut->cd(2); GetRefFigure(kFigNtracksSector);
+ cOut->cd(3); GetRefFigure(kFigNclustersTrack);
+ cOut->cd(4); GetRefFigure(kFigNclustersTracklet);
+ cOut->cd(5); GetRefFigure(kFigNtrackletsTrack);
+ cOut->cd(6); GetRefFigure(kFigNTrackletsP);
+ cOut->cd(7); GetRefFigure(kFigChargeCluster);
+ cOut->cd(8); GetRefFigure(kFigChargeTracklet);
+ cOut->SaveAs(Form("TRDsummary%s1.gif", GetName()));
+ delete cOut;
+
+ // Second Plot: PHS
+ cOut = new TCanvas(Form("summary%s2", GetName()), Form("Summary 2 for task %s", GetName()), 1024, 512);
+ cOut->cd(); GetRefFigure(kFigPH);
+ cOut->SaveAs(Form("TRDsummary%s2.gif", GetName()));
+ delete cOut;
+
+ // Third Plot: Mean Number of clusters as function of eta, phi and layer
+ cOut = new TCanvas(Form("summary%s3", GetName()), Form("Summary 3 for task %s", GetName()), 1024, 768);
+ cOut->cd(); MakePlotMeanClustersLayer();
+ cOut->SaveAs(Form("TRDsummary%s3.gif", GetName()));
+ delete cOut;
+
+}
+
//_______________________________________________________
Bool_t AliTRDcheckDET::GetRefFigure(Int_t ifig){
//
// Setting Reference Figures
//
- enum FigureType_t{
- kFigNclustersTrack,
- kFigNclustersTracklet,
- kFigNtrackletsTrack,
- kFigNTrackletsP,
- kFigNtrackletsCross,
- kFigNtrackletsFindable,
- kFigNtracksEvent,
- kFigNtracksSector,
- kFigTrackStatus,
- kFigTrackletStatus,
- kFigChi2,
- kFigPH,
- kFigChargeCluster,
- kFigChargeTracklet,
- kFigNeventsTrigger,
- kFigNeventsTriggerTracks,
- kFigTriggerPurity
- };
gPad->SetLogy(0);
gPad->SetLogx(0);
TH1 *h = NULL; TObjArray *arr=NULL;
return kTRUE;
case kFigTrackletStatus:
if(!(arr = dynamic_cast<TObjArray*>(fContainer->At(kTrackletStatus)))) break;
- leg = new TLegend(.68, .7, .98, .98);
- leg->SetBorderSize(1);leg->SetFillColor(0);
+ leg = new TLegend(.68, .7, .97, .97);
+ leg->SetBorderSize(0);leg->SetFillStyle(0);
leg->SetHeader("TRD layer");
- for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
+ for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
if(!(h=dynamic_cast<TH1F*>(arr->At(ily)))) continue;
if(kFIRST){
- h->Draw("c");
+ h->Draw("pl");
h->GetXaxis()->SetRangeUser(0.5, -1);
h->GetYaxis()->CenterTitle();
kFIRST = kFALSE;
- } else h->Draw("samec");
- leg->AddEntry(h, Form("%d", ily), "l");
+ } else h->Draw("samepl");
+ leg->AddEntry(h, Form("ly = %d", ily), "l");
PutTrendValue(Form("TrackletStatus%d", ily), h->Integral());
}
leg->Draw();
gPad->SetLogy(0);
return kTRUE;
case kFigChi2:
+ return kTRUE;
MakePlotChi2();
return kTRUE;
case kFigPH:
} else h->Reset();
fContainer->AddAt(h, kNclustersTrack);
+ TObjArray *arr = new TObjArray(AliTRDgeometry::kNlayer);
+ arr->SetOwner(kTRUE); arr->SetName("clusters");
+ fContainer->AddAt(arr, kNclustersLayer);
+ for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
+ if(!(h = (TProfile2D *)gROOT->FindObject(Form("hNcl%d", ily)))){
+ h = new TProfile2D(Form("hNcl%d", ily), Form("Mean Number of clusters in Layer %d", ily), 100, -1.0, 1.0, 50, -1.1*TMath::Pi(), 1.1*TMath::Pi());
+ h->GetXaxis()->SetTitle("#eta");
+ h->GetYaxis()->SetTitle("#phi");
+ } else h->Reset();
+ arr->AddAt(h, ily);
+ }
+
if(!(h = (TH1F *)gROOT->FindObject("hNclTls"))){
h = new TH1F("hNclTls","N_{clusters} / tracklet", 51, -0.5, 50.5);
h->GetXaxis()->SetTitle("N_{clusters}");
fContainer->AddAt(h, kNtrackletsSTA);
// Binning for momentum dependent tracklet Plots
- const Int_t kNPbins = 11;
- Double_t binTracklets[AliTRDgeometry::kNlayer + 1];
- for(Int_t il = 0; il <= AliTRDgeometry::kNlayer; il++) binTracklets[il] = 0.5 + il;
- Double_t binMomentum[kNPbins + 1] = {0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.5, 2., 3., 4., 5., 10};
-
+ const Int_t kNp(30);
+ Float_t P=0.2;
+ Float_t binsP[kNp+1], binsTrklt[AliTRDgeometry::kNlayer+1];
+ for(Int_t i=0;i<kNp+1; i++,P+=(TMath::Exp(i*i*.001)-1.)) binsP[i]=P;
+ for(Int_t il = 0; il <= AliTRDgeometry::kNlayer; il++) binsTrklt[il] = 0.5 + il;
if(!(h = (TH1F *)gROOT->FindObject("htlsBAR"))){
// Make tracklets for barrel tracks momentum dependent (if we do not exceed min and max values)
- h = new TH2F("hNtlsBAR", "N_{tracklets} / track (Barrel)", kNPbins, binMomentum, AliTRDgeometry::kNlayer, binTracklets);
- h->GetXaxis()->SetTitle("p / GeV/c");
- h->GetYaxis()->SetTitle("N^{tracklet}");
- h->GetZaxis()->SetTitle("freq. [%]");
+ h = new TH2F("hNtlsBAR",
+ "N_{tracklets} / track;p [GeV/c];N^{tracklet};freq. [%]",
+ kNp, binsP, AliTRDgeometry::kNlayer, binsTrklt);
}
fContainer->AddAt(h, kNtrackletsBAR);
}
fContainer->AddAt(h, kTrackStatus);
- TObjArray *arr = new TObjArray(AliTRDgeometry::kNlayer);
+ arr = new TObjArray(AliTRDgeometry::kNlayer);
arr->SetOwner(kTRUE); arr->SetName("TrackletStatus");
fContainer->AddAt(arr, kTrackletStatus);
for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
}
// <PH> histos
- arr = new TObjArray(2);
+ arr = new TObjArray(3);
arr->SetOwner(kTRUE); arr->SetName("<PH>");
fContainer->AddAt(arr, kPH);
if(!(h = (TH1F *)gROOT->FindObject("hPHt"))){
h = new TProfile("hPHx", "<PH>", 31, -0.08, 4.88);
else h->Reset();
arr->AddAt(h, 1);
+ if(!(h = (TH2F *)gROOT->FindObject("hPH2D"))){
+ h = new TH2F("hPH2D", "Charge Distribution / time", 31, -0.5, 30.5, 100, 0, 1024);
+ h->GetXaxis()->SetTitle("Time / 100ns");
+ h->GetYaxis()->SetTitle("Charge / a.u.");
+ } else h->Reset();
+ arr->AddAt(h, 2);
// Chi2 histos
if(!(h = (TH2S*)gROOT->FindObject("hChi2"))){
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TObjArray *arr =NULL;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
+ AliExternalTrackParam *par = fkTrack->GetTrackIn() ? fkTrack->GetTrackIn() : fkTrack->GetTrackOut();
TH1 *h = NULL;
+ TProfile2D *hlayer = NULL;
+ Double_t eta = 0., phi = 0.;
if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNclustersTracklet)))){
AliWarning("No Histogram defined.");
return NULL;
}
AliTRDseedV1 *tracklet = NULL;
+ TObjArray *histosLayer = dynamic_cast<TObjArray *>(fContainer->At(kNclustersLayer));
+ if(!histosLayer){
+ AliWarning("No Histograms for single layer defined");
+ }
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
h->Fill(tracklet->GetN2());
+ if(histosLayer && par){
+ if((hlayer = dynamic_cast<TProfile2D *>(histosLayer->At(itl)))){
+ GetEtaPhiAt(par, tracklet->GetX0(), eta, phi);
+ hlayer->Fill(eta, phi, tracklet->GetN2());
+ }
+ }
}
return h;
}
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
Int_t nclusters = 0;
AliTRDseedV1 *tracklet = NULL;
AliExternalTrackParam *par = fkTrack->GetTrackOut() ? fkTrack->GetTrackOut() : fkTrack->GetTrackIn();
+ if(!par) return NULL;
Double_t momentumRec = par->P();
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL, *hSta = NULL; TH2 *hBarrel = NULL;
// Full Barrel Track: Save momentum dependence
if(!(hBarrel = dynamic_cast<TH2F *>(fContainer->At(kNtrackletsBAR)))){
AliWarning("Method: Barrel. Histogram not processed!");
- } else {
- AliExternalTrackParam *par = fkTrack->GetTrackOut() ? fkTrack->GetTrackOut() : fkTrack->GetTrackIn();
- if(!par){
- AliError("Outer track params missing");
- } else {
- p = par->P();
- }
- hBarrel->Fill(p, nTracklets);
+ return NULL;
+ }
+ AliExternalTrackParam *par(fkTrack->GetTrackIn());
+ if(!par){
+ AliError("Input track params missing");
+ return NULL;
}
+ p = par->P(); // p needed later in the debug streaming
+ hBarrel->Fill(p, nTracklets);
} else {
// Stand alone Track: momentum dependence not usefull
method = 0;
if(!(hSta = dynamic_cast<TH1F *>(fContainer->At(kNtrackletsSTA)))) {
AliWarning("Method: StandAlone. Histogram not processed!");
- } else {
- hSta->Fill(nTracklets);
+ return NULL;
}
+ hSta->Fill(nTracklets);
}
if(DebugLevel() > 2){
AliTRDseedV1 *tracklet = NULL;
- Int_t sector = -1;
+ Int_t sector = -1, stack = -1, detector;
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
if(!(tracklet = fkTrack->GetTracklet(itl)) || !(tracklet->IsOK())) continue;
- sector = fGeo->GetSector(tracklet->GetDetector());
+ detector = tracklet->GetDetector();
+ sector = fGeo->GetSector(detector);
+ stack = fGeo->GetStack(detector);
break;
}
(*DebugStream()) << "NTrackletsTrack"
<< "Sector=" << sector
+ << "Stack=" << stack
<< "NTracklets=" << nTracklets
<< "Method=" << method
<< "p=" << p
<< "\n";
}
if(DebugLevel() > 3){
- if(nTracklets == 1){
- // If we have one Tracklet, check in which layer this happens
- Int_t layer = -1;
- AliTRDseedV1 *tracklet = NULL;
- for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
- if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){layer = il; break;}
- }
- if(layer >= 0){
+ AliTRDseedV1 *tracklet = NULL;
+ for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
+ if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){
(*DebugStream()) << "NTrackletsLayer"
- << "Layer=" << layer
- << "p=" << p
- << "\n";
+ << "Layer=" << il
+ << "p=" << p
+ << "\n";
}
}
}
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
- TProfile *h = NULL;
+ TProfile *h = NULL; TH2F *phs2D = NULL;
if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(0)))){
AliWarning("No Histogram defined.");
return NULL;
}
+ if(!(phs2D = dynamic_cast<TH2F *>(((TObjArray*)(fContainer->At(kPH)))->At(2)))){
+ AliWarning("2D Pulse Height histogram not defined. Histogramm cannot be filled");
+ }
AliTRDseedV1 *tracklet = NULL;
AliTRDcluster *c = NULL;
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
Int_t localtime = c->GetLocalTimeBin();
Double_t absoluteCharge = TMath::Abs(c->GetQ());
h->Fill(localtime, absoluteCharge);
+ phs2D->Fill(localtime, absoluteCharge);
if(DebugLevel() > 3){
+ Int_t inChamber = c->IsInChamber() ? 1 : 0;
Double_t distance[2];
GetDistanceToTracklet(distance, tracklet, c);
Float_t theta = TMath::ATan(tracklet->GetZref(1));
Float_t phi = TMath::ATan(tracklet->GetYref(1));
- Float_t momentum = 0.;
+ AliExternalTrackParam *trdPar = fkTrack->GetTrackIn();
+ Float_t momentumMC = 0, momentumRec = trdPar ? trdPar->P() : track->P(); // prefer Track Low
Int_t pdg = 0;
Int_t kinkIndex = fkESD ? fkESD->GetKinkIndex() : 0;
UShort_t TPCncls = fkESD ? fkESD->GetTPCncls() : 0;
if(fkMC){
- if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
+ if(fkMC->GetTrackRef()) momentumMC = fkMC->GetTrackRef()->P();
pdg = fkMC->GetPDG();
}
(*DebugStream()) << "PHt"
<< "Detector=" << detector
<< "crossing=" << crossing
+ << "inChamber=" << inChamber
<< "Timebin=" << localtime
<< "Charge=" << absoluteCharge
- << "momentum=" << momentum
+ << "momentumMC=" << momentumMC
+ << "momentumRec=" << momentumRec
<< "pdg=" << pdg
<< "theta=" << theta
<< "phi=" << phi
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
- return NULL;
+ AliDebug(4, "No Track defined.");
+ return NULL;
}
TProfile *h = NULL;
if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(1)))){
AliWarning("No Histogram defined.");
return NULL;
}
- Float_t offset = .5*AliTRDgeometry::CamHght();
- AliTRDseedV1 *tracklet = NULL;
- AliTRDcluster *c = NULL;
- Double_t distance = 0;
- Double_t x, y;
+ AliTRDseedV1 *tracklet(NULL);
+ AliTRDcluster *c(NULL);
+ Double_t xd(0.), dqdl(0.);
+ TVectorD vq(AliTRDseedV1::kNtb), vxd(AliTRDseedV1::kNtb), vdqdl(AliTRDseedV1::kNtb);
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
if(!(tracklet = fkTrack->GetTracklet(itl)) || !(tracklet->IsOK())) continue;
- tracklet->ResetClusterIter();
- while((c = tracklet->NextCluster())){
+ Int_t det(tracklet->GetDetector());
+ Bool_t rc(tracklet->IsRowCross());
+ for(Int_t ic(0); ic<AliTRDseedV1::kNtb; ic++){
+ Bool_t kFIRST(kFALSE);
+ if(!(c = tracklet->GetClusters(ic))){
+ if(!(c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) continue;
+ } else kFIRST=kTRUE;
if(!IsUsingClustersOutsideChamber() && !c->IsInChamber()) continue;
- x = c->GetX()-AliTRDcluster::GetXcorr(c->GetLocalTimeBin());
- y = c->GetY()-AliTRDcluster::GetYcorr(AliTRDgeometry::GetLayer(c->GetDetector()), c->GetCenter());
-
- distance = tracklet->GetX0() - (c->GetX() + 0.3) + offset;
- h->Fill(distance, TMath::Abs(c->GetQ()));
+ xd = tracklet->GetX0() - c->GetX(); vxd[ic] = xd;
+ dqdl=tracklet->GetdQdl(ic); vdqdl[ic] = dqdl;
+ vq[ic]=c->GetQ();
+ if(kFIRST && (c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) vq[ic]+=c->GetQ();
+ h->Fill(xd, dqdl);
+ }
+ if(DebugLevel() > 3){
+ (*DebugStream()) << "PHx"
+ << "det=" << det
+ << "rc=" << rc
+ << "xd=" << &vxd
+ << "q=" << &vq
+ << "dqdl=" << &vdqdl
+ << "\n";
}
}
return h;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
AliTRDcluster *c = NULL;
for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK())continue;
- for(Int_t itime = 0; itime < AliTRDtrackerV1::GetNTimeBins(); itime++){
- if(!(c = tracklet->GetClusters(itime))) continue;
- h->Fill(c->GetQ());
+ for(Int_t ic(0); ic < AliTRDseedV1::kNtb; ic++){
+ Bool_t kFIRST(kFALSE);
+ if(!(c = tracklet->GetClusters(ic))) {
+ if(!(c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) continue;
+ } else kFIRST = kTRUE;
+ Float_t q(c->GetQ());
+ if(kFIRST && (c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) q+=c->GetQ();
+ h->Fill(q);
}
}
return h;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
//
if(track) fkTrack = track;
if(!fkTrack){
- AliWarning("No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h = NULL;
dist[1] = c->GetZ() - tracklet->GetZat(x);
}
+//________________________________________________________
+void AliTRDcheckDET::GetEtaPhiAt(AliExternalTrackParam *track, Double_t x, Double_t &eta, Double_t &phi){
+ //
+ // Get phi and eta at a given radial position
+ //
+ AliExternalTrackParam workpar(*track);
+
+ Double_t posLocal[3];
+ Bool_t sucPos = workpar.GetXYZAt(x, fEventInfo->GetRunInfo()->GetMagneticField(), posLocal);
+ Double_t sagPhi = sucPos ? TMath::ATan2(posLocal[1], posLocal[0]) : 0.;
+ phi = sagPhi;
+ eta = workpar.Eta();
+}
+
//_______________________________________________________
TH1* AliTRDcheckDET::MakePlotChi2()
//
// Alex Bercuci <A.Bercuci@gsi.de>
+ return NULL;
+
TH2S *h2 = (TH2S*)fContainer->At(kChi2);
TF1 f("fChi2", "[0]*pow(x, [1]-1)*exp(-0.5*x)", 0., 50.);
+ f.SetParLimits(1,1, 1e100);
TLegend *leg = new TLegend(.7,.7,.95,.95);
leg->SetBorderSize(1); leg->SetHeader("Tracklets per Track");
TH1D *h1 = NULL;
//
// Plot abundance of tracks with number of tracklets as function of momentum
//
- TH1 *hLayer[6];
+
+
+
+
+ Color_t color[AliTRDgeometry::kNlayer] = {kBlue, kOrange, kBlack, kGreen, kCyan, kRed};
+ TH1 *h(NULL); TGraphErrors *g[AliTRDgeometry::kNlayer];
+ for(Int_t itl(0); itl<AliTRDgeometry::kNlayer; itl++){
+ g[itl] = new TGraphErrors();
+ g[itl]->SetLineColor(color[itl]);
+ g[itl]->SetMarkerColor(color[itl]);
+ g[itl]->SetMarkerStyle(20 + itl);
+ }
+
TH2 *hBar = (TH2F *)fContainer->FindObject("hNtlsBAR");
- TLegend *leg = new TLegend(0.13, 0.75, 0.2, 0.9);
+ TAxis *ax(hBar->GetXaxis());
+ Int_t np(ax->GetNbins());
+ for(Int_t ipBin(1); ipBin<np; ipBin++){
+ h = hBar->ProjectionY("npBin", ipBin, ipBin);
+ if(!Int_t(h->Integral())) continue;
+ h->Scale(100./h->Integral());
+ Float_t p(ax->GetBinCenter(ipBin));
+ Float_t dp(ax->GetBinWidth(ipBin));
+ Int_t ip(g[0]->GetN());
+ for(Int_t itl(AliTRDgeometry::kNlayer); itl--;){
+ g[itl]->SetPoint(ip, p, h->GetBinContent(itl+1));
+ g[itl]->SetPointError(ip, dp/3.46, h->GetBinError(itl+1));
+ }
+ }
+
+ TLegend *leg = new TLegend(0.76, 0.6, 1., 0.9);
leg->SetBorderSize(0);
leg->SetHeader("Tracklet/Track");
leg->SetFillStyle(0);
- Color_t color[6] = {kBlue, kOrange, kBlack, kGreen, kCyan, kRed};
- Bool_t first = kTRUE;
- for(Int_t itl = 1; itl <= 6; itl++){
- hLayer[itl-1]= hBar->ProjectionX(Form("ntl%d", itl), itl, itl);
- hLayer[itl-1]->Scale(100./hLayer[itl-1]->Integral());
- hLayer[itl-1]->SetLineColor(color[itl-1]);
- hLayer[itl-1]->GetYaxis()->SetRangeUser(0., 60.);
- hLayer[itl-1]->GetXaxis()->SetMoreLogLabels();
- hLayer[itl-1]->SetYTitle("Prob. [%]");
- if(first){
- hLayer[itl-1]->Draw("c");
- first=kFALSE;
- } else
- hLayer[itl-1]->Draw("csame");
- leg->AddEntry(hLayer[itl-1], Form("n = %d", itl),"l");
+ h = hBar->ProjectionX("npxBin"); h->Reset();
+ h->SetTitle("");
+ h->GetYaxis()->SetRangeUser(1., 99.);
+ h->GetYaxis()->SetMoreLogLabels();
+ h->GetYaxis()->CenterTitle();
+ h->GetYaxis()->SetTitleOffset(1.2);
+ h->SetYTitle("Prob. [%]");
+ h->GetXaxis()->SetRangeUser(0.4, 12.);
+ h->GetXaxis()->SetMoreLogLabels();
+ h->GetXaxis()->CenterTitle();
+ h->Draw("p");
+ for(Int_t itl(AliTRDgeometry::kNlayer); itl--;){
+ g[itl]->Draw("pc");
+ leg->AddEntry(g[itl], Form("n = %d", itl+1),"pl");
}
+
leg->Draw();
- gPad->Update();
+ gPad->SetLogx();gPad->SetLogy();
}
//________________________________________________________
-TH1* AliTRDcheckDET::MakePlotPulseHeight(){
+Bool_t AliTRDcheckDET::MakePlotPulseHeight(){
//
// Create Plot of the Pluse Height Spectrum
//
+ TCanvas *output = gPad->GetCanvas();
+ output->Divide(2);
+ output->cd(1);
TH1 *h, *h1, *h2;
TObjArray *arr = (TObjArray*)fContainer->FindObject("<PH>");
h = (TH1F*)arr->At(0);
h->SetMarkerStyle(24);
h->SetMarkerColor(kBlack);
h->SetLineColor(kBlack);
+ h->GetYaxis()->SetTitleOffset(1.5);
h->Draw("e1");
// Trending for the pulse height: plateau value, slope and timebin of the maximum
TLinearFitter fit(1,"pol1");
axis->SetTextColor(kBlue);
axis->SetTitle("x_{0}-x_{c} [cm]");
axis->Draw();
- return h1;
+
+ output->cd(2);
+ TH2 *ph2d = (TH2F *)arr->At(2);
+ ph2d->GetYaxis()->SetTitleOffset(1.8);
+ ph2d->SetStats(kFALSE);
+ ph2d->Draw("colz");
+ return kTRUE;
+}
+
+//________________________________________________________
+void AliTRDcheckDET::MakePlotMeanClustersLayer(){
+ //
+ // Create Summary plot for the mean number of clusters per layer
+ //
+ TCanvas *output = gPad->GetCanvas();
+ output->Divide(3,2);
+ TObjArray *histos = (TObjArray *)fContainer->At(kNclustersLayer);
+ if(!histos){
+ AliWarning("Histos for each layer not found");
+ return;
+ }
+ TProfile2D *hlayer = NULL;
+ for(Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++){
+ hlayer = dynamic_cast<TProfile2D *>(histos->At(ily));
+ output->cd(ily + 1);
+ gPad->SetGrid(0,0);
+ hlayer->Draw("colz");
+ }
}
//________________________________________________________