ClassImp(AliTRDinfoGen)
+const Float_t AliTRDinfoGen::fgkITS = 100.; // to be checked
const Float_t AliTRDinfoGen::fgkTPC = 290.;
-const Float_t AliTRDinfoGen::fgkTOF = 365.;
+const Float_t AliTRDinfoGen::fgkTRD = 365.;
const Float_t AliTRDinfoGen::fgkEvVertexZ = 15.;
const Int_t AliTRDinfoGen::fgkEvVertexN = 1;
}
Double32_t dedx[100]; Int_t nSlices(0);
- Int_t nTRDout(0), nTRDin(0), nTPC(0), nclsTrklt;
- AliDebug(2, Form("Entry[%3d] Tracks: ESD[%d] MC[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC));
+ Int_t nTRDout(0), nTRDin(0), nTPC(0)
+ ,nclsTrklt
+ ,nBarrel(0), nSA(0), nKink(0)
+ ,nBarrelMC(0), nSAMC(0), nKinkMC(0);
AliESDtrack *esdTrack = NULL;
AliESDfriendTrack *esdFriendTrack = NULL;
TObject *calObject = NULL;
Int_t jref = iref;//, kref = 0;
while(jref<nRefs){
ref = mcParticle->GetTrackReference(jref);
- if(ref->LocalX() > fgkTOF) break;
+ if(ref->LocalX() > fgkTRD) break;
AliDebug(4, Form(" trackRef[%2d (%2d)] @ %7.3f OK", jref-iref, jref, ref->LocalX()));
fTrackInfo->AddTrackRef(ref);
jref++;
}
}
if(fTrackCut && !fTrackCut->IsSelected(esdTrack)) selected = kFALSE;
- if(selected) fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));
- } else fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));
- } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)) fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo));
+ if(selected){
+ fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nBarrel++;
+ }
+ } else {
+ fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nKink++;
+ }
+ } else if((status&AliESDtrack::kTRDout) && !(status&AliESDtrack::kTRDin)){
+ fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nSA++;
+ }
fTrackInfo->Delete("");
}
- AliDebug(2, Form(
- "%3d Tracks: TPCout[%d] TRDin[%d] TRDout[%d]\n"
- " Barrel[%d] SA[%d] Kink[%d]"
- ,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry()
- , nTPC, nTRDin, nTRDout
- ,fTracksBarrel->GetEntriesFast()
- ,fTracksSA->GetEntriesFast()
- ,fTracksKink->GetEntriesFast()
- ));
-
// AliESDv0 *v0 = NULL;
// for(Int_t iv0=0; iv0<fESD->GetNumberOfV0s(); iv0++){
Int_t nRefsTRD = 0;
new(fTrackInfo) AliTRDtrackInfo();
fTrackInfo->SetPDG(fPdg);
- while(iref<nRefs){
+ while(iref<nRefs){ // count TRD TR
Bool_t kIN(kFALSE);
ref = mcParticle->GetTrackReference(iref);
- if(ref->LocalX() > fgkTPC && ref->LocalX() < fgkTOF){
+ if(ref->LocalX() > fgkTPC && ref->LocalX() < fgkTRD){
fTrackInfo->AddTrackRef(ref);
nRefsTRD++;kIN=kTRUE;
}
info.Delete("");
}
AliDebug(3, Form("Add MC track @ label[%d] nTRDrefs[%d].", itk, nRefsTRD));
- fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));
+ // check where the track starts
+ ref = mcParticle->GetTrackReference(0);
+ if(ref->LocalX() < fgkITS){
+ fTracksBarrel->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nBarrelMC++;
+ } else if(ref->LocalX() < fgkTPC) {
+ fTracksKink->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nKinkMC++;
+ } else if(nRefsTRD>6){
+ fTracksSA->Add(new AliTRDtrackInfo(*fTrackInfo));
+ nSAMC++;
+ }
fTrackInfo->Delete("");
}
delete[] trackMap;
}
+ AliDebug(2, Form(
+ "\nEv[%3d] Tracks: ESD[%d] MC[%d]\n"
+ " TPCout[%d] TRDin[%d] TRDout[%d]\n"
+ " Barrel[%3d+%3d=%3d] SA[%2d+%2d=%2d] Kink[%2d+%2d=%2d]"
+ ,(Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracksESD, nTracksMC
+ , nTPC, nTRDin, nTRDout
+ ,nBarrel, nBarrelMC, fTracksBarrel->GetEntries()
+ ,nSA, nSAMC, fTracksSA->GetEntries()
+ ,nKink, nKinkMC, fTracksKink->GetEntries()
+ ));
+
PostData(kTracksBarrel, fTracksBarrel);
PostData(kTracksSA, fTracksSA);
PostData(kTracksKink, fTracksKink);
if(track) fkTrack = track;
if(!fkTrack){
- AliDebug(2, "No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TObjArray *arr = NULL;
if(track) fkTrack = track;
if(!fkTrack){
- AliDebug(2, "No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TObjArray *arr = NULL;
ULong_t status = fkESD ? fkESD->GetStatus():0;
Double_t covR[7], cov[3];
- Float_t x0, y0, z0, dy, dz, dydx, dzdx;
+ Float_t pt, x0, y0, z0, dy, dz, dydx, dzdx;
AliTRDseedV1 *fTracklet(NULL);
for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
if(!(fTracklet = fkTrack->GetTracklet(ily))) continue;
if(!fTracklet->IsOK()) continue;
x0 = fTracklet->GetX0();
+ pt = fTracklet->GetPt();
// retrive the track angle with the chamber
y0 = fTracklet->GetYref(0);
dy = (yc - yt)*TMath::Sqrt(r00);
dz = (zc - zt)*TMath::Sqrt(r11);
- ((TH2I*)arr->At(0))->Fill(dydx, dy/*, dz*/);
+ ((TH3S*)arr->At(0))->Fill(dydx, dy/*, dz*/, pt);
((TH2I*)arr->At(1))->Fill(dydx, dy/TMath::Sqrt(cov[0] /*+ sx2*/ + sy2));
if(DebugLevel()>=2){
// reference position.
if(track) fkTrack = track;
if(!fkTrack){
- AliDebug(2, "No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
TObjArray *arr = NULL;
if(track) fkTrack = track;
if(!fkTrack){
- AliDebug(2, "No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
AliExternalTrackParam *tin = NULL;
//TODO Double_t dydx = TMath::Sqrt(1.-parR[2]*parR[2])/parR[2];
Double_t dy = parR[0] - tracklet->GetY();
TObjArray *arr = (TObjArray*)fContainer->At(kTrackTPC);
- ((TH2I*)arr->At(0))->Fill(tracklet->GetYref(1), dy);
+ ((TH3S*)arr->At(0))->Fill(tracklet->GetYref(1), dy, 1./PAR[4]);
((TH2I*)arr->At(1))->Fill(tracklet->GetYref(1), dy/TMath::Sqrt(COV(0,0)+cov[0]));
if(tracklet->IsRowCross()){
Double_t dz = parR[1] - tracklet->GetZ();
// fill histos
arr = (TObjArray*)fContainer->At(kMCtrackTPC);
// y resolution/pulls
- ((TH2I*)arr->At(0))->Fill(dydx0, PARMC[0]-PAR[0]);
+ ((TH3S*)arr->At(0))->Fill(dydx0, PARMC[0]-PAR[0], pt0);
((TH2I*)arr->At(1))->Fill(dydx0, (PARMC[0]-PAR[0])/TMath::Sqrt(COV(0,0)));
// z resolution/pulls
((TH2I*)arr->At(2))->Fill(dzdx0, PARMC[1]-PAR[1]);
}
if(track) fkTrack = track;
if(!fkTrack){
- AliDebug(2, "No Track defined.");
+ AliDebug(4, "No Track defined.");
return NULL;
}
// retriev track characteristics
arr = (TObjArray*)((TObjArray*)fContainer->At(kMCtrackTRD))->At(ily);
// y resolution/pulls
- ((TH2I*)arr->At(0))->Fill(dydx0, dy);
+ ((TH3S*)arr->At(0))->Fill(dydx0, dy, pt0);
((TH2I*)arr->At(1))->Fill(dydx0, dy/TMath::Sqrt(covR[0]));
// z resolution/pulls
((TH2I*)arr->At(2))->Fill(dzdx0, dz);
}
//________________________________________________________
-TObjArray* AliTRDresolution::BuildMonitorContainerTracklet(const char* name)
+TObjArray* AliTRDresolution::BuildMonitorContainerCluster(const char* name)
{
-// Build performance histograms for AliExternalTrackParam.vs TRD tracklet
+// Build performance histograms for AliTRDcluster.vs TRD track or MC
// - y reziduals/pulls
-// - z reziduals/pulls
-// - phi reziduals
- TObjArray *arr = new TObjArray(5);
+
+ TObjArray *arr = new TObjArray(2);
arr->SetName(name); arr->SetOwner();
TH1 *h(NULL); char hname[100], htitle[300];
+ const Int_t kNpt(14), kNphi(48), kNdy(60);
+ Float_t Phi=-.48, Dy=-.3, Pt=0.1;
+ Float_t binsPhi[kNphi+1], binsDy[kNdy+1], binsPt[kNpt+1];
+ for(Int_t i=0; i<kNphi+1; i++,Phi+=.02) binsPhi[i]=Phi;
+ for(Int_t i=0; i<kNdy+1; i++,Dy+=.01) binsDy[i]=Dy;
+ for(Int_t i=0;i<kNpt+1; i++,Pt=TMath::Exp(i*.15)-1.) binsPt[i]=Pt;
+
// tracklet resolution/pull in y direction
- sprintf(hname, "%s_Y", name);
- sprintf(htitle, "Y res @ %s;tg(#phi);#Delta y [cm];entries", name);
- if(!(h = (TH2I*)gROOT->FindObject(hname))){
- h = new TH2I(hname, htitle, 21, -.33, .33, 100, -.5, .5);
+ sprintf(hname, "%s_%s_Y", GetNameId(), name);
+ sprintf(htitle, "Y res for \"%s\" @ %s;tg(#phi);#Delta y [cm];p_{t} [GeV/c]", GetNameId(), name);
+ if(!(h = (TH3S*)gROOT->FindObject(hname))){
+ h = new TH3S(hname, htitle,
+ kNphi, binsPhi, kNdy, binsDy, kNpt, binsPt);
} else h->Reset();
arr->AddAt(h, 0);
- sprintf(hname, "%s_Ypull", name);
- sprintf(htitle, "Y pull @ %s;tg(#phi);#Delta y / #sigma_{y};entries", name);
+ sprintf(hname, "%s_%s_Ypull", GetNameId(), name);
+ sprintf(htitle, "Y pull for \"%s\" @ %s;tg(#phi);#Delta y / #sigma_{y};entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 21, -.33, .33, 100, -4.5, 4.5);
} else h->Reset();
arr->AddAt(h, 1);
+ return arr;
+}
+
+//________________________________________________________
+TObjArray* AliTRDresolution::BuildMonitorContainerTracklet(const char* name)
+{
+// Build performance histograms for AliExternalTrackParam.vs TRD tracklet
+// - y reziduals/pulls
+// - z reziduals/pulls
+// - phi reziduals
+ TObjArray *arr = BuildMonitorContainerCluster(name);
+ arr->Expand(5);
+ TH1 *h(NULL); char hname[100], htitle[300];
+
// tracklet resolution/pull in z direction
- sprintf(hname, "%s_Z", name);
- sprintf(htitle, "Z res @ %s;tg(#theta);#Delta z [cm];entries", name);
+ sprintf(hname, "%s_%s_Z", GetNameId(), name);
+ sprintf(htitle, "Z res for \"%s\" @ %s;tg(#theta);#Delta z [cm];entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 50, -1., 1., 100, -1.5, 1.5);
} else h->Reset();
arr->AddAt(h, 2);
- sprintf(hname, "%s_Zpull", name);
- sprintf(htitle, "Z pull @ %s;tg(#theta);#Delta z / #sigma_{z};entries", name);
+ sprintf(hname, "%s_%s_Zpull", GetNameId(), name);
+ sprintf(htitle, "Z pull for \"%s\" @ %s;tg(#theta);#Delta z / #sigma_{z};entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 50, -1., 1., 100, -5.5, 5.5);
} else h->Reset();
arr->AddAt(h, 3);
// tracklet to track phi resolution
- sprintf(hname, "%s_PHI", name);
- sprintf(htitle, "#Phi res @ %s;tg(#phi);#Delta #phi [rad];entries", name);
+ sprintf(hname, "%s_%s_PHI", GetNameId(), name);
+ sprintf(htitle, "#Phi res for \"%s\" @ %s;tg(#phi);#Delta #phi [rad];entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 21, -.33, .33, 100, -.5, .5);
} else h->Reset();
// - theta resolution, tgl pulls
// - pt resolution, 1/pt pulls, p resolution
-
- TH1 *h(NULL); char hname[100], htitle[300];
-/* TObjArray *arr = new TObjArray(11);
- arr->SetName(name); arr->SetOwner();*/
-
-// // y resolution
-// sprintf(hname, "%s_Y", name);
-// sprintf(htitle, "Y res @ %s;tg(#phi);#Delta y [cm];entries", name);
-// if(!(h = (TH2I*)gROOT->FindObject(hname))){
-// h = new TH2I(hname, htitle, 48, -.48, .48, 100, -.2, .2);
-// } else h->Reset();
-// arr->AddAt(h, 0);
-// // y pulls
-// sprintf(hname, "%s_Ypull", name);
-// sprintf(htitle, "Y pull @ %s;tg(#phi);#Delta y / #sigma_{y};entries", name);
-// if(!(h = (TH2I*)gROOT->FindObject(hname))){
-// h = new TH2I(hname, htitle, 48, -.48, .48, 100, -4., 4.);
-// } else h->Reset();
-// arr->AddAt(h, 1);
-//
-// // z resolution
-// sprintf(hname, "%s_Z", name);
-// sprintf(htitle, "Z res @ %s;tg(#theta);#Delta z [cm];entries", name);
-// if(!(h = (TH2I*)gROOT->FindObject(hname))){
-// h = new TH2I(hname, htitle, 100, -1., 1., 100, -1., 1.);
-// } else h->Reset();
-// arr->AddAt(h, 2);
-// // z pulls
-// sprintf(hname, "%s_Zpull", name);
-// sprintf(htitle, "Z pull @ %s;tg(#theta);#Delta z / #sigma_{z};entries", name);
-// if(!(h = (TH2I*)gROOT->FindObject(hname))){
-// h = new TH2I(hname, htitle, 100, -1., 1., 100, -4.5, 4.5);
-// } else h->Reset();
-// arr->AddAt(h, 3);
-//
-// // phi resolution
-// sprintf(hname, "%s_PHI", name);
-// sprintf(htitle, "#Phi res @ %s;tg(#phi);#Delta #phi [rad];entries", name);
-// if(!(h = (TH2I*)gROOT->FindObject(hname))){
-// h = new TH2I(hname, htitle, 60, -.3, .3, 100, -5e-3, 5e-3);
-// } else h->Reset();
-// arr->AddAt(h, 4);
-
TObjArray *arr = BuildMonitorContainerTracklet(name);
arr->Expand(11);
+ TH1 *h(NULL); char hname[100], htitle[300];
+
// snp pulls
- sprintf(hname, "%s_SNPpull", name);
- sprintf(htitle, "SNP pull @ %s;tg(#phi);#Delta snp / #sigma_{snp};entries", name);
+ sprintf(hname, "%s_%s_SNPpull", GetNameId(), name);
+ sprintf(htitle, "SNP pull for \"%s\" @ %s;tg(#phi);#Delta snp / #sigma_{snp};entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 60, -.3, .3, 100, -4.5, 4.5);
} else h->Reset();
arr->AddAt(h, 5);
// theta resolution
- sprintf(hname, "%s_THT", name);
- sprintf(htitle, "#Theta res @ %s;tg(#theta);#Delta #theta [rad];entries", name);
+ sprintf(hname, "%s_%s_THT", GetNameId(), name);
+ sprintf(htitle, "#Theta res for \"%s\" @ %s;tg(#theta);#Delta #theta [rad];entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 100, -1., 1., 100, -5e-3, 5e-3);
} else h->Reset();
arr->AddAt(h, 6);
// tgl pulls
- sprintf(hname, "%s_TGLpull", name);
- sprintf(htitle, "TGL pull @ %s;tg(#theta);#Delta tgl / #sigma_{tgl};entries", name);
+ sprintf(hname, "%s_%s_TGLpull", GetNameId(), name);
+ sprintf(htitle, "TGL pull for \"%s\" @ %s;tg(#theta);#Delta tgl / #sigma_{tgl};entries", GetNameId(), name);
if(!(h = (TH2I*)gROOT->FindObject(hname))){
h = new TH2I(hname, htitle, 100, -1., 1., 100, -4.5, 4.5);
} else h->Reset();
for(Int_t i=0; i<kNdpt+1; i++,DPt+=2.e-3) binsDPt[i]=DPt;
// Pt resolution
- sprintf(hname, "%s_Pt", name);
- sprintf(htitle, "P_{t} res @ %s;p_{t} [GeV/c];#Delta p_{t}/p_{t}^{MC};SPECIES", name);
+ sprintf(hname, "%s_%s_Pt", GetNameId(), name);
+ sprintf(htitle, "P_{t} res for \"%s\" @ %s;p_{t} [GeV/c];#Delta p_{t}/p_{t}^{MC};SPECIES", GetNameId(), name);
if(!(h = (TH3S*)gROOT->FindObject(hname))){
h = new TH3S(hname, htitle,
kNpt, binsPt, kNdpt, binsDPt, kNspc, binsSpc);
} else h->Reset();
arr->AddAt(h, 8);
// 1/Pt pulls
- sprintf(hname, "%s_1Pt", name);
- sprintf(htitle, "1/P_{t} pull @ %s;1/p_{t}^{MC} [c/GeV];#Delta(1/p_{t})/#sigma(1/p_{t});SPECIES", name);
+ sprintf(hname, "%s_%s_1Pt", GetNameId(), name);
+ sprintf(htitle, "1/P_{t} pull for \"%s\" @ %s;1/p_{t}^{MC} [c/GeV];#Delta(1/p_{t})/#sigma(1/p_{t});SPECIES", GetNameId(), name);
if(!(h = (TH3S*)gROOT->FindObject(hname))){
h = new TH3S(hname, htitle,
kNpt, 0., 2., 100, -4., 4., kNspc, -5.5, 5.5);
} else h->Reset();
arr->AddAt(h, 9);
// P resolution
- sprintf(hname, "%s_P", name);
- sprintf(htitle, "P res @ %s;p [GeV/c];#Delta p/p^{MC};SPECIES", name);
+ sprintf(hname, "%s_%s_P", GetNameId(), name);
+ sprintf(htitle, "P res for \"%s\" @ %s;p [GeV/c];#Delta p/p^{MC};SPECIES", GetNameId(), name);
if(!(h = (TH3S*)gROOT->FindObject(hname))){
h = new TH3S(hname, htitle,
kNpt, binsPt, kNdpt, binsDPt, kNspc, binsSpc);
arr->AddAt(h, 0);
// cluster to track residuals/pulls
- fContainer->AddAt(arr = new TObjArray(fgNhistos[kCluster]), kCluster);
- arr->SetName("Cl");
- if(!(h = (TH2I*)gROOT->FindObject("hCl"))){
- h = new TH2I("hCl", "Cluster Residuals", 21, -.33, .33, 100, -.5, .5);
- h->GetXaxis()->SetTitle("tg(#phi)");
- h->GetYaxis()->SetTitle("#Delta y [cm]");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 0);
- if(!(h = (TH2I*)gROOT->FindObject("hClpull"))){
- h = new TH2I("hClpull", "Cluster Pulls", 21, -.33, .33, 100, -4.5, 4.5);
- h->GetXaxis()->SetTitle("tg(#phi)");
- h->GetYaxis()->SetTitle("#Delta y/#sigma_{y}");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 1);
+ fContainer->AddAt(BuildMonitorContainerCluster("Cl"), kCluster);
// tracklet to TRD track
- fContainer->AddAt(BuildMonitorContainerTracklet("TrkTRD"), kTrackTRD);
+ fContainer->AddAt(BuildMonitorContainerTracklet("Trk"), kTrackTRD);
// tracklet to TRDin
- fContainer->AddAt(BuildMonitorContainerTracklet("TrkTRDin"), kTrackTPC);
+ fContainer->AddAt(BuildMonitorContainerTracklet("TrkIN"), kTrackTPC);
// Resolution histos
if(!HasMCdata()) return fContainer;
- // cluster y resolution [0]
- fContainer->AddAt(arr = new TObjArray(fgNhistos[kMCcluster]), kMCcluster);
- arr->SetName("McCl");
- if(!(h = (TH3S*)gROOT->FindObject("hMcCl"))){
- h = new TH3S("hMcCl",
- "Cluster Resolution;tg(#phi);#Delta y [cm];p_{t} [GeV/c]",
- kNphi, binsPhi, kNdy, binsDy, kNpt, binsPt);
- } else h->Reset();
- arr->AddAt(h, 0);
- if(!(h = (TH2I*)gROOT->FindObject("hMcClPull"))){
- h = new TH2I("hMcClPull", "Cluster Pulls", 48, -.48, .48, 100, -4.5, 4.5);
- h->GetXaxis()->SetTitle("tg(#phi)");
- h->GetYaxis()->SetTitle("#Deltay/#sigma_{y}");
- h->GetZaxis()->SetTitle("p_{t} [GeV/c]");
- } else h->Reset();
- arr->AddAt(h, 1);
-
-
- // TRACKLET RESOLUTION
- fContainer->AddAt(arr = new TObjArray(fgNhistos[kMCtracklet]), kMCtracklet);
- arr->SetName("McTrklt");
- // tracklet y resolution
- if(!(h = (TH3S*)gROOT->FindObject("hMcTrkltY"))){
- h = new TH3S("hMcTrkltY",
- "Tracklet Y Resolution;tg(#phi);#Delta y [cm];p_{t} [GeV/c]",
- kNphi, binsPhi, kNdy, binsDy, kNpt, binsPt);
- } else h->Reset();
- arr->AddAt(h, 0);
- // tracklet y pulls
- if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltYPull"))){
- h = new TH2I("hMcTrkltYPull", "Tracklet Pulls (Y)", 48, -.48, .48, 100, -4.5, 4.5);
- h->GetXaxis()->SetTitle("tg(#phi)");
- h->GetYaxis()->SetTitle("#Delta y / #sigma_{y}");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 1);
- // tracklet z resolution
- if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltZ"))){
- h = new TH2I("hMcTrkltZ", "Tracklet Resolution (Z)", 100, -1., 1., 100, -1., 1.);
- h->GetXaxis()->SetTitle("tg(#theta)");
- h->GetYaxis()->SetTitle("#Delta z [cm]");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 2);
- // tracklet z pulls
- if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltZPull"))){
- h = new TH2I("hMcTrkltZPull", "Tracklet Pulls (Z)", 100, -1., 1., 100, -3.5, 3.5);
- h->GetXaxis()->SetTitle("tg(#theta)");
- h->GetYaxis()->SetTitle("#Delta z / #sigma_{z}");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 3);
- // tracklet phi resolution
- if(!(h = (TH2I*)gROOT->FindObject("hMcTrkltPhi"))){
- h = new TH2I("hMcTrkltPhi", "Tracklet Resolution (#Phi)", 48, -.48, .48, 100, -.15, .15);
- h->GetXaxis()->SetTitle("tg(#phi)");
- h->GetYaxis()->SetTitle("#Delta #phi [rad]");
- h->GetZaxis()->SetTitle("entries");
- } else h->Reset();
- arr->AddAt(h, 4);
+ // cluster resolution
+ fContainer->AddAt(BuildMonitorContainerCluster("MCcl"), kMCcluster);
+ // tracklet resolution
+ fContainer->AddAt(BuildMonitorContainerTracklet("MCtracklet"), kMCtracklet);
- // KALMAN TRACK RESOLUTION
+ // track resolution
fContainer->AddAt(arr = new TObjArray(6/*fgNhistos[kMCtrackTRD]*/), kMCtrackTRD);
- arr->SetName("McTrkTRD");
- for(Int_t il(0); il<AliTRDgeometry::kNlayer; il++) arr->AddAt(BuildMonitorContainerTrack(Form("McTrkTRD_Ly%d", il)), il);
+ arr->SetName("MCtrk");
+ for(Int_t il(0); il<AliTRDgeometry::kNlayer; il++) arr->AddAt(BuildMonitorContainerTrack(Form("MCtrk_Ly%d", il)), il);
// TRDin TRACK RESOLUTION
- fContainer->AddAt(BuildMonitorContainerTrack("McTrkTRDin"), kMCtrackTPC);
+ fContainer->AddAt(BuildMonitorContainerTrack("MCtrkIN"), kMCtrackTPC);
// TRDout TRACK RESOLUTION
- fContainer->AddAt(BuildMonitorContainerTrack("McTrkTRDout"), kMCtrackTOF);
+ fContainer->AddAt(BuildMonitorContainerTrack("MCtrkOUT"), kMCtrackTOF);
return fContainer;
}
#endif
#include "PWG1/TRD/macros/helper.C"
-void AddTRDresolution(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci, const char *suffix="")
+void AddTRDresolution(AliAnalysisManager *mgr, Char_t *trd, AliAnalysisDataContainer **ci)
{
Int_t map = ParseOptions(trd);
if(!TSTBIT(map, kResolution)) return;
- printf("AddTRDresolution(\"%s\") <- [0]=\"%s\"\n", suffix, ci[0]->GetName());
+ printf("AddTRDresolution <- [0]=\"%s\" [1]=\"%s\" [2]=\"%s\"\n", ci[0]->GetName(), ci[1]->GetName(), ci[2]->GetName());
+ // AliLog::SetClassDebugLevel("AliTRDrecoTask", 2);
+ // AliLog::SetClassDebugLevel("AliTRDresolution", 2);
AliTRDresolution *res(NULL);
- mgr->AddTask(res = new AliTRDresolution(Form("TRDresolution%s", suffix)));
- res->SetMCdata(mgr->GetMCtruthEventHandler());
- res->SetPostProcess(kFALSE);
- res->SetDebugLevel(0);
- //AliLog::SetClassDebugLevel("AliTRDresolution", 5);
- mgr->ConnectInput(res, 0, mgr->GetCommonInputContainer());
- mgr->ConnectInput(res, 1, ci[0]);
- mgr->ConnectOutput(res,1, mgr->CreateContainer(res->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
- // Create output containers for calibration tasks
- AliAnalysisDataContainer *co(NULL);
- co = mgr->CreateContainer(Form("%sCl2Trk%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
- mgr->ConnectOutput(res, AliTRDresolution::kClToTrk, co);
- co = mgr->CreateContainer(Form("%sTrklt2Trk%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
- mgr->ConnectOutput(res, AliTRDresolution::kTrkltToTrk, co);
- co = mgr->CreateContainer(Form("%sCl2MC%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
- mgr->ConnectOutput(res, AliTRDresolution::kClToMC, co);
- co = mgr->CreateContainer(Form("%sTrklt2MC%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
- mgr->ConnectOutput(res, AliTRDresolution::kTrkltToMC, co);
-
- TObjArray *coa = mgr->GetContainers();
- // Cluster Error Parameterization
- if(TSTBIT(map, kClErrParam)){
- AliTRDclusterResolution *taskCl(NULL);
- mgr->AddTask(taskCl = new AliTRDclusterResolution((char*)"ClErrCalibESD"));
- taskCl->SetExB();
- taskCl->SetDebugLevel(0);
- //AliLog::SetClassDebugLevel("AliTRDclusterResolution", 5);
-
- mgr->ConnectInput(taskCl, 0, mgr->GetCommonInputContainer());
- mgr->ConnectInput(taskCl, 1, (AliAnalysisDataContainer*)coa->FindObject(Form("%sCl2Trk", res->GetName())));
- mgr->ConnectOutput(taskCl, 1, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
-
- mgr->AddTask(taskCl = new AliTRDclusterResolution((char*)"ClErrCalibMC"));
- taskCl->SetExB();
- taskCl->SetDebugLevel(0);
- mgr->ConnectInput(taskCl, 0, mgr->GetCommonInputContainer());
- mgr->ConnectInput(taskCl, 1, (AliAnalysisDataContainer*)coa->FindObject(Form("%sCl2MC", res->GetName())));
- mgr->ConnectOutput(taskCl, 1, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
+ const Char_t *suffix[]={"", "SA", "K"};
+ for(Int_t itq=0; itq<1/*3*/; itq++){
+ mgr->AddTask(res = new AliTRDresolution(Form("TRDresolution%s", suffix[itq])));
+ res->SetMCdata(mgr->GetMCtruthEventHandler());
+ res->SetPostProcess(kFALSE);
+ res->SetDebugLevel(0);
+ res->SetNameId(suffix[itq]);
+ mgr->ConnectInput(res, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectInput(res, 1, ci[itq]);
+ mgr->ConnectOutput(res,1, mgr->CreateContainer(res->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.Performance.root"));
+
+ // Create output containers for calibration tasks
+ AliAnalysisDataContainer *co(NULL);
+ co = mgr->CreateContainer(Form("%sCl2Trk%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
+ mgr->ConnectOutput(res, AliTRDresolution::kClToTrk, co);
+ co = mgr->CreateContainer(Form("%sTrklt2Trk%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
+ mgr->ConnectOutput(res, AliTRDresolution::kTrkltToTrk, co);
+ co = mgr->CreateContainer(Form("%sCl2MC%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
+ mgr->ConnectOutput(res, AliTRDresolution::kClToMC, co);
+ co = mgr->CreateContainer(Form("%sTrklt2MC%s", res->GetName(), suffix), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
+ mgr->ConnectOutput(res, AliTRDresolution::kTrkltToMC, co);
+
+ TObjArray *coa = mgr->GetContainers();
+ // Cluster Error Parameterization
+ if(TSTBIT(map, kClErrParam)){
+ AliTRDclusterResolution *taskCl(NULL);
+ mgr->AddTask(taskCl = new AliTRDclusterResolution((char*)"ClErrCalibESD"));
+ taskCl->SetExB();
+ taskCl->SetDebugLevel(0);
+ //AliLog::SetClassDebugLevel("AliTRDclusterResolution", 5);
+
+ mgr->ConnectInput(taskCl, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectInput(taskCl, 1, (AliAnalysisDataContainer*)coa->FindObject(Form("%sCl2Trk", res->GetName())));
+ mgr->ConnectOutput(taskCl, 1, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
+
+ mgr->AddTask(taskCl = new AliTRDclusterResolution((char*)"ClErrCalibMC"));
+ taskCl->SetExB();
+ taskCl->SetDebugLevel(0);
+ mgr->ConnectInput(taskCl, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectInput(taskCl, 1, (AliAnalysisDataContainer*)coa->FindObject(Form("%sCl2MC", res->GetName())));
+ mgr->ConnectOutput(taskCl, 1, mgr->CreateContainer(taskCl->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.CalibClErrParam.root"));
+ }
}
// TRD alignment
if(TSTBIT(map, kAlignment)){
+ TObjArray *coa = mgr->GetContainers();
AliTRDalignmentTask *taskAlign(NULL);
mgr->AddTask(taskAlign = new AliTRDalignmentTask((char*)"TRDalignment"));
taskAlign->SetDebugLevel(0);
//AliLog::SetClassDebugLevel("AliTRDalignmentTask", 5);
mgr->ConnectInput(taskAlign, 0, mgr->GetCommonInputContainer());
- mgr->ConnectInput(taskAlign, 1, (AliAnalysisDataContainer*)coa->FindObject(Form("%sCl2Trk", res->GetName())));
+ mgr->ConnectInput(taskAlign, 1, (AliAnalysisDataContainer*)coa->FindObject("TRDresolutionCl2Trk"));
mgr->ConnectOutput(taskAlign, 1, mgr->CreateContainer(Form("h%s", taskAlign->GetName()), TObjArray::Class(), AliAnalysisManager::kExchangeContainer));
mgr->ConnectOutput(taskAlign, 2, mgr->CreateContainer(taskAlign->GetName(), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Calib%s.root", taskAlign->GetName())));
}