//
// For stand alone usage please refer to the following example:
// {
-// gSystem->Load("libANALYSIS.so");
-// gSystem->Load("libTRDqaRec.so");
+// gSystem->Load("libANALYSIS");
+// gSystem->Load("libTRDqaRec");
// AliTRDresolution *res = new AliTRDresolution();
// //res->SetMCdata();
// //res->SetVerbose();
#include "AliPID.h"
#include "AliLog.h"
#include "AliESDtrack.h"
+#include "AliESDHeader.h"
#include "AliMathBase.h"
#include "AliTrackPointArray.h"
return H->Projection(kYrez);
}
-
//________________________________________________________
TH1* AliTRDresolution::PlotTracklet(const AliTRDtrackV1 *track)
{
if(fkESD->IsElectron()) v0pid = -1;
else if(fkESD->IsPion()) v0pid = 0;
else if(fkESD->IsProton()) v0pid = 1;
- if(DebugLevel()>=3){
+ if(DebugLevel()>=1/* && v0pid>-2*/){
Float_t tpc(fkESD->GetTPCdedx());
Float_t tof(fkESD->GetTOFbeta());
+ Int_t ev(fEvent->GetEventHeader()->GetEventNumberInFile());
+ AliTRDtrackV1 t(*fkTrack); t.SetOwner();
(*DebugStream()) << "trackIn"
- <<"spc=" << spc
- <<"spcV0=" << v0pid
- <<"tpc=" << tpc
- <<"tof=" << tof
- <<"tracklet.=" << fTracklet
- <<"trackIn.=" << tin
+ <<"ev=" << ev
+ <<"pid=" << v0pid
+ <<"tpc=" << tpc
+ <<"tof=" << tof
+ <<"track.=" << &t
+ <<"trackIn.=" << tin
<< "\n";
}
val[kPrez] = (TMath::ASin(tin->GetSnp())-TMath::ATan(dydx0))*TMath::RadToDeg();
val[kNdim+1] = 0.;//dx;
if((H = (THnSparseI*)fContainer->At(kMCtrackIn))) H->Fill(val);
+ val[kBC] = ily; // reset for subsequent components
+
+ if(DebugLevel()>=1 && exactPID>-2){
+ Float_t tpc(fkESD->GetTPCdedx());
+ Float_t tof(fkESD->GetTOFbeta());
+ AliTRDtrackV1 t(*fkTrack); t.SetOwner();
+ (*DebugStream()) << "MCtrackIn"
+ <<"pid=" << exactPID
+ <<"tpc=" << tpc
+ <<"tof=" << tof
+ <<"track.=" << &t
+ <<"trackIn.=" << tin
+ << "\n";
+ }
}
}
//if(bc>1) break; // do nothing for the rest of TRD objects if satellite bunch
+npad;
ioff=isel*4;
} else {
+ if(mc && ly<0) ly=0; // fix for bug in PlotMC
isel = ly; ioff = isel;
}
if(ioff>=ih){
if((h2 = hp[ih].Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
- Double_t m(0.), s(0.), trend(0.);
+ Double_t m(0.), s(0.), se(0.), trend(0.);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t ich(0); ich<nCh; ich++){
for(Int_t icen(0); icen<nCen; icen++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClY%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), Form("Clusters :: #Deltay Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.) PutTrendValue(Form("%sClS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s);
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.) PutTrendValue(Form("%sClS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s, se);
}
/*!YXPh*/
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))){
if(ac) cen = coord[kNdim]-1;
// global selection
if(ndim==kNdimTrklt){
+ if(mc && ly<0) ly=0; // fix for bug in PlotMC
ioff = ly*3/*4*/;
isel = ly;
} else {
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltY%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), Form("Tracklets :: #Deltay Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
- PutTrendValue(Form("%sTrkltY%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), trend);
- PutTrendValue(Form("%sTrkltYS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s);
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
+ PutTrendValue(Form("%sTrkltY%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), trend, m);
+ PutTrendValue(Form("%sTrkltYS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s, se);
}
}
/*!dphi*/
if(ndim > Int_t(kNdim)+1) ax = H->GetAxis(kNdim+1);
if(ndim > Int_t(kNdim)+2) abf = H->GetAxis(kNdim+2);
//AliInfo(Form("Using : Species[%c] Pt[%c] BunchFill[%c]", as?'y':'n', ap?'y':'n', abf?'y':'n'));
- const Int_t nPt(apt->GetNbins()+2);
+ const Int_t nPt(apt?(apt->GetNbins()+2):1);
// build list of projections
const Int_t nsel((fgNPt+2)*(kNspc*kNcharge + 1) + kNspc*kNcharge);
}
// build combined performance plots
// combine up the tree of projections
- Double_t m(0.), s(0.), trend(0.);
+ Double_t m(0.), s(0.), se(0.), trend(0.);
AliTRDrecoProjection xlow[2], specY[kNcharge*kNspc], specPh[kNcharge*kNspc], specQ[kNcharge*kNspc];
for(Int_t ich(0); ich<kNcharge; ich++){
// PID dependency - summation over pt
specY[idx].SetNameTitle(Form("H%sTrkInY%c%d", prefix, chName[ich], isp), "Sum over pt");
specY[idx].H()->SetNameTitle(Form("H%sTrkInY%c%d", prefix, chName[ich], isp),
Form("TrackIn[%s%c]:: #Deltay", spcName[v0][isp], chSgn[ich]));
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInY%c%c%d", prefix, chName[ich], ptName[0], isp), trend, m);
- PutTrendValue(Form("%sTrkInYS%c%c%d", prefix, chName[ich], ptName[0], isp), s);
+ PutTrendValue(Form("%sTrkInYS%c%c%d", prefix, chName[ich], ptName[0], isp), s, se);
}
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
- if((trend=pr1->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr1->GetTrendValue(1,&m,&s, &se))>-100.){
PutTrendValue(Form("%sTrkInY%c%c%d", prefix, chName[ich], ptName[ipt], isp), trend, m);
- PutTrendValue(Form("%sTrkInYS%c%c%d", prefix, chName[ich], ptName[ipt], isp), s);
+ PutTrendValue(Form("%sTrkInYS%c%c%d", prefix, chName[ich], ptName[ipt], isp), s, se);
}
specY[idx]+=(*pr1);
}
php.AddLast(&specY[idx]);
if((h2 = specY[idx].Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
- if((trend=specY[idx].GetTrendValue(1,&m,&s))>-100.){
+ if((trend=specY[idx].GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInY%c%d", prefix, chName[ich], isp), trend, m);
- PutTrendValue(Form("%sTrkInYS%c%d", prefix, chName[ich], isp), s);
+ PutTrendValue(Form("%sTrkInYS%c%d", prefix, chName[ich], isp), s,se);
}
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", specY[idx].H()->GetName())))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%d", prefix, chName[0], isp)))) (*pr1)+=specY[idx];
specPh[idx].H()->SetNameTitle(Form("H%sTrkInPh%c%d", prefix, chName[ich], isp),
Form("TrackIn[%s%c]:: #Delta#phi", spcName[v0][isp], chSgn[ich]));
specPh[idx].SetShowRange(-1.5, 1.5);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInPh%c%c%d", prefix, chName[ich], ptName[0], isp), trend, m);
- PutTrendValue(Form("%sTrkInPhS%c%c%d", prefix, chName[ich], ptName[0], isp), s);
+ PutTrendValue(Form("%sTrkInPhS%c%c%d", prefix, chName[ich], ptName[0], isp), s, se);
}
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
- if((trend=pr1->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr1->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInPh%c%c%d", prefix, chName[ich], ptName[ipt], isp), trend, m);
- PutTrendValue(Form("%sTrkInPhS%c%c%d", prefix, chName[ich], ptName[ipt], isp), s);
+ PutTrendValue(Form("%sTrkInPhS%c%c%d", prefix, chName[ich], ptName[ipt], isp), s, se);
}
specPh[idx]+=(*pr1);
}
php.AddLast(&specPh[idx]);
if((h2 = specPh[idx].Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=specPh[idx].GetTrendValue(1,&m,&s))>-100.){
+ if((trend=specPh[idx].GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInPh%c%d", prefix, chName[ich], isp), trend, m);
- PutTrendValue(Form("%sTrkInPhS%c%d", prefix, chName[ich], isp), s);
+ PutTrendValue(Form("%sTrkInPhS%c%d", prefix, chName[ich], isp), s,se);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%d", prefix, chName[0], isp)))) (*pr1)+=specPh[idx];
}
Form("TrackIn[%s%c]:: dQdl", spcName[v0][isp], chSgn[ich]));
specQ[idx].SetShowRange(-2.2, -1.75);
specQ[idx].H()->GetZaxis()->SetTitle("dQdl [a.u.]");
- if((trend = pr0->GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("%sTrkInQ%c%c%d", prefix, chName[ich], ptName[0], isp), trend, m);
- PutTrendValue(Form("%sTrkInQS%c%c%d", prefix, chName[ich], ptName[0], isp), m);
- }
+ if((trend = pr0->GetTrendValue(2, &m))>-100.) PutTrendValue(Form("%sTrkInQ%c%c%d", prefix, chName[ich], ptName[0], isp), trend, m);
+ if((trend = pr0->GetTrendValue(0, &m))>-100.) PutTrendValue(Form("%sTrkInQS%c%c%d", prefix, chName[ich], ptName[0], isp), trend, m);
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
- if((trend=pr1->GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("%sTrkInQ%c%c%d", prefix, chName[ich], ptName[ipt], isp), trend, m);
- PutTrendValue(Form("%sTrkInQS%c%c%d", prefix, chName[ich], ptName[ipt], isp), m);
- }
+ if((trend=pr1->GetTrendValue(2, &m))>-100.) PutTrendValue(Form("%sTrkInQ%c%c%d", prefix, chName[ich], ptName[ipt], isp), trend, m);
+ if((trend=pr1->GetTrendValue(0, &m))>-100.) PutTrendValue(Form("%sTrkInQS%c%c%d", prefix, chName[ich], ptName[ipt], isp), trend, m);
specQ[idx]+=(*pr1);
}
php.AddLast(&specQ[idx]);
specQ[idx].H()->SetName(Form("H%sTrkInQS%c%d", prefix, chName[ich], isp));
specQ[idx].SetShowRange(-1.85, -1.4);
if((h2 = specQ[idx].Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
- if((trend=specQ[idx].GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("%sTrkInQ%c%d", prefix, chName[ich], isp), trend, m);
- PutTrendValue(Form("%sTrkInQS%c%d", prefix, chName[ich], isp), m);
- }
+ if((trend=specQ[idx].GetTrendValue(2, &m))>-100.) PutTrendValue(Form("%sTrkInQ%c%d", prefix, chName[ich], isp), trend, m);
+ if((trend=specQ[idx].GetTrendValue(0, &m))>-100.) PutTrendValue(Form("%sTrkInQS%c%d", prefix, chName[ich], isp), trend, m);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%d", prefix, chName[0], isp)))) (*pr1)+=specQ[idx];
}
} // end PID loop for pt integration
Form("TrackIn[%c]:: #Deltay{%s}", chSgn[ich], ptCut[ipt]));
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInY%c%c", prefix, chName[ich], ptName[ipt]), trend, m);
- PutTrendValue(Form("%sTrkInYS%c%c", prefix, chName[ich], ptName[ipt]), s);
+ PutTrendValue(Form("%sTrkInYS%c%c", prefix, chName[ich], ptName[ipt]), s, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
pr0->H()->SetNameTitle(Form("H%sTrkInPh%c%c", prefix, chName[ich], ptName[ipt]),
Form("TrackIn[%c]:: #Delta#phi{%s}", chSgn[ich], ptCut[ipt]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInPh%c%c", prefix, chName[ich], ptName[ipt]), trend, m);
- PutTrendValue(Form("%sTrkInPhS%c%c", prefix, chName[ich], ptName[ipt]), s);
+ PutTrendValue(Form("%sTrkInPhS%c%c", prefix, chName[ich], ptName[ipt]), s, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1, &m, &s))>-100.){
+ if((trend=pr0->GetTrendValue(1, &m, &s, &se))>-100.){
PutTrendValue(Form("%sTrkInY%c", prefix, chName[ich]), trend, m);
- PutTrendValue(Form("%sTrkInYS%c", prefix, chName[ich]), s);
+ PutTrendValue(Form("%sTrkInYS%c", prefix, chName[ich]), s, se);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
Form("TrackIn[%c]:: #Delta#phi", chSgn[ich]));
pr0->SetShowRange(-1., 1.);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1, &m, &s))>-100.){
+ if((trend=pr0->GetTrendValue(1, &m, &s, &se))>-100.){
PutTrendValue(Form("%sTrkInPh%c", prefix, chName[ich]), trend, m);
- PutTrendValue(Form("%sTrkInPhS%c", prefix, chName[ich]), s);
+ PutTrendValue(Form("%sTrkInPhS%c", prefix, chName[ich]), s, se);
}
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
pr0->H()->SetName(Form("H%sTrkInQS%d", prefix, isp));
pr0->SetShowRange(-1.85, -1.4);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("%sTrkInQ%d", prefix, isp), trend, m);
- PutTrendValue(Form("%sTrkInQS%d", prefix, isp), m);
- }
+ if((trend=pr0->GetTrendValue(2, &m))>-100.) PutTrendValue(Form("%sTrkInQ%d", prefix, isp), trend, m);
+ if((trend=pr0->GetTrendValue(0, &m))>-100.) PutTrendValue(Form("%sTrkInQS%d", prefix, isp), trend, m);
}
} // end PID processing
}
pr0->H()->SetNameTitle(Form("H%sTrkInRCZ", prefix), "TrackIn[RC]:: #Deltaz");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkInRCZ", prefix), trend, m);
- PutTrendValue(Form("%sTrkInRCZS", prefix), s);
+ PutTrendValue(Form("%sTrkInRCZS", prefix), s, se);
}
}
/*!RC dy*/
v = H->GetBinContent(ib, coord);
if(v<1.) continue;
ly = coord[kBC]-1; // layer selection
+ if(ly<0) ly=0; // fix for bug in PlotMC
// charge selection
ch=0; sp=2;// [pi-] track [dafault]
if(rcBin>0){ // debug mode in which species are also saved
AliWarning("Missing/Wrong data @ hTracklet2TRDin needed for infering pt/p segmentation.");
return kFALSE;
}
- fNpt=H->GetAxis(kPt)->GetNbins()+1;
+ // protect for backward compatibility
+ fNpt=H->GetAxis(kPt)?(H->GetAxis(kPt)->GetNbins()+1):1;
if(!MakeMomSegmentation()) return kFALSE;
//PROCESS EXPERIMENTAL DISTRIBUTIONS