#include <TFile.h>
#include <TSystem.h>
#include <TStyle.h>
#include <TROOT.h>
#include <TObjArray.h>
#include <TH3.h>
#include <TH2.h>
#include <TH1.h>
#include <THnSparse.h>
#include <TF1.h>
#include <TCanvas.h>
#include <TGaxis.h>
#include <TBox.h>
#include <TLegend.h>
#include <TGraphErrors.h>
#include <TGraphAsymmErrors.h>
#include <TLinearFitter.h>
#include <TMath.h>
#include <TMatrixT.h>
#include <TVectorT.h>
#include <TTreeStream.h>
#include <TGeoManager.h>
#include <TDatabasePDG.h>
#include "AliPID.h"
#include "AliLog.h"
#include "AliESDtrack.h"
#include "AliESDHeader.h"
#include "AliMathBase.h"
#include "AliTrackPointArray.h"
#include "AliTRDresolution.h"
#include "AliTRDgeometry.h"
#include "AliTRDtransform.h"
#include "AliTRDpadPlane.h"
#include "AliTRDcluster.h"
#include "AliTRDseedV1.h"
#include "AliTRDtrackV1.h"
#include "AliTRDReconstructor.h"
#include "AliTRDrecoParam.h"
#include "AliTRDpidUtil.h"
#include "AliTRDinfoGen.h"
#include "AliAnalysisManager.h"
#include "info/AliTRDclusterInfo.h"
#include "info/AliTRDeventInfo.h"
ClassImp(AliTRDresolution)
ClassImp(AliTRDresolution::AliTRDrecoProjection)
Int_t const AliTRDresolution::fgkNbins[kNdim] = {
Int_t(kNbunchCross),
144,
45,
50,
40,
50,
5,
3
};
Double_t const AliTRDresolution::fgkMin[kNdim] = {
-1.5,
-TMath::Pi(),
-0.9,
-1.5,
-5.,
-2.5,
-2.5,
-0.5
};
Double_t const AliTRDresolution::fgkMax[kNdim] = {
1.5,
TMath::Pi(),
0.9,
1.5,
5.,
2.5,
2.5,
2.5
};
Char_t const *AliTRDresolution::fgkTitle[kNdim] = {
"bunch cross",
"#phi [rad]",
"#eta",
"#Deltay [cm]",
"#Delta#phi [deg]",
"#Deltaz [cm]",
"chg*spec*rc",
"p_{t} [bin]"
};
Char_t const * AliTRDresolution::fgPerformanceName[kNclasses] = {
"Det2Cluster"
,"Cluster2Track"
,"Tracklet2Track"
,"Tracklet2TRDin"
,"Cluster2MC"
,"Tracklet2MC"
,"TRDin2MC"
,"TRD2MC"
};
AliTRDresolution::AliTRDresolution()
:AliTRDrecoTask()
,fSteer(0)
,fPtThreshold(.3)
,fBCbinTOF(0)
,fBCbinFill(0)
,fLYselect(-1)
,fBsign(kFALSE)
,fProj(NULL)
,fDBPDG(NULL)
,fCl(NULL)
,fMCcl(NULL)
{
SetNameTitle("TRDresolution", "TRD spatial and momentum resolution");
SetProcesses(kTRUE, kTRUE, kTRUE, kTRUE);
}
AliTRDresolution::AliTRDresolution(char* name, Bool_t xchange)
:AliTRDrecoTask(name, "TRD spatial and momentum resolution")
,fSteer(0)
,fPtThreshold(.3)
,fBCbinTOF(0)
,fBCbinFill(0)
,fLYselect(-1)
,fBsign(kFALSE)
,fProj(NULL)
,fDBPDG(NULL)
,fCl(NULL)
,fMCcl(NULL)
{
InitFunctorList();
SetProcesses(kTRUE, kTRUE, kTRUE, kTRUE);
if(xchange){
SetUseExchangeContainers();
DefineOutput(kClToTrk, TObjArray::Class());
DefineOutput(kClToMC, TObjArray::Class());
}
}
AliTRDresolution::~AliTRDresolution()
{
if (AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode()) return;
if(fProj){
fProj->Delete();
delete fProj;
}
if(fCl){fCl->Delete(); delete fCl;}
if(fMCcl){fMCcl->Delete(); delete fMCcl;}
}
void AliTRDresolution::UserCreateOutputObjects()
{
AliTRDrecoTask::UserCreateOutputObjects();
if(UseExchangeContainers()) InitExchangeContainers();
}
void AliTRDresolution::InitExchangeContainers()
{
fCl = new TObjArray(200); fCl->SetOwner(kTRUE);
fMCcl = new TObjArray(); fMCcl->SetOwner(kTRUE);
PostData(kClToTrk, fCl);
PostData(kClToMC, fMCcl);
}
void AliTRDresolution::UserExec(Option_t *opt)
{
if(fCl) fCl->Delete();
if(fMCcl) fMCcl->Delete();
AliTRDrecoTask::UserExec(opt);
}
Bool_t AliTRDresolution::Pulls(Double_t* , Double_t* , Double_t ) const
{
return kTRUE;
}
TH1* AliTRDresolution::DetCluster(const TObjArray *cls)
{
if(cls) fkClusters = cls;
if(!fkClusters){
AliDebug(4, "No Clusters defined.");
return NULL;
}
Int_t ncl(0);
if(!(ncl = fkClusters->GetEntriesFast())){
AliDebug(1, "No RecPoints defined.");
return NULL;
}
Int_t det(-1);
AliTRDcluster *cl(NULL);
for(Int_t icl(0); icl<ncl; icl++){
if(!(cl = (AliTRDcluster*)(*fkClusters)[icl])) continue;
det = cl->GetDetector(); break;
}
if(det<0){
AliDebug(1, "No useful clusters defined.");
return NULL;
}
THnSparse *H(NULL);
if(!fContainer || !(H = ((THnSparse*)fContainer->At(kDetector)))){
AliWarning("No output container defined.");
return NULL;
}
Int_t ly(AliTRDgeometry::GetLayer(det)),
stk(AliTRDgeometry::GetStack(det));
Double_t val[kNdim],
alpha((0.5+AliTRDgeometry::GetSector(det))*AliTRDgeometry::GetAlpha()),
cs(TMath::Cos(alpha)),
sn(TMath::Sin(alpha));
for(Int_t icl(0); icl<ncl; icl++){
if(!(cl = (AliTRDcluster*)(*fkClusters)[icl])){
AliDebug(2, Form("Missing clusters @ %d", icl));
continue;
}
if(cl->IsMasked()) printf("Mask %03d[%02d_%d_%d] %d[%d]", det, AliTRDgeometry::GetSector(det), stk, ly, cl->GetPadMaskedPosition(), cl->GetPadMaskedStatus());
val[kBC] = ly;
val[kPhi] = TMath::ATan2(cl->GetX()*sn + cl->GetY()*cs, cl->GetX()*cs - cl->GetY()*sn);
val[kEta] = (5-stk)*16-cl->GetPadRow()-1-(stk<3?4:0);
val[kYrez]= fEvent->GetMultiplicity();
val[4] = TMath::Abs(cl->GetQ());
val[5] = fTriggerList?fTriggerSlot:(cl->IsFivePad()?1:cl->GetNPads());
H->Fill(val);
}
return NULL;
}
TH1* AliTRDresolution::PlotCluster(const AliTRDtrackV1 *track)
{
if(track) fkTrack = track;
if(!fkTrack){
AliDebug(4, "No Track defined.");
return NULL;
}
if(fkESD && TMath::Abs(fkESD->GetTOFbc()) > 1){
AliDebug(4, Form("Track with BC_index[%d] not used.", fkESD->GetTOFbc()));
return NULL;
}
if(fkESD && fPt<fPtThreshold){
AliDebug(4, Form("Track with pt[%6.4f] under threshold.", fPt));
return NULL;
}
THnSparse *H(NULL);
if(!fContainer || !(H = ((THnSparse*)fContainer->At(kCluster)))){
AliWarning("No output container defined.");
return NULL;
}
AliTRDgeometry *geo(AliTRDinfoGen::Geometry());
Double_t val[kNdim+2],
alpha(0.), cs(-2.), sn(0.);
TObjArray *clInfoArr(NULL);
AliTRDseedV1 *fTracklet(NULL);
AliTRDcluster *c(NULL), *cc(NULL);
for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
if(!(fTracklet = fkTrack->GetTracklet(ily))) continue;
if(!fTracklet->IsOK()) continue;
val[kBC] = ily;
if(cs<-1.){
alpha = (0.5+AliTRDgeometry::GetSector(fTracklet->GetDetector()))*AliTRDgeometry::GetAlpha();
cs = TMath::Cos(alpha);
sn = TMath::Sin(alpha);
}
val[kPhi] = TMath::ATan2(fTracklet->GetX()*sn + fTracklet->GetY()*cs, fTracklet->GetX()*cs - fTracklet->GetY()*sn);
Float_t tgl = fTracklet->GetZ()/fTracklet->GetX()/TMath::Sqrt(1.+fTracklet->GetY()*fTracklet->GetY()/fTracklet->GetX()/fTracklet->GetX());
val[kEta] = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));
val[kPt] = TMath::ATan(fTracklet->GetYref(1))*TMath::RadToDeg();
Float_t corr = 1./TMath::Sqrt(1.+fTracklet->GetYref(1)*fTracklet->GetYref(1)+fTracklet->GetZref(1)*fTracklet->GetZref(1));
Int_t row0(-1);
Float_t padCorr(fTracklet->GetTilt()*fTracklet->GetPadLength());
fTracklet->ResetClusterIter(kTRUE);
while((c = fTracklet->NextCluster())){
Float_t xc(c->GetX()),
q(TMath::Abs(c->GetQ()));
if(row0<0) row0 = c->GetPadRow();
val[kYrez] = c->GetY() + padCorr*(c->GetPadRow() - row0) -fTracklet->GetYat(xc);
val[kPrez] = fTracklet->GetX0()-xc;
val[kZrez] = 0.; Int_t ic(0), tb(c->GetLocalTimeBin());;
if((cc = fTracklet->GetClusters(tb-1))) {val[kZrez] += TMath::Abs(cc->GetQ()); ic++;}
if((cc = fTracklet->GetClusters(tb-2))) {val[kZrez] += TMath::Abs(cc->GetQ()); ic++;}
if(ic) val[kZrez] /= (ic*q);
val[kSpeciesChgRC]= fTracklet->IsRowCross()?0.:(TMath::Max(q*corr, Float_t(3.)));
val[kNdim] = fEvent?fEvent->GetMultiplicity():0.;
val[kNdim+1] = fTriggerList?fTriggerSlot:(c->IsFivePad()?1:c->GetNPads());
H->Fill(val);
Float_t yt(fTracklet->GetYref(0)-val[kZrez]*fTracklet->GetYref(1)),
zt(fTracklet->GetZref(0)-val[kZrez]*fTracklet->GetZref(1));
Int_t istk = geo->GetStack(c->GetDetector());
AliTRDpadPlane *pp = geo->GetPadPlane(ily, istk);
Float_t rowZ = pp->GetRow0();
Float_t d = rowZ - zt + pp->GetAnodeWireOffset();
d -= ((Int_t)(2 * d)) / 2.0;
if (d > 0.25) d = 0.5 - d;
AliTRDclusterInfo *clInfo(NULL);
clInfo = new AliTRDclusterInfo;
clInfo->SetCluster(c);
clInfo->SetGlobalPosition(yt, zt, fTracklet->GetYref(1), fTracklet->GetZref(1));
clInfo->SetResolution(val[kYrez]);
clInfo->SetAnisochronity(d);
clInfo->SetDriftLength(val[kZrez]);
clInfo->SetTilt(fTracklet->GetTilt());
if(fCl) fCl->Add(clInfo);
if(DebugLevel()>=2){
if(!clInfoArr){
clInfoArr=new TObjArray(AliTRDseedV1::kNclusters);
clInfoArr->SetOwner(kFALSE);
}
clInfoArr->Add(clInfo);
}
}
if(DebugLevel()>=2 && clInfoArr){
ULong_t status = fkESD->GetStatus();
(*DebugStream()) << "cluster"
<<"status=" << status
<<"clInfo.=" << clInfoArr
<< "\n";
clInfoArr->Clear();
}
}
if(clInfoArr) delete clInfoArr;
if(!track) return NULL;
TH1 *h(NULL);
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
TH1* AliTRDresolution::PlotTracklet(const AliTRDtrackV1 *track)
{
// (Cov^{-1})^{1/2}X = N((Cov^{-1})^{1/2}*|m|, |1|)
// END_LATEX
if(track) fkTrack = track;
if(!fkTrack){
AliDebug(4, "No Track defined.");
return NULL;
}
if(fkESD && TMath::Abs(fkESD->GetTOFbc())>1){
AliDebug(4, Form("Track with BC_index[%d] not used.", fkESD->GetTOFbc()));
}
THnSparse *H(NULL);
if(!fContainer || !(H = (THnSparse*)fContainer->At(kTracklet))){
AliWarning("No output container defined.");
return NULL;
}
Int_t spc(fSpecies); if(spc==3) spc=2; if(spc==-3) spc=-2; if(spc>3) spc=3; if(spc<-3) spc=-3;
const Int_t ndim(kNdim+8);
Double_t val[ndim],
alpha(0.), cs(-2.), sn(0.);
AliTRDseedV1 *fTracklet(NULL);
for(Int_t il(0); il<AliTRDgeometry::kNlayer; il++){
if(!(fTracklet = fkTrack->GetTracklet(il))) continue;
if(!fTracklet->IsOK() || !fTracklet->IsChmbGood()) continue;
val [kBC] = il;
if(cs<-1.){
alpha = (0.5+AliTRDgeometry::GetSector(fTracklet->GetDetector()))*AliTRDgeometry::GetAlpha();
cs = TMath::Cos(alpha);
sn = TMath::Sin(alpha);
}
val[kPhi] = TMath::ATan2(fTracklet->GetX()*sn + fTracklet->GetY()*cs, fTracklet->GetX()*cs - fTracklet->GetY()*sn);
Float_t tgl = fTracklet->GetZ()/fTracklet->GetX()/TMath::Sqrt(1.+fTracklet->GetY()*fTracklet->GetY()/fTracklet->GetX()/fTracklet->GetX());
val[kEta] = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));
val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:spc;
val[kPt] = GetPtBin(fPt);
Double_t dyt(fTracklet->GetYfit(0) - fTracklet->GetYref(0)),
dzt(fTracklet->GetZfit(0) - fTracklet->GetZref(0)),
dydx(fTracklet->GetYfit(1)),
tilt(fTracklet->GetTilt());
val[kYrez] = dyt - dzt*tilt;
val[kZrez] = fTracklet->IsRowCross()?(dzt + dyt*tilt):(fTracklet->GetdQdl()*3.e-4-1.5);
dydx+= tilt*fTracklet->GetZref(1);
val[kPrez] = TMath::ATan((dydx - fTracklet->GetYref(1))/(1.+ fTracklet->GetYref(1)*dydx)) * TMath::RadToDeg();
val[kNdim] = fEvent?fEvent->GetMultiplicity():0;
val[kNdim+1] = fTriggerList?fTriggerSlot:(1.e2*fTracklet->GetTBoccupancy()/AliTRDseedV1::kNtb);
H->Fill(val);
if(DebugLevel()>=3){
Bool_t rc(fTracklet->IsRowCross());
UChar_t err(fTracklet->GetErrorMsg());
Double_t x(fTracklet->GetX()),
pt(fTracklet->GetPt()),
yt(fTracklet->GetYref(0)),
zt(fTracklet->GetZref(0)),
phi(fTracklet->GetYref(1)),
tht(fTracklet->GetZref(1));
Int_t ncl(fTracklet->GetN()), det(fTracklet->GetDetector());
(*DebugStream()) << "tracklet"
<<"pt=" << pt
<<"x=" << x
<<"yt=" << yt
<<"zt=" << zt
<<"phi=" << phi
<<"tht=" << tht
<<"det=" << det
<<"n=" << ncl
<<"dy0=" << dyt
<<"dz0=" << dzt
<<"dy=" << val[kYrez]
<<"dz=" << val[kZrez]
<<"dphi="<< val[kPrez]
<<"dQ ="<< val[kNdim]
<<"rc=" << rc
<<"err=" << err
<< "\n";
}
}
if(!track) return NULL;
TH1 *h(NULL);
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
TH1* AliTRDresolution::PlotTrackIn(const AliTRDtrackV1 *track)
{
if(track) fkTrack = track;
if(!fkTrack){
AliDebug(4, "No Track defined.");
return NULL;
}
TH1 *h(NULL);
THnSparseI *H=(THnSparseI*)fContainer->At(kTrackIn);
if(!H){
AliError(Form("Missing container @ %d", Int_t(kTrackIn)));
return NULL;
}
AliExternalTrackParam *tin(NULL);
if(!(tin = fkTrack->GetTrackIn())){
AliError("Track did not entered TRD fiducial volume.");
return NULL;
}
AliTRDseedV1 *fTracklet(fkTrack->GetTracklet(0));
if(!fTracklet){
AliDebug(3, "No Tracklet in ly[0]. Skip track.");
if(!track) return NULL;
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
if(!fTracklet->IsOK() || !fTracklet->IsChmbGood()){
AliDebug(3, "Tracklet or Chamber not OK. Skip track.");
if(!track) return NULL;
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
Double_t x = tin->GetX();
if(TMath::Abs(x-fTracklet->GetX())>1.e-3){
AliDebug(1, Form("Tracklet did not match Track. dx[cm]=%+4.1f", x-fTracklet->GetX()));
if(!track) return NULL;
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
Int_t spc(fSpecies); if(spc==3) spc=2; if(spc==-3) spc=-2; if(spc>3) spc=3; if(spc<-3) spc=-3;
Int_t v0pid(-2);
if(fkESD->IsElectron()) v0pid = -1;
else if(fkESD->IsPion()) v0pid = 0;
else if(fkESD->IsProton()) v0pid = 1;
if(DebugLevel()>=1){
Float_t tpc(fkESD->GetTPCdedx());
Float_t tof(fkESD->GetTOFbeta());
Int_t ev(fEvent->GetEventHeader()->GetEventNumberInFile());
AliTRDtrackV1 t(*fkTrack); t.SetOwner();
(*DebugStream()) << "trackIn"
<<"ev=" << ev
<<"pid=" << v0pid
<<"tpc=" << tpc
<<"tof=" << tof
<<"track.=" << &t
<<"trackIn.=" << tin
<< "\n";
}
const Double_t *parR(tin->GetParameter());
Double_t dyt(fTracklet->GetYfit(0)-parR[0]), dzt(fTracklet->GetZfit(0)-parR[1]),
phit(fTracklet->GetYfit(1)),
tilt(fTracklet->GetTilt()),
norm(1./TMath::Sqrt((1.-parR[2])*(1.+parR[2])));
Double_t dy = dyt - dzt*tilt,
dz = dzt + dyt*tilt,
dx = dy/(parR[2]*norm-parR[3]*norm*tilt);
phit += tilt*parR[3];
Double_t dphi = TMath::ATan(phit) - TMath::ASin(parR[2]);
Double_t val[kNdim+2];
val[kBC] = fTriggerSlot?fTriggerSlot:v0pid;
Double_t alpha = (0.5+AliTRDgeometry::GetSector(fTracklet->GetDetector()))*AliTRDgeometry::GetAlpha(),
cs = TMath::Cos(alpha),
sn = TMath::Sin(alpha);
val[kPhi] = TMath::ATan2(fTracklet->GetX()*sn + fTracklet->GetY()*cs, fTracklet->GetX()*cs - fTracklet->GetY()*sn);
Float_t tgl = fTracklet->GetZ()/fTracklet->GetX()/TMath::Sqrt(1.+fTracklet->GetY()*fTracklet->GetY()/fTracklet->GetX()/fTracklet->GetX());
val[kEta] = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));
val[kYrez] = dy;
val[kZrez] = fTracklet->IsRowCross()?dz:(fTracklet->GetdQdl()*5.e-4 - 2.5);
val[kPrez] = dphi*TMath::RadToDeg();
val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:spc;
Float_t pz(0.); if(fTracklet->GetMomentum()-fPt>1.e-5) pz = TMath::Sqrt((fTracklet->GetMomentum()-fPt)*(fTracklet->GetMomentum()+fPt));
val[kPt] = fTracklet->IsRowCross()?GetPtBin(pz):GetPtBin(fPt);
val[kNdim] = GetPtBin(fTracklet->GetMomentum());
val[kNdim+1] = dx;
H->Fill(val);
if(!track) return NULL;
if((h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H->Projection(kYrez);
}
TH1* AliTRDresolution::PlotMC(const AliTRDtrackV1 *track)
{
if(!HasMCdata()) return NULL;
if(track) fkTrack = track;
if(!fkTrack){
AliDebug(4, "No Track defined.");
return NULL;
}
THnSparse *H(NULL);
if(!fContainer){
AliWarning("No output container defined.");
return NULL;
}
Int_t pdg = fkMC->GetPDG(),
sIdx(AliTRDpidUtil::Pdg2Pid(TMath::Abs(pdg))+1),
sign(0),
label(fkMC->GetLabel());
if(!fDBPDG) fDBPDG=TDatabasePDG::Instance();
TParticlePDG *ppdg(fDBPDG->GetParticle(pdg));
if(ppdg) sign = ppdg->Charge() > 0. ? 1 : -1;
if(sIdx==3) sIdx=2; if(sIdx>3) sIdx=3;
TH1 *h(NULL);
AliTRDgeometry *geo(AliTRDinfoGen::Geometry());
AliTRDseedV1 *fTracklet(NULL); TObjArray *clInfoArr(NULL);
UChar_t s;
Double_t x, y, z, pt, dydx, dzdx;
Float_t pt0, p0, x0, y0, z0, dx, dy, dz, dydx0, dzdx0;
Double_t covR[7];
AliTRDcluster *c(NULL);
Double_t val[kNdim+2];
for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
if(!(fTracklet = fkTrack->GetTracklet(ily))) continue;
x= x0 = fTracklet->GetX();
Bool_t rc(fTracklet->IsRowCross()); Float_t eta, phi;
if(!fkMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, p0, eta, phi, s)) continue;
dx = x0 - x;
Float_t ymc = y0 - dx*dydx0;
Float_t zmc = z0 - dx*dzdx0;
val[kBC] = ily;
val[kPhi] = phi;
val[kEta] = eta;
val[kSpeciesChgRC]= rc?0.:sign*sIdx;
val[kPt] = GetPtBin(pt0);
val[kNdim]= GetPtBin(p0);
Double_t tilt(fTracklet->GetTilt());
AliExternalTrackParam *tin(fkTrack->GetTrackIn());
if(ily==0 && tin){
if(TMath::Abs(tin->GetX()-x)>1.e-3) AliDebug(1, Form("TrackIn radial mismatch. dx[cm]=%+4.1f", tin->GetX()-x));
else{
Int_t exactPID = -2;
switch(TMath::Abs(pdg)){
case 11: exactPID = -1;break;
case 211: exactPID = 0;break;
case 2212: exactPID = 1;break;
}
val[kBC] = exactPID;
val[kYrez] = tin->GetY()-ymc;
val[kZrez] = rc?(tin->GetZ()-zmc):(fTracklet->GetdQdl()*5e-4 - 2.5);
val[kPrez] = (TMath::ASin(tin->GetSnp())-TMath::ATan(dydx0))*TMath::RadToDeg();
val[kNdim+1] = 0.;
if((H = (THnSparseI*)fContainer->At(kMCtrackIn))) H->Fill(val);
val[kBC] = ily;
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";
}
}
}
dydx = fTracklet->GetYref(1);
dzdx = fTracklet->GetZref(1);
y = fTracklet->GetYref(0);
dy = y - ymc;
z = fTracklet->GetZref(0);
dz = z - zmc;
pt = TMath::Abs(fTracklet->GetPt());
fTracklet->GetCovRef(covR);
val[kYrez] = dy;
val[kPrez] = TMath::ATan((dydx - dydx0)/(1.+ dydx*dydx0))*TMath::RadToDeg();
val[kZrez] = dz;
val[kNdim] = 1.e2*(pt/pt0-1.);
if((H = (THnSparse*)fContainer->At(kMCtrack))) H->Fill(val);
if(DebugLevel()>=4){
Int_t det(fTracklet->GetDetector());
(*DebugStream()) << "MC"
<< "det=" << det
<< "pdg=" << pdg
<< "sgn=" << sign
<< "pt=" << pt0
<< "x=" << x0
<< "y=" << y0
<< "z=" << z0
<< "dydx=" << dydx0
<< "dzdx=" << dzdx0
<< "\n";
(*DebugStream()) << "MCtrack"
<< "pt=" << pt
<< "x=" << x
<< "y=" << y
<< "z=" << z
<< "dydx=" << dydx
<< "dzdx=" << dzdx
<< "s2y=" << covR[0]
<< "s2z=" << covR[2]
<< "\n";
}
dydx = fTracklet->GetYfit(1) + tilt*dzdx0;
dzdx = fTracklet->GetZfit(1);
y = fTracklet->GetYfit(0);
dy = y - ymc;
z = fTracklet->GetZfit(0);
dz = z - zmc;
val[kYrez] = dy - dz*tilt;
val[kPrez] = TMath::ATan((dydx - dydx0)/(1.+ dydx*dydx0))*TMath::RadToDeg();
val[kZrez] = rc?(dz + dy*tilt):(fTracklet->GetdQdl()*3.e-4 - 1.5);
val[kNdim] = fEvent?fEvent->GetMultiplicity():0;
val[kNdim+1] = 1.e2*fTracklet->GetTBoccupancy()/AliTRDseedV1::kNtb;
if((H = (THnSparse*)fContainer->At(kMCtracklet))) H->Fill(val);
if(DebugLevel()>=4){
Float_t s2y = fTracklet->GetS2Y();
Float_t s2z = fTracklet->GetS2Z();
(*DebugStream()) << "MCtracklet"
<< "rc=" << rc
<< "x=" << x
<< "y=" << y
<< "z=" << z
<< "dydx=" << dydx
<< "s2y=" << s2y
<< "s2z=" << s2z
<< "\n";
}
AliTRDpadPlane *pp = geo->GetPadPlane(ily, AliTRDgeometry::GetStack(fTracklet->GetDetector()));
Float_t zr0 = pp->GetRow0() + pp->GetAnodeWireOffset();
H = (THnSparse*)fContainer->At(kMCcluster);
val[kPt] = TMath::ATan(dydx0)*TMath::RadToDeg();
Int_t row0(-1);
Float_t padCorr(tilt*fTracklet->GetPadLength()),
corr(1./TMath::Sqrt(1.+dydx0*dydx0+dzdx0*dzdx0));
fTracklet->ResetClusterIter(kTRUE);
while((c = fTracklet->NextCluster())){
if(row0<0) row0 = c->GetPadRow();
x = c->GetX();
y = c->GetY() + padCorr*(c->GetPadRow() - row0);
z = c->GetZ();
dx = x0 - x;
ymc= y0 - dx*dydx0;
zmc= z0 - dx*dzdx0;
dy = y - ymc;
dz = z - zmc;
val[kYrez] = dy - dz*tilt;
val[kPrez] = dx;
val[kZrez] = 0.; AliTRDcluster *cc(NULL); Int_t ic(0), tb(c->GetLocalTimeBin()); Float_t q(TMath::Abs(c->GetQ()));
if((cc = fTracklet->GetClusters(tb-1))) {val[kZrez] += TMath::Abs(cc->GetQ()); ic++;}
if((cc = fTracklet->GetClusters(tb-2))) {val[kZrez] += TMath::Abs(cc->GetQ()); ic++;}
if(ic) val[kZrez] /= (ic*q);
val[kSpeciesChgRC]= rc?0.:(TMath::Max(q*corr, Float_t(3.)));
val[kNdim+1] = c->IsFivePad()?1:c->GetNPads();
if(H) H->Fill(val);
Float_t d = zr0 - zmc;
d -= ((Int_t)(2 * d)) / 2.0;
if (d > 0.25) d = 0.5 - d;
AliTRDclusterInfo *clInfo = new AliTRDclusterInfo;
clInfo->SetCluster(c);
clInfo->SetMC(pdg, label);
clInfo->SetGlobalPosition(ymc, zmc, dydx0, dzdx0);
clInfo->SetResolution(dy);
clInfo->SetAnisochronity(d);
clInfo->SetDriftLength(dx);
clInfo->SetTilt(tilt);
if(fMCcl) fMCcl->Add(clInfo);
else AliDebug(1, "MCcl exchange container missing. Activate by calling \"InitExchangeContainers()\"");
if(DebugLevel()>=5){
if(!clInfoArr){
clInfoArr=new TObjArray(AliTRDseedV1::kNclusters);
clInfoArr->SetOwner(kFALSE);
}
clInfoArr->Add(clInfo);
}
}
if(DebugLevel()>=5 && clInfoArr){
(*DebugStream()) << "MCcluster"
<<"clInfo.=" << clInfoArr
<< "\n";
clInfoArr->Clear();
}
}
if(clInfoArr) delete clInfoArr;
if(!track) return NULL;
if(H && (h = (TH1*)gDirectory->Get(Form("%s_proj_%d", H->GetName(), kYrez)))) delete h;
return H?H->Projection(kYrez):NULL;
}
void AliTRDresolution::GetRangeZ(TH2 *h2, Float_t &min, Float_t &max)
{
Double_t cnt[20000], c, m, s;
Int_t nx(h2->GetXaxis()->GetNbins()), ny(h2->GetYaxis()->GetNbins()), nc(0);
for(Int_t ix(1); ix<=nx; ix++){
for(Int_t iy(1); iy<=ny; iy++){
if((c = h2->GetBinContent(ix, iy))<10) continue;
cnt[nc++] = c;
if(nc==20000) break;
}
if(nc==20000) break;
}
AliMathBase::EvaluateUni(nc, cnt, m, s, 0);
min = m-s; max = m+2.*s;
}
Bool_t AliTRDresolution::GetRefFigure(Int_t ifig)
{
if(!gPad){
AliWarning("Please provide a canvas to draw results.");
return kFALSE;
}
switch(ifig){
case 0:
break;
}
AliWarning(Form("Reference plot [%d] missing result", ifig));
return kFALSE;
}
void AliTRDresolution::MakeSummary()
{
if(!fProj){
AliError("Missing results");
return;
}
TVirtualPad *p(NULL); TCanvas *cOut(NULL);
TObjArray *arr(NULL); TH2 *h2(NULL);
TH2 *h2e[100] = {NULL}; Int_t ih2e(0);
gStyle->SetPalette(1);
const Int_t nClViews(9);
const Char_t *vClName[nClViews] = {"ClY", "ClYn", "ClYp", "ClQn", "ClQp", "ClYXTCp", "ClYXTCn", "ClYXPh", "ClYXPh"};
const UChar_t vClOpt[nClViews] = {1, 1, 1, 0, 0, 0, 0, 0, 1};
const Float_t vClSignMin[2] = {2.6e2, 4.4e2},
vClSignMax[2] = {4.4e2, 6.2e2},
vClMin[nClViews] = {3.2e2, vClSignMin[Int_t(fBsign)], vClSignMin[Int_t(!fBsign)], 0., 0., 0., 0., 0., 3.2e2},
vClMax[nClViews] = {5.e2, vClSignMax[Int_t(fBsign)], vClSignMax[Int_t(!fBsign)], 0., 0., 0., 0., 0., 5.e2};
const Int_t nTrkltViews(20);
const Char_t *vTrkltName[nTrkltViews] = {
"TrkltY", "TrkltYn", "TrkltYp", "TrkltY", "TrkltYn", "TrkltYp",
"TrkltRCZ",
"TrkltPh", "TrkltPhn", "TrkltPhp",
"TrkltQ", "TrkltQn", "TrkltQp",
"TrkltQS", "TrkltQSn", "TrkltQSp",
"TrkltTBn", "TrkltTBp", "TrkltTBn", "TrkltTBp"
};
const UChar_t vTrkltOpt[nTrkltViews] = {
0, 0, 0, 1, 1, 1,
0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 2, 2
};
const Int_t nTrkInViews(5);
const Char_t *vTrkInName[nTrkInViews][6] = {
{"TrkInY", "TrkInYn", "TrkInYp", "TrkInRCZ", "TrkInPhn", "TrkInPhp"},
{"TrkInY", "TrkInYn", "TrkInYp", "TrkInRCZ", "TrkInPhn", "TrkInPhp"},
{"TrkInYnl", "TrkInYni", "TrkInYnh", "TrkInYpl", "TrkInYpi", "TrkInYph"},
{"TrkInXnl", "TrkInXpl", "TrkInXl", "TrkInYnh", "TrkInYph", "TrkInYh"},
{"TrkInPhnl", "TrkInPhni", "TrkInPhnh", "TrkInPhpl", "TrkInPhpi", "TrkInPhph"},
};
const UChar_t vTrkInOpt[nTrkInViews] = {0, 1, 0, 0, 0};
const Float_t min[6] = {0.15, 0.15, 0.15, 0.15, 0.5, 0.5};
const Float_t max[6] = {0.6, 0.6, 0.6, 0.6, 2.3, 2.3};
const Char_t *ttt[6] = {"#sigma(#Deltay) [cm]", "#sigma(#Deltay) [cm]", "#sigma(#Deltay) [cm]", "#sigma(#Deltaz) [cm]", "#sigma(#Delta#phi) [deg]", "#sigma(#Delta#phi) [deg]"};
const Int_t nTrkViews(27);
const Char_t *vTrkName[nTrkViews] = {
"TrkY", "TrkYn", "TrkYp",
"TrkPh", "TrkPhn", "TrkPhp",
"TrkDPt", "TrkDPtn", "TrkDPtp",
"TrkYnl0", "TrkYpl0", "TrkPhnl0", "TrkPhpl0", "TrkDPtnl0", "TrkDPtpl0",
"TrkYnl1", "TrkYpl1", "TrkPhnl1", "TrkPhpl1", "TrkDPtnl1", "TrkDPtpl1",
"TrkYnl2", "TrkYpl2", "TrkPhnl2", "TrkPhpl2", "TrkDPtnl2", "TrkDPtpl2"
};
const Char_t *typName[] = {"", "MC"};
const Int_t nx(2048), ny(1536);
if((arr = (TObjArray*)fProj->FindObject("hDet2Cluster"))){
cOut = new TCanvas(Form("%s_DetOccupancy", GetName()), "Detector performance", 2*nx, 2*ny);
cOut->Divide(AliTRDgeometry::kNlayer,AliTRDeventInfo::kCentralityClasses, 1.e-5, 1.e-5);
Int_t n=0;
for(Int_t icen(0); icen<AliTRDeventInfo::kCentralityClasses; icen++){
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
p=cOut->cd(icen*AliTRDgeometry::kNlayer+ily+1); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("HDet%d%dEn", ily, icen)))) continue;
if(SetNormZ(h2, 1, -1, 1, -1, 10.) < 1.e3) continue;
SetRangeZ(h2, -90., 90, -200.);
h2->GetZaxis()->SetTitle("Rel. Det. Occup. [%]");
h2->GetZaxis()->CenterTitle();
h2->SetContour(9); h2->Draw("colz"); n++;
MakeDetectorPlot(ily, "p");
}
}
if(n>=AliTRDgeometry::kNlayer) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
cOut = new TCanvas(Form("%s_DetCharge", GetName()), "Detector performance", nx, ny);
cOut->Divide(3,2, 1.e-5, 1.e-5);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
p=cOut->cd(ily+1); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("HDet%d_2D", UseLYselectTrklt()?fLYselect:ily)))) continue;
SetNormZ(h2, 1, -1, 1, -1, 10.);
SetRangeZ(h2, -30., 30., -200.);
h2->GetZaxis()->SetTitle("Rel. Mean(q) [%]");
h2->GetZaxis()->CenterTitle();
h2->Draw("colz");
MakeDetectorPlot(ily, "p");
}
cOut->SaveAs(Form("%s.gif", cOut->GetName()));
}
for(Int_t ityp(0); ityp<(HasMCdata()?2:1); ityp++){
if((arr = (TObjArray*)fProj->FindObject(ityp?"hCluster2MC":"hCluster2Track"))){
for(Int_t iview(0); iview<nClViews; iview++){
cOut = new TCanvas(Form("%s_%s%s_%d", GetName(), typName[ityp], vClName[iview], vClOpt[iview]), "Cluster Resolution", nx, ny);
cOut->Divide(3,2, 1.e-5, 1.e-5);
Int_t nplot(0);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
p=cOut->cd(ily+1); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%s%s%d_2D", typName[ityp], vClName[iview], UseLYselectTrklt()?fLYselect:ily)))) continue;
nplot++;
if(vClOpt[iview]==0) h2->Draw("colz");
else if(vClOpt[iview]==1) h2e[ih2e++] = DrawSigma(h2, "#sigma(#Deltay) [#mum]", vClMin[iview], vClMax[iview], 1.e4);
if(iview<5) MakeDetectorPlot(ily);
}
if(nplot==AliTRDgeometry::kNlayer) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
else delete cOut;
}
}
if((arr = (TObjArray*)fProj->FindObject(ityp?"hTracklet2MC":"hTracklet2Track"))){
for(Int_t iview(0); iview<nTrkltViews; iview++){
cOut = new TCanvas(Form("%s_%s%s_%d", GetName(), typName[ityp], vTrkltName[iview], vTrkltOpt[iview]), "Tracklet Resolution", nx, ny);
cOut->Divide(3,2, 1.e-5, 1.e-5);
Int_t nplot(0);
for(Int_t iplot(0); iplot<6; iplot++){
p=cOut->cd(iplot+1); p->SetRightMargin(0.1572581); p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%s%s%d_2D", typName[ityp], vTrkltName[iview], iplot)))) continue;
nplot++;
if(vTrkltOpt[iview]==0) h2->Draw("colz");
else if (vTrkltOpt[iview]==1) h2e[ih2e++] = DrawSigma(h2, "#sigma(#Deltay) [cm]", .15, .4);
else if (vTrkltOpt[iview]==2) h2e[ih2e++] = DrawSigma(h2, "#sigma(occupancy) [%]", 10.5, 15.);
MakeDetectorPlot(iplot);
}
if(nplot==6){
cOut->Modified();cOut->Update();
cOut->SaveAs(Form("%s.gif", cOut->GetName()));
}
delete cOut;
}
}
for(Int_t iv0(0); iv0<2; iv0++){
const Char_t *prefix = ityp?"MC":(iv0?"V0":"");
if(ityp && !iv0) arr = (TObjArray*)fProj->FindObject("hTRDin2MC");
else if(!ityp && !iv0) arr = (TObjArray*)fProj->FindObject("hTracklet2TRDin");
else if(!ityp && iv0) arr = (TObjArray*)fProj->FindObject("hTracklet2TRDinV0");
else continue;
if(arr){
for(Int_t iview(0); iview<nTrkInViews; iview++){
cOut = new TCanvas(Form("%s_%s%s_%d", GetName(), prefix, vTrkInName[iview][0], vTrkInOpt[iview]), "Track IN Resolution", nx, ny);
cOut->Divide(3,2, 1.e-5, 1.e-5);
Int_t nplot(0);
for(Int_t iplot(0); iplot<6; iplot++){
p=cOut->cd(iplot+1); p->SetRightMargin(0.1572581); p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%s%s_2D", prefix, vTrkInName[iview][iplot])))){
AliInfo(Form("Missing H%s%s_2D", prefix, vTrkInName[iview][iplot]));
continue;
}
nplot++;
if(vTrkInOpt[iview]==0) h2->Draw("colz");
else h2e[ih2e++] = DrawSigma(h2, ttt[iplot], min[iplot], max[iplot]);
MakeDetectorPlot(0);
}
if(nplot==6) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
else delete cOut;
}
const Float_t zmin[] = {1., 61., 15.},
zmax[] = {10., 79., 33.};
cOut = new TCanvas(Form("%s_%sTrkInSpc", GetName(), prefix), "Track IN PID", Int_t(1.5*ny), Int_t(1.5*ny));
cOut->Divide(3,3, 1.e-5, 1.e-5);
Int_t nplot(0); const Char_t *chName[] = {"p", "n", ""};
for(Int_t ich(0), ipad(1); ich<3; ich++){
TH2 *h2s(NULL);
if(!(h2s = (TH2*)arr->FindObject(Form("H%sTrkInY%sEn", prefix, chName[ich])))) {
AliInfo(Form("Missing H%sTrkIn%sEn", prefix, chName[ich]));
continue;
}
Int_t irebin(0), dxBin(1), dyBin(1);
const Int_t nrebin(5); Int_t rebinX[nrebin] = {1, 2, 1, 2, 1}, rebinY[nrebin] = {2, 1, 2, 1, 2};
if(h2s->GetNbinsY()==180){
rebinX[0] = 1; rebinY[0] = 2;
rebinX[1] = 2; rebinY[1] = 1;
rebinX[2] = 2; rebinY[2] = 1;
rebinX[3] = 1; rebinY[3] = 5;
rebinX[4] = 1; rebinY[4] = 1;
}
while(irebin<nrebin && (AliTRDrecoTask::GetMeanStat(h2s, .5, 1)<200)){
h2s->Rebin2D(rebinX[irebin], rebinY[irebin]);
dxBin*=rebinX[irebin];dyBin*=rebinY[irebin];irebin++;
}
AliDebug(2, Form("Rebin level[%d] @ chg[%d]. Binning[%2dx%2d]", irebin, ich, h2s->GetNbinsX(), h2s->GetNbinsY()));
for(Int_t ispec(0); ispec<kNspc; ispec++){
p=cOut->cd(ipad++); p->SetRightMargin(0.1572581); p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%sTrkInY%s%dEn", prefix, chName[ich], ispec)))) {
AliInfo(Form("Missing H%sTrkIn%s%dEn", prefix, chName[ich], ispec));
continue;
}
nplot++;
h2->Rebin2D(dxBin,dyBin);
h2->Divide(h2, h2s, 1.e2);
h2->SetContour(9);
h2->GetZaxis()->SetRangeUser(zmin[ispec], zmax[ispec]);
h2->GetZaxis()->SetTitle("Rel. Abundancy [%]");h2->GetZaxis()->CenterTitle();
TString tit(h2->GetTitle()); TObjArray *atit = tit.Tokenize("::");
h2->SetTitle(Form("%s :: Relative Abundancy", ((*atit)[0])->GetName()));
atit->Delete(); delete atit;
h2->Draw("colz");
MakeDetectorPlot(0);
}
}
if(nplot==9) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
else delete cOut;
cOut = new TCanvas(Form("%s_%sTrkInPt", GetName(), prefix), "TrackIn Pt", Int_t(1.5*ny), Int_t(1.5*ny));
cOut->Divide(3,2, 1.e-5, 1.e-5);
for(Int_t ich(0), ipad(1); ich<2; ich++){
for(Int_t ispc(0); ispc<kNspc; ispc++){
p=cOut->cd(ipad++); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%sTrkInPt%s%d_2D", prefix, chName[ich], ispc)))) continue;
h2->GetZaxis()->SetRangeUser(0.5, 1.2); h2->SetContour(7); h2->Draw("colz");
MakeDetectorPlot(0);
}
}
cOut->SaveAs(Form("%s.gif", cOut->GetName()));
const char *chQ[] = {"Q", "QS"};
for(Int_t iq(0); iq<2; iq++){
cOut = new TCanvas(Form("%s_%sTrkIn%s", GetName(), prefix, chQ[iq]), "Track IN PID", Int_t(1.5*ny), Int_t(1.5*ny));
cOut->Divide(3,3, 1.e-5, 1.e-5);
nplot=0;
for(Int_t ich(0), ipad(1); ich<3; ich++){
for(Int_t ispec(0); ispec<kNspc; ispec++){
p=cOut->cd(ipad++); p->SetRightMargin(0.1572581); p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("H%sTrkIn%s%s%d_2D", prefix, chQ[iq], chName[ich], ispec)))) {
AliInfo(Form("Missing H%sTrkIn%s%s%d_2D", prefix, chQ[iq], chName[ich], ispec));
continue;
}
nplot++;
h2->Draw("colz");
MakeDetectorPlot(0);
}
}
if(nplot==9) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
else delete cOut;
}
}
}
}
if((arr = (TObjArray*)fProj->FindObject("hTRD2MC"))) {
for(Int_t iview(0); iview<nTrkViews; iview++){
cOut = new TCanvas(Form("%s_MC%s", GetName(), vTrkName[iview]), "Track Resolution", nx, ny);
cOut->Divide(3,2, 1.e-5, 1.e-5);
Int_t nplot(0);
for(Int_t iplot(0); iplot<6; iplot++){
p=cOut->cd(iplot+1); p->SetRightMargin(0.1572581); p->SetTopMargin(0.08262712);
if(!(h2 = (TH2*)arr->FindObject(Form("HMC%s%d_2D", vTrkName[iview], iplot)))) continue;
h2->Draw("colz"); nplot++;
}
if(nplot==6) cOut->SaveAs(Form("%s.gif", cOut->GetName()));
else delete cOut;
}
}
gStyle->SetPalette(1);
for(Int_t ih(ih2e); ih--;) delete h2e[ih];
}
TH2* AliTRDresolution::DrawSigma(TH2 *h2, const Char_t *title, Float_t m, Float_t M, Float_t scale)
{
if(!h2) return NULL;
TAxis *ax(h2->GetXaxis()), *ay(h2->GetYaxis());
TH2F *h2e = new TH2F(Form("%s_E", h2->GetName()),
Form("%s;%s;%s;%s", h2->GetTitle(), ax->GetTitle(), ay->GetTitle(), title),
ax->GetNbins(), ax->GetXmin(), ax->GetXmax(),
ay->GetNbins(), ay->GetXmin(), ay->GetXmax());
h2e->SetContour(9);
TAxis *az(h2e->GetZaxis());
if(M>m) az->SetRangeUser(m, M);
az->CenterTitle();
az->SetTitleOffset(1.5);
for(Int_t ix(1); ix<=h2->GetNbinsX(); ix++){
for(Int_t iy(1); iy<=h2->GetNbinsY(); iy++){
if(h2->GetBinContent(ix, iy)<-100.) continue;
Float_t v(scale*h2->GetBinError(ix, iy));
if(M>m && v<m) v=m+TMath::Abs((M-m)*1.e-3);
h2e->SetBinContent(ix, iy, v);
}
}
h2e->Draw("colz");
return h2e;
}
void AliTRDresolution::GetRange(TH2 *h2, Char_t mod, Float_t *range)
{
Int_t nx(h2->GetNbinsX())
, ny(h2->GetNbinsY())
, n(nx*ny);
Double_t *data=new Double_t[n];
for(Int_t ix(1), in(0); ix<=nx; ix++){
for(Int_t iy(1); iy<=ny; iy++)
data[in++] = h2->GetBinContent(ix, iy);
}
Double_t mean, sigm;
AliMathBase::EvaluateUni(n, data, mean, sigm, Int_t(n*.8));
range[0]=mean-3.*sigm; range[1]=mean+3.*sigm;
if(mod==1) range[0]=TMath::Max(Float_t(1.e-3), range[0]);
AliDebug(2, Form("h[%s] range0[%f %f]", h2->GetName(), range[0], range[1]));
TH1S h1("h1SF0", "", 100, range[0], range[1]);
h1.FillN(n,data,0);
delete [] data;
switch(mod){
case 0:
{
TF1 fg("fg", "gaus", mean-3.*sigm, mean+3.*sigm);
h1.Fit(&fg, "QN");
mean=fg.GetParameter(1); sigm=fg.GetParameter(2);
range[0] = mean-2.5*sigm;range[1] = mean+2.5*sigm;
AliDebug(2, Form(" rangeG[%f %f]", range[0], range[1]));
break;
}
case 1:
{
Int_t bmax(h1.GetMaximumBin());
Int_t jBinMin(1), jBinMax(100);
for(Int_t ibin(bmax); ibin--;){
if(h1.GetBinContent(ibin)<1.){
jBinMin=ibin; break;
}
}
for(Int_t ibin(bmax); ibin++;){
if(h1.GetBinContent(ibin)<1.){
jBinMax=ibin; break;
}
}
range[0]=h1.GetBinCenter(jBinMin); range[1]=h1.GetBinCenter(jBinMax);
AliDebug(2, Form(" rangeT[%f %f]", range[0], range[1]));
break;
}
}
return;
}
Bool_t AliTRDresolution::MakeProjectionDetector()
{
const Int_t kNcontours(9);
const Int_t kNstat(100);
if(fProj && fProj->At(kDetector)) return kTRUE;
if(!fContainer){
AliError("Missing data container.");
return kFALSE;
}
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject("hDet2Cluster"))){
AliInfo("Missing/Wrong data @ hDet2Cluster.");
return kTRUE;
}
Int_t ndim(H->GetNdimensions());
Int_t coord[kNdim]; memset(coord, 0, sizeof(Int_t) * kNdim); Double_t v = 0.;
TAxis *aa[kNdim], *an(NULL); memset(aa, 0, sizeof(TAxis*) * kNdim);
for(Int_t id(0); id<ndim; id++) aa[id] = H->GetAxis(id);
if(ndim < 5) aa[4] = new TAxis(1, -0.5, 0.5);
Int_t nPad(1);
if(ndim > 5){
an = H->GetAxis(5);
nPad = kNpads+1;
}
const Int_t nsel(8*AliTRDgeometry::kNlayer*AliTRDeventInfo::kCentralityClasses);
const Int_t nEtaPhi(5); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 1, 2, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 2, 1, 2};
if(aa[1]->GetNbins()==180){
rebinEtaPhiX[0] = 1; rebinEtaPhiY[0] = 2;
rebinEtaPhiX[1] = 2; rebinEtaPhiY[1] = 1;
rebinEtaPhiX[2] = 2; rebinEtaPhiY[2] = 1;
rebinEtaPhiX[3] = 1; rebinEtaPhiY[3] = 5;
rebinEtaPhiX[4] = 1; rebinEtaPhiY[4] = 1;
}
const Char_t *cenName[AliTRDeventInfo::kCentralityClasses] = {"2800-inf", "2100-2799", "1400-2099", "700-1399", "0-699"};
AliTRDrecoProjection hp[kDetNproj]; TObjArray php(kDetNproj);
Int_t ih(0), isel(-1), np[nsel]={0};
for(Int_t ipad(0); ipad<nPad; ipad++){
for(Int_t icen(0); icen<AliTRDeventInfo::kCentralityClasses; icen++){
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
isel++;
hp[ih].Build(Form("HDet%d%d%d", ily, icen, ipad),
Form("Detectors :: Ly[%d] Cen[%s] Pads[%s]", ily, cenName[icen], ipad?(ipad<kNpads?Form("%d", ipad+1):Form(">%d", kNpads)):"deconv"),
kEta, kPhi, 4, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
hp[ih].SetShowRange(10., 55.);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
}
AliInfo(Form("Build %3d 3D projections.", ih));
Int_t ly(0), cen(0), npad(0);
for (Long64_t ib(0); ib < H->GetNbins(); ib++) {
v = H->GetBinContent(ib, coord); if(v<1.) continue;
ly = coord[kBC]-1;
cen = coord[kYrez]-1;
npad = 0;
if(an) npad = TMath::Min(coord[5]-1, Int_t(kNpads));
isel = npad*AliTRDeventInfo::kCentralityClasses*AliTRDgeometry::kNlayer+cen*AliTRDgeometry::kNlayer+ly;
((AliTRDrecoProjection*)php.At(isel))->Increment(coord, v);
}
TObjArray *arr(NULL);
fProj->AddAt(arr = new TObjArray(kDetNproj), kDetector);
arr->SetName("hDet2Cluster"); arr->SetOwner();
TH2 *h2(NULL); Int_t jh(0);
for(; ih--; ){
if(!hp[ih].H()) continue;
if((h2 = hp[ih].Projection2D(kNstat, kNcontours, 0, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", hp[ih].H()->GetName())))) arr->AddAt(h2, jh++);
}
AliTRDrecoProjection *pr0(NULL), *pr1(NULL);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t icen(0); icen<AliTRDeventInfo::kCentralityClasses; icen++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HDet%d%d%d", ily, icen, 0)))){
for(Int_t ipad(1); ipad<nPad; ipad++){
if((pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HDet%d%d%d", ily, icen, ipad)))){
(*pr0)+=(*pr1);
}
}
pr0->H()->SetNameTitle(Form("HDet%d%d", ily, icen), Form("Detectors :: Ly[%d] Cen[%s]", ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HDet%d%d%d", ily, 0, 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HDet%d%d%d", ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("HDet%d", UseLYselectTrklt()?fLYselect:ily), Form("Detectors :: Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours))) arr->AddAt(h2, jh++);
}
}
AliInfo(Form("Done %3d 2D projections.", jh));
return kTRUE;
}
Bool_t AliTRDresolution::MakeProjectionCluster(Bool_t mc)
{
const Int_t kNcontours(9);
const Int_t kNstat(100);
Int_t cidx=mc?kMCcluster:kCluster;
if(fProj && fProj->At(cidx)) return kTRUE;
if(!fContainer){
AliError("Missing data container.");
return kFALSE;
}
const Char_t *projName[] = {"hCluster2Track", "hCluster2MC"};
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject(projName[Int_t(mc)]))){
AliError(Form("Missing/Wrong data @ %s.", projName[Int_t(mc)]));
return kTRUE;
}
Int_t ndim(H->GetNdimensions()); Bool_t debug(ndim>Int_t(kNdimCl));
Int_t coord[10]; memset(coord, 0, sizeof(Int_t) * 10); Double_t v = 0.;
TAxis *aa[kNdim], *as(NULL), *apt(NULL), *acen(NULL), *anp(NULL); memset(aa, 0, sizeof(TAxis*) * kNdim);
for(Int_t id(0); id<ndim; id++) aa[id] = H->GetAxis(id);
if(ndim > Int_t(kPt)) apt = H->GetAxis(kPt);
if(ndim > Int_t(kSpeciesChgRC)) as = H->GetAxis(kSpeciesChgRC);
if(ndim > Int_t(kNdim)) acen = H->GetAxis(kNdim);
if(ndim > Int_t(kNdim)+1) anp = H->GetAxis(kNdim+1);
const Int_t nCh(apt?2:1);
const Int_t nCen(acen?Int_t(AliTRDeventInfo::kCentralityClasses):1);
const Int_t nNpad(anp?(Int_t(kNpads)+1):1);
const Int_t nsel(AliTRDgeometry::kNlayer*kNcharge*(kNpads+1)*AliTRDeventInfo::kCentralityClasses);
const Int_t nEtaPhi(5); Int_t rebinEtaPhiX[nEtaPhi] = {1, 3, 1, 3, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 2, 1, 2};
if(aa[1]->GetNbins()==180){
rebinEtaPhiX[0] = 1; rebinEtaPhiY[0] = 2;
rebinEtaPhiX[1] = 2; rebinEtaPhiY[1] = 1;
rebinEtaPhiX[2] = 5; rebinEtaPhiY[2] = 1;
rebinEtaPhiX[3] = 1; rebinEtaPhiY[3] = 5;
rebinEtaPhiX[4] = 1; rebinEtaPhiY[4] = 1;
}
AliTRDrecoProjection hp[kClNproj]; TObjArray php(kClNproj);
const Char_t chName[kNcharge] = {'n', 'p'};const Char_t chSgn[kNcharge] = {'-', '+'};
const Char_t *cenName[AliTRDeventInfo::kCentralityClasses] = {"2800-inf", "2100-2799", "1400-2099", "700-1399", "0-699"};
Int_t ih(0), isel(-1), np[nsel]; memset(np, 0, nsel*sizeof(Int_t));
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++){
for(Int_t ipad(0); ipad<nNpad; ipad++){
isel++;
hp[ih].Build(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad),
Form("Clusters[%c] :: #Deltay Ly[%d] Cen[%s] Pads[%s]", chSgn[ich], ily, cenName[icen], ipad?(ipad<kNpads?Form("%d", ipad+1):Form(">%d", kNpads)):"deconv"),
kEta, kPhi, kYrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
if(!debug) break;
hp[ih].Build(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad),
Form("Clusters[%c] :: Q Ly[%d] Cen[%s] Pads[%s]", chSgn[ich], ily, cenName[icen], ipad?(ipad<kNpads?Form("%d", ipad+1):Form(">%d", kNpads)):"deconv"),
kEta, kPhi, kSpeciesChgRC, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
hp[ih].SetShowRange(24., 33.);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad),
Form("Clusters[%c] :: #Deltay(x,TC) Ly[%d] Cen[%s] Pads[%s]", chSgn[ich], ily, cenName[icen], ipad?(ipad<kNpads?Form("%d", ipad+1):Form(">%d", kNpads)):"deconv"),
kPrez, kZrez, kYrez, aa);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad),
Form("Clusters[%c] :: #Deltay(x,#Phi) Ly[%d] Cen[%s] Pads[%s]", chSgn[ich], ily, cenName[icen], ipad?(ipad<kNpads?Form("%d", ipad+1):Form(">%d", kNpads)):"deconv"),
kPrez, kPt, kYrez, aa);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
}
}
AliInfo(Form("Build %3d 3D %s projections.", ih, mc?"MC":""));
AliTRDrecoProjection *pr0(NULL), *pr1(NULL);
Int_t ly(0), ch(0), rcBin(as?as->FindBin(0.):-1), chBin(apt?apt->FindBin(0.):-1), ioff(0), cen(0), npad(0);
for (Long64_t ib(0); ib < H->GetNbins(); ib++) {
v = H->GetBinContent(ib, coord); if(v<1.) continue;
ly = coord[kBC]-1;
if(rcBin>0 && coord[kSpeciesChgRC] == rcBin) continue;
ch = 0;
if(chBin>0 && coord[kPt] > chBin) ch = 1;
cen = 0;
if(acen) cen = coord[kNdim]-1;
npad = 0;
if(anp) npad = TMath::Min(coord[kNdim+1]-1, Int_t(kNpads));
if(debug){
isel = ly*nCh*nCen*nNpad
+ch*nCen*nNpad
+cen*nNpad
+npad;
ioff=isel*4;
} else {
if(mc && ly<0) ly=0;
isel = ly; ioff = isel;
}
if(ioff>=ih){
AliError(Form("Wrong selection %d [%3d]", ioff, ih));
return kFALSE;
}
if(!(pr0=(AliTRDrecoProjection*)php.At(ioff))) {
AliError(Form("Missing projection %d", ioff));
return kFALSE;
}
if(strcmp(pr0->H()->GetName(), Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ch], ly, cen, npad))!=0){
AliError(Form("Projection mismatch :: request[H%sClY%c%d%d%d] found[%s]", mc?"MC":"", chName[ch], ly, cen, npad, pr0->H()->GetName()));
return kFALSE;
}
for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
}
if(HasDump3DFor(kCluster)){
TDirectory *cwd = gDirectory;
TFile::Open(Form("DumpRes_%s.root", H->GetName()), "RECREATE");
for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
if(!pr0->H()) continue;
TH3 *h3=(TH3*)pr0->H()->Clone();
h3->Write();
}
gFile->Close();
cwd->cd();
}
TObjArray *arr(NULL);
fProj->AddAt(arr = new TObjArray(kClNproj), cidx);
arr->SetName(projName[Int_t(mc)]); arr->SetOwner();
TH2 *h2(NULL); Int_t jh(0);
for(; ih--; ){
if(!hp[ih].H()) continue;
if(strchr(hp[ih].H()->GetName(), 'Q')){
if((h2 = hp[ih].Projection2D(kNstat, kNcontours, 0, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", hp[ih].H()->GetName())))) arr->AddAt(h2, jh++);
} else {
if((h2 = hp[ih].Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
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[ich], ily, icen, 0)))){
for(Int_t ipad(1); ipad<nNpad; ipad++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sClY%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
for(Int_t ipad(1); ipad<nNpad; ipad++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sClQ%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: Q Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 2, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
pr0->H()->SetName(Form("H%sClQS%c%d%d", mc?"MC":"", chName[ich], ily, icen));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
for(Int_t ipad(1); ipad<nNpad; ipad++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sClYXTC%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay(x,TC) Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, 0)))){
for(Int_t ipad(1); ipad<nNpad; ipad++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, icen, ipad)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sClYXPh%c%d%d", mc?"MC":"", chName[ich], ily, icen), Form("Clusters[%c] :: #Deltay(x,#Phi) Ly[%d] Cen[%s]", chSgn[ich], ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClY%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Clusters[%c]:: #Deltay Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClQ%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Clusters[%c]:: Q Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 2))) arr->AddAt(h2, jh++);
pr0->H()->SetName(Form("H%sClQS%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClQ%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClYXTC%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Clusters[%c]:: #Deltay(x,TC) Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXTC%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[ich], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClYXPh%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Clusters[%c]:: #Deltay(x,#Phi) Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))) (*pr1)+=(*pr0);
}
}
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,&se))>-100.) PutTrendValue(Form("%sClS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s, se);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClYXPh%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++);
}
}
AliInfo(Form("Done %3d 2D %s projections.", jh, mc?"MC":""));
return kTRUE;
}
Bool_t AliTRDresolution::MakeProjectionTracklet(Bool_t mc)
{
const Int_t kNcontours(9);
const Int_t kNstat(30);
const Int_t kNstatQ(30);
Int_t cidx=mc?kMCtracklet:kTracklet;
if(!fProj){
AliError("Missing results container.");
return kFALSE;
}
if(!fContainer){
AliError("Missing data container.");
return kFALSE;
}
const Char_t *projName[] = {"hTracklet2Track", "hTracklet2MC"};
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject(projName[Int_t(mc)]))){
AliError(Form("Missing/Wrong data @ %s.", projName[Int_t(mc)]));
return kTRUE;
}
const Int_t mdim(kNdim+8);
Int_t ndim(H->GetNdimensions());
Int_t coord[mdim]; memset(coord, 0, sizeof(Int_t) * mdim); Double_t v = 0.;
TAxis *aa[mdim], *as(NULL), *ap(NULL), *ac(NULL); memset(aa, 0, sizeof(TAxis*) * mdim);
for(Int_t id(0); id<ndim; id++) aa[id] = H->GetAxis(id);
if(ndim > Int_t(kSpeciesChgRC)) as = H->GetAxis(kSpeciesChgRC);
if(ndim > Int_t(kPt)) ap = H->GetAxis(kPt);
const Int_t nCen(ac?Int_t(AliTRDeventInfo::kCentralityClasses):1);
const Int_t nPt(ap?Int_t(fNpt+2):1);
const Int_t nSpc(as?Int_t(kNspc):1);
const Int_t nCh(as?Int_t(kNcharge):1);
const Int_t nLy(UseLYselectTrklt()?1:AliTRDgeometry::kNlayer);
const Int_t nsel(AliTRDeventInfo::kCentralityClasses*AliTRDgeometry::kNlayer*(fgNPt+2)*(AliPID::kSPECIES*kNcharge + 1));
const Int_t nEtaPhi(5); Int_t rebinEtaPhiX[nEtaPhi] = {1, 3, 1, 3, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 2, 1, 2};
if(aa[1]->GetNbins()==180){
rebinEtaPhiX[0] = 1; rebinEtaPhiY[0] = 2;
rebinEtaPhiX[1] = 2; rebinEtaPhiY[1] = 1;
rebinEtaPhiX[2] = 5; rebinEtaPhiY[2] = 1;
rebinEtaPhiX[3] = 1; rebinEtaPhiY[3] = 5;
rebinEtaPhiX[4] = 1; rebinEtaPhiY[4] = 1;
}
AliTRDrecoProjection hp[kTrkltNproj]; TObjArray php(kTrkltNproj);
Int_t ih(0), isel(-1), np[nsel]; memset(np, 0, nsel*sizeof(Int_t));
const Char_t chName[kNcharge] = {'n', 'p'};const Char_t chSgn[kNcharge] = {'-', '+'};
const Char_t ptShortName[5] = {'L', 'l', 'i', 'h', 'H'};
Char_t ptName[fgNPt+2] = {0};
Char_t *ptCut[fgNPt+2] = {NULL};
const Char_t *cenName[AliTRDeventInfo::kCentralityClasses] = {"2800-inf", "2100-2799", "1400-2099", "700-1399", "0-699"};
for(Int_t icen(0); icen<nCen; icen++){
for(Int_t ily(0); ily<nLy; ily++){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!ptName[ipt]){
ptName[ipt]= nPt>5?(64+ipt):ptShortName[ipt];
ptCut[ipt] = StrDup(Form("#it{%4.2f<=p_{t}^{%s}[GeV/c]<%4.2f}",ipt?fgPt[ipt-1]:0., mc?"MC":"", ipt>fgNPt?99.99:fgPt[ipt]));
}
for(Int_t isp(0); isp<nSpc; isp++){
for(Int_t ich(0); ich<nCh; ich++){
isel++;
AliDebug(3, Form("Building sel[%3d|%4d]", isel, ih));
hp[ih].Build(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%s%c]:: #Deltay{%s} Ly[%d] Cen[%s]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]),
kEta, kPhi, kYrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%s%c]:: #Delta#phi{%s} Ly[%d] Cen[%s]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]),
kEta, kPhi, kPrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%s%c]:: dQdl{%s} Ly[%d] Cen[%s]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]),
kEta, kPhi, kZrez, aa);
hp[ih].SetShowRange(1.,2.3);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
if(ndim==kNdimTrklt) continue;
isel++;
AliDebug(3, Form("Building selRC[%3d|%4d]", isel, ih));
hp[ih].Build(Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[RC]:: #Deltaz{%s} Ly[%d] Cen[%s]", ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]),
kEta, kPhi, kZrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
}
AliInfo(Form("Build %3d 3D %s projections%s", ih, mc?"MC":"", UseLYselectTrklt()?Form(" for Ly[%d].", fLYselect):"."));
AliTRDrecoProjection *pr0(NULL), *pr1(NULL);
Int_t ly(0), ch(0), sp(2), rcBin(as?as->FindBin(0.):-1), pt(0), cen(0), ioff(0), jspc(nSpc*nCh+1), kspc(nSpc*nCh*3+1);
for (Long64_t ib(0); ib < H->GetNbins(); ib++) {
v = H->GetBinContent(ib, coord);
if(v<1.) continue;
ly = coord[kBC]-1;
if(UseLYselectTrklt()&& (ly!=fLYselect)) continue;
ch = 0; sp=0;
if(rcBin>0){
sp = Int_t(TMath::Abs(as->GetBinCenter(coord[kSpeciesChgRC])))-1;
if(coord[kSpeciesChgRC] > rcBin) ch = 1;
else if(coord[kSpeciesChgRC] == rcBin) ch = 2;
}
pt = 0;
if(ap) pt = coord[kPt];
cen = 0;
if(ac) cen = coord[kNdim]-1;
if(ndim==kNdimTrklt){
if(mc && ly<0) ly=0;
ioff = ly*3;
isel = ly;
} else {
isel = cen*nLy*nPt*jspc+(!UseLYselectTrklt())*ly*nPt*jspc+pt*jspc; isel+=sp<0?(nSpc*nCh):(sp*nCh+ch);
ioff = cen*nLy*nPt*kspc+(!UseLYselectTrklt())*ly*nPt*kspc+pt*kspc; ioff+=sp<0?((nSpc*nCh)*3):(sp*nCh*3+ch*3);
}
if(ioff>=ih){
AliError(Form("Wrong selection %d [%3d]", ioff, ih));
return kFALSE;
}
if(!(pr0=(AliTRDrecoProjection*)php.At(ioff))) {
AliError(Form("Missing projection %d", ioff));
return kFALSE;
}
if(sp>=0){
if(strcmp(pr0->H()->GetName(), Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ch], ptName[pt], sp, UseLYselectTrklt()?fLYselect:ly, cen))!=0){
AliError(Form("Projection mismatch :: request[H%sTrkltY%c%c%d%d%d] found[%s]", mc?"MC":"", chName[ch], ptName[pt], sp, UseLYselectTrklt()?fLYselect:ly, cen, pr0->H()->GetName()));
return kFALSE;
}
} else {
if(strcmp(pr0->H()->GetName(), Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[pt], UseLYselectTrklt()?fLYselect:ly, cen))!=0){
AliError(Form("Projection mismatch :: request[H%sTrkltRCZ%c%d%d] found[%s]", mc?"MC":"", ptName[pt], UseLYselectTrklt()?fLYselect:ly, cen, pr0->H()->GetName()));
return kFALSE;
}
}
for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
}
if(HasDump3DFor(kTracklet)){
TDirectory *cwd = gDirectory;
TFile::Open(Form("DumpRes_%s.root", H->GetName()), "RECREATE");
for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
if(!pr0->H()) continue;
TH3 *h3=(TH3*)pr0->H()->Clone();
h3->Write();
}
gFile->Close();
cwd->cd();
}
TH2 *h2(NULL); Int_t jh(0);
TObjArray *arr(NULL);
if(!(arr = (TObjArray*)fProj->At(cidx))){
fProj->AddAt(arr = new TObjArray(kTrkltNproj), cidx);
arr->SetName(projName[Int_t(mc)]); arr->SetOwner();
} else jh = arr->GetEntriesFast();
for(; ih--; ){
if(!hp[ih].H()) continue;
Int_t mid(0), nstat(kNstat);
if(strchr(hp[ih].H()->GetName(), 'Q')){ mid=2; nstat=kNstatQ;}
if(!(h2 = hp[ih].Projection2D(nstat, kNcontours, mid))) continue;
arr->AddAt(h2, jh++);
}
Double_t m(0.), s(0.), se(0.), trend(0.);
for(Int_t ily(0); ily<nLy; ily++){
for(Int_t ich(0); ich<nCh; ich++){
for(Int_t ipt(0); ipt<nPt; ipt++){
for(Int_t icen(0); icen<nCen; icen++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, icen)))){
for(Int_t isp(1); isp<nSpc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkltY%c%c%d%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%c]:: #Deltay{%s} Ly[%d] Cen[%s]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, icen)))){
for(Int_t isp(1); isp<nSpc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkltPh%c%c%d%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%c]:: #Delta#phi{%s} Ly[%d] Cen[%s]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, icen)))){
for(Int_t isp(1); isp<nSpc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily, icen)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkltQ%c%c%d%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%c]:: dQdl{%s} Ly[%d] Cen[%s]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstatQ, kNcontours, 2))) arr->AddAt(h2, jh++);
pr0->H()->SetNameTitle(Form("H%sTrkltQS%c%c%d%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen),
Form("Tracklets[%c]:: dQdl{%s} Ly[%d] Cen[%s]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily, cenName[icen]));
pr0->SetShowRange(2.4, 5.1);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltY%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracklets[%c]:: #Deltay Ly[%d] %s", chSgn[ich], UseLYselectTrklt()?fLYselect:ily, ptCut[ipt]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltY%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltYS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltPh%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracklets[%c]:: #Delta#phi Ly[%d] %s", chSgn[ich], UseLYselectTrklt()?fLYselect:ily, ptCut[ipt]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltPh%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltPhS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltQ%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracklets[%c]:: dQdl Ly[%d] %s", chSgn[ich], UseLYselectTrklt()?fLYselect:ily, ptCut[ipt]));
pr0->SetShowRange(1.,2.3);
if((h2 = pr0->Projection2D(kNstatQ, kNcontours, 2))) arr->AddAt(h2, jh++);
pr0->H()->SetNameTitle(Form("H%sTrkltQS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracklets[%c]:: dQdl Ly[%d] %s", chSgn[ich], UseLYselectTrklt()?fLYselect:ily, ptCut[ipt]));
pr0->SetShowRange(2.4,5.1);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(2,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltQ%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltQS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltY%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), Form("Tracklets[%c] :: #Deltay Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltY%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltYS%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltPh%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), Form("Tracklets[%c] :: #Delta#phi Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(-.9,.9);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltPh%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltPhS%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltQ%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), Form("Tracklets[%c] :: dQdl Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(1.,2.3);
if((h2 = pr0->Projection2D(kNstatQ, kNcontours, 2))) arr->AddAt(h2, jh++);
pr0->H()->SetNameTitle(Form("H%sTrkltQS%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), Form("Tracklets[%c] :: dQdl Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(2.4,5.1);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(2,&m,&s,&se))>-100.){
PutTrendValue(Form("%sTrkltQ%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltQS%c%d", mc?"MC":"", chName[ich], UseLYselectTrklt()?fLYselect:ily), s, se);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
}
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,&se))>-100.){
PutTrendValue(Form("%sTrkltY%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), trend, m);
PutTrendValue(Form("%sTrkltYS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), s, se);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltPh%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), Form("Tracklets :: #Delta#phi Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(-.45,.45);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltQ%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltQ%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), Form("Tracklets :: dQdl Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(1.,2.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 2))) arr->AddAt(h2, jh++);
pr0->H()->SetName(Form("H%sTrkltQS%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily));
pr0->SetShowRange(2.4,5.1);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 0))) arr->AddAt(h2, jh++);
}
for(Int_t icen(0); icen<nCen; icen++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[0], UseLYselectTrklt()?fLYselect:ily, icen)))){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[ipt], UseLYselectTrklt()?fLYselect:ily, icen)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkltRCZ%d%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily, icen), Form("Tracklets[RC]:: #Deltaz Ly[%d] Cen[%s]", UseLYselectTrklt()?fLYselect:ily, cenName[icen]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(icen && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[0], UseLYselectTrklt()?fLYselect:ily, 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltRCZ%c%d%d", mc?"MC":"", ptName[0], UseLYselectTrklt()?fLYselect:ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltRCZ%d", mc?"MC":"", UseLYselectTrklt()?fLYselect:ily), Form("Tracklets[RC] :: #Deltaz Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
AliInfo(Form("Done %3d 2D %s projections.", jh, mc?"MC":""));
for(Int_t i(fgNPt+2);i--;) if(ptCut[i]) delete [] ptCut[i];
return kTRUE;
}
Bool_t AliTRDresolution::MakeProjectionTrackIn(Bool_t mc, Bool_t v0)
{
const Int_t kNcontours(9);
const Int_t kNstat(30);
Int_t cidx=mc?kMCtrackIn:(v0?(kV0TrackIn-1):kTrackIn);
if(fProj && fProj->At(cidx)){
AliInfo(Form("Nothing to do for container %s.", ((TObjArray*)fProj->At(cidx))->GetName() ));
return kTRUE;
}
if(!fContainer){
AliError("Missing data container.");
return kFALSE;
}
const Char_t *projName[] = {"hTracklet2TRDin", "hTRDin2MC", "hTracklet2TRDinV0"};
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject(projName[Int_t(mc)]))){
AliError(Form("Missing/Wrong data @ %s.", projName[Int_t(mc)]));
return kTRUE;
}
const Char_t *prefix = mc?"MC":(v0?"V0":"");
const Int_t mdim(kNdim+3);
Int_t coord[mdim]; memset(coord, 0, sizeof(Int_t) * mdim); Double_t v = 0.;
Int_t ndim(H->GetNdimensions());
TAxis *aa[mdim], *as(NULL), *ap(NULL), *apt(NULL), *ax(NULL), *abf(NULL); memset(aa, 0, sizeof(TAxis*) * (mdim));
for(Int_t id(0); id<ndim; id++) aa[id] = H->GetAxis(id);
if(ndim > Int_t(kSpeciesChgRC)) as = H->GetAxis(kSpeciesChgRC);
if(ndim > Int_t(kPt)) apt = H->GetAxis(kPt);
if(ndim > Int_t(kNdim)) ap = H->GetAxis(kNdim);
if(ndim > Int_t(kNdim)+1) ax = H->GetAxis(kNdim+1);
if(ndim > Int_t(kNdim)+2) abf = H->GetAxis(kNdim+2);
const Int_t nPt(apt?(apt->GetNbins()+2):1);
const Int_t nsel((fgNPt+2)*(kNspc*kNcharge + 1) + kNspc*kNcharge);
const Int_t nprj((fgNPt+2)*(kNspc*kNcharge + 1)*4 + kNspc*kNcharge);
const Char_t chName[kNcharge] = {'n', 'p'};const Char_t chSgn[kNcharge] = {'-', '+'};
const Char_t *spcName[2][kNspc] = {{"e", "#mu#pi", "Kp"},
{"e", "#pi", "p"}};
const Char_t ptShortName[5] = {'L', 'l', 'i', 'h', 'H'};
Char_t ptName[fgNPt+2] = {0};
Char_t *ptCut[fgNPt+2] = {NULL};
Char_t *pCut[fgNPt+2] = {NULL};
const Int_t nEtaPhi(5); Int_t rebinEtaPhiX[nEtaPhi] = {1, 3, 1, 3, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 2, 1, 2};
if(aa[1]->GetNbins()==180){
rebinEtaPhiX[0] = 1; rebinEtaPhiY[0] = 2;
rebinEtaPhiX[1] = 2; rebinEtaPhiY[1] = 1;
rebinEtaPhiX[2] = 5; rebinEtaPhiY[2] = 1;
rebinEtaPhiX[3] = 1; rebinEtaPhiY[3] = 5;
rebinEtaPhiX[4] = 1; rebinEtaPhiY[4] = 1;
}
AliTRDrecoProjection hp[nprj]; TObjArray php(nprj+2);
Int_t ih(0), isel(-1), np[nsel]; memset(np, 0, nsel*sizeof(Int_t));
for(Int_t ipt(0); ipt<nPt; ipt++){
ptName[ipt]= nPt>5?(64+ipt):ptShortName[ipt];
ptCut[ipt] = StrDup(Form("#it{%4.2f<=p_{t}^{%s}[GeV/c]<%4.2f}",ipt?fgPt[ipt-1]:0., mc?"MC":"", ipt>fgNPt?99.99:fgPt[ipt]));
pCut[ipt] = StrDup(Form("#it{%4.2f<=p^{%s}[GeV/c]<%4.2f}",ipt?fgPt[ipt-1]:0., mc?"MC":"", ipt>fgNPt?99.99:fgPt[ipt]));
for(Int_t isp(0); isp<kNspc; isp++){
for(Int_t ich(0); ich<kNcharge; ich++){
isel++;
AliDebug(3, Form("Building sel[%3d|%4d] spc[%s%c] pt[%s]", isel, ih, spcName[v0][isp], chSgn[ich], ptCut[ipt]));
hp[ih].Build(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[ipt], isp),
Form("TrackIn[%s%c]:: #Deltay{%s}", spcName[v0][isp], chSgn[ich], ptCut[ipt]),
kEta, kPhi, kYrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[ipt], isp),
Form("TrackIn[%s%c]:: #Delta#phi{%s}", spcName[v0][isp], chSgn[ich], ptCut[ipt]),
kEta, kPhi, kPrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkInQ%c%c%d", prefix, chName[ich], ptName[ipt], isp),
Form("TrackIn[%s%c]:: dQdl {%s}", spcName[v0][isp], chSgn[ich], pCut[ipt]),
kEta, kPhi, kZrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
if(!ax) continue;
hp[ih].Build(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[ipt], isp),
Form("TrackIn[%s%c]:: #Deltax{%s}", spcName[v0][isp], chSgn[ich], ptCut[ipt]),
kEta, kPhi, kNdim+1, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
isel++;
AliDebug(3, Form("Building RCsel[%3d] pt[%s]", isel, ptCut[ipt]));
hp[ih].Build(Form("H%sTrkInRCZ%c", prefix, ptName[ipt]),
Form("TrackIn[RC]:: #Deltaz{%s}", ptCut[ipt]),
kEta, kPhi, kZrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkInRCY%c", prefix, ptName[ipt]),
Form("TrackIn[RC]:: #Deltay{%s}", ptCut[ipt]),
kEta, kPhi, kYrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("H%sTrkInRCPh%c", prefix, ptName[ipt]),
Form("TrackIn[RC]:: #Delta#phi{%s}", ptCut[ipt]),
kEta, kPhi, kPrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
if(!ax) continue;
hp[ih].Build(Form("H%sTrkInRCX%c", prefix, ptName[ipt]),
Form("TrackIn[RC]:: #Deltax{%s}", ptCut[ipt]),
kEta, kPhi, kNdim+1, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
for(Int_t isp(0); isp<kNspc; isp++){
for(Int_t ich(0); ich<kNcharge; ich++){
isel++;
AliDebug(3, Form("Building PTsel[%3d] spc[%s%c]", isel, spcName[v0][isp], chSgn[ich]));
hp[ih].Build(Form("H%sTrkInPt%c%d", prefix, chName[ich], isp),
Form("TrackIn[%s%c]:: P_{t}[GeV/c]", spcName[v0][isp], chSgn[ich]),
kEta, kPhi, kPt, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]);
}
}
AliInfo(Form("Build %3d 3D %s projections.", ih, prefix));
Int_t ch(0), pt(0), p(0), sp(1), rcBin(as?as->FindBin(0.):-1), ioff(0), joff(0), jsel(0), ksel(0);
AliTRDrecoProjection *pr0(NULL), *pr1(NULL);
for (Long64_t ib(0); ib < H->GetNbins(); ib++) {
v = H->GetBinContent(ib, coord);
if(v<1.) continue;
if(fBCbinTOF>0 && coord[kBC]!=fBCbinTOF) continue;
if(fBCbinFill>0 && abf && coord[kNdim+2]!=fBCbinTOF) continue;
if(coord[kBC]==3) continue;
ch = 0; sp=1;
if(rcBin>0){
if(v0){
if(!coord[kBC]) continue;
sp = coord[kBC]-1;
} else {
sp = Int_t(TMath::Abs(as->GetBinCenter(coord[kSpeciesChgRC])))-1;
}
if(as->GetNbins() == kNcharge*AliPID::kSPECIES+1){
if(sp>2) sp=2;
else if(sp==2) sp=1;
}
if(coord[kSpeciesChgRC] > rcBin) ch = 1;
else if(coord[kSpeciesChgRC] == rcBin) ch = 2;
}
pt = 0; p = 0;
if(apt) pt = coord[kPt];
if(ap ) p = coord[kNdim];
isel = pt*(kNspc*kNcharge+1); isel+=(ch==2?(kNspc*kNcharge):(sp*kNcharge+ch)); ioff = isel*(ax?4:3);
jsel = p *(kNspc*kNcharge+1); jsel+=(ch==2?(kNspc*kNcharge):(sp*kNcharge+ch)); joff = jsel*(ax?4:3);
ksel = ch==2?0:nPt*(kNspc*kNcharge+1); ksel *= (ax?4:3); ksel+=sp*kNcharge+ch;
if(ioff>=ih){
AliError(Form("Wrong selection %d [%3d]", ioff, ih));
return kFALSE;
}
if(!(pr0=(AliTRDrecoProjection*)php.At(ioff))) {
AliError(Form("Missing projection @ %d", ioff));
return kFALSE;
}
if(ch<2){
if(strcmp(pr0->H()->GetName(), Form("H%sTrkInY%c%c%d", prefix, chName[ch], ptName[pt], sp))!=0){
AliError(Form("Projection mismatch :: request[H%sTrkInY%c%c%d] found[%s]", prefix, chName[ch], ptName[pt], sp, pr0->H()->GetName()));
return kFALSE;
}
} else {
if(strcmp(pr0->H()->GetName(), Form("H%sTrkInRCZ%c", prefix, ptName[pt]))!=0){
AliError(Form("Projection mismatch :: request[H%sTrkltRCZ%c] found[%s]", prefix, ptName[pt], pr0->H()->GetName()));
return kFALSE;
}
}
AliDebug(2, Form("Found %s for selection sp[%d] ch[%d] pt[%d]", pr0->H()->GetName(), sp, ch, pt));
for(Int_t jh(0); jh<np[isel]; jh++){
if(ch<2 && jh==2) ((AliTRDrecoProjection*)php.At(joff+jh))->Increment(coord, v);
else ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
}
if(ksel){
if(!(pr0 = (AliTRDrecoProjection*)php.At(ksel))){
AliError(Form("Missing P_t projection @ %d", ksel));
return kFALSE;
}
AliDebug(2, Form("Found %s for selection[%d] sp[%d] ch[%d]", pr0->H()->GetName(), ksel, sp, ch));
pr0->Increment(coord, v);
}
}
if(HasDump3DFor(kTrackIn)){
TDirectory *cwd = gDirectory;
TFile::Open(Form("Dump%s_%s.root", GetName(), H->GetName()), "UPDATE");
for(Int_t ip(0); ip<php.GetEntriesFast(); ip++){
if(!(pr0 = (AliTRDrecoProjection*)php.At(ip))) continue;
if(!pr0->H()) continue;
TH3 *h3=(TH3*)pr0->H()->Clone();
h3->Write();
}
gFile->Close();
cwd->cd();
}
TObjArray *arr(NULL);
fProj->AddAt(arr = new TObjArray(mc?kMCTrkInNproj:kTrkInNproj), cidx);
arr->SetName(mc?projName[1]:(v0?projName[2]:projName[0])); arr->SetOwner();
TH2 *h2(NULL); Int_t jh(0);
for(; ih--; ){
if(!hp[ih].H()) continue;
if(strstr(hp[ih].H()->GetName(), "TrkInPt")){
for(Int_t ipt(0); ipt<nPt; ipt++) arr->AddAt(hp[ih].Projection2Dbin(ipt), jh++);
} else {
if((h2 = hp[ih].Projection2D(kNstat, kNcontours))) arr->AddAt(h2, jh++);
}
}
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++){
for(Int_t isp(0); isp<kNspc; isp++){
Int_t idx(ich*kNspc+isp);
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[0], isp)))){
specY[idx] = (*pr0);
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,&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, 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, &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, 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,&se))>-100.){
PutTrendValue(Form("%sTrkInY%c%d", prefix, chName[ich], isp), trend, m);
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];
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[0], isp)))){
specPh[idx] = (*pr0);
specPh[idx].SetNameTitle(Form("H%sTrkInPh%c%d", prefix, chName[ich], isp), "Sum over pt");
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,&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, 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,&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, 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,&se))>-100.){
PutTrendValue(Form("%sTrkInPh%c%d", prefix, chName[ich], isp), trend, m);
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];
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%c%d", prefix, chName[ich], ptName[0], isp)))){
specQ[idx] = (*pr0);
specQ[idx].SetNameTitle(Form("H%sTrkInQ%c%d", prefix, chName[ich], isp), "Sum over p");
specQ[idx].H()->SetNameTitle(Form("H%sTrkInQ%c%d", prefix, chName[ich], isp),
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);
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);
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]);
if((h2 = specQ[idx].Projection2D(kNstat, kNcontours, 2))) arr->AddAt(h2, jh++);
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);
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];
}
}
for(Int_t ipt(0); ipt<nPt; ipt++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[ipt], 0)))){
for(Int_t isp(1); isp<kNspc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkInY%c%c", prefix, chName[ich], ptName[ipt]),
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,&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, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[ipt], 0)))){
for(Int_t isp(1); isp<kNspc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
(*pr0)+=(*pr1);
}
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,&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, se);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[ipt], 0)))){
for(Int_t isp(1); isp<kNspc; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[ipt], isp)))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkInX%c%c", prefix, chName[ich], ptName[ipt]),
Form("TrackIn[%c]:: #Deltax{%s}", chSgn[ich], ptCut[ipt]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
PutTrendValue(Form("%sTrkInX%c%c", prefix, chName[ich], ptName[ipt]), pr0->GetTrendValue(1));
if(!ipt){
xlow[ich] = (*pr0);
xlow[ich].SetNameTitle(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[0], 5),
Form("TrackIn[%c]:: #Deltax{%s}", chSgn[ich], ptCut[0]));
php.AddLast(&xlow[ich]);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInY%c", prefix, chName[ich]),
Form("TrackIn[%c]:: #Deltay", chSgn[ich]));
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, &se))>-100.){
PutTrendValue(Form("%sTrkInY%c", prefix, chName[ich]), trend, m);
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);
}
if(ich && (pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[0], ptName[3], 0)))){
if((pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[ich], ptName[3], 0)))){
(*pr0)+=(*pr1);
pr0->H()->SetNameTitle(Form("H%sTrkInY%c", prefix, ptName[3]), Form("TrackIn :: #Deltay{%s}", ptCut[3]));
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[ich], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInPh%c", prefix, chName[ich]),
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, &se))>-100.){
PutTrendValue(Form("%sTrkInPh%c", prefix, chName[ich]), trend, m);
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);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInX%c", prefix, chName[ich]),
Form("TrackIn[%c]:: #Deltax", chSgn[ich]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
PutTrendValue(Form("%sTrkInX%c", prefix, chName[ich]), pr0->GetTrendValue(1));
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
if(ich && (pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[0], ptName[1], 5)))){
if((pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[ich], ptName[1], 5)))){
(*pr0)+=(*pr1);
pr0->H()->SetNameTitle(Form("H%sTrkInX%c", prefix, ptName[1]), Form("TrackIn :: #Deltax{%s}", ptCut[1]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
}
for(Int_t isp(0); isp<kNspc; isp++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%d", prefix, chName[0], isp)))){
pr0->H()->SetNameTitle(Form("H%sTrkInY%d", prefix, isp), Form("TrackIn[%s] :: #Deltay", spcName[v0][isp]));
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
PutTrendValue(Form("%sTrkInY%d", prefix, isp), pr0->GetTrendValue(1));
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%d", prefix, chName[0], isp)))){
pr0->H()->SetNameTitle(Form("H%sTrkInPh%d", prefix, isp), Form("TrackIn[%s] :: #Delta#phi", spcName[v0][isp]));
pr0->SetShowRange(-1., 1.);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
PutTrendValue(Form("%sTrkInPh%d", prefix, isp), pr0->GetTrendValue(1));
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%d", prefix, chName[0], isp)))){
pr0->H()->SetNameTitle(Form("H%sTrkInQ%d", prefix, isp), Form("TrackIn[%s] :: dQdl", spcName[v0][isp]));
pr0->SetShowRange(-2.2, -1.75);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 2))) arr->AddAt(h2, jh++);
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);
if((trend=pr0->GetTrendValue(0, &m))>-100.) PutTrendValue(Form("%sTrkInQS%d", prefix, isp), trend, m);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", prefix, chName[0], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInY", prefix), "TrackIn :: #Deltay");
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((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", prefix, chName[0], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInPh", prefix), "TrackIn :: #Delta#phi");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", prefix, chName[0], ptName[0], 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkInX", prefix), "TrackIn :: #Deltax");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCZ%c", prefix, ptName[0])))){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCZ%c", prefix, ptName[ipt])))) continue;
(*pr0)+=(*pr1);
}
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,&se))>-100.){
PutTrendValue(Form("%sTrkInRCZ", prefix), trend, m);
PutTrendValue(Form("%sTrkInRCZS", prefix), s, se);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCY%c", prefix, ptName[0])))){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCY%c", prefix, ptName[ipt])))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkInRCY", prefix), "TrackIn[RC]:: #Deltay");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCPh%c", prefix, ptName[0])))){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCPh%c", prefix, ptName[ipt])))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkInRCPh", prefix), "TrackIn[RC]:: #Delta#phi");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCX%c", prefix, ptName[0])))){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCX%c", prefix, ptName[ipt])))) continue;
(*pr0)+=(*pr1);
}
pr0->H()->SetNameTitle(Form("H%sTrkInRCX", prefix), "TrackIn[RC]:: #Deltax");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
for(Int_t isp(0); isp<kNspc; isp++){
for(Int_t ich(0); ich<kNcharge; ich++){
TH2 *h2pt[26]={NULL}, *h2s(NULL);
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!(h2pt[ipt] = (TH2*)arr->FindObject(Form("H%sTrkInPt%c%d%d_2D", prefix, chName[ich], isp, ipt)))){
AliWarning(Form("Missing \"H%sTrkInPt%c%d%d_2D\"", prefix, chName[ich], isp, ipt));
continue;
}
if(!h2s) h2s = (TH2F*)h2pt[ipt]->Clone("h2s");
else h2s->Add(h2pt[ipt]);
}
if(!h2s) continue;
Int_t irebin(0), dxBin(1), dyBin(1);
while(irebin<nEtaPhi && (AliTRDrecoTask::GetMeanStat(h2s, .5, 1)<200)){
h2s->Rebin2D(rebinEtaPhiX[irebin], rebinEtaPhiY[irebin]);
dxBin*=rebinEtaPhiX[irebin];dyBin*=rebinEtaPhiY[irebin];irebin++;
}
AliDebug(2, Form("Rebin level[%d] @ chg[%d] spc[%d]. Binning[%2dx%2d]", irebin, ich, isp, h2s->GetNbinsX(), h2s->GetNbinsY()));
Int_t nx(h2s->GetNbinsX()), ny(h2s->GetNbinsY());
for(Int_t ipt(0); ipt<nPt; ipt++) h2pt[ipt]->Rebin2D(dxBin, dyBin);
delete h2s;
h2 = new TH2F(Form("H%sTrkInPt%c%d_2D", prefix, chName[ich], isp),
Form("TrackIn[%s%c]:: <P_{t}>[GeV/c];%s;%s", spcName[v0][isp], chSgn[ich], aa[2]->GetTitle(), aa[1]->GetTitle()),
nx, aa[2]->GetXmin(), aa[2]->GetXmax(),
ny, aa[1]->GetXmin(), aa[1]->GetXmax());
arr->AddAt(h2, jh++);
for(Int_t ix(1); ix<=nx; ix++){
for(Int_t iy(1); iy<=ny; iy++){
Float_t w[26]={0.}, sw(0.);
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!h2pt[ipt]) continue;
w[ipt] = h2pt[ipt]->GetBinContent(ix, iy);
sw += w[ipt];
}
if(sw<=0.) h2->SetBinContent(ix, iy, 0.);
else{
Float_t ptm(0.);
for(Int_t ipt(0); ipt<nPt; ipt++){
w[ipt]/=sw;
ptm += w[ipt]*fgPt[ipt?ipt-1:0];
}
h2->SetBinContent(ix, iy, ptm);
}
}
}
PutTrendValue(Form("%sTrkInPt%c%d", prefix, chName[ich], isp), GetMeanStat(h2, 0.01, 1));
}
}
AliInfo(Form("Done %3d 2D %s projections.", jh, prefix));
for(Int_t i(fgNPt+2);i--;){
if(ptCut[i]) delete [] ptCut[i];
if(pCut[i]) delete [] pCut[i];
}
return kTRUE;
}
Bool_t AliTRDresolution::MakeProjectionTrack()
{
const Int_t kNcontours(9);
const Int_t kNstat(30);
Int_t cidx(kMCtrack);
if(fProj && fProj->At(cidx)) return kTRUE;
if(!fContainer){
AliError("Missing data container.");
return kFALSE;
}
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject("hTRD2MC"))){
AliError("Missing/Wrong data @ hTRD2MC.");
return kTRUE;
}
Int_t ndim(H->GetNdimensions());
Int_t coord[kNdim+1]; memset(coord, 0, sizeof(Int_t) * (kNdim+1)); Double_t v = 0.;
TAxis *aa[kNdim+1], *as(NULL), *ap(NULL); memset(aa, 0, sizeof(TAxis*) * (kNdim+1));
for(Int_t id(0); id<ndim; id++) aa[id] = H->GetAxis(id);
if(ndim > kSpeciesChgRC) as = H->GetAxis(kSpeciesChgRC);
if(ndim > kPt) ap = H->GetAxis(kPt);
const Int_t nPt(ap?(ap->GetNbins()+2):1);
const Int_t nsel(AliTRDgeometry::kNlayer*fgNPt*AliPID::kSPECIES*7);
const Char_t chName[kNcharge] = {'n', 'p'};const Char_t chSgn[kNcharge] = {'-', '+'};
const Char_t ptShortName[5] = {'L', 'l', 'i', 'h', 'H'};
Char_t ptName[fgNPt+2] = {0};
Char_t *ptCut[fgNPt+2] = {NULL};
const Int_t nEtaPhi(5); Int_t rebinEtaPhiX[nEtaPhi] = {1, 3, 1, 3, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 2, 1, 2};
if(aa[1]->GetNbins()==180){
rebinEtaPhiX[0] = 1; rebinEtaPhiY[0] = 2;
rebinEtaPhiX[1] = 2; rebinEtaPhiY[1] = 1;
rebinEtaPhiX[2] = 5; rebinEtaPhiY[2] = 1;
rebinEtaPhiX[3] = 1; rebinEtaPhiY[3] = 5;
rebinEtaPhiX[4] = 1; rebinEtaPhiY[4] = 1;
}
AliTRDrecoProjection hp[kTrkNproj]; TObjArray php(kTrkNproj);
Int_t ih(0), isel(-1), np[nsel]; memset(np, 0, nsel*sizeof(Int_t));
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t ipt(0); ipt<nPt; ipt++){
if(!ptName[ipt]){
ptName[ipt]= nPt>5?(64+ipt):ptShortName[ipt];
ptCut[ipt] = StrDup(Form("#it{%4.2f<=p_{t}^{MC}[GeV/c]<%4.2f}",ipt?fgPt[ipt-1]:0., ipt>fgNPt?99.99:fgPt[ipt]));
}
for(Int_t isp(0); isp<AliPID::kSPECIES; isp++){
for(Int_t ich(0); ich<kNcharge; ich++){
isel++;
hp[ih].Build(Form("HMCTrkY%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%s%c]:: #Deltay{%s} Ly[%d]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily),
kEta, kPhi, kYrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("HMCTrkPh%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%s%c]:: #Delta#phi{%s} Ly[%d]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily),
kEta, kPhi, kPrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
hp[ih].Build(Form("HMCTrkDPt%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%s%c]:: #Deltap_{t}/p_{t}{%s} Ly[%d]", AliPID::ParticleLatexName(isp), chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily),
kEta, kPhi, kNdim, aa);
hp[ih].SetShowRange(0.,10.);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
isel++;
hp[ih].Build(Form("HMCTrkZ%c%d", ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[RC]:: #Deltaz{%s} Ly[%d]", ptCut[ipt], UseLYselectTrklt()?fLYselect:ily),
kEta, kPhi, kZrez, aa);
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
}
AliInfo(Form("Build %3d 3D projections.", ih));
Int_t ly(0), ch(0), pt(0), sp(2), rcBin(as?as->FindBin(0.):-1);
for (Long64_t ib(0); ib < H->GetNbins(); ib++) {
v = H->GetBinContent(ib, coord);
if(v<1.) continue;
ly = coord[kBC]-1;
if(ly<0) ly=0;
ch=0; sp=2;
if(rcBin>0){
sp = Int_t(TMath::Abs(as->GetBinCenter(coord[kSpeciesChgRC])))-1;
if(coord[kSpeciesChgRC] > rcBin) ch = 1;
else if(coord[kSpeciesChgRC] == rcBin) ch = 2;
}
pt = 0;
if(ap) pt = coord[kPt]-1;
Int_t ioff = ly*nPt*31+pt*31; ioff+=3*(sp<0?10:(sp*kNcharge+ch));
isel = ly*nPt*11+pt*11; isel+=sp<0?10:(sp*kNcharge+ch);
AliDebug(4, Form("SELECTION[%d] :: ch[%c] pt[%c] sp[%d] ly[%d]\n", np[isel], ch==2?'Z':chName[ch], ptName[pt], sp, ly));
for(Int_t jh(0); jh<np[isel]; jh++) ((AliTRDrecoProjection*)php.At(ioff+jh))->Increment(coord, v);
}
TObjArray *arr(NULL);
fProj->AddAt(arr = new TObjArray(kTrkNproj), cidx);
arr->SetName("hTRD2MC"); arr->SetOwner();
TH2 *h2(NULL); Int_t jh(0);
for(; ih--; ){
if(!hp[ih].H()) continue;
if(!(h2 = hp[ih].Projection2D(kNstat, kNcontours))) continue;
arr->AddAt(h2, jh++);
}
AliTRDrecoProjection *pr0(NULL), *pr1(NULL);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t ich(0); ich<kNcharge; ich++){
for(Int_t ipt(0); ipt<nPt; ipt++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily)))){
for(Int_t isp(1); isp<AliPID::kSPECIES; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily)))) continue;
(*pr0)+=(*pr1);
}
AliDebug(2, Form("Rename %s to HMCTrkY%c%c%d", pr0->H()->GetName(), chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily));
pr0->H()->SetNameTitle(Form("HMCTrkY%c%c%d", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Deltay{%s} Ly[%d]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily)))){
for(Int_t isp(1); isp<AliPID::kSPECIES; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily)))) continue;
(*pr0)+=(*pr1);
}
AliDebug(2, Form("Rename %s to HMCTrkPh%c%c%d", pr0->H()->GetName(), chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily));
pr0->H()->SetNameTitle(Form("HMCTrkPh%c%c%d", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Delta#phi{%s} Ly[%d]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[ich], ptName[ipt], 0, UseLYselectTrklt()?fLYselect:ily)))){
for(Int_t isp(1); isp<AliPID::kSPECIES; isp++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[ich], ptName[ipt], isp, UseLYselectTrklt()?fLYselect:ily)))) continue;
(*pr0)+=(*pr1);
}
AliDebug(2, Form("Rename %s to HMCTrkDPt%c%c%d", pr0->H()->GetName(), chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily));
pr0->H()->SetNameTitle(Form("HMCTrkDPt%c%c%d", chName[ich], ptName[ipt], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Deltap_{t}/p_{t}{%s} Ly[%d]", chSgn[ich], ptCut[ipt], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkY%c%d", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Deltay Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkPh%c%d", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Delta#phi Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[ich], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkDPt%c%d", chName[ich], UseLYselectTrklt()?fLYselect:ily),
Form("Tracks[%c]:: #Deltap_{t}/p_{t} Ly[%d]", chSgn[ich], UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))) (*pr1)+=(*pr0);
}
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkY%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkY%d", UseLYselectTrklt()?fLYselect:ily), Form("Tracks :: #Deltay Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkPh%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkPh%d", UseLYselectTrklt()?fLYselect:ily), Form("Tracks :: #Delta#phi Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("HMCTrkDPt%c%c%d%d", chName[0], ptName[0], 0, UseLYselectTrklt()?fLYselect:ily)))){
pr0->H()->SetNameTitle(Form("HMCTrkDPt%d", UseLYselectTrklt()?fLYselect:ily), Form("Tracks :: #Deltap_{t}/p_{t} Ly[%d]", UseLYselectTrklt()?fLYselect:ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
AliInfo(Form("Done %3d 2D projections.", jh));
return kTRUE;
}
Bool_t AliTRDresolution::PostProcess()
{
if (!fContainer) {
AliError("ERROR: list not available");
return kFALSE;
}
if(!fProj){
AliInfo("Building array of projections ...");
fProj = new TObjArray(kNclasses+1); fProj->SetOwner(kTRUE);
}
THnSparse *H(NULL);
if(!(H = (THnSparse*)fContainer->FindObject("hTracklet2TRDin"))){
AliWarning("Missing/Wrong data @ hTracklet2TRDin needed for infering pt/p segmentation.");
return kFALSE;
}
fNpt=H->GetAxis(kPt)?(H->GetAxis(kPt)->GetNbins()+1):1;
if(!MakeMomSegmentation()) return kFALSE;
if(HasProcess(kDetector)) MakeProjectionDetector();
if(HasProcess(kCluster)) MakeProjectionCluster();
fNRefFigures = 3;
if(HasProcess(kTracklet)) MakeProjectionTracklet();
fNRefFigures = 7;
if(HasProcess(kTrackIn)){
MakeProjectionTrackIn();
MakeProjectionTrackIn(kFALSE, kTRUE);
}
fNRefFigures = 11;
if(!HasMCdata()) return kTRUE;
if(HasProcess(kCluster)) MakeProjectionCluster(kTRUE);
fNRefFigures = 17;
if(HasProcess(kTracklet)) if(!MakeProjectionTracklet(kTRUE)) return kFALSE;
fNRefFigures = 21;
if(HasProcess(kTrackIn)) if(!MakeProjectionTrackIn(kTRUE)) return kFALSE;
fNRefFigures+=8;
return kTRUE;
}
void AliTRDresolution::Terminate(Option_t *opt)
{
AliTRDrecoTask::Terminate(opt);
if(HasPostProcess()) PostProcess();
}
void AliTRDresolution::AdjustF1(TH1 *h, TF1 *f)
{
Int_t nbinsy = Int_t(.5*h->GetNbinsX());
Double_t sum = 0.;
for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;
f->SetParLimits(0, 0., 3.*sum);
f->SetParameter(0, .9*sum);
Double_t rms = h->GetRMS();
f->SetParLimits(1, -rms, rms);
f->SetParameter(1, h->GetMean());
f->SetParLimits(2, 0., 2.*rms);
f->SetParameter(2, rms);
if(f->GetNpar() <= 4) return;
f->SetParLimits(3, 0., sum);
f->SetParameter(3, .1*sum);
f->SetParLimits(4, -.3, .3);
f->SetParameter(4, 0.);
f->SetParLimits(5, 0., 1.e2);
f->SetParameter(5, 2.e-1);
}
TObjArray* AliTRDresolution::Histos()
{
if(fContainer) return fContainer;
fContainer = new TObjArray(kNclasses); fContainer->SetOwner(kTRUE);
THnSparse *H(NULL);
const Int_t nhn(100); Char_t hn[nhn]; TString st;
Int_t triggerBins(fTriggerList?(TMath::Power(2.,fTriggerList->GetEntriesFast())-1):0);
snprintf(hn, nhn, "h%s", fgPerformanceName[kDetector]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
const Int_t mdim(6);
const Char_t *cldTitle[mdim] = {"layer", fgkTitle[kPhi], "pad row", "centrality", "q [a.u.]", triggerBins?"trigger":"no. of pads"};
const Int_t cldNbins[mdim] = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], 76, AliTRDeventInfo::kCentralityClasses, 50, triggerBins?triggerBins:kNpads};
const Double_t cldMin[mdim] = {-0.5, fgkMin[kPhi], -0.5, -0.5, 0., 0.5},
cldMax[mdim] = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], 75.5, AliTRDeventInfo::kCentralityClasses - 0.5, 1200., triggerBins?(triggerBins+.5):(kNpads+.5)};
st = "cluster proprieties;";
Int_t ndim=DebugLevel()>=1?mdim:Int_t(kNdimDet);
for(Int_t idim(0); idim<ndim; idim++){ st += cldTitle[idim]; st+=";";}
H = new THnSparseI(hn, st.Data(), ndim, cldNbins, cldMin, cldMax);
} else H->Reset();
fContainer->AddAt(H, kDetector);
snprintf(hn, nhn, "h%s", fgPerformanceName[kCluster]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
const Int_t mdim(10);
const Char_t *clTitle[mdim] = {"layer", fgkTitle[kPhi], fgkTitle[kEta], fgkTitle[kYrez], "#Deltax [cm]", "Q</Q", "Q/angle", "#Phi [deg]", "centrality", triggerBins?"trigger":"no. of pads"};
const Int_t clNbins[mdim] = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], fgkNbins[kEta], fgkNbins[kYrez], 45, 30, 30, 15, AliTRDeventInfo::kCentralityClasses, triggerBins?triggerBins:kNpads};
const Double_t clMin[mdim] = {-0.5, fgkMin[kPhi], fgkMin[kEta], fgkMin[kYrez]/10., -.5, 0.1, -2., -45, -0.5, 0.5},
clMax[mdim] = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], fgkMax[kEta], fgkMax[kYrez]/10., 4., 2.1, 118., 45, AliTRDeventInfo::kCentralityClasses - 0.5, triggerBins?(triggerBins+.5):(kNpads+.5)};
st = "cluster spatial&charge resolution;";
Int_t ndim=DebugLevel()>=1?mdim:Int_t(kNdimCl);
for(Int_t idim(0); idim<ndim; idim++){ st += clTitle[idim]; st+=";";}
H = new THnSparseI(hn, st.Data(), ndim, clNbins, clMin, clMax);
} else H->Reset();
fContainer->AddAt(H, kCluster);
snprintf(hn, nhn, "h%s", fgPerformanceName[kTracklet]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
const Int_t mdim(kNdim+8);
Char_t *trTitle[mdim]; memcpy(trTitle, fgkTitle, kNdim*sizeof(Char_t*));
Int_t trNbins[mdim]; memcpy(trNbins, fgkNbins, kNdim*sizeof(Int_t));
Double_t trMin[mdim]; memcpy(trMin, fgkMin, kNdim*sizeof(Double_t));
Double_t trMax[mdim]; memcpy(trMax, fgkMax, kNdim*sizeof(Double_t));
trMin[kYrez] = -0.45; trMax[kYrez] = 0.45;
trMin[kPrez] = -4.5; trMax[kPrez] = 4.5;
trMin[kZrez] = -1.5; trMax[kZrez] = 1.5;
trTitle[kBC]=StrDup("layer"); trNbins[kBC] = AliTRDgeometry::kNlayer; trMin[kBC] = -0.5; trMax[kBC] = AliTRDgeometry::kNlayer-0.5;
trNbins[kPt]=fNpt-1; trMax[kPt] = trNbins[kPt]-.5;
Int_t jdim(kNdim);
trTitle[jdim]=StrDup("centrality"); trNbins[jdim] = AliTRDeventInfo::kCentralityClasses; trMin[jdim] = -.5; trMax[jdim] = AliTRDeventInfo::kCentralityClasses - 0.5;
jdim++;
if(triggerBins){
trTitle[jdim]=StrDup("trigger"); trNbins[jdim] = triggerBins;
trMin[jdim] = 0.5; trMax[jdim] = triggerBins+.5;
} else {
trTitle[jdim]=StrDup("occupancy [%]"); trNbins[jdim] = 12;
trMin[jdim] = 25.; trMax[jdim] = 85.;
}
st = "tracklet spatial&charge resolution;";
Int_t ndim=DebugLevel()>=1?(jdim+1):kNdimTrklt;
for(Int_t idim(0); idim<ndim; idim++){ st += trTitle[idim]; st+=";";}
H = new THnSparseI(hn, st.Data(), ndim, trNbins, trMin, trMax);
} else H->Reset();
fContainer->AddAt(H, kTracklet);
snprintf(hn, nhn, "h%s", fgPerformanceName[kTrackIn]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
const Int_t mdim(kNdim+2);
Char_t *trinTitle[mdim]; memcpy(trinTitle, fgkTitle, kNdim*sizeof(Char_t*));
Int_t trinNbins[mdim]; memcpy(trinNbins, fgkNbins, kNdim*sizeof(Int_t));
Double_t trinMin[mdim]; memcpy(trinMin, fgkMin, kNdim*sizeof(Double_t));
Double_t trinMax[mdim]; memcpy(trinMax, fgkMax, kNdim*sizeof(Double_t));
if(triggerBins){
trinTitle[kBC]=StrDup("trigger"); trinNbins[kBC] = triggerBins;
trinMin[kBC] = 0.5; trinMax[kBC] = triggerBins+.5;
}
trinNbins[kPt]=fNpt-1; trinMax[kPt] = trinNbins[kPt]-.5;
trinTitle[kNdim]=StrDup("p [bin]"); trinNbins[kNdim] = fNpt-1; trinMin[kNdim] = -0.5; trinMax[kNdim] = trinNbins[kNdim]-.5;
trinTitle[kNdim+1]=StrDup("dx [cm]"); trinNbins[kNdim+1]=48; trinMin[kNdim+1]=-2.4; trinMax[kNdim+1]=2.4;
st = "r-#phi/z/angular residuals @ TRD entry;";
Int_t ndim=(DebugLevel()>=1?mdim:(kNdim+1));
for(Int_t idim(0); idim<ndim; idim++){st+=trinTitle[idim]; st+=";";}
H = new THnSparseI(hn, st.Data(), ndim, trinNbins, trinMin, trinMax);
} else H->Reset();
fContainer->AddAt(H, kTrackIn);
if(!HasMCdata()) return fContainer;
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCcluster]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
H = (THnSparseI*)((THnSparseI*)fContainer->At(kCluster))->Clone(hn);
H->SetTitle("MC cluster spatial resolution");
} else H->Reset();
fContainer->AddAt(H, kMCcluster);
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCtracklet]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
H = (THnSparseI*)((THnSparseI*)fContainer->At(kTracklet))->Clone(hn);
H->SetTitle("MC tracklet spatial resolution");
} else H->Reset();
fContainer->AddAt(H, kMCtracklet);
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCtrackIn]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
H = (THnSparseI*)((THnSparseI*)fContainer->At(kTrackIn))->Clone(hn);
H->SetTitle("MC r-#phi/z/angular residuals @ TRD entry");
} else H->Reset();
fContainer->AddAt(H, kMCtrackIn);
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCtrack]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
Char_t *trTitle[kNdim+1]; memcpy(trTitle, fgkTitle, kNdim*sizeof(Char_t*));
Int_t trNbins[kNdim+1]; memcpy(trNbins, fgkNbins, kNdim*sizeof(Int_t));
Double_t trMin[kNdim+1]; memcpy(trMin, fgkMin, kNdim*sizeof(Double_t));
Double_t trMax[kNdim+1]; memcpy(trMax, fgkMax, kNdim*sizeof(Double_t));
trTitle[kBC]=StrDup("layer"); trNbins[kBC] = AliTRDgeometry::kNlayer; trMin[kBC] = -0.5; trMax[kBC] = AliTRDgeometry::kNlayer-0.5;
trMin[kYrez] = -0.9; trMax[kYrez] = -trMin[kYrez];
trMin[kPrez] = -1.5; trMax[kPrez] = -trMin[kPrez];
trMin[kZrez] = -0.9; trMax[kZrez] = -trMin[kZrez];
trNbins[kPt] =fNpt-1;trMax[kPt] = trNbins[kPt]-.5;
trTitle[kNdim]=StrDup("#Deltap_{t}/p_{t} [%]"); trNbins[kNdim] = 25; trMin[kNdim] = -4.5; trMax[kNdim] = 20.5;
st = "MC track spatial&p_{t} resolution;";
Int_t ndim=DebugLevel()>=1?(kNdim+1):4;
for(Int_t idim(0); idim<ndim; idim++){ st += trTitle[idim]; st+=";";}
H = new THnSparseI(hn, st.Data(), ndim, trNbins, trMin, trMax);
} else H->Reset();
fContainer->AddAt(H, kMCtrack);
return fContainer;
}
Bool_t AliTRDresolution::FitTrack(const Int_t np, AliTrackPoint *points, Float_t param[10])
{
if(np<40){
if(AliLog::GetDebugLevel("PWGPP", "AliTRDresolution")>1) printf("D-AliTRDresolution::FitTrack: Not enough clusters to fit a track [%d].\n", np);
return kFALSE;
}
TLinearFitter yfitter(2, "pol1"), zfitter(2, "pol1");
Double_t x0(0.);
for(Int_t ip(0); ip<np; ip++) x0+=points[ip].GetX();
x0/=Float_t(np);
Double_t x, y, z, dx, tilt(0.);
for(Int_t ip(0); ip<np; ip++){
x = points[ip].GetX(); z = points[ip].GetZ();
dx = x - x0;
zfitter.AddPoint(&dx, z, points[ip].GetClusterType()?1.e-3:1.);
}
if(zfitter.Eval() != 0) return kFALSE;
Double_t z0 = zfitter.GetParameter(0);
Double_t dzdx = zfitter.GetParameter(1);
for(Int_t ip(0); ip<np; ip++){
if(points[ip].GetClusterType()) continue;
x = points[ip].GetX();
dx = x - x0;
y = points[ip].GetY();
z = points[ip].GetZ();
tilt = points[ip].GetCharge();
y -= tilt*(-dzdx*dx + z - z0);
Float_t xyz[3] = {(Float_t)x, (Float_t)y, (Float_t)z}; points[ip].SetXYZ(xyz);
yfitter.AddPoint(&dx, y, 1.);
}
if(yfitter.Eval() != 0) return kFALSE;
Double_t y0 = yfitter.GetParameter(0);
Double_t dydx = yfitter.GetParameter(1);
param[0] = x0; param[1] = y0; param[2] = z0; param[3] = dydx; param[4] = dzdx;
if(AliLog::GetDebugLevel("PWGPP", "AliTRDresolution")>3) printf("D-AliTRDresolution::FitTrack: x0[%f] y0[%f] z0[%f] dydx[%f] dzdx[%f].\n", x0, y0, z0, dydx, dzdx);
return kTRUE;
}
Bool_t AliTRDresolution::FitTracklet(const Int_t ly, const Int_t np, const AliTrackPoint *points, const Float_t param[10], Float_t par[3])
{
TLinearFitter yfitter(2, "pol1");
Double_t x0(0.), x[60], y[60], dy[60];
Int_t nly(0);
for(Int_t ip(0); ip<np; ip++){
if(points[ip].GetClusterType()) continue;
if(points[ip].GetVolumeID() != ly) continue;
Float_t xt(points[ip].GetX())
,yt(param[1] + param[3] * (xt - param[0]));
x[nly] = xt;
y[nly] = points[ip].GetY();
dy[nly]= y[nly]-yt;
x0 += xt;
nly++;
}
if(nly<10){
if(AliLog::GetDebugLevel("PWGPP", "AliTRDresolution")>1) printf("D-AliTRDresolution::FitTracklet: Not enough clusters to fit a tracklet [%d].\n", nly);
return kFALSE;
}
x0 /= Float_t(nly);
Double_t mean(0.), sig(1.e3);
AliMathBase::EvaluateUni(nly, dy, mean, sig, 0);
Float_t kSigCut = TMath::Sqrt(5.e-4 + param[3]*param[3]*0.018);
for(Int_t jly(0); jly<nly; jly++){
if(TMath::Abs(dy[jly]-mean)>kSigCut) continue;
Double_t dx(x[jly]-x0);
yfitter.AddPoint(&dx, y[jly], 1.);
}
if(yfitter.Eval() != 0) return kFALSE;
par[0] = x0;
par[1] = yfitter.GetParameter(0);
par[2] = yfitter.GetParameter(1);
return kTRUE;
}
Bool_t AliTRDresolution::UseTrack(const Int_t np, const AliTrackPoint *points, Float_t param[10])
{
const Float_t kS(0.6), kM(0.2);
TH1S h("h1", "", 100, -5.*kS, 5.*kS);
Float_t dy, s, m;
for(Int_t ip(0); ip<np; ip++){
if(points[ip].GetClusterType()) continue;
Float_t x0(points[ip].GetX())
,y0(param[1] + param[3] * (x0 - param[0]))
;
dy=points[ip].GetY() - y0; h.Fill(dy);
}
TF1 fg("fg", "gaus", -5.*kS, 5.*kS);
fg.SetParameter(1, 0.);
fg.SetParameter(2, 2.e-2);
h.Fit(&fg, "QN");
m=fg.GetParameter(1); s=fg.GetParameter(2);
if(s>kS || TMath::Abs(m)>kM) return kFALSE;
return kTRUE;
}
void AliTRDresolution::GetLandauMpvFwhm(TF1 * const f, Float_t &mpv, Float_t &xm, Float_t &xM)
{
const Float_t dx = 1.;
mpv = f->GetParameter(1);
Float_t fx, max = f->Eval(mpv);
xm = mpv - dx;
while((fx = f->Eval(xm))>.5*max){
if(fx>max){
max = fx;
mpv = xm;
}
xm -= dx;
}
xM += 2*(mpv - xm);
while((fx = f->Eval(xM))>.5*max) xM += dx;
}
void AliTRDresolution::SetProcesses(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin)
{
if(det) SETBIT(fSteer, kDetector); else CLRBIT(fSteer, kDetector);
if(cl) SETBIT(fSteer, kCluster); else CLRBIT(fSteer, kCluster);
if(trklt) SETBIT(fSteer, kTracklet); else CLRBIT(fSteer, kTracklet);
if(trkin) SETBIT(fSteer, kTrackIn); else CLRBIT(fSteer, kTrackIn);
}
void AliTRDresolution::SetDump3D(Bool_t det, Bool_t cl, Bool_t trklt, Bool_t trkin)
{
if(det) SETBIT(fSteer, 4+kDetector); else CLRBIT(fSteer, 4+kDetector);
if(cl) SETBIT(fSteer, 4+kCluster); else CLRBIT(fSteer, 4+kCluster);
if(trklt) SETBIT(fSteer, 4+kTracklet); else CLRBIT(fSteer, 4+kTracklet);
if(trkin) SETBIT(fSteer, 4+kTrackIn); else CLRBIT(fSteer, 4+kTrackIn);
}
AliTRDresolution.cxx:1000 AliTRDresolution.cxx:1001 AliTRDresolution.cxx:1002 AliTRDresolution.cxx:1003 AliTRDresolution.cxx:1004 AliTRDresolution.cxx:1005 AliTRDresolution.cxx:1006 AliTRDresolution.cxx:1007 AliTRDresolution.cxx:1008 AliTRDresolution.cxx:1009 AliTRDresolution.cxx:1010 AliTRDresolution.cxx:1011 AliTRDresolution.cxx:1012 AliTRDresolution.cxx:1013 AliTRDresolution.cxx:1014 AliTRDresolution.cxx:1015 AliTRDresolution.cxx:1016 AliTRDresolution.cxx:1017 AliTRDresolution.cxx:1018 AliTRDresolution.cxx:1019 AliTRDresolution.cxx:1020 AliTRDresolution.cxx:1021 AliTRDresolution.cxx:1022 AliTRDresolution.cxx:1023 AliTRDresolution.cxx:1024 AliTRDresolution.cxx:1025 AliTRDresolution.cxx:1026 AliTRDresolution.cxx:1027 AliTRDresolution.cxx:1028 AliTRDresolution.cxx:1029 AliTRDresolution.cxx:1030 AliTRDresolution.cxx:1031 AliTRDresolution.cxx:1032 AliTRDresolution.cxx:1033 AliTRDresolution.cxx:1034 AliTRDresolution.cxx:1035 AliTRDresolution.cxx:1036 AliTRDresolution.cxx:1037 AliTRDresolution.cxx:1038 AliTRDresolution.cxx:1039 AliTRDresolution.cxx:1040 AliTRDresolution.cxx:1041 AliTRDresolution.cxx:1042 AliTRDresolution.cxx:1043 AliTRDresolution.cxx:1044 AliTRDresolution.cxx:1045 AliTRDresolution.cxx:1046 AliTRDresolution.cxx:1047 AliTRDresolution.cxx:1048 AliTRDresolution.cxx:1049 AliTRDresolution.cxx:1050 AliTRDresolution.cxx:1051 AliTRDresolution.cxx:1052 AliTRDresolution.cxx:1053 AliTRDresolution.cxx:1054 AliTRDresolution.cxx:1055 AliTRDresolution.cxx:1056 AliTRDresolution.cxx:1057 AliTRDresolution.cxx:1058 AliTRDresolution.cxx:1059 AliTRDresolution.cxx:1060 AliTRDresolution.cxx:1061 AliTRDresolution.cxx:1062 AliTRDresolution.cxx:1063 AliTRDresolution.cxx:1064 AliTRDresolution.cxx:1065 AliTRDresolution.cxx:1066 AliTRDresolution.cxx:1067 AliTRDresolution.cxx:1068 AliTRDresolution.cxx:1069 AliTRDresolution.cxx:1070 AliTRDresolution.cxx:1071 AliTRDresolution.cxx:1072 AliTRDresolution.cxx:1073 AliTRDresolution.cxx:1074 AliTRDresolution.cxx:1075 AliTRDresolution.cxx:1076 AliTRDresolution.cxx:1077 AliTRDresolution.cxx:1078 AliTRDresolution.cxx:1079 AliTRDresolution.cxx:1080 AliTRDresolution.cxx:1081 AliTRDresolution.cxx:1082 AliTRDresolution.cxx:1083 AliTRDresolution.cxx:1084 AliTRDresolution.cxx:1085 AliTRDresolution.cxx:1086 AliTRDresolution.cxx:1087 AliTRDresolution.cxx:1088 AliTRDresolution.cxx:1089 AliTRDresolution.cxx:1090 AliTRDresolution.cxx:1091 AliTRDresolution.cxx:1092 AliTRDresolution.cxx:1093 AliTRDresolution.cxx:1094 AliTRDresolution.cxx:1095 AliTRDresolution.cxx:1096 AliTRDresolution.cxx:1097 AliTRDresolution.cxx:1098 AliTRDresolution.cxx:1099 AliTRDresolution.cxx:1100 AliTRDresolution.cxx:1101 AliTRDresolution.cxx:1102 AliTRDresolution.cxx:1103 AliTRDresolution.cxx:1104 AliTRDresolution.cxx:1105 AliTRDresolution.cxx:1106 AliTRDresolution.cxx:1107 AliTRDresolution.cxx:1108 AliTRDresolution.cxx:1109 AliTRDresolution.cxx:1110 AliTRDresolution.cxx:1111 AliTRDresolution.cxx:1112 AliTRDresolution.cxx:1113 AliTRDresolution.cxx:1114 AliTRDresolution.cxx:1115 AliTRDresolution.cxx:1116 AliTRDresolution.cxx:1117 AliTRDresolution.cxx:1118 AliTRDresolution.cxx:1119 AliTRDresolution.cxx:1120 AliTRDresolution.cxx:1121 AliTRDresolution.cxx:1122 AliTRDresolution.cxx:1123 AliTRDresolution.cxx:1124 AliTRDresolution.cxx:1125 AliTRDresolution.cxx:1126 AliTRDresolution.cxx:1127 AliTRDresolution.cxx:1128 AliTRDresolution.cxx:1129 AliTRDresolution.cxx:1130 AliTRDresolution.cxx:1131 AliTRDresolution.cxx:1132 AliTRDresolution.cxx:1133 AliTRDresolution.cxx:1134 AliTRDresolution.cxx:1135 AliTRDresolution.cxx:1136 AliTRDresolution.cxx:1137 AliTRDresolution.cxx:1138 AliTRDresolution.cxx:1139 AliTRDresolution.cxx:1140 AliTRDresolution.cxx:1141 AliTRDresolution.cxx:1142 AliTRDresolution.cxx:1143 AliTRDresolution.cxx:1144 AliTRDresolution.cxx:1145 AliTRDresolution.cxx:1146 AliTRDresolution.cxx:1147 AliTRDresolution.cxx:1148 AliTRDresolution.cxx:1149 AliTRDresolution.cxx:1150 AliTRDresolution.cxx:1151 AliTRDresolution.cxx:1152 AliTRDresolution.cxx:1153 AliTRDresolution.cxx:1154 AliTRDresolution.cxx:1155 AliTRDresolution.cxx:1156 AliTRDresolution.cxx:1157 AliTRDresolution.cxx:1158 AliTRDresolution.cxx:1159 AliTRDresolution.cxx:1160 AliTRDresolution.cxx:1161 AliTRDresolution.cxx:1162 AliTRDresolution.cxx:1163 AliTRDresolution.cxx:1164 AliTRDresolution.cxx:1165 AliTRDresolution.cxx:1166 AliTRDresolution.cxx:1167 AliTRDresolution.cxx:1168 AliTRDresolution.cxx:1169 AliTRDresolution.cxx:1170 AliTRDresolution.cxx:1171 AliTRDresolution.cxx:1172 AliTRDresolution.cxx:1173 AliTRDresolution.cxx:1174 AliTRDresolution.cxx:1175 AliTRDresolution.cxx:1176 AliTRDresolution.cxx:1177 AliTRDresolution.cxx:1178 AliTRDresolution.cxx:1179 AliTRDresolution.cxx:1180 AliTRDresolution.cxx:1181 AliTRDresolution.cxx:1182 AliTRDresolution.cxx:1183 AliTRDresolution.cxx:1184 AliTRDresolution.cxx:1185 AliTRDresolution.cxx:1186 AliTRDresolution.cxx:1187 AliTRDresolution.cxx:1188 AliTRDresolution.cxx:1189 AliTRDresolution.cxx:1190 AliTRDresolution.cxx:1191 AliTRDresolution.cxx:1192 AliTRDresolution.cxx:1193 AliTRDresolution.cxx:1194 AliTRDresolution.cxx:1195 AliTRDresolution.cxx:1196 AliTRDresolution.cxx:1197 AliTRDresolution.cxx:1198 AliTRDresolution.cxx:1199 AliTRDresolution.cxx:1200 AliTRDresolution.cxx:1201 AliTRDresolution.cxx:1202 AliTRDresolution.cxx:1203 AliTRDresolution.cxx:1204 AliTRDresolution.cxx:1205 AliTRDresolution.cxx:1206 AliTRDresolution.cxx:1207 AliTRDresolution.cxx:1208 AliTRDresolution.cxx:1209 AliTRDresolution.cxx:1210 AliTRDresolution.cxx:1211 AliTRDresolution.cxx:1212 AliTRDresolution.cxx:1213 AliTRDresolution.cxx:1214 AliTRDresolution.cxx:1215 AliTRDresolution.cxx:1216 AliTRDresolution.cxx:1217 AliTRDresolution.cxx:1218 AliTRDresolution.cxx:1219 AliTRDresolution.cxx:1220 AliTRDresolution.cxx:1221 AliTRDresolution.cxx:1222 AliTRDresolution.cxx:1223 AliTRDresolution.cxx:1224 AliTRDresolution.cxx:1225 AliTRDresolution.cxx:1226 AliTRDresolution.cxx:1227 AliTRDresolution.cxx:1228 AliTRDresolution.cxx:1229 AliTRDresolution.cxx:1230 AliTRDresolution.cxx:1231 AliTRDresolution.cxx:1232 AliTRDresolution.cxx:1233 AliTRDresolution.cxx:1234 AliTRDresolution.cxx:1235 AliTRDresolution.cxx:1236 AliTRDresolution.cxx:1237 AliTRDresolution.cxx:1238 AliTRDresolution.cxx:1239 AliTRDresolution.cxx:1240 AliTRDresolution.cxx:1241 AliTRDresolution.cxx:1242 AliTRDresolution.cxx:1243 AliTRDresolution.cxx:1244 AliTRDresolution.cxx:1245 AliTRDresolution.cxx:1246 AliTRDresolution.cxx:1247 AliTRDresolution.cxx:1248 AliTRDresolution.cxx:1249 AliTRDresolution.cxx:1250 AliTRDresolution.cxx:1251 AliTRDresolution.cxx:1252 AliTRDresolution.cxx:1253 AliTRDresolution.cxx:1254 AliTRDresolution.cxx:1255 AliTRDresolution.cxx:1256 AliTRDresolution.cxx:1257 AliTRDresolution.cxx:1258 AliTRDresolution.cxx:1259 AliTRDresolution.cxx:1260 AliTRDresolution.cxx:1261 AliTRDresolution.cxx:1262 AliTRDresolution.cxx:1263 AliTRDresolution.cxx:1264 AliTRDresolution.cxx:1265 AliTRDresolution.cxx:1266 AliTRDresolution.cxx:1267 AliTRDresolution.cxx:1268 AliTRDresolution.cxx:1269 AliTRDresolution.cxx:1270 AliTRDresolution.cxx:1271 AliTRDresolution.cxx:1272 AliTRDresolution.cxx:1273 AliTRDresolution.cxx:1274 AliTRDresolution.cxx:1275 AliTRDresolution.cxx:1276 AliTRDresolution.cxx:1277 AliTRDresolution.cxx:1278 AliTRDresolution.cxx:1279 AliTRDresolution.cxx:1280 AliTRDresolution.cxx:1281 AliTRDresolution.cxx:1282 AliTRDresolution.cxx:1283 AliTRDresolution.cxx:1284 AliTRDresolution.cxx:1285 AliTRDresolution.cxx:1286 AliTRDresolution.cxx:1287 AliTRDresolution.cxx:1288 AliTRDresolution.cxx:1289 AliTRDresolution.cxx:1290 AliTRDresolution.cxx:1291 AliTRDresolution.cxx:1292 AliTRDresolution.cxx:1293 AliTRDresolution.cxx:1294 AliTRDresolution.cxx:1295 AliTRDresolution.cxx:1296 AliTRDresolution.cxx:1297 AliTRDresolution.cxx:1298 AliTRDresolution.cxx:1299 AliTRDresolution.cxx:1300 AliTRDresolution.cxx:1301 AliTRDresolution.cxx:1302 AliTRDresolution.cxx:1303 AliTRDresolution.cxx:1304 AliTRDresolution.cxx:1305 AliTRDresolution.cxx:1306 AliTRDresolution.cxx:1307 AliTRDresolution.cxx:1308 AliTRDresolution.cxx:1309 AliTRDresolution.cxx:1310 AliTRDresolution.cxx:1311 AliTRDresolution.cxx:1312 AliTRDresolution.cxx:1313 AliTRDresolution.cxx:1314 AliTRDresolution.cxx:1315 AliTRDresolution.cxx:1316 AliTRDresolution.cxx:1317 AliTRDresolution.cxx:1318 AliTRDresolution.cxx:1319 AliTRDresolution.cxx:1320 AliTRDresolution.cxx:1321 AliTRDresolution.cxx:1322 AliTRDresolution.cxx:1323 AliTRDresolution.cxx:1324 AliTRDresolution.cxx:1325 AliTRDresolution.cxx:1326 AliTRDresolution.cxx:1327 AliTRDresolution.cxx:1328 AliTRDresolution.cxx:1329 AliTRDresolution.cxx:1330 AliTRDresolution.cxx:1331 AliTRDresolution.cxx:1332 AliTRDresolution.cxx:1333 AliTRDresolution.cxx:1334 AliTRDresolution.cxx:1335 AliTRDresolution.cxx:1336 AliTRDresolution.cxx:1337 AliTRDresolution.cxx:1338 AliTRDresolution.cxx:1339 AliTRDresolution.cxx:1340 AliTRDresolution.cxx:1341 AliTRDresolution.cxx:1342 AliTRDresolution.cxx:1343 AliTRDresolution.cxx:1344 AliTRDresolution.cxx:1345 AliTRDresolution.cxx:1346 AliTRDresolution.cxx:1347 AliTRDresolution.cxx:1348 AliTRDresolution.cxx:1349 AliTRDresolution.cxx:1350 AliTRDresolution.cxx:1351 AliTRDresolution.cxx:1352 AliTRDresolution.cxx:1353 AliTRDresolution.cxx:1354 AliTRDresolution.cxx:1355 AliTRDresolution.cxx:1356 AliTRDresolution.cxx:1357 AliTRDresolution.cxx:1358 AliTRDresolution.cxx:1359 AliTRDresolution.cxx:1360 AliTRDresolution.cxx:1361 AliTRDresolution.cxx:1362 AliTRDresolution.cxx:1363 AliTRDresolution.cxx:1364 AliTRDresolution.cxx:1365 AliTRDresolution.cxx:1366 AliTRDresolution.cxx:1367 AliTRDresolution.cxx:1368 AliTRDresolution.cxx:1369 AliTRDresolution.cxx:1370 AliTRDresolution.cxx:1371 AliTRDresolution.cxx:1372 AliTRDresolution.cxx:1373 AliTRDresolution.cxx:1374 AliTRDresolution.cxx:1375 AliTRDresolution.cxx:1376 AliTRDresolution.cxx:1377 AliTRDresolution.cxx:1378 AliTRDresolution.cxx:1379 AliTRDresolution.cxx:1380 AliTRDresolution.cxx:1381 AliTRDresolution.cxx:1382 AliTRDresolution.cxx:1383 AliTRDresolution.cxx:1384 AliTRDresolution.cxx:1385 AliTRDresolution.cxx:1386 AliTRDresolution.cxx:1387 AliTRDresolution.cxx:1388 AliTRDresolution.cxx:1389 AliTRDresolution.cxx:1390 AliTRDresolution.cxx:1391 AliTRDresolution.cxx:1392 AliTRDresolution.cxx:1393 AliTRDresolution.cxx:1394 AliTRDresolution.cxx:1395 AliTRDresolution.cxx:1396 AliTRDresolution.cxx:1397 AliTRDresolution.cxx:1398 AliTRDresolution.cxx:1399 AliTRDresolution.cxx:1400 AliTRDresolution.cxx:1401 AliTRDresolution.cxx:1402 AliTRDresolution.cxx:1403 AliTRDresolution.cxx:1404 AliTRDresolution.cxx:1405 AliTRDresolution.cxx:1406 AliTRDresolution.cxx:1407 AliTRDresolution.cxx:1408 AliTRDresolution.cxx:1409 AliTRDresolution.cxx:1410 AliTRDresolution.cxx:1411 AliTRDresolution.cxx:1412 AliTRDresolution.cxx:1413 AliTRDresolution.cxx:1414 AliTRDresolution.cxx:1415 AliTRDresolution.cxx:1416 AliTRDresolution.cxx:1417 AliTRDresolution.cxx:1418 AliTRDresolution.cxx:1419 AliTRDresolution.cxx:1420 AliTRDresolution.cxx:1421 AliTRDresolution.cxx:1422 AliTRDresolution.cxx:1423 AliTRDresolution.cxx:1424 AliTRDresolution.cxx:1425 AliTRDresolution.cxx:1426 AliTRDresolution.cxx:1427 AliTRDresolution.cxx:1428 AliTRDresolution.cxx:1429 AliTRDresolution.cxx:1430 AliTRDresolution.cxx:1431 AliTRDresolution.cxx:1432 AliTRDresolution.cxx:1433 AliTRDresolution.cxx:1434 AliTRDresolution.cxx:1435 AliTRDresolution.cxx:1436 AliTRDresolution.cxx:1437 AliTRDresolution.cxx:1438 AliTRDresolution.cxx:1439 AliTRDresolution.cxx:1440 AliTRDresolution.cxx:1441 AliTRDresolution.cxx:1442 AliTRDresolution.cxx:1443 AliTRDresolution.cxx:1444 AliTRDresolution.cxx:1445 AliTRDresolution.cxx:1446 AliTRDresolution.cxx:1447 AliTRDresolution.cxx:1448 AliTRDresolution.cxx:1449 AliTRDresolution.cxx:1450 AliTRDresolution.cxx:1451 AliTRDresolution.cxx:1452 AliTRDresolution.cxx:1453 AliTRDresolution.cxx:1454 AliTRDresolution.cxx:1455 AliTRDresolution.cxx:1456 AliTRDresolution.cxx:1457 AliTRDresolution.cxx:1458 AliTRDresolution.cxx:1459 AliTRDresolution.cxx:1460 AliTRDresolution.cxx:1461 AliTRDresolution.cxx:1462 AliTRDresolution.cxx:1463 AliTRDresolution.cxx:1464 AliTRDresolution.cxx:1465 AliTRDresolution.cxx:1466 AliTRDresolution.cxx:1467 AliTRDresolution.cxx:1468 AliTRDresolution.cxx:1469 AliTRDresolution.cxx:1470 AliTRDresolution.cxx:1471 AliTRDresolution.cxx:1472 AliTRDresolution.cxx:1473 AliTRDresolution.cxx:1474 AliTRDresolution.cxx:1475 AliTRDresolution.cxx:1476 AliTRDresolution.cxx:1477 AliTRDresolution.cxx:1478 AliTRDresolution.cxx:1479 AliTRDresolution.cxx:1480 AliTRDresolution.cxx:1481 AliTRDresolution.cxx:1482 AliTRDresolution.cxx:1483 AliTRDresolution.cxx:1484 AliTRDresolution.cxx:1485 AliTRDresolution.cxx:1486 AliTRDresolution.cxx:1487 AliTRDresolution.cxx:1488 AliTRDresolution.cxx:1489 AliTRDresolution.cxx:1490 AliTRDresolution.cxx:1491 AliTRDresolution.cxx:1492 AliTRDresolution.cxx:1493 AliTRDresolution.cxx:1494 AliTRDresolution.cxx:1495 AliTRDresolution.cxx:1496 AliTRDresolution.cxx:1497 AliTRDresolution.cxx:1498 AliTRDresolution.cxx:1499 AliTRDresolution.cxx:1500 AliTRDresolution.cxx:1501 AliTRDresolution.cxx:1502 AliTRDresolution.cxx:1503 AliTRDresolution.cxx:1504 AliTRDresolution.cxx:1505 AliTRDresolution.cxx:1506 AliTRDresolution.cxx:1507 AliTRDresolution.cxx:1508 AliTRDresolution.cxx:1509 AliTRDresolution.cxx:1510 AliTRDresolution.cxx:1511 AliTRDresolution.cxx:1512 AliTRDresolution.cxx:1513 AliTRDresolution.cxx:1514 AliTRDresolution.cxx:1515 AliTRDresolution.cxx:1516 AliTRDresolution.cxx:1517 AliTRDresolution.cxx:1518 AliTRDresolution.cxx:1519 AliTRDresolution.cxx:1520 AliTRDresolution.cxx:1521 AliTRDresolution.cxx:1522 AliTRDresolution.cxx:1523 AliTRDresolution.cxx:1524 AliTRDresolution.cxx:1525 AliTRDresolution.cxx:1526 AliTRDresolution.cxx:1527 AliTRDresolution.cxx:1528 AliTRDresolution.cxx:1529 AliTRDresolution.cxx:1530 AliTRDresolution.cxx:1531 AliTRDresolution.cxx:1532 AliTRDresolution.cxx:1533 AliTRDresolution.cxx:1534 AliTRDresolution.cxx:1535 AliTRDresolution.cxx:1536 AliTRDresolution.cxx:1537 AliTRDresolution.cxx:1538 AliTRDresolution.cxx:1539 AliTRDresolution.cxx:1540 AliTRDresolution.cxx:1541 AliTRDresolution.cxx:1542 AliTRDresolution.cxx:1543 AliTRDresolution.cxx:1544 AliTRDresolution.cxx:1545 AliTRDresolution.cxx:1546 AliTRDresolution.cxx:1547 AliTRDresolution.cxx:1548 AliTRDresolution.cxx:1549 AliTRDresolution.cxx:1550 AliTRDresolution.cxx:1551 AliTRDresolution.cxx:1552 AliTRDresolution.cxx:1553 AliTRDresolution.cxx:1554 AliTRDresolution.cxx:1555 AliTRDresolution.cxx:1556 AliTRDresolution.cxx:1557 AliTRDresolution.cxx:1558 AliTRDresolution.cxx:1559 AliTRDresolution.cxx:1560 AliTRDresolution.cxx:1561 AliTRDresolution.cxx:1562 AliTRDresolution.cxx:1563 AliTRDresolution.cxx:1564 AliTRDresolution.cxx:1565 AliTRDresolution.cxx:1566 AliTRDresolution.cxx:1567 AliTRDresolution.cxx:1568 AliTRDresolution.cxx:1569 AliTRDresolution.cxx:1570 AliTRDresolution.cxx:1571 AliTRDresolution.cxx:1572 AliTRDresolution.cxx:1573 AliTRDresolution.cxx:1574 AliTRDresolution.cxx:1575 AliTRDresolution.cxx:1576 AliTRDresolution.cxx:1577 AliTRDresolution.cxx:1578 AliTRDresolution.cxx:1579 AliTRDresolution.cxx:1580 AliTRDresolution.cxx:1581 AliTRDresolution.cxx:1582 AliTRDresolution.cxx:1583 AliTRDresolution.cxx:1584 AliTRDresolution.cxx:1585 AliTRDresolution.cxx:1586 AliTRDresolution.cxx:1587 AliTRDresolution.cxx:1588 AliTRDresolution.cxx:1589 AliTRDresolution.cxx:1590 AliTRDresolution.cxx:1591 AliTRDresolution.cxx:1592 AliTRDresolution.cxx:1593 AliTRDresolution.cxx:1594 AliTRDresolution.cxx:1595 AliTRDresolution.cxx:1596 AliTRDresolution.cxx:1597 AliTRDresolution.cxx:1598 AliTRDresolution.cxx:1599 AliTRDresolution.cxx:1600 AliTRDresolution.cxx:1601 AliTRDresolution.cxx:1602 AliTRDresolution.cxx:1603 AliTRDresolution.cxx:1604 AliTRDresolution.cxx:1605 AliTRDresolution.cxx:1606 AliTRDresolution.cxx:1607 AliTRDresolution.cxx:1608 AliTRDresolution.cxx:1609 AliTRDresolution.cxx:1610 AliTRDresolution.cxx:1611 AliTRDresolution.cxx:1612 AliTRDresolution.cxx:1613 AliTRDresolution.cxx:1614 AliTRDresolution.cxx:1615 AliTRDresolution.cxx:1616 AliTRDresolution.cxx:1617 AliTRDresolution.cxx:1618 AliTRDresolution.cxx:1619 AliTRDresolution.cxx:1620 AliTRDresolution.cxx:1621 AliTRDresolution.cxx:1622 AliTRDresolution.cxx:1623 AliTRDresolution.cxx:1624 AliTRDresolution.cxx:1625 AliTRDresolution.cxx:1626 AliTRDresolution.cxx:1627 AliTRDresolution.cxx:1628 AliTRDresolution.cxx:1629 AliTRDresolution.cxx:1630 AliTRDresolution.cxx:1631 AliTRDresolution.cxx:1632 AliTRDresolution.cxx:1633 AliTRDresolution.cxx:1634 AliTRDresolution.cxx:1635 AliTRDresolution.cxx:1636 AliTRDresolution.cxx:1637 AliTRDresolution.cxx:1638 AliTRDresolution.cxx:1639 AliTRDresolution.cxx:1640 AliTRDresolution.cxx:1641 AliTRDresolution.cxx:1642 AliTRDresolution.cxx:1643 AliTRDresolution.cxx:1644 AliTRDresolution.cxx:1645 AliTRDresolution.cxx:1646 AliTRDresolution.cxx:1647 AliTRDresolution.cxx:1648 AliTRDresolution.cxx:1649 AliTRDresolution.cxx:1650 AliTRDresolution.cxx:1651 AliTRDresolution.cxx:1652 AliTRDresolution.cxx:1653 AliTRDresolution.cxx:1654 AliTRDresolution.cxx:1655 AliTRDresolution.cxx:1656 AliTRDresolution.cxx:1657 AliTRDresolution.cxx:1658 AliTRDresolution.cxx:1659 AliTRDresolution.cxx:1660 AliTRDresolution.cxx:1661 AliTRDresolution.cxx:1662 AliTRDresolution.cxx:1663 AliTRDresolution.cxx:1664 AliTRDresolution.cxx:1665 AliTRDresolution.cxx:1666 AliTRDresolution.cxx:1667 AliTRDresolution.cxx:1668 AliTRDresolution.cxx:1669 AliTRDresolution.cxx:1670 AliTRDresolution.cxx:1671 AliTRDresolution.cxx:1672 AliTRDresolution.cxx:1673 AliTRDresolution.cxx:1674 AliTRDresolution.cxx:1675 AliTRDresolution.cxx:1676 AliTRDresolution.cxx:1677 AliTRDresolution.cxx:1678 AliTRDresolution.cxx:1679 AliTRDresolution.cxx:1680 AliTRDresolution.cxx:1681 AliTRDresolution.cxx:1682 AliTRDresolution.cxx:1683 AliTRDresolution.cxx:1684 AliTRDresolution.cxx:1685 AliTRDresolution.cxx:1686 AliTRDresolution.cxx:1687 AliTRDresolution.cxx:1688 AliTRDresolution.cxx:1689 AliTRDresolution.cxx:1690 AliTRDresolution.cxx:1691 AliTRDresolution.cxx:1692 AliTRDresolution.cxx:1693 AliTRDresolution.cxx:1694 AliTRDresolution.cxx:1695 AliTRDresolution.cxx:1696 AliTRDresolution.cxx:1697 AliTRDresolution.cxx:1698 AliTRDresolution.cxx:1699 AliTRDresolution.cxx:1700 AliTRDresolution.cxx:1701 AliTRDresolution.cxx:1702 AliTRDresolution.cxx:1703 AliTRDresolution.cxx:1704 AliTRDresolution.cxx:1705 AliTRDresolution.cxx:1706 AliTRDresolution.cxx:1707 AliTRDresolution.cxx:1708 AliTRDresolution.cxx:1709 AliTRDresolution.cxx:1710 AliTRDresolution.cxx:1711 AliTRDresolution.cxx:1712 AliTRDresolution.cxx:1713 AliTRDresolution.cxx:1714 AliTRDresolution.cxx:1715 AliTRDresolution.cxx:1716 AliTRDresolution.cxx:1717 AliTRDresolution.cxx:1718 AliTRDresolution.cxx:1719 AliTRDresolution.cxx:1720 AliTRDresolution.cxx:1721 AliTRDresolution.cxx:1722 AliTRDresolution.cxx:1723 AliTRDresolution.cxx:1724 AliTRDresolution.cxx:1725 AliTRDresolution.cxx:1726 AliTRDresolution.cxx:1727 AliTRDresolution.cxx:1728 AliTRDresolution.cxx:1729 AliTRDresolution.cxx:1730 AliTRDresolution.cxx:1731 AliTRDresolution.cxx:1732 AliTRDresolution.cxx:1733 AliTRDresolution.cxx:1734 AliTRDresolution.cxx:1735 AliTRDresolution.cxx:1736 AliTRDresolution.cxx:1737 AliTRDresolution.cxx:1738 AliTRDresolution.cxx:1739 AliTRDresolution.cxx:1740 AliTRDresolution.cxx:1741 AliTRDresolution.cxx:1742 AliTRDresolution.cxx:1743 AliTRDresolution.cxx:1744 AliTRDresolution.cxx:1745 AliTRDresolution.cxx:1746 AliTRDresolution.cxx:1747 AliTRDresolution.cxx:1748 AliTRDresolution.cxx:1749 AliTRDresolution.cxx:1750 AliTRDresolution.cxx:1751 AliTRDresolution.cxx:1752 AliTRDresolution.cxx:1753 AliTRDresolution.cxx:1754 AliTRDresolution.cxx:1755 AliTRDresolution.cxx:1756 AliTRDresolution.cxx:1757 AliTRDresolution.cxx:1758 AliTRDresolution.cxx:1759 AliTRDresolution.cxx:1760 AliTRDresolution.cxx:1761 AliTRDresolution.cxx:1762 AliTRDresolution.cxx:1763 AliTRDresolution.cxx:1764 AliTRDresolution.cxx:1765 AliTRDresolution.cxx:1766 AliTRDresolution.cxx:1767 AliTRDresolution.cxx:1768 AliTRDresolution.cxx:1769 AliTRDresolution.cxx:1770 AliTRDresolution.cxx:1771 AliTRDresolution.cxx:1772 AliTRDresolution.cxx:1773 AliTRDresolution.cxx:1774 AliTRDresolution.cxx:1775 AliTRDresolution.cxx:1776 AliTRDresolution.cxx:1777 AliTRDresolution.cxx:1778 AliTRDresolution.cxx:1779 AliTRDresolution.cxx:1780 AliTRDresolution.cxx:1781 AliTRDresolution.cxx:1782 AliTRDresolution.cxx:1783 AliTRDresolution.cxx:1784 AliTRDresolution.cxx:1785 AliTRDresolution.cxx:1786 AliTRDresolution.cxx:1787 AliTRDresolution.cxx:1788 AliTRDresolution.cxx:1789 AliTRDresolution.cxx:1790 AliTRDresolution.cxx:1791 AliTRDresolution.cxx:1792 AliTRDresolution.cxx:1793 AliTRDresolution.cxx:1794 AliTRDresolution.cxx:1795 AliTRDresolution.cxx:1796 AliTRDresolution.cxx:1797 AliTRDresolution.cxx:1798 AliTRDresolution.cxx:1799 AliTRDresolution.cxx:1800 AliTRDresolution.cxx:1801 AliTRDresolution.cxx:1802 AliTRDresolution.cxx:1803 AliTRDresolution.cxx:1804 AliTRDresolution.cxx:1805 AliTRDresolution.cxx:1806 AliTRDresolution.cxx:1807 AliTRDresolution.cxx:1808 AliTRDresolution.cxx:1809 AliTRDresolution.cxx:1810 AliTRDresolution.cxx:1811 AliTRDresolution.cxx:1812 AliTRDresolution.cxx:1813 AliTRDresolution.cxx:1814 AliTRDresolution.cxx:1815 AliTRDresolution.cxx:1816 AliTRDresolution.cxx:1817 AliTRDresolution.cxx:1818 AliTRDresolution.cxx:1819 AliTRDresolution.cxx:1820 AliTRDresolution.cxx:1821 AliTRDresolution.cxx:1822 AliTRDresolution.cxx:1823 AliTRDresolution.cxx:1824 AliTRDresolution.cxx:1825 AliTRDresolution.cxx:1826 AliTRDresolution.cxx:1827 AliTRDresolution.cxx:1828 AliTRDresolution.cxx:1829 AliTRDresolution.cxx:1830 AliTRDresolution.cxx:1831 AliTRDresolution.cxx:1832 AliTRDresolution.cxx:1833 AliTRDresolution.cxx:1834 AliTRDresolution.cxx:1835 AliTRDresolution.cxx:1836 AliTRDresolution.cxx:1837 AliTRDresolution.cxx:1838 AliTRDresolution.cxx:1839 AliTRDresolution.cxx:1840 AliTRDresolution.cxx:1841 AliTRDresolution.cxx:1842 AliTRDresolution.cxx:1843 AliTRDresolution.cxx:1844 AliTRDresolution.cxx:1845 AliTRDresolution.cxx:1846 AliTRDresolution.cxx:1847 AliTRDresolution.cxx:1848 AliTRDresolution.cxx:1849 AliTRDresolution.cxx:1850 AliTRDresolution.cxx:1851 AliTRDresolution.cxx:1852 AliTRDresolution.cxx:1853 AliTRDresolution.cxx:1854 AliTRDresolution.cxx:1855 AliTRDresolution.cxx:1856 AliTRDresolution.cxx:1857 AliTRDresolution.cxx:1858 AliTRDresolution.cxx:1859 AliTRDresolution.cxx:1860 AliTRDresolution.cxx:1861 AliTRDresolution.cxx:1862 AliTRDresolution.cxx:1863 AliTRDresolution.cxx:1864 AliTRDresolution.cxx:1865 AliTRDresolution.cxx:1866 AliTRDresolution.cxx:1867 AliTRDresolution.cxx:1868 AliTRDresolution.cxx:1869 AliTRDresolution.cxx:1870 AliTRDresolution.cxx:1871 AliTRDresolution.cxx:1872 AliTRDresolution.cxx:1873 AliTRDresolution.cxx:1874 AliTRDresolution.cxx:1875 AliTRDresolution.cxx:1876 AliTRDresolution.cxx:1877 AliTRDresolution.cxx:1878 AliTRDresolution.cxx:1879 AliTRDresolution.cxx:1880 AliTRDresolution.cxx:1881 AliTRDresolution.cxx:1882 AliTRDresolution.cxx:1883 AliTRDresolution.cxx:1884 AliTRDresolution.cxx:1885 AliTRDresolution.cxx:1886 AliTRDresolution.cxx:1887 AliTRDresolution.cxx:1888 AliTRDresolution.cxx:1889 AliTRDresolution.cxx:1890 AliTRDresolution.cxx:1891 AliTRDresolution.cxx:1892 AliTRDresolution.cxx:1893 AliTRDresolution.cxx:1894 AliTRDresolution.cxx:1895 AliTRDresolution.cxx:1896 AliTRDresolution.cxx:1897 AliTRDresolution.cxx:1898 AliTRDresolution.cxx:1899 AliTRDresolution.cxx:1900 AliTRDresolution.cxx:1901 AliTRDresolution.cxx:1902 AliTRDresolution.cxx:1903 AliTRDresolution.cxx:1904 AliTRDresolution.cxx:1905 AliTRDresolution.cxx:1906 AliTRDresolution.cxx:1907 AliTRDresolution.cxx:1908 AliTRDresolution.cxx:1909 AliTRDresolution.cxx:1910 AliTRDresolution.cxx:1911 AliTRDresolution.cxx:1912 AliTRDresolution.cxx:1913 AliTRDresolution.cxx:1914 AliTRDresolution.cxx:1915 AliTRDresolution.cxx:1916 AliTRDresolution.cxx:1917 AliTRDresolution.cxx:1918 AliTRDresolution.cxx:1919 AliTRDresolution.cxx:1920 AliTRDresolution.cxx:1921 AliTRDresolution.cxx:1922 AliTRDresolution.cxx:1923 AliTRDresolution.cxx:1924 AliTRDresolution.cxx:1925 AliTRDresolution.cxx:1926 AliTRDresolution.cxx:1927 AliTRDresolution.cxx:1928 AliTRDresolution.cxx:1929 AliTRDresolution.cxx:1930 AliTRDresolution.cxx:1931 AliTRDresolution.cxx:1932 AliTRDresolution.cxx:1933 AliTRDresolution.cxx:1934 AliTRDresolution.cxx:1935 AliTRDresolution.cxx:1936 AliTRDresolution.cxx:1937 AliTRDresolution.cxx:1938 AliTRDresolution.cxx:1939 AliTRDresolution.cxx:1940 AliTRDresolution.cxx:1941 AliTRDresolution.cxx:1942 AliTRDresolution.cxx:1943 AliTRDresolution.cxx:1944 AliTRDresolution.cxx:1945 AliTRDresolution.cxx:1946 AliTRDresolution.cxx:1947 AliTRDresolution.cxx:1948 AliTRDresolution.cxx:1949 AliTRDresolution.cxx:1950 AliTRDresolution.cxx:1951 AliTRDresolution.cxx:1952 AliTRDresolution.cxx:1953 AliTRDresolution.cxx:1954 AliTRDresolution.cxx:1955 AliTRDresolution.cxx:1956 AliTRDresolution.cxx:1957 AliTRDresolution.cxx:1958 AliTRDresolution.cxx:1959 AliTRDresolution.cxx:1960 AliTRDresolution.cxx:1961 AliTRDresolution.cxx:1962 AliTRDresolution.cxx:1963 AliTRDresolution.cxx:1964 AliTRDresolution.cxx:1965 AliTRDresolution.cxx:1966 AliTRDresolution.cxx:1967 AliTRDresolution.cxx:1968 AliTRDresolution.cxx:1969 AliTRDresolution.cxx:1970 AliTRDresolution.cxx:1971 AliTRDresolution.cxx:1972 AliTRDresolution.cxx:1973 AliTRDresolution.cxx:1974 AliTRDresolution.cxx:1975 AliTRDresolution.cxx:1976 AliTRDresolution.cxx:1977 AliTRDresolution.cxx:1978 AliTRDresolution.cxx:1979 AliTRDresolution.cxx:1980 AliTRDresolution.cxx:1981 AliTRDresolution.cxx:1982 AliTRDresolution.cxx:1983 AliTRDresolution.cxx:1984 AliTRDresolution.cxx:1985 AliTRDresolution.cxx:1986 AliTRDresolution.cxx:1987 AliTRDresolution.cxx:1988 AliTRDresolution.cxx:1989 AliTRDresolution.cxx:1990 AliTRDresolution.cxx:1991 AliTRDresolution.cxx:1992 AliTRDresolution.cxx:1993 AliTRDresolution.cxx:1994 AliTRDresolution.cxx:1995 AliTRDresolution.cxx:1996 AliTRDresolution.cxx:1997 AliTRDresolution.cxx:1998 AliTRDresolution.cxx:1999 AliTRDresolution.cxx:2000 AliTRDresolution.cxx:2001 AliTRDresolution.cxx:2002 AliTRDresolution.cxx:2003 AliTRDresolution.cxx:2004 AliTRDresolution.cxx:2005 AliTRDresolution.cxx:2006 AliTRDresolution.cxx:2007 AliTRDresolution.cxx:2008 AliTRDresolution.cxx:2009 AliTRDresolution.cxx:2010 AliTRDresolution.cxx:2011 AliTRDresolution.cxx:2012 AliTRDresolution.cxx:2013 AliTRDresolution.cxx:2014 AliTRDresolution.cxx:2015 AliTRDresolution.cxx:2016 AliTRDresolution.cxx:2017 AliTRDresolution.cxx:2018 AliTRDresolution.cxx:2019 AliTRDresolution.cxx:2020 AliTRDresolution.cxx:2021 AliTRDresolution.cxx:2022 AliTRDresolution.cxx:2023 AliTRDresolution.cxx:2024 AliTRDresolution.cxx:2025 AliTRDresolution.cxx:2026 AliTRDresolution.cxx:2027 AliTRDresolution.cxx:2028 AliTRDresolution.cxx:2029 AliTRDresolution.cxx:2030 AliTRDresolution.cxx:2031 AliTRDresolution.cxx:2032 AliTRDresolution.cxx:2033 AliTRDresolution.cxx:2034 AliTRDresolution.cxx:2035 AliTRDresolution.cxx:2036 AliTRDresolution.cxx:2037 AliTRDresolution.cxx:2038 AliTRDresolution.cxx:2039 AliTRDresolution.cxx:2040 AliTRDresolution.cxx:2041 AliTRDresolution.cxx:2042 AliTRDresolution.cxx:2043 AliTRDresolution.cxx:2044 AliTRDresolution.cxx:2045 AliTRDresolution.cxx:2046 AliTRDresolution.cxx:2047 AliTRDresolution.cxx:2048 AliTRDresolution.cxx:2049 AliTRDresolution.cxx:2050 AliTRDresolution.cxx:2051 AliTRDresolution.cxx:2052 AliTRDresolution.cxx:2053 AliTRDresolution.cxx:2054 AliTRDresolution.cxx:2055 AliTRDresolution.cxx:2056 AliTRDresolution.cxx:2057 AliTRDresolution.cxx:2058 AliTRDresolution.cxx:2059 AliTRDresolution.cxx:2060 AliTRDresolution.cxx:2061 AliTRDresolution.cxx:2062 AliTRDresolution.cxx:2063 AliTRDresolution.cxx:2064 AliTRDresolution.cxx:2065 AliTRDresolution.cxx:2066 AliTRDresolution.cxx:2067 AliTRDresolution.cxx:2068 AliTRDresolution.cxx:2069 AliTRDresolution.cxx:2070 AliTRDresolution.cxx:2071 AliTRDresolution.cxx:2072 AliTRDresolution.cxx:2073 AliTRDresolution.cxx:2074 AliTRDresolution.cxx:2075 AliTRDresolution.cxx:2076 AliTRDresolution.cxx:2077 AliTRDresolution.cxx:2078 AliTRDresolution.cxx:2079 AliTRDresolution.cxx:2080 AliTRDresolution.cxx:2081 AliTRDresolution.cxx:2082 AliTRDresolution.cxx:2083 AliTRDresolution.cxx:2084 AliTRDresolution.cxx:2085 AliTRDresolution.cxx:2086 AliTRDresolution.cxx:2087 AliTRDresolution.cxx:2088 AliTRDresolution.cxx:2089 AliTRDresolution.cxx:2090 AliTRDresolution.cxx:2091 AliTRDresolution.cxx:2092 AliTRDresolution.cxx:2093 AliTRDresolution.cxx:2094 AliTRDresolution.cxx:2095 AliTRDresolution.cxx:2096 AliTRDresolution.cxx:2097 AliTRDresolution.cxx:2098 AliTRDresolution.cxx:2099 AliTRDresolution.cxx:2100 AliTRDresolution.cxx:2101 AliTRDresolution.cxx:2102 AliTRDresolution.cxx:2103 AliTRDresolution.cxx:2104 AliTRDresolution.cxx:2105 AliTRDresolution.cxx:2106 AliTRDresolution.cxx:2107 AliTRDresolution.cxx:2108 AliTRDresolution.cxx:2109 AliTRDresolution.cxx:2110 AliTRDresolution.cxx:2111 AliTRDresolution.cxx:2112 AliTRDresolution.cxx:2113 AliTRDresolution.cxx:2114 AliTRDresolution.cxx:2115 AliTRDresolution.cxx:2116 AliTRDresolution.cxx:2117 AliTRDresolution.cxx:2118 AliTRDresolution.cxx:2119 AliTRDresolution.cxx:2120 AliTRDresolution.cxx:2121 AliTRDresolution.cxx:2122 AliTRDresolution.cxx:2123 AliTRDresolution.cxx:2124 AliTRDresolution.cxx:2125 AliTRDresolution.cxx:2126 AliTRDresolution.cxx:2127 AliTRDresolution.cxx:2128 AliTRDresolution.cxx:2129 AliTRDresolution.cxx:2130 AliTRDresolution.cxx:2131 AliTRDresolution.cxx:2132 AliTRDresolution.cxx:2133 AliTRDresolution.cxx:2134 AliTRDresolution.cxx:2135 AliTRDresolution.cxx:2136 AliTRDresolution.cxx:2137 AliTRDresolution.cxx:2138 AliTRDresolution.cxx:2139 AliTRDresolution.cxx:2140 AliTRDresolution.cxx:2141 AliTRDresolution.cxx:2142 AliTRDresolution.cxx:2143 AliTRDresolution.cxx:2144 AliTRDresolution.cxx:2145 AliTRDresolution.cxx:2146 AliTRDresolution.cxx:2147 AliTRDresolution.cxx:2148 AliTRDresolution.cxx:2149 AliTRDresolution.cxx:2150 AliTRDresolution.cxx:2151 AliTRDresolution.cxx:2152 AliTRDresolution.cxx:2153 AliTRDresolution.cxx:2154 AliTRDresolution.cxx:2155 AliTRDresolution.cxx:2156 AliTRDresolution.cxx:2157 AliTRDresolution.cxx:2158 AliTRDresolution.cxx:2159 AliTRDresolution.cxx:2160 AliTRDresolution.cxx:2161 AliTRDresolution.cxx:2162 AliTRDresolution.cxx:2163 AliTRDresolution.cxx:2164 AliTRDresolution.cxx:2165 AliTRDresolution.cxx:2166 AliTRDresolution.cxx:2167 AliTRDresolution.cxx:2168 AliTRDresolution.cxx:2169 AliTRDresolution.cxx:2170 AliTRDresolution.cxx:2171 AliTRDresolution.cxx:2172 AliTRDresolution.cxx:2173 AliTRDresolution.cxx:2174 AliTRDresolution.cxx:2175 AliTRDresolution.cxx:2176 AliTRDresolution.cxx:2177 AliTRDresolution.cxx:2178 AliTRDresolution.cxx:2179 AliTRDresolution.cxx:2180 AliTRDresolution.cxx:2181 AliTRDresolution.cxx:2182 AliTRDresolution.cxx:2183 AliTRDresolution.cxx:2184 AliTRDresolution.cxx:2185 AliTRDresolution.cxx:2186 AliTRDresolution.cxx:2187 AliTRDresolution.cxx:2188 AliTRDresolution.cxx:2189 AliTRDresolution.cxx:2190 AliTRDresolution.cxx:2191 AliTRDresolution.cxx:2192 AliTRDresolution.cxx:2193 AliTRDresolution.cxx:2194 AliTRDresolution.cxx:2195 AliTRDresolution.cxx:2196 AliTRDresolution.cxx:2197 AliTRDresolution.cxx:2198 AliTRDresolution.cxx:2199 AliTRDresolution.cxx:2200 AliTRDresolution.cxx:2201 AliTRDresolution.cxx:2202 AliTRDresolution.cxx:2203 AliTRDresolution.cxx:2204 AliTRDresolution.cxx:2205 AliTRDresolution.cxx:2206 AliTRDresolution.cxx:2207 AliTRDresolution.cxx:2208 AliTRDresolution.cxx:2209 AliTRDresolution.cxx:2210 AliTRDresolution.cxx:2211 AliTRDresolution.cxx:2212 AliTRDresolution.cxx:2213 AliTRDresolution.cxx:2214 AliTRDresolution.cxx:2215 AliTRDresolution.cxx:2216 AliTRDresolution.cxx:2217 AliTRDresolution.cxx:2218 AliTRDresolution.cxx:2219 AliTRDresolution.cxx:2220 AliTRDresolution.cxx:2221 AliTRDresolution.cxx:2222 AliTRDresolution.cxx:2223 AliTRDresolution.cxx:2224 AliTRDresolution.cxx:2225 AliTRDresolution.cxx:2226 AliTRDresolution.cxx:2227 AliTRDresolution.cxx:2228 AliTRDresolution.cxx:2229 AliTRDresolution.cxx:2230 AliTRDresolution.cxx:2231 AliTRDresolution.cxx:2232 AliTRDresolution.cxx:2233 AliTRDresolution.cxx:2234 AliTRDresolution.cxx:2235 AliTRDresolution.cxx:2236 AliTRDresolution.cxx:2237 AliTRDresolution.cxx:2238 AliTRDresolution.cxx:2239 AliTRDresolution.cxx:2240 AliTRDresolution.cxx:2241 AliTRDresolution.cxx:2242 AliTRDresolution.cxx:2243 AliTRDresolution.cxx:2244 AliTRDresolution.cxx:2245 AliTRDresolution.cxx:2246 AliTRDresolution.cxx:2247 AliTRDresolution.cxx:2248 AliTRDresolution.cxx:2249 AliTRDresolution.cxx:2250 AliTRDresolution.cxx:2251 AliTRDresolution.cxx:2252 AliTRDresolution.cxx:2253 AliTRDresolution.cxx:2254 AliTRDresolution.cxx:2255 AliTRDresolution.cxx:2256 AliTRDresolution.cxx:2257 AliTRDresolution.cxx:2258 AliTRDresolution.cxx:2259 AliTRDresolution.cxx:2260 AliTRDresolution.cxx:2261 AliTRDresolution.cxx:2262 AliTRDresolution.cxx:2263 AliTRDresolution.cxx:2264 AliTRDresolution.cxx:2265 AliTRDresolution.cxx:2266 AliTRDresolution.cxx:2267 AliTRDresolution.cxx:2268 AliTRDresolution.cxx:2269 AliTRDresolution.cxx:2270 AliTRDresolution.cxx:2271 AliTRDresolution.cxx:2272 AliTRDresolution.cxx:2273 AliTRDresolution.cxx:2274 AliTRDresolution.cxx:2275 AliTRDresolution.cxx:2276 AliTRDresolution.cxx:2277 AliTRDresolution.cxx:2278 AliTRDresolution.cxx:2279 AliTRDresolution.cxx:2280 AliTRDresolution.cxx:2281 AliTRDresolution.cxx:2282 AliTRDresolution.cxx:2283 AliTRDresolution.cxx:2284 AliTRDresolution.cxx:2285 AliTRDresolution.cxx:2286 AliTRDresolution.cxx:2287 AliTRDresolution.cxx:2288 AliTRDresolution.cxx:2289 AliTRDresolution.cxx:2290 AliTRDresolution.cxx:2291 AliTRDresolution.cxx:2292 AliTRDresolution.cxx:2293 AliTRDresolution.cxx:2294 AliTRDresolution.cxx:2295 AliTRDresolution.cxx:2296 AliTRDresolution.cxx:2297 AliTRDresolution.cxx:2298 AliTRDresolution.cxx:2299 AliTRDresolution.cxx:2300 AliTRDresolution.cxx:2301 AliTRDresolution.cxx:2302 AliTRDresolution.cxx:2303 AliTRDresolution.cxx:2304 AliTRDresolution.cxx:2305 AliTRDresolution.cxx:2306 AliTRDresolution.cxx:2307 AliTRDresolution.cxx:2308 AliTRDresolution.cxx:2309 AliTRDresolution.cxx:2310 AliTRDresolution.cxx:2311 AliTRDresolution.cxx:2312 AliTRDresolution.cxx:2313 AliTRDresolution.cxx:2314 AliTRDresolution.cxx:2315 AliTRDresolution.cxx:2316 AliTRDresolution.cxx:2317 AliTRDresolution.cxx:2318 AliTRDresolution.cxx:2319 AliTRDresolution.cxx:2320 AliTRDresolution.cxx:2321 AliTRDresolution.cxx:2322 AliTRDresolution.cxx:2323 AliTRDresolution.cxx:2324 AliTRDresolution.cxx:2325 AliTRDresolution.cxx:2326 AliTRDresolution.cxx:2327 AliTRDresolution.cxx:2328 AliTRDresolution.cxx:2329 AliTRDresolution.cxx:2330 AliTRDresolution.cxx:2331 AliTRDresolution.cxx:2332 AliTRDresolution.cxx:2333 AliTRDresolution.cxx:2334 AliTRDresolution.cxx:2335 AliTRDresolution.cxx:2336 AliTRDresolution.cxx:2337 AliTRDresolution.cxx:2338 AliTRDresolution.cxx:2339 AliTRDresolution.cxx:2340 AliTRDresolution.cxx:2341 AliTRDresolution.cxx:2342 AliTRDresolution.cxx:2343 AliTRDresolution.cxx:2344 AliTRDresolution.cxx:2345 AliTRDresolution.cxx:2346 AliTRDresolution.cxx:2347 AliTRDresolution.cxx:2348 AliTRDresolution.cxx:2349 AliTRDresolution.cxx:2350 AliTRDresolution.cxx:2351 AliTRDresolution.cxx:2352 AliTRDresolution.cxx:2353 AliTRDresolution.cxx:2354 AliTRDresolution.cxx:2355 AliTRDresolution.cxx:2356 AliTRDresolution.cxx:2357 AliTRDresolution.cxx:2358 AliTRDresolution.cxx:2359 AliTRDresolution.cxx:2360 AliTRDresolution.cxx:2361 AliTRDresolution.cxx:2362 AliTRDresolution.cxx:2363 AliTRDresolution.cxx:2364 AliTRDresolution.cxx:2365 AliTRDresolution.cxx:2366 AliTRDresolution.cxx:2367 AliTRDresolution.cxx:2368 AliTRDresolution.cxx:2369 AliTRDresolution.cxx:2370 AliTRDresolution.cxx:2371 AliTRDresolution.cxx:2372 AliTRDresolution.cxx:2373 AliTRDresolution.cxx:2374 AliTRDresolution.cxx:2375 AliTRDresolution.cxx:2376 AliTRDresolution.cxx:2377 AliTRDresolution.cxx:2378 AliTRDresolution.cxx:2379 AliTRDresolution.cxx:2380 AliTRDresolution.cxx:2381 AliTRDresolution.cxx:2382 AliTRDresolution.cxx:2383 AliTRDresolution.cxx:2384 AliTRDresolution.cxx:2385 AliTRDresolution.cxx:2386 AliTRDresolution.cxx:2387 AliTRDresolution.cxx:2388 AliTRDresolution.cxx:2389 AliTRDresolution.cxx:2390 AliTRDresolution.cxx:2391 AliTRDresolution.cxx:2392 AliTRDresolution.cxx:2393 AliTRDresolution.cxx:2394 AliTRDresolution.cxx:2395 AliTRDresolution.cxx:2396 AliTRDresolution.cxx:2397 AliTRDresolution.cxx:2398 AliTRDresolution.cxx:2399 AliTRDresolution.cxx:2400 AliTRDresolution.cxx:2401 AliTRDresolution.cxx:2402 AliTRDresolution.cxx:2403 AliTRDresolution.cxx:2404 AliTRDresolution.cxx:2405 AliTRDresolution.cxx:2406 AliTRDresolution.cxx:2407 AliTRDresolution.cxx:2408 AliTRDresolution.cxx:2409 AliTRDresolution.cxx:2410 AliTRDresolution.cxx:2411 AliTRDresolution.cxx:2412 AliTRDresolution.cxx:2413 AliTRDresolution.cxx:2414 AliTRDresolution.cxx:2415 AliTRDresolution.cxx:2416 AliTRDresolution.cxx:2417 AliTRDresolution.cxx:2418 AliTRDresolution.cxx:2419 AliTRDresolution.cxx:2420 AliTRDresolution.cxx:2421 AliTRDresolution.cxx:2422 AliTRDresolution.cxx:2423 AliTRDresolution.cxx:2424 AliTRDresolution.cxx:2425 AliTRDresolution.cxx:2426 AliTRDresolution.cxx:2427 AliTRDresolution.cxx:2428 AliTRDresolution.cxx:2429 AliTRDresolution.cxx:2430 AliTRDresolution.cxx:2431 AliTRDresolution.cxx:2432 AliTRDresolution.cxx:2433 AliTRDresolution.cxx:2434 AliTRDresolution.cxx:2435 AliTRDresolution.cxx:2436 AliTRDresolution.cxx:2437 AliTRDresolution.cxx:2438 AliTRDresolution.cxx:2439 AliTRDresolution.cxx:2440 AliTRDresolution.cxx:2441 AliTRDresolution.cxx:2442 AliTRDresolution.cxx:2443 AliTRDresolution.cxx:2444 AliTRDresolution.cxx:2445 AliTRDresolution.cxx:2446 AliTRDresolution.cxx:2447 AliTRDresolution.cxx:2448 AliTRDresolution.cxx:2449 AliTRDresolution.cxx:2450 AliTRDresolution.cxx:2451 AliTRDresolution.cxx:2452 AliTRDresolution.cxx:2453 AliTRDresolution.cxx:2454 AliTRDresolution.cxx:2455 AliTRDresolution.cxx:2456 AliTRDresolution.cxx:2457 AliTRDresolution.cxx:2458 AliTRDresolution.cxx:2459 AliTRDresolution.cxx:2460 AliTRDresolution.cxx:2461 AliTRDresolution.cxx:2462 AliTRDresolution.cxx:2463 AliTRDresolution.cxx:2464 AliTRDresolution.cxx:2465 AliTRDresolution.cxx:2466 AliTRDresolution.cxx:2467 AliTRDresolution.cxx:2468 AliTRDresolution.cxx:2469 AliTRDresolution.cxx:2470 AliTRDresolution.cxx:2471 AliTRDresolution.cxx:2472 AliTRDresolution.cxx:2473 AliTRDresolution.cxx:2474 AliTRDresolution.cxx:2475 AliTRDresolution.cxx:2476 AliTRDresolution.cxx:2477 AliTRDresolution.cxx:2478 AliTRDresolution.cxx:2479 AliTRDresolution.cxx:2480 AliTRDresolution.cxx:2481 AliTRDresolution.cxx:2482 AliTRDresolution.cxx:2483 AliTRDresolution.cxx:2484 AliTRDresolution.cxx:2485 AliTRDresolution.cxx:2486 AliTRDresolution.cxx:2487 AliTRDresolution.cxx:2488 AliTRDresolution.cxx:2489 AliTRDresolution.cxx:2490 AliTRDresolution.cxx:2491 AliTRDresolution.cxx:2492 AliTRDresolution.cxx:2493 AliTRDresolution.cxx:2494 AliTRDresolution.cxx:2495 AliTRDresolution.cxx:2496 AliTRDresolution.cxx:2497 AliTRDresolution.cxx:2498 AliTRDresolution.cxx:2499 AliTRDresolution.cxx:2500 AliTRDresolution.cxx:2501 AliTRDresolution.cxx:2502 AliTRDresolution.cxx:2503 AliTRDresolution.cxx:2504 AliTRDresolution.cxx:2505 AliTRDresolution.cxx:2506 AliTRDresolution.cxx:2507 AliTRDresolution.cxx:2508 AliTRDresolution.cxx:2509 AliTRDresolution.cxx:2510 AliTRDresolution.cxx:2511 AliTRDresolution.cxx:2512 AliTRDresolution.cxx:2513 AliTRDresolution.cxx:2514 AliTRDresolution.cxx:2515 AliTRDresolution.cxx:2516 AliTRDresolution.cxx:2517 AliTRDresolution.cxx:2518 AliTRDresolution.cxx:2519 AliTRDresolution.cxx:2520 AliTRDresolution.cxx:2521 AliTRDresolution.cxx:2522 AliTRDresolution.cxx:2523 AliTRDresolution.cxx:2524 AliTRDresolution.cxx:2525 AliTRDresolution.cxx:2526 AliTRDresolution.cxx:2527 AliTRDresolution.cxx:2528 AliTRDresolution.cxx:2529 AliTRDresolution.cxx:2530 AliTRDresolution.cxx:2531 AliTRDresolution.cxx:2532 AliTRDresolution.cxx:2533 AliTRDresolution.cxx:2534 AliTRDresolution.cxx:2535 AliTRDresolution.cxx:2536 AliTRDresolution.cxx:2537 AliTRDresolution.cxx:2538 AliTRDresolution.cxx:2539 AliTRDresolution.cxx:2540 AliTRDresolution.cxx:2541 AliTRDresolution.cxx:2542 AliTRDresolution.cxx:2543 AliTRDresolution.cxx:2544 AliTRDresolution.cxx:2545 AliTRDresolution.cxx:2546 AliTRDresolution.cxx:2547 AliTRDresolution.cxx:2548 AliTRDresolution.cxx:2549 AliTRDresolution.cxx:2550 AliTRDresolution.cxx:2551 AliTRDresolution.cxx:2552 AliTRDresolution.cxx:2553 AliTRDresolution.cxx:2554 AliTRDresolution.cxx:2555 AliTRDresolution.cxx:2556 AliTRDresolution.cxx:2557 AliTRDresolution.cxx:2558 AliTRDresolution.cxx:2559 AliTRDresolution.cxx:2560 AliTRDresolution.cxx:2561 AliTRDresolution.cxx:2562 AliTRDresolution.cxx:2563 AliTRDresolution.cxx:2564 AliTRDresolution.cxx:2565 AliTRDresolution.cxx:2566 AliTRDresolution.cxx:2567 AliTRDresolution.cxx:2568 AliTRDresolution.cxx:2569 AliTRDresolution.cxx:2570 AliTRDresolution.cxx:2571 AliTRDresolution.cxx:2572 AliTRDresolution.cxx:2573 AliTRDresolution.cxx:2574 AliTRDresolution.cxx:2575 AliTRDresolution.cxx:2576 AliTRDresolution.cxx:2577 AliTRDresolution.cxx:2578 AliTRDresolution.cxx:2579 AliTRDresolution.cxx:2580 AliTRDresolution.cxx:2581 AliTRDresolution.cxx:2582 AliTRDresolution.cxx:2583 AliTRDresolution.cxx:2584 AliTRDresolution.cxx:2585 AliTRDresolution.cxx:2586 AliTRDresolution.cxx:2587 AliTRDresolution.cxx:2588 AliTRDresolution.cxx:2589 AliTRDresolution.cxx:2590 AliTRDresolution.cxx:2591 AliTRDresolution.cxx:2592 AliTRDresolution.cxx:2593 AliTRDresolution.cxx:2594 AliTRDresolution.cxx:2595 AliTRDresolution.cxx:2596 AliTRDresolution.cxx:2597 AliTRDresolution.cxx:2598 AliTRDresolution.cxx:2599 AliTRDresolution.cxx:2600 AliTRDresolution.cxx:2601 AliTRDresolution.cxx:2602 AliTRDresolution.cxx:2603 AliTRDresolution.cxx:2604 AliTRDresolution.cxx:2605 AliTRDresolution.cxx:2606 AliTRDresolution.cxx:2607 AliTRDresolution.cxx:2608 AliTRDresolution.cxx:2609 AliTRDresolution.cxx:2610 AliTRDresolution.cxx:2611 AliTRDresolution.cxx:2612 AliTRDresolution.cxx:2613 AliTRDresolution.cxx:2614 AliTRDresolution.cxx:2615 AliTRDresolution.cxx:2616 AliTRDresolution.cxx:2617 AliTRDresolution.cxx:2618 AliTRDresolution.cxx:2619 AliTRDresolution.cxx:2620 AliTRDresolution.cxx:2621 AliTRDresolution.cxx:2622 AliTRDresolution.cxx:2623 AliTRDresolution.cxx:2624 AliTRDresolution.cxx:2625 AliTRDresolution.cxx:2626 AliTRDresolution.cxx:2627 AliTRDresolution.cxx:2628 AliTRDresolution.cxx:2629 AliTRDresolution.cxx:2630 AliTRDresolution.cxx:2631 AliTRDresolution.cxx:2632 AliTRDresolution.cxx:2633 AliTRDresolution.cxx:2634 AliTRDresolution.cxx:2635 AliTRDresolution.cxx:2636 AliTRDresolution.cxx:2637 AliTRDresolution.cxx:2638 AliTRDresolution.cxx:2639 AliTRDresolution.cxx:2640 AliTRDresolution.cxx:2641 AliTRDresolution.cxx:2642 AliTRDresolution.cxx:2643 AliTRDresolution.cxx:2644 AliTRDresolution.cxx:2645 AliTRDresolution.cxx:2646 AliTRDresolution.cxx:2647 AliTRDresolution.cxx:2648 AliTRDresolution.cxx:2649 AliTRDresolution.cxx:2650 AliTRDresolution.cxx:2651 AliTRDresolution.cxx:2652 AliTRDresolution.cxx:2653 AliTRDresolution.cxx:2654 AliTRDresolution.cxx:2655 AliTRDresolution.cxx:2656 AliTRDresolution.cxx:2657 AliTRDresolution.cxx:2658 AliTRDresolution.cxx:2659 AliTRDresolution.cxx:2660 AliTRDresolution.cxx:2661 AliTRDresolution.cxx:2662 AliTRDresolution.cxx:2663 AliTRDresolution.cxx:2664 AliTRDresolution.cxx:2665 AliTRDresolution.cxx:2666 AliTRDresolution.cxx:2667 AliTRDresolution.cxx:2668 AliTRDresolution.cxx:2669 AliTRDresolution.cxx:2670 AliTRDresolution.cxx:2671 AliTRDresolution.cxx:2672 AliTRDresolution.cxx:2673 AliTRDresolution.cxx:2674 AliTRDresolution.cxx:2675 AliTRDresolution.cxx:2676 AliTRDresolution.cxx:2677 AliTRDresolution.cxx:2678 AliTRDresolution.cxx:2679 AliTRDresolution.cxx:2680 AliTRDresolution.cxx:2681 AliTRDresolution.cxx:2682 AliTRDresolution.cxx:2683 AliTRDresolution.cxx:2684 AliTRDresolution.cxx:2685 AliTRDresolution.cxx:2686 AliTRDresolution.cxx:2687 AliTRDresolution.cxx:2688 AliTRDresolution.cxx:2689 AliTRDresolution.cxx:2690 AliTRDresolution.cxx:2691 AliTRDresolution.cxx:2692 AliTRDresolution.cxx:2693 AliTRDresolution.cxx:2694 AliTRDresolution.cxx:2695 AliTRDresolution.cxx:2696 AliTRDresolution.cxx:2697 AliTRDresolution.cxx:2698 AliTRDresolution.cxx:2699 AliTRDresolution.cxx:2700 AliTRDresolution.cxx:2701 AliTRDresolution.cxx:2702 AliTRDresolution.cxx:2703 AliTRDresolution.cxx:2704 AliTRDresolution.cxx:2705 AliTRDresolution.cxx:2706 AliTRDresolution.cxx:2707 AliTRDresolution.cxx:2708 AliTRDresolution.cxx:2709 AliTRDresolution.cxx:2710 AliTRDresolution.cxx:2711 AliTRDresolution.cxx:2712 AliTRDresolution.cxx:2713 AliTRDresolution.cxx:2714 AliTRDresolution.cxx:2715 AliTRDresolution.cxx:2716 AliTRDresolution.cxx:2717 AliTRDresolution.cxx:2718 AliTRDresolution.cxx:2719 AliTRDresolution.cxx:2720 AliTRDresolution.cxx:2721 AliTRDresolution.cxx:2722 AliTRDresolution.cxx:2723 AliTRDresolution.cxx:2724 AliTRDresolution.cxx:2725 AliTRDresolution.cxx:2726 AliTRDresolution.cxx:2727 AliTRDresolution.cxx:2728 AliTRDresolution.cxx:2729 AliTRDresolution.cxx:2730 AliTRDresolution.cxx:2731 AliTRDresolution.cxx:2732 AliTRDresolution.cxx:2733 AliTRDresolution.cxx:2734 AliTRDresolution.cxx:2735 AliTRDresolution.cxx:2736 AliTRDresolution.cxx:2737 AliTRDresolution.cxx:2738 AliTRDresolution.cxx:2739 AliTRDresolution.cxx:2740 AliTRDresolution.cxx:2741 AliTRDresolution.cxx:2742 AliTRDresolution.cxx:2743 AliTRDresolution.cxx:2744 AliTRDresolution.cxx:2745 AliTRDresolution.cxx:2746 AliTRDresolution.cxx:2747 AliTRDresolution.cxx:2748 AliTRDresolution.cxx:2749 AliTRDresolution.cxx:2750 AliTRDresolution.cxx:2751 AliTRDresolution.cxx:2752 AliTRDresolution.cxx:2753 AliTRDresolution.cxx:2754 AliTRDresolution.cxx:2755 AliTRDresolution.cxx:2756 AliTRDresolution.cxx:2757 AliTRDresolution.cxx:2758 AliTRDresolution.cxx:2759 AliTRDresolution.cxx:2760 AliTRDresolution.cxx:2761 AliTRDresolution.cxx:2762 AliTRDresolution.cxx:2763 AliTRDresolution.cxx:2764 AliTRDresolution.cxx:2765 AliTRDresolution.cxx:2766 AliTRDresolution.cxx:2767 AliTRDresolution.cxx:2768 AliTRDresolution.cxx:2769 AliTRDresolution.cxx:2770 AliTRDresolution.cxx:2771 AliTRDresolution.cxx:2772 AliTRDresolution.cxx:2773 AliTRDresolution.cxx:2774 AliTRDresolution.cxx:2775 AliTRDresolution.cxx:2776 AliTRDresolution.cxx:2777 AliTRDresolution.cxx:2778 AliTRDresolution.cxx:2779 AliTRDresolution.cxx:2780 AliTRDresolution.cxx:2781 AliTRDresolution.cxx:2782 AliTRDresolution.cxx:2783 AliTRDresolution.cxx:2784 AliTRDresolution.cxx:2785 AliTRDresolution.cxx:2786 AliTRDresolution.cxx:2787 AliTRDresolution.cxx:2788 AliTRDresolution.cxx:2789 AliTRDresolution.cxx:2790 AliTRDresolution.cxx:2791 AliTRDresolution.cxx:2792 AliTRDresolution.cxx:2793 AliTRDresolution.cxx:2794 AliTRDresolution.cxx:2795 AliTRDresolution.cxx:2796 AliTRDresolution.cxx:2797 AliTRDresolution.cxx:2798 AliTRDresolution.cxx:2799 AliTRDresolution.cxx:2800 AliTRDresolution.cxx:2801 AliTRDresolution.cxx:2802 AliTRDresolution.cxx:2803 AliTRDresolution.cxx:2804 AliTRDresolution.cxx:2805 AliTRDresolution.cxx:2806 AliTRDresolution.cxx:2807 AliTRDresolution.cxx:2808 AliTRDresolution.cxx:2809 AliTRDresolution.cxx:2810 AliTRDresolution.cxx:2811 AliTRDresolution.cxx:2812 AliTRDresolution.cxx:2813 AliTRDresolution.cxx:2814 AliTRDresolution.cxx:2815 AliTRDresolution.cxx:2816 AliTRDresolution.cxx:2817 AliTRDresolution.cxx:2818 AliTRDresolution.cxx:2819 AliTRDresolution.cxx:2820 AliTRDresolution.cxx:2821 AliTRDresolution.cxx:2822 AliTRDresolution.cxx:2823 AliTRDresolution.cxx:2824 AliTRDresolution.cxx:2825 AliTRDresolution.cxx:2826 AliTRDresolution.cxx:2827 AliTRDresolution.cxx:2828 AliTRDresolution.cxx:2829 AliTRDresolution.cxx:2830 AliTRDresolution.cxx:2831 AliTRDresolution.cxx:2832 AliTRDresolution.cxx:2833 AliTRDresolution.cxx:2834 AliTRDresolution.cxx:2835 AliTRDresolution.cxx:2836 AliTRDresolution.cxx:2837 AliTRDresolution.cxx:2838 AliTRDresolution.cxx:2839 AliTRDresolution.cxx:2840 AliTRDresolution.cxx:2841 AliTRDresolution.cxx:2842 AliTRDresolution.cxx:2843 AliTRDresolution.cxx:2844 AliTRDresolution.cxx:2845 AliTRDresolution.cxx:2846 AliTRDresolution.cxx:2847 AliTRDresolution.cxx:2848 AliTRDresolution.cxx:2849 AliTRDresolution.cxx:2850 AliTRDresolution.cxx:2851 AliTRDresolution.cxx:2852 AliTRDresolution.cxx:2853 AliTRDresolution.cxx:2854 AliTRDresolution.cxx:2855 AliTRDresolution.cxx:2856 AliTRDresolution.cxx:2857 AliTRDresolution.cxx:2858 AliTRDresolution.cxx:2859 AliTRDresolution.cxx:2860 AliTRDresolution.cxx:2861 AliTRDresolution.cxx:2862 AliTRDresolution.cxx:2863 AliTRDresolution.cxx:2864 AliTRDresolution.cxx:2865 AliTRDresolution.cxx:2866 AliTRDresolution.cxx:2867 AliTRDresolution.cxx:2868 AliTRDresolution.cxx:2869 AliTRDresolution.cxx:2870 AliTRDresolution.cxx:2871 AliTRDresolution.cxx:2872 AliTRDresolution.cxx:2873 AliTRDresolution.cxx:2874 AliTRDresolution.cxx:2875 AliTRDresolution.cxx:2876 AliTRDresolution.cxx:2877 AliTRDresolution.cxx:2878 AliTRDresolution.cxx:2879 AliTRDresolution.cxx:2880 AliTRDresolution.cxx:2881 AliTRDresolution.cxx:2882 AliTRDresolution.cxx:2883 AliTRDresolution.cxx:2884 AliTRDresolution.cxx:2885 AliTRDresolution.cxx:2886 AliTRDresolution.cxx:2887 AliTRDresolution.cxx:2888 AliTRDresolution.cxx:2889 AliTRDresolution.cxx:2890 AliTRDresolution.cxx:2891 AliTRDresolution.cxx:2892 AliTRDresolution.cxx:2893 AliTRDresolution.cxx:2894 AliTRDresolution.cxx:2895 AliTRDresolution.cxx:2896 AliTRDresolution.cxx:2897 AliTRDresolution.cxx:2898 AliTRDresolution.cxx:2899 AliTRDresolution.cxx:2900 AliTRDresolution.cxx:2901 AliTRDresolution.cxx:2902 AliTRDresolution.cxx:2903 AliTRDresolution.cxx:2904 AliTRDresolution.cxx:2905 AliTRDresolution.cxx:2906 AliTRDresolution.cxx:2907 AliTRDresolution.cxx:2908 AliTRDresolution.cxx:2909 AliTRDresolution.cxx:2910 AliTRDresolution.cxx:2911 AliTRDresolution.cxx:2912 AliTRDresolution.cxx:2913 AliTRDresolution.cxx:2914 AliTRDresolution.cxx:2915 AliTRDresolution.cxx:2916 AliTRDresolution.cxx:2917 AliTRDresolution.cxx:2918 AliTRDresolution.cxx:2919 AliTRDresolution.cxx:2920 AliTRDresolution.cxx:2921 AliTRDresolution.cxx:2922 AliTRDresolution.cxx:2923 AliTRDresolution.cxx:2924 AliTRDresolution.cxx:2925 AliTRDresolution.cxx:2926 AliTRDresolution.cxx:2927 AliTRDresolution.cxx:2928 AliTRDresolution.cxx:2929 AliTRDresolution.cxx:2930 AliTRDresolution.cxx:2931 AliTRDresolution.cxx:2932 AliTRDresolution.cxx:2933 AliTRDresolution.cxx:2934 AliTRDresolution.cxx:2935 AliTRDresolution.cxx:2936 AliTRDresolution.cxx:2937 AliTRDresolution.cxx:2938 AliTRDresolution.cxx:2939 AliTRDresolution.cxx:2940 AliTRDresolution.cxx:2941 AliTRDresolution.cxx:2942 AliTRDresolution.cxx:2943 AliTRDresolution.cxx:2944 AliTRDresolution.cxx:2945 AliTRDresolution.cxx:2946 AliTRDresolution.cxx:2947 AliTRDresolution.cxx:2948 AliTRDresolution.cxx:2949 AliTRDresolution.cxx:2950 AliTRDresolution.cxx:2951 AliTRDresolution.cxx:2952 AliTRDresolution.cxx:2953 AliTRDresolution.cxx:2954 AliTRDresolution.cxx:2955 AliTRDresolution.cxx:2956 AliTRDresolution.cxx:2957 AliTRDresolution.cxx:2958 AliTRDresolution.cxx:2959 AliTRDresolution.cxx:2960 AliTRDresolution.cxx:2961 AliTRDresolution.cxx:2962 AliTRDresolution.cxx:2963 AliTRDresolution.cxx:2964 AliTRDresolution.cxx:2965 AliTRDresolution.cxx:2966 AliTRDresolution.cxx:2967 AliTRDresolution.cxx:2968 AliTRDresolution.cxx:2969 AliTRDresolution.cxx:2970 AliTRDresolution.cxx:2971 AliTRDresolution.cxx:2972 AliTRDresolution.cxx:2973 AliTRDresolution.cxx:2974 AliTRDresolution.cxx:2975 AliTRDresolution.cxx:2976 AliTRDresolution.cxx:2977 AliTRDresolution.cxx:2978 AliTRDresolution.cxx:2979 AliTRDresolution.cxx:2980 AliTRDresolution.cxx:2981 AliTRDresolution.cxx:2982 AliTRDresolution.cxx:2983 AliTRDresolution.cxx:2984 AliTRDresolution.cxx:2985 AliTRDresolution.cxx:2986 AliTRDresolution.cxx:2987 AliTRDresolution.cxx:2988 AliTRDresolution.cxx:2989 AliTRDresolution.cxx:2990 AliTRDresolution.cxx:2991 AliTRDresolution.cxx:2992 AliTRDresolution.cxx:2993 AliTRDresolution.cxx:2994 AliTRDresolution.cxx:2995 AliTRDresolution.cxx:2996 AliTRDresolution.cxx:2997 AliTRDresolution.cxx:2998 AliTRDresolution.cxx:2999 AliTRDresolution.cxx:3000 AliTRDresolution.cxx:3001 AliTRDresolution.cxx:3002 AliTRDresolution.cxx:3003 AliTRDresolution.cxx:3004 AliTRDresolution.cxx:3005 AliTRDresolution.cxx:3006 AliTRDresolution.cxx:3007 AliTRDresolution.cxx:3008 AliTRDresolution.cxx:3009 AliTRDresolution.cxx:3010 AliTRDresolution.cxx:3011 AliTRDresolution.cxx:3012 AliTRDresolution.cxx:3013 AliTRDresolution.cxx:3014 AliTRDresolution.cxx:3015 AliTRDresolution.cxx:3016 AliTRDresolution.cxx:3017 AliTRDresolution.cxx:3018 AliTRDresolution.cxx:3019 AliTRDresolution.cxx:3020 AliTRDresolution.cxx:3021 AliTRDresolution.cxx:3022 AliTRDresolution.cxx:3023 AliTRDresolution.cxx:3024 AliTRDresolution.cxx:3025 AliTRDresolution.cxx:3026 AliTRDresolution.cxx:3027 AliTRDresolution.cxx:3028 AliTRDresolution.cxx:3029 AliTRDresolution.cxx:3030 AliTRDresolution.cxx:3031 AliTRDresolution.cxx:3032 AliTRDresolution.cxx:3033 AliTRDresolution.cxx:3034 AliTRDresolution.cxx:3035 AliTRDresolution.cxx:3036 AliTRDresolution.cxx:3037 AliTRDresolution.cxx:3038 AliTRDresolution.cxx:3039 AliTRDresolution.cxx:3040 AliTRDresolution.cxx:3041 AliTRDresolution.cxx:3042 AliTRDresolution.cxx:3043 AliTRDresolution.cxx:3044 AliTRDresolution.cxx:3045 AliTRDresolution.cxx:3046 AliTRDresolution.cxx:3047 AliTRDresolution.cxx:3048 AliTRDresolution.cxx:3049 AliTRDresolution.cxx:3050 AliTRDresolution.cxx:3051 AliTRDresolution.cxx:3052 AliTRDresolution.cxx:3053 AliTRDresolution.cxx:3054 AliTRDresolution.cxx:3055 AliTRDresolution.cxx:3056 AliTRDresolution.cxx:3057 AliTRDresolution.cxx:3058 AliTRDresolution.cxx:3059 AliTRDresolution.cxx:3060 AliTRDresolution.cxx:3061 AliTRDresolution.cxx:3062 AliTRDresolution.cxx:3063 AliTRDresolution.cxx:3064 AliTRDresolution.cxx:3065 AliTRDresolution.cxx:3066 AliTRDresolution.cxx:3067 AliTRDresolution.cxx:3068 AliTRDresolution.cxx:3069 AliTRDresolution.cxx:3070 AliTRDresolution.cxx:3071 AliTRDresolution.cxx:3072 AliTRDresolution.cxx:3073 AliTRDresolution.cxx:3074 AliTRDresolution.cxx:3075 AliTRDresolution.cxx:3076 AliTRDresolution.cxx:3077 AliTRDresolution.cxx:3078 AliTRDresolution.cxx:3079 AliTRDresolution.cxx:3080 AliTRDresolution.cxx:3081 AliTRDresolution.cxx:3082 AliTRDresolution.cxx:3083 AliTRDresolution.cxx:3084 AliTRDresolution.cxx:3085 AliTRDresolution.cxx:3086 AliTRDresolution.cxx:3087 AliTRDresolution.cxx:3088 AliTRDresolution.cxx:3089 AliTRDresolution.cxx:3090 AliTRDresolution.cxx:3091 AliTRDresolution.cxx:3092 AliTRDresolution.cxx:3093 AliTRDresolution.cxx:3094 AliTRDresolution.cxx:3095 AliTRDresolution.cxx:3096 AliTRDresolution.cxx:3097 AliTRDresolution.cxx:3098 AliTRDresolution.cxx:3099 AliTRDresolution.cxx:3100 AliTRDresolution.cxx:3101 AliTRDresolution.cxx:3102 AliTRDresolution.cxx:3103 AliTRDresolution.cxx:3104 AliTRDresolution.cxx:3105 AliTRDresolution.cxx:3106 AliTRDresolution.cxx:3107 AliTRDresolution.cxx:3108 AliTRDresolution.cxx:3109 AliTRDresolution.cxx:3110 AliTRDresolution.cxx:3111 AliTRDresolution.cxx:3112 AliTRDresolution.cxx:3113 AliTRDresolution.cxx:3114 AliTRDresolution.cxx:3115 AliTRDresolution.cxx:3116 AliTRDresolution.cxx:3117 AliTRDresolution.cxx:3118 AliTRDresolution.cxx:3119 AliTRDresolution.cxx:3120 AliTRDresolution.cxx:3121 AliTRDresolution.cxx:3122 AliTRDresolution.cxx:3123 AliTRDresolution.cxx:3124 AliTRDresolution.cxx:3125 AliTRDresolution.cxx:3126 AliTRDresolution.cxx:3127 AliTRDresolution.cxx:3128 AliTRDresolution.cxx:3129 AliTRDresolution.cxx:3130 AliTRDresolution.cxx:3131 AliTRDresolution.cxx:3132 AliTRDresolution.cxx:3133 AliTRDresolution.cxx:3134 AliTRDresolution.cxx:3135 AliTRDresolution.cxx:3136 AliTRDresolution.cxx:3137 AliTRDresolution.cxx:3138 AliTRDresolution.cxx:3139 AliTRDresolution.cxx:3140 AliTRDresolution.cxx:3141 AliTRDresolution.cxx:3142 AliTRDresolution.cxx:3143 AliTRDresolution.cxx:3144 AliTRDresolution.cxx:3145 AliTRDresolution.cxx:3146 AliTRDresolution.cxx:3147 AliTRDresolution.cxx:3148 AliTRDresolution.cxx:3149 AliTRDresolution.cxx:3150 AliTRDresolution.cxx:3151 AliTRDresolution.cxx:3152 AliTRDresolution.cxx:3153 AliTRDresolution.cxx:3154 AliTRDresolution.cxx:3155 AliTRDresolution.cxx:3156 AliTRDresolution.cxx:3157 AliTRDresolution.cxx:3158 AliTRDresolution.cxx:3159 AliTRDresolution.cxx:3160 AliTRDresolution.cxx:3161 AliTRDresolution.cxx:3162 AliTRDresolution.cxx:3163 AliTRDresolution.cxx:3164 AliTRDresolution.cxx:3165 AliTRDresolution.cxx:3166 AliTRDresolution.cxx:3167 AliTRDresolution.cxx:3168 AliTRDresolution.cxx:3169 AliTRDresolution.cxx:3170 AliTRDresolution.cxx:3171 AliTRDresolution.cxx:3172 AliTRDresolution.cxx:3173 AliTRDresolution.cxx:3174 AliTRDresolution.cxx:3175 AliTRDresolution.cxx:3176 AliTRDresolution.cxx:3177 AliTRDresolution.cxx:3178 AliTRDresolution.cxx:3179 AliTRDresolution.cxx:3180 AliTRDresolution.cxx:3181 AliTRDresolution.cxx:3182 AliTRDresolution.cxx:3183 AliTRDresolution.cxx:3184 AliTRDresolution.cxx:3185 AliTRDresolution.cxx:3186 AliTRDresolution.cxx:3187 AliTRDresolution.cxx:3188 AliTRDresolution.cxx:3189 AliTRDresolution.cxx:3190 AliTRDresolution.cxx:3191 AliTRDresolution.cxx:3192 AliTRDresolution.cxx:3193 AliTRDresolution.cxx:3194 AliTRDresolution.cxx:3195 AliTRDresolution.cxx:3196 AliTRDresolution.cxx:3197 AliTRDresolution.cxx:3198 AliTRDresolution.cxx:3199 AliTRDresolution.cxx:3200 AliTRDresolution.cxx:3201 AliTRDresolution.cxx:3202 AliTRDresolution.cxx:3203 AliTRDresolution.cxx:3204 AliTRDresolution.cxx:3205 AliTRDresolution.cxx:3206 AliTRDresolution.cxx:3207 AliTRDresolution.cxx:3208 AliTRDresolution.cxx:3209 AliTRDresolution.cxx:3210 AliTRDresolution.cxx:3211 AliTRDresolution.cxx:3212 AliTRDresolution.cxx:3213 AliTRDresolution.cxx:3214 AliTRDresolution.cxx:3215 AliTRDresolution.cxx:3216 AliTRDresolution.cxx:3217 AliTRDresolution.cxx:3218 AliTRDresolution.cxx:3219 AliTRDresolution.cxx:3220 AliTRDresolution.cxx:3221 AliTRDresolution.cxx:3222 AliTRDresolution.cxx:3223 AliTRDresolution.cxx:3224 AliTRDresolution.cxx:3225 AliTRDresolution.cxx:3226 AliTRDresolution.cxx:3227 AliTRDresolution.cxx:3228 AliTRDresolution.cxx:3229 AliTRDresolution.cxx:3230 AliTRDresolution.cxx:3231 AliTRDresolution.cxx:3232 AliTRDresolution.cxx:3233 AliTRDresolution.cxx:3234 AliTRDresolution.cxx:3235 AliTRDresolution.cxx:3236 AliTRDresolution.cxx:3237 AliTRDresolution.cxx:3238 AliTRDresolution.cxx:3239 AliTRDresolution.cxx:3240 AliTRDresolution.cxx:3241 AliTRDresolution.cxx:3242 AliTRDresolution.cxx:3243 AliTRDresolution.cxx:3244 AliTRDresolution.cxx:3245 AliTRDresolution.cxx:3246 AliTRDresolution.cxx:3247 AliTRDresolution.cxx:3248 AliTRDresolution.cxx:3249 AliTRDresolution.cxx:3250 AliTRDresolution.cxx:3251 AliTRDresolution.cxx:3252 AliTRDresolution.cxx:3253 AliTRDresolution.cxx:3254 AliTRDresolution.cxx:3255 AliTRDresolution.cxx:3256 AliTRDresolution.cxx:3257 AliTRDresolution.cxx:3258 AliTRDresolution.cxx:3259 AliTRDresolution.cxx:3260 AliTRDresolution.cxx:3261 AliTRDresolution.cxx:3262 AliTRDresolution.cxx:3263 AliTRDresolution.cxx:3264 AliTRDresolution.cxx:3265 AliTRDresolution.cxx:3266 AliTRDresolution.cxx:3267 AliTRDresolution.cxx:3268 AliTRDresolution.cxx:3269 AliTRDresolution.cxx:3270 AliTRDresolution.cxx:3271 AliTRDresolution.cxx:3272 AliTRDresolution.cxx:3273 AliTRDresolution.cxx:3274 AliTRDresolution.cxx:3275 AliTRDresolution.cxx:3276 AliTRDresolution.cxx:3277 AliTRDresolution.cxx:3278 AliTRDresolution.cxx:3279 AliTRDresolution.cxx:3280 AliTRDresolution.cxx:3281 AliTRDresolution.cxx:3282 AliTRDresolution.cxx:3283 AliTRDresolution.cxx:3284 AliTRDresolution.cxx:3285 AliTRDresolution.cxx:3286 AliTRDresolution.cxx:3287 AliTRDresolution.cxx:3288 AliTRDresolution.cxx:3289 AliTRDresolution.cxx:3290 AliTRDresolution.cxx:3291 AliTRDresolution.cxx:3292 AliTRDresolution.cxx:3293 AliTRDresolution.cxx:3294 AliTRDresolution.cxx:3295 AliTRDresolution.cxx:3296 AliTRDresolution.cxx:3297 AliTRDresolution.cxx:3298 AliTRDresolution.cxx:3299 AliTRDresolution.cxx:3300 AliTRDresolution.cxx:3301 AliTRDresolution.cxx:3302 AliTRDresolution.cxx:3303 AliTRDresolution.cxx:3304 AliTRDresolution.cxx:3305 AliTRDresolution.cxx:3306 AliTRDresolution.cxx:3307 AliTRDresolution.cxx:3308 AliTRDresolution.cxx:3309 AliTRDresolution.cxx:3310 AliTRDresolution.cxx:3311 AliTRDresolution.cxx:3312 AliTRDresolution.cxx:3313 AliTRDresolution.cxx:3314 AliTRDresolution.cxx:3315 AliTRDresolution.cxx:3316 AliTRDresolution.cxx:3317 AliTRDresolution.cxx:3318 AliTRDresolution.cxx:3319 AliTRDresolution.cxx:3320 AliTRDresolution.cxx:3321 AliTRDresolution.cxx:3322 AliTRDresolution.cxx:3323 AliTRDresolution.cxx:3324 AliTRDresolution.cxx:3325 AliTRDresolution.cxx:3326 AliTRDresolution.cxx:3327 AliTRDresolution.cxx:3328 AliTRDresolution.cxx:3329 AliTRDresolution.cxx:3330 AliTRDresolution.cxx:3331 AliTRDresolution.cxx:3332 AliTRDresolution.cxx:3333 AliTRDresolution.cxx:3334 AliTRDresolution.cxx:3335 AliTRDresolution.cxx:3336 AliTRDresolution.cxx:3337 AliTRDresolution.cxx:3338 AliTRDresolution.cxx:3339 AliTRDresolution.cxx:3340 AliTRDresolution.cxx:3341 AliTRDresolution.cxx:3342 AliTRDresolution.cxx:3343 AliTRDresolution.cxx:3344 AliTRDresolution.cxx:3345 AliTRDresolution.cxx:3346 AliTRDresolution.cxx:3347 AliTRDresolution.cxx:3348 AliTRDresolution.cxx:3349 AliTRDresolution.cxx:3350 AliTRDresolution.cxx:3351 AliTRDresolution.cxx:3352 AliTRDresolution.cxx:3353 AliTRDresolution.cxx:3354 AliTRDresolution.cxx:3355 AliTRDresolution.cxx:3356 AliTRDresolution.cxx:3357 AliTRDresolution.cxx:3358 AliTRDresolution.cxx:3359 AliTRDresolution.cxx:3360 AliTRDresolution.cxx:3361 AliTRDresolution.cxx:3362 AliTRDresolution.cxx:3363 AliTRDresolution.cxx:3364 AliTRDresolution.cxx:3365 AliTRDresolution.cxx:3366 AliTRDresolution.cxx:3367 AliTRDresolution.cxx:3368 AliTRDresolution.cxx:3369 AliTRDresolution.cxx:3370 AliTRDresolution.cxx:3371 AliTRDresolution.cxx:3372 AliTRDresolution.cxx:3373 AliTRDresolution.cxx:3374 AliTRDresolution.cxx:3375 AliTRDresolution.cxx:3376 AliTRDresolution.cxx:3377 AliTRDresolution.cxx:3378 AliTRDresolution.cxx:3379 AliTRDresolution.cxx:3380 AliTRDresolution.cxx:3381 AliTRDresolution.cxx:3382 AliTRDresolution.cxx:3383 AliTRDresolution.cxx:3384 AliTRDresolution.cxx:3385 AliTRDresolution.cxx:3386 AliTRDresolution.cxx:3387 AliTRDresolution.cxx:3388 AliTRDresolution.cxx:3389 AliTRDresolution.cxx:3390 AliTRDresolution.cxx:3391 AliTRDresolution.cxx:3392 AliTRDresolution.cxx:3393 AliTRDresolution.cxx:3394 AliTRDresolution.cxx:3395 AliTRDresolution.cxx:3396 AliTRDresolution.cxx:3397 AliTRDresolution.cxx:3398 AliTRDresolution.cxx:3399 AliTRDresolution.cxx:3400 AliTRDresolution.cxx:3401 AliTRDresolution.cxx:3402 AliTRDresolution.cxx:3403 AliTRDresolution.cxx:3404 AliTRDresolution.cxx:3405 AliTRDresolution.cxx:3406 AliTRDresolution.cxx:3407 AliTRDresolution.cxx:3408 AliTRDresolution.cxx:3409 AliTRDresolution.cxx:3410 AliTRDresolution.cxx:3411 AliTRDresolution.cxx:3412 AliTRDresolution.cxx:3413 AliTRDresolution.cxx:3414 AliTRDresolution.cxx:3415 AliTRDresolution.cxx:3416 AliTRDresolution.cxx:3417 AliTRDresolution.cxx:3418