Int_t const AliTRDresolution::fgkNbins[kNdim] = {
Int_t(kNbunchCross)/*bc*/,
- 180/*phi*/,
- 50/*eta*/,
+ 144/*phi*/,
+ 45/*eta*/,
50/*dy*/,
40/*dphi*/,
50/*dz*/,
- 3/*chg*species*/,
+ 5/*chg*species*/,
kNpt/*pt*/
}; //! no of bins/projection
Double_t const AliTRDresolution::fgkMin[kNdim] = {
-1.5,
-TMath::Pi(),
- -1.,
+ -0.9,
-1.5,
-5.,
-2.5,
- -1.5,
+ -2.5,
-0.5
}; //! low limits for projections
Double_t const AliTRDresolution::fgkMax[kNdim] = {
1.5,
TMath::Pi(),
- 1.,
+ 0.9,
1.5,
5.,
2.5,
- 1.5,
+ 2.5,
kNpt-0.5
}; //! high limits for projections
Char_t const *AliTRDresolution::fgkTitle[kNdim] = {
// ,"Tracklet2TRDout"
// ,"TRDout2MC"
};
-Float_t AliTRDresolution::fgPtBin[25];
//________________________________________________________
AliTRDresolution::AliTRDresolution()
// Default constructor
//
SetNameTitle("TRDresolution", "TRD spatial and momentum resolution");
- MakePtSegmentation();
SetProcesses(kTRUE, kTRUE, kTRUE, kTRUE);
}
//
InitFunctorList();
- MakePtSegmentation();
SetProcesses(kTRUE, kTRUE, kTRUE, kTRUE);
if(xchange){
SetUseExchangeContainers();
cs(TMath::Cos(alpha)),
sn(TMath::Sin(alpha));
for(Int_t icl(0); icl<ncl; icl++){
- if(!(cl = (AliTRDcluster*)(*fkClusters)[icl])) continue;
+ 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] = cl->IsFivePad()?1:cl->GetNPads();
+ val[5] = fTriggerList?fTriggerSlot:(cl->IsFivePad()?1:cl->GetNPads());
H->Fill(val);
}
return NULL;
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] = c->IsFivePad()?1:c->GetNPads();
+ val[kNdim+1] = fTriggerList?fTriggerSlot:(c->IsFivePad()?1:c->GetNPads());
H->Fill(val);
/* // tilt rotation of covariance for clusters
Double_t sy2(c->GetSigmaY2()), sz2(c->GetSigmaZ2());
return NULL;
}
+ // down scale PID resolution
+ 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.);
- Float_t sz[AliTRDseedV1::kNtb], pos[AliTRDseedV1::kNtb];
- Int_t ntbGap[AliTRDseedV1::kNtb];
+// Float_t sz[AliTRDseedV1::kNtb], pos[AliTRDseedV1::kNtb]; Int_t ntbGap[AliTRDseedV1::kNtb];
AliTRDseedV1 *fTracklet(NULL);
for(Int_t il(0); il<AliTRDgeometry::kNlayer; il++){
if(!(fTracklet = fkTrack->GetTracklet(il))) continue;
Float_t tgl = fTracklet->GetZ()/fTracklet->GetX()/TMath::Sqrt(1.+fTracklet->GetY()*fTracklet->GetY()/fTracklet->GetX()/fTracklet->GetX());//fTracklet->GetTgl();
val[kEta] = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));
- val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:fkTrack->Charge();// fSpecies;
- val[kPt] = GetPtBinSignificant(fPt); //fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fTracklet->GetMomentum());
+ val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:spc;// fSpecies;
+ val[kPt] = GetPtBin(fPt); //fPt<0.8?0:(fPt<1.5?1:2);//GetPtBin(fTracklet->GetMomentum());
Double_t dyt(fTracklet->GetYfit(0) - fTracklet->GetYref(0)),
dzt(fTracklet->GetZfit(0) - fTracklet->GetZref(0)),
dydx(fTracklet->GetYfit(1)),
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] = 1.e2*fTracklet->GetTBoccupancy()/AliTRDseedV1::kNtb;
- Int_t n = fTracklet->GetChargeGaps(sz, pos, ntbGap);
+ val[kNdim+1] = fTriggerList?fTriggerSlot:(1.e2*fTracklet->GetTBoccupancy()/AliTRDseedV1::kNtb);
+/* Int_t n = fTracklet->GetChargeGaps(sz, pos, ntbGap);
val[kNdim+2] = 0.; for(Int_t igap(0); igap<n; igap++) val[kNdim+2] += sz[igap];
for(Int_t ifill(0); ifill<3; ifill++){ val[kNdim+3+ifill]=0.;val[kNdim+4+ifill]=0.;}
for(Int_t igap(0), ifill(0); igap<n&&ifill<2; igap++){
val[kNdim+3+ifill] = sz[igap];
val[kNdim+4+ifill] = pos[igap];
ifill++;
- }
+ }*/
H->Fill(val);
// // compute covariance matrix
val[kZrez] = fTracklet->IsRowCross()?dz:(fTracklet->GetdQdl()*5.e-4 - 2.5);
val[kPrez] = dphi*TMath::RadToDeg();
val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:spc;
- val[kPt] = DebugLevel()>=1?GetPtBin(fPt):GetPtBinSignificant(fPt);
- val[kNdim] = DebugLevel()>=1?GetPtBin(fTracklet->GetMomentum()):GetPtBinSignificant(fTracklet->GetMomentum());
+ val[kPt] = GetPtBin(fPt);
+ val[kNdim] = GetPtBin(fTracklet->GetMomentum());
val[kNdim+1] = dx;
//val[kNdim+2] = fEvent?fEvent->GetBunchFill():0;
H->Fill(val);
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; // downscale PID
TH1 *h(NULL);
AliTRDgeometry *geo(AliTRDinfoGen::Geometry());
AliTRDseedV1 *fTracklet(NULL); TObjArray *clInfoArr(NULL);
UChar_t s;
Double_t x, y, z, pt, dydx, dzdx, dzdl;
- Float_t pt0, x0, y0, z0, dx, dy, dz, dydx0, dzdx0;
+ Float_t pt0, p0, x0, y0, z0, dx, dy, dz, dydx0, dzdx0;
Double_t covR[7]/*, cov[3]*/;
/* if(DebugLevel()>=3){
}
}*/
AliTRDcluster *c(NULL);
- Double_t val[kNdim+1];
+ Double_t val[kNdim+2];
for(Int_t ily=0; ily<AliTRDgeometry::kNlayer; ily++){
if(!(fTracklet = fkTrack->GetTracklet(ily)))/* ||
!fTracklet->IsOK())*/ continue;
x= x0 = fTracklet->GetX();
Bool_t rc(fTracklet->IsRowCross()); Float_t eta, phi;
- if(!fkMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, eta, phi, s)) continue;
+ if(!fkMC->GetDirections(x0, y0, z0, dydx0, dzdx0, pt0, p0, eta, phi, s)) continue;
// MC track position at reference radial position
dx = x0 - x;
val[kPhi] = phi;
val[kEta] = eta;
val[kSpeciesChgRC]= rc?0.:sign*sIdx;
- val[kPt] = pt0<0.8?0:(pt0<1.5?1:2);//GetPtBin(pt0);
+ val[kPt] = GetPtBin(pt0);
+ val[kNdim]= GetPtBin(p0);
Double_t tilt(fTracklet->GetTilt());
// ,t2(tilt*tilt)
// ,corr(1./(1. + t2))
else{
val[kBC] = (bc>=kNbunchCross)?(kNbunchCross-1):bc;
val[kYrez] = tin->GetY()-ymc;
- val[kZrez] = rc?(tin->GetZ()-zmc):(fTracklet->GetdQdl()*1.8e-4 - 0.9);
+ 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.;//dx;
if((H = (THnSparseI*)fContainer->At(kMCtrackIn))) H->Fill(val);
}
}
val[kYrez] = dy;
val[kPrez] = TMath::ATan((dydx - dydx0)/(1.+ dydx*dydx0))*TMath::RadToDeg();
val[kZrez] = dz;
+ val[kPt] = GetPtBin(pt0);
val[kNdim] = 1.e2*(pt/pt0-1.);
if((H = (THnSparse*)fContainer->At(kMCtrack))) H->Fill(val);
/* // theta resolution/ tgl pulls
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;
// val[kNdim] = pt/pt0-1.;
if((H = (THnSparse*)fContainer->At(kMCtracklet))) H->Fill(val);
val[kPt] = TMath::ATan(dydx0)*TMath::RadToDeg();
//Float_t corr = 1./TMath::Sqrt(1.+dydx0*dydx0+dzdx0*dzdx0);
Int_t row0(-1);
- Float_t padCorr(tilt*fTracklet->GetPadLength());
+ 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();
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);
return H?H->Projection(kYrez):NULL;
}
-
-//__________________________________________________________________________
-Int_t AliTRDresolution::GetPtBin(Float_t pt)
-{
-// Find pt bin according to local pt segmentation
- Int_t ipt(-1);
- while(ipt<24){
- if(pt<fgPtBin[ipt+1]) break;
- ipt++;
- }
- return ipt;
-}
-
-
//________________________________________________________
void AliTRDresolution::GetRangeZ(TH2 *h2, Float_t &min, Float_t &max)
{
return kFALSE;
}
-
-//________________________________________________________
-void AliTRDresolution::MakePtSegmentation(Float_t pt0, Float_t dpt)
-{
-// Build pt segments
- for(Int_t j(0); j<=24; j++){
- pt0+=(TMath::Exp(j*j*dpt)-1.);
- fgPtBin[j]=pt0;
- }
-}
-
//________________________________________________________
void AliTRDresolution::MakeSummary()
{
AliInfo(Form("Missing H%sTrkIn%sEn", typName[ityp], 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){ // old binning
+ 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; // dummy
+ }
+ while(irebin<nrebin && (AliTRDrecoTask::GetMeanStat(h2s, .5, ">")<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", typName[ityp], 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]);
// build list of projections
const Int_t nsel(8*AliTRDgeometry::kNlayer*AliTRDeventInfo::kCentralityClasses);
// define rebinning strategy
- const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 2, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
+ 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){ // old binning
+ 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; // dummy
+ }
//const Char_t *cenName[AliTRDeventInfo::kCentralityClasses] = {"0-10%", "10-20%", "20-50%", "50-80%", "80-100%"};
const Char_t *cenName[AliTRDeventInfo::kCentralityClasses] = {"2800-inf", "2100-2799", "1400-2099", "700-1399", "0-699"};
AliTRDrecoProjection hp[kDetNproj]; TObjArray php(kDetNproj);
// build list of projections
const Int_t nsel(AliTRDgeometry::kNlayer*kNcharge*(kNpads+1)*AliTRDeventInfo::kCentralityClasses);
// define rebinning strategy
- const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 5, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
+ 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){ // old binning
+ 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; // dummy
+ }
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"};
}
}
}
- AliInfo(Form("Build %3d 3D projections.", ih));
+ 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);
if((h2 = hp[ih].Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
}
+ Double_t m(0.), s(0.), trend(0.);
for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
for(Int_t ich(0); ich<nCh; ich++){
for(Int_t icen(0); icen<nCen; icen++){
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClY%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))){
pr0->H()->SetNameTitle(Form("H%sClY%d", mc?"MC":"", ily), Form("Clusters :: #Deltay Ly[%d]", ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.) PutTrendValue(Form("%sClS%d", mc?"MC":"", ily), s);
}
/*!YXPh*/
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sClYXPh%c%d%d%d", mc?"MC":"", chName[0], ily, 0, 0)))){
}
}
- AliInfo(Form("Done %3d 2D projections.", jh));
+ AliInfo(Form("Done %3d 2D %s projections.", jh, mc?"MC":""));
return kTRUE;
}
// build list of projections
const Int_t nsel(AliTRDeventInfo::kCentralityClasses*AliTRDgeometry::kNlayer*(kNpt+2)*(AliPID::kSPECIES*kNcharge + 1));
// define rebinning strategy
- const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 5, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
+ 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){ // old binning
+ 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; // dummy
+ }
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] = {'-', '+'};
}
}
}
- AliInfo(Form("Build %3d 3D projections.", ih));
+ AliInfo(Form("Build %3d 3D %s projections.", ih, mc?"MC":""));
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*4+1);
arr->AddAt(h2, jh++);
}
// build combined performance plots
+ Double_t m(0.), s(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%sTrkltY%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, ily, 0)))){
pr0->H()->SetNameTitle(Form("H%sTrkltY%d", mc?"MC":"", ily), Form("Tracklets :: #Deltay Ly[%d]", ily));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkltY%d", mc?"MC":"", ily), trend);
+ PutTrendValue(Form("%sTrkltYS%d", mc?"MC":"", ily), s);
+ }
}
/*!dphi*/
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkltPh%c%c%d%d%d", mc?"MC":"", chName[0], ptName[0], 0, ily, 0)))){
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
} // end layer loop
- AliInfo(Form("Done %3d 2D projections.", jh));
+ AliInfo(Form("Done %3d 2D %s projections.", jh, mc?"MC":""));
return kTRUE;
}
const Char_t *ptCut[kNpt+2] = {"p_{t}[GeV/c]<0.5", "0.5<=p_{t}[GeV/c]<0.8", "0.8<=p_{t}[GeV/c]<1.5", "1.5<=p_{t}[GeV/c]<5.0", "p_{t}[GeV/c]>=5.0"};
const Char_t *pCut[kNpt+2] = {"p[GeV/c]<0.5", "0.5<=p[GeV/c]<0.8", "0.8<=p[GeV/c]<1.5", "1.5<=p[GeV/c]<5.0", "p[GeV/c]>=5.0"};
// define rebinning strategy
- const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 5, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
+ 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){ // old binning
+ 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; // dummy
+ }
AliTRDrecoProjection hp[kMCTrkInNproj]; TObjArray php(kMCTrkInNproj+2);
Int_t ih(0), isel(-1), np[nsel]; memset(np, 0, nsel*sizeof(Int_t));
// define list of projections
hp[ih].SetRebinStrategy(nEtaPhi, rebinEtaPhiX, rebinEtaPhiY);
php.AddLast(&hp[ih++]); np[isel]++;
}
- AliInfo(Form("Build %3d 3D projections.", ih));
+ AliInfo(Form("Build %3d 3D %s projections.", ih, mc?"MC":""));
// fill projections
Int_t ch(0), pt(0), p(0), sp(1), rcBin(as?as->FindBin(0.):-1), ioff(0), joff(0), jsel(0);
if(ap ) p = TMath::Min(coord[kNdim], Int_t(kNpt)+1);
// global selection
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);
+ jsel = p *(kNspc*kNcharge+1); jsel+=(ch==2?(kNspc*kNcharge):(sp*kNcharge+ch)); joff = jsel*(ax?4:3);
if(ioff>=ih){
AliError(Form("Wrong selection %d [%3d]", ioff, ih));
return kFALSE;
specY[idx].SetNameTitle(Form("H%sTrkInY%c%d", mc?"MC":"", chName[ich], isp), "Sum over pt");
specY[idx].H()->SetNameTitle(Form("H%sTrkInY%c%d", mc?"MC":"", chName[ich], isp),
Form("TrackIn[%s%c]:: #Deltay", spcName[isp], chSgn[ich]));
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInY%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), trend);
+ PutTrendValue(Form("%sTrkInYS%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), s);
+ }
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp)))) continue;
+ if((trend=pr1->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInY%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), trend);
+ PutTrendValue(Form("%sTrkInYS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), s);
+ }
specY[idx]+=(*pr1);
}
php.AddLast(&specY[idx]);
if((h2 = specY[idx].Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
+ if((trend=specY[idx].GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInY%c%d", mc?"MC":"", chName[ich], isp), trend);
+ PutTrendValue(Form("%sTrkInYS%c%d", mc?"MC":"", chName[ich], isp), s);
+ }
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", mc?"MC":"", chName[0], isp)))) (*pr1)+=specY[idx];
}
specPh[idx].H()->SetNameTitle(Form("H%sTrkInPh%c%d", mc?"MC":"", chName[ich], isp),
Form("TrackIn[%s%c]:: #Delta#phi", spcName[isp], chSgn[ich]));
specPh[idx].SetShowRange(-1.5, 1.5);
- PutTrendValue(Form("TrkInPh%c%c%d", chName[ich], ptName[0], isp), pr0->GetTrendValue(1));
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInPh%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), trend);
+ PutTrendValue(Form("%sTrkInPhS%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), s);
+ }
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp)))) continue;
- PutTrendValue(Form("TrkInPh%c%c%d", chName[ich], ptName[ipt], isp), pr1->GetTrendValue(1));
+ if((trend=pr1->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInPh%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), trend);
+ PutTrendValue(Form("%sTrkInPhS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), s);
+ }
specPh[idx]+=(*pr1);
}
php.AddLast(&specPh[idx]);
if((h2 = specPh[idx].Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- PutTrendValue(Form("TrkInPh%c%d", chName[ich], isp), specPh[idx].GetTrendValue(1));
+ if((trend=specPh[idx].GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInPh%c%d", mc?"MC":"", chName[ich], isp), trend);
+ PutTrendValue(Form("%sTrkInPhS%c%d", mc?"MC":"", chName[ich], isp), s);
+ }
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%d", mc?"MC":"", chName[0], isp)))) (*pr1)+=specPh[idx];
}
/*!dQdl*/
specQ[idx].SetShowRange(-2.2, -1.75);
specQ[idx].H()->GetZaxis()->SetTitle("dQdl [a.u.]");
if((trend = pr0->GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("TrkInQ%c%c%d", chName[ich], ptName[0], isp), trend);
- PutTrendValue(Form("TrkInQS%c%c%d", chName[ich], ptName[0], isp), m);
+ PutTrendValue(Form("%sTrkInQ%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), trend);
+ PutTrendValue(Form("%sTrkInQS%c%c%d", mc?"MC":"", chName[ich], ptName[0], isp), m);
}
for(Int_t ipt(1); ipt<nPt; ipt++){
if(!(pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp)))) continue;
if((trend=pr1->GetTrendValue(2, &m))>-100.){
- PutTrendValue(Form("TrkInQ%c%c%d", chName[ich], ptName[ipt], isp), trend);
- PutTrendValue(Form("TrkInQS%c%c%d", chName[ich], ptName[ipt], isp), m);
+ PutTrendValue(Form("%sTrkInQ%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), trend);
+ PutTrendValue(Form("%sTrkInQS%c%c%d", mc?"MC":"", chName[ich], ptName[ipt], isp), m);
}
specQ[idx]+=(*pr1);
}
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("TrkInQ%c%d", chName[ich], isp), trend);
- PutTrendValue(Form("TrkInQS%c%d", chName[ich], isp), m);
+ PutTrendValue(Form("%sTrkInQ%c%d", mc?"MC":"", chName[ich], isp), trend);
+ PutTrendValue(Form("%sTrkInQS%c%d", mc?"MC":"", chName[ich], isp), m);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%d", mc?"MC":"", chName[0], isp)))) (*pr1)+=specQ[idx];
}
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
- PutTrendValue(Form("TrkInY%c%c", chName[ich], ptName[ipt]), trend);
- PutTrendValue(Form("TrkInYS%c%c", chName[ich], ptName[ipt]), s);
+ PutTrendValue(Form("%sTrkInY%c%c", mc?"MC":"", chName[ich], ptName[ipt]), trend);
+ PutTrendValue(Form("%sTrkInYS%c%c", mc?"MC":"", chName[ich], ptName[ipt]), s);
}
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", mc?"MC":"", chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
pr0->H()->SetNameTitle(Form("H%sTrkInPh%c%c", mc?"MC":"", 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++);
- PutTrendValue(Form("TrkInPh%c%c", chName[ich], ptName[ipt]), pr0->GetTrendValue(1));
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInPh%c%c", mc?"MC":"", chName[ich], ptName[ipt]), trend);
+ PutTrendValue(Form("%sTrkInPhS%c%c", mc?"MC":"", chName[ich], ptName[ipt]), s);
+ }
if(ipt && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", mc?"MC":"", chName[ich], ptName[0], 0)))) (*pr1)+=(*pr0);
}
/*!dx*/
pr0->H()->SetNameTitle(Form("H%sTrkInX%c%c", mc?"MC":"", 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("TrkInX%c%c", chName[ich], ptName[ipt]), pr0->GetTrendValue(1));
+ PutTrendValue(Form("%sTrkInX%c%c", mc?"MC":"", chName[ich], ptName[ipt]), pr0->GetTrendValue(1));
if(!ipt){
xlow[ich] = (*pr0);
xlow[ich].SetNameTitle(Form("H%sTrkInX%c%c%d", mc?"MC":"", chName[ich], ptName[0], 5),
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
if((trend=pr0->GetTrendValue(1, &m, &s))>-100.){
- PutTrendValue(Form("TrkInY%c", chName[ich]), trend);
- PutTrendValue(Form("TrkInYS%c", chName[ich]), s);
+ PutTrendValue(Form("%sTrkInY%c", mc?"MC":"", chName[ich]), trend);
+ PutTrendValue(Form("%sTrkInYS%c", mc?"MC":"", chName[ich]), s);
}
if(ich && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInY%c%c%d", mc?"MC":"", chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
Form("TrackIn[%c]:: #Delta#phi", chSgn[ich]));
pr0->SetShowRange(-1., 1.);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- PutTrendValue(Form("TrkInPh%c", chName[ich]), pr0->GetTrendValue(1));
+ if((trend=pr0->GetTrendValue(1, &m, &s))>-100.){
+ PutTrendValue(Form("%sTrkInPh%c", mc?"MC":"", chName[ich]), trend);
+ PutTrendValue(Form("%sTrkInPhS%c", mc?"MC":"", chName[ich]), s);
+ }
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInPh%c%c%d", mc?"MC":"", chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
/*!dx*/
pr0->H()->SetNameTitle(Form("H%sTrkInX%c", mc?"MC":"", chName[ich]),
Form("TrackIn[%c]:: #Deltax", chSgn[ich]));
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- PutTrendValue(Form("TrkInX%c", chName[ich]), pr0->GetTrendValue(1));
+ PutTrendValue(Form("%sTrkInX%c", mc?"MC":"", chName[ich]), pr0->GetTrendValue(1));
if(ich==1 && (pr1 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInX%c%c%d", mc?"MC":"", chName[0], ptName[0], 0)))) (*pr1)+=(*pr0);
}
/*!dx low pt*/
pr0->H()->SetNameTitle(Form("H%sTrkInY%d", mc?"MC":"", isp), Form("TrackIn[%s] :: #Deltay", spcName[isp]));
pr0->SetShowRange(-0.3, 0.3);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1, kFALSE))) arr->AddAt(h2, jh++);
+ PutTrendValue(Form("%sTrkInY%d", mc?"MC":"", isp), pr0->GetTrendValue(1));
if((h2 = (TH2*)gDirectory->Get(Form("%sEn", pr0->H()->GetName())))) arr->AddAt(h2, jh++);
}
/*!dphi*/
pr0->H()->SetNameTitle(Form("H%sTrkInPh%d", mc?"MC":"", isp), Form("TrackIn[%s] :: #Delta#phi", spcName[isp]));
pr0->SetShowRange(-1., 1.);
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
- PutTrendValue(Form("TrkInPh%d", isp), pr0->GetTrendValue(1));
+ PutTrendValue(Form("%sTrkInPh%d", mc?"MC":"", isp), pr0->GetTrendValue(1));
}
/*!dQdl*/
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInQ%c%d", mc?"MC":"", chName[0], 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("TrkInQ%d", isp), trend);
- PutTrendValue(Form("TrkInQS%d", isp), m);
+ PutTrendValue(Form("%sTrkInQ%d", mc?"MC":"", isp), trend);
+ PutTrendValue(Form("%sTrkInQS%d", mc?"MC":"", isp), m);
}
}
} // end PID processing
}
pr0->H()->SetNameTitle(Form("H%sTrkInRCZ", mc?"MC":""), "TrackIn[RC]:: #Deltaz");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
+ if((trend=pr0->GetTrendValue(1,&m,&s))>-100.){
+ PutTrendValue(Form("%sTrkInRCZ", mc?"MC":""), trend);
+ PutTrendValue(Form("%sTrkInRCZS", mc?"MC":""), s);
+ }
}
/*!RC dy*/
if((pr0 = (AliTRDrecoProjection*)php.FindObject(Form("H%sTrkInRCY%c", mc?"MC":"", ptName[0])))){
pr0->H()->SetNameTitle(Form("H%sTrkInRCX", mc?"MC":""), "TrackIn[RC]:: #Deltax");
if((h2 = pr0->Projection2D(kNstat, kNcontours, 1))) arr->AddAt(h2, jh++);
}
- AliInfo(Form("Done %3d 2D projections.", jh));
+ AliInfo(Form("Done %3d 2D %s projections.", jh, mc?"MC":""));
return kTRUE;
}
const Char_t ptName[kNpt] = {'l', 'i', 'h'};
const Char_t *ptCut[kNpt] = {"p_{t}[GeV/c]<0.8", "0.8<=p_{t}[GeV/c]<1.5", "p_{t}[GeV/c]>=1.5"};
// define rebinning strategy
- const Int_t nEtaPhi(4); Int_t rebinEtaPhiX[nEtaPhi] = {1, 2, 5, 1}, rebinEtaPhiY[nEtaPhi] = {2, 1, 1, 5};
+ 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){ // old binning
+ 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; // dummy
+ }
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++){
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++) {
AliInfo("Building array of projections ...");
fProj = new TObjArray(kNclasses); fProj->SetOwner(kTRUE);
}
+ // set pt/p segmentation. guess from data
+ THnSparse *H(NULL);
+ if(!(H = (THnSparse*)fContainer->FindObject("hTracklet2TRDin"))){
+ AliError("Missing/Wrong data @ hTracklet2TRDin.");
+ return kFALSE;
+ }
+ fNpt=H->GetAxis(kPt)->GetNbins()+1;
+ if(!MakeMomSegmentation()) return kFALSE;
//PROCESS EXPERIMENTAL DISTRIBUTIONS
// Clusters detector
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);
//++++++++++++++++++++++
// cluster to detector
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.]", "no. of pads"/*, "tb [10 Hz]"*/};
- const Int_t cldNbins[mdim] = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], 76, AliTRDeventInfo::kCentralityClasses, 50, kNpads};
+ const Char_t *cldTitle[mdim] = {"layer", fgkTitle[kPhi], "pad row", "centrality", "q [a.u.]", triggerBins?"trigger":"no. of pads"/*, "tb [10 Hz]"*/};
+ 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., kNpads+.5};
+ cldMax[mdim] = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], 75.5, AliTRDeventInfo::kCentralityClasses - 0.5, 1200., triggerBins?(triggerBins+.5):(kNpads+.5)};
st = "cluster proprieties;";
// define minimum info to be saved in non debug mode
Int_t ndim=DebugLevel()>=1?mdim:Int_t(kNdimDet);
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", "no. of pads"};
- const Int_t clNbins[mdim] = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], fgkNbins[kEta], fgkNbins[kYrez], 45, 30, 30, 15, AliTRDeventInfo::kCentralityClasses, kNpads};
+ 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, kNpads+.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;";
// define minimum info to be saved in non debug mode
Int_t ndim=DebugLevel()>=1?mdim:Int_t(kNdimCl);
trTitle[kBC]=StrDup("layer"); trNbins[kBC] = AliTRDgeometry::kNlayer; trMin[kBC] = -0.5; trMax[kBC] = AliTRDgeometry::kNlayer-0.5;
Int_t jdim(kNdim);
trTitle[jdim]=StrDup("centrality"); trNbins[jdim] = AliTRDeventInfo::kCentralityClasses; trMin[jdim] = -.5; trMax[jdim] = AliTRDeventInfo::kCentralityClasses - 0.5;
- jdim++; trTitle[jdim]=StrDup("occupancy [%]"); trNbins[jdim] = 12; trMin[jdim] = 25.; trMax[jdim] = 85.;
-// jdim++; trTitle[jdim]=StrDup("gap [cm]"); trNbins[jdim] = 80; trMin[jdim] = 0.1; trMax[jdim] = 2.1;
-// jdim++; trTitle[jdim]=StrDup("size_{0} [cm]"); trNbins[jdim] = 16; trMin[jdim] = 0.15; trMax[jdim] = 1.75;
-// jdim++; trTitle[jdim]=StrDup("pos_{0} [cm]"); trNbins[jdim] = 10; trMin[jdim] = 0.; trMax[jdim] = 3.5;
-// jdim++; trTitle[jdim]=StrDup("size_{1} [cm]"); trNbins[jdim] = 16; trMin[jdim] = 0.15; trMax[jdim] = 1.75;
-// jdim++; trTitle[jdim]=StrDup("pos_{1} [cm]"); trNbins[jdim] = 10; trMin[jdim] = 0.; trMax[jdim] = 3.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;";
// define minimum info to be saved in non debug mode
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(fTriggerList){
- trinTitle[kBC]=StrDup("trigger");
- trinNbins[kBC] = TMath::Power(2.,fTriggerList->GetEntriesFast())-1;
- trinMin[kBC] = 0.5; trinMax[kBC] = trinNbins[kBC]+.5;
- }
- trinNbins[kSpeciesChgRC] = Int_t(kNcharge)*(kNspc-1)+1; trinMin[kSpeciesChgRC] = -kNspc+0.5; trinMax[kSpeciesChgRC] = kNspc-0.5;
- if(DebugLevel()>=1){trinNbins[kPt]=24; trinMax[kPt] = 23.5;}
- trinTitle[kNdim]=StrDup("bin_p"); trinNbins[kNdim] = (DebugLevel()>=1?24:kNpt); trinMin[kNdim] = -0.5; trinMax[kNdim] = trinNbins[kNdim]-.5;
+ if(triggerBins){
+ trinTitle[kBC]=StrDup("trigger"); trinNbins[kBC] = triggerBins;
+ trinMin[kBC] = 0.5; trinMax[kBC] = triggerBins+.5;
+ }
+// trinNbins[kSpeciesChgRC] = Int_t(kNcharge)*(kNspc-1)+1; trinMin[kSpeciesChgRC] = -kNspc+0.5; trinMax[kSpeciesChgRC] = kNspc-0.5;
+ trinNbins[kPt]=fNpt-1; trinMax[kPt] = trinNbins[kPt]-.5;
+ trinTitle[kNdim]=StrDup("bin_p"); 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;
//trinTitle[kNdim+2]=StrDup("Fill Bunch"); trinNbins[kNdim+2]=3500; trinMin[kNdim+2]=-0.5; trinMax[kNdim+2]=3499.5;
st = "r-#phi/z/angular residuals @ TRD entry;";
// cluster to TrackRef residuals/pulls
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCcluster]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
- const Char_t *clTitle[kNdim] = {"layer", fgkTitle[kPhi], fgkTitle[kEta], fgkTitle[kYrez], "#Deltax [cm]", "Q</Q", fgkTitle[kSpeciesChgRC], "#Phi [deg]"};
- const Int_t clNbins[kNdim] = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], fgkNbins[kEta], fgkNbins[kYrez], 20, 10, Int_t(kNcharge)*AliPID::kSPECIES+1, 15};
- const Double_t clMin[kNdim] = {-0.5, fgkMin[kPhi], fgkMin[kEta], fgkMin[kYrez]/10., 0., 0.1, -AliPID::kSPECIES-0.5, -45},
- clMax[kNdim] = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], fgkMax[kEta], fgkMax[kYrez]/10., 4., 2.1, AliPID::kSPECIES+0.5, 45};
- st = "MC cluster spatial resolution;";
- // define minimum info to be saved in non debug mode
- Int_t ndim=DebugLevel()>=1?kNdim:4;
- for(Int_t idim(0); idim<ndim; idim++){ st += clTitle[idim]; st+=";";}
- H = new THnSparseI(hn, st.Data(), ndim, clNbins, clMin, clMax);
+ H = (THnSparseI*)((THnSparseI*)fContainer->At(kCluster))->Clone(hn);
+ H->SetTitle("MC cluster spatial resolution");
} else H->Reset();
fContainer->AddAt(H, kMCcluster);
//++++++++++++++++++++++
// tracklet to TrackRef
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCtracklet]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
- Char_t *trTitle[kNdim]; memcpy(trTitle, fgkTitle, kNdim*sizeof(Char_t*));
- Int_t trNbins[kNdim]; memcpy(trNbins, fgkNbins, kNdim*sizeof(Int_t));
- Double_t trMin[kNdim]; memcpy(trMin, fgkMin, kNdim*sizeof(Double_t));
- Double_t trMax[kNdim]; memcpy(trMax, fgkMax, kNdim*sizeof(Double_t));
- // set specific fields
- trTitle[kBC]=StrDup("layer"); trNbins[kBC] = AliTRDgeometry::kNlayer; trMin[kBC] = -0.5; trMax[kBC] = AliTRDgeometry::kNlayer-0.5;
- trMin[kYrez] = -0.54; trMax[kYrez] = -trMin[kYrez];
- trMin[kPrez] = -4.5; trMax[kPrez] = -trMin[kPrez];
- trMin[kZrez] = -1.5; trMax[kZrez] = -trMin[kZrez];
- trNbins[kSpeciesChgRC] = Int_t(kNcharge)*AliPID::kSPECIES+1;trMin[kSpeciesChgRC] = -AliPID::kSPECIES-0.5; trMax[kSpeciesChgRC] = AliPID::kSPECIES+0.5;
-
- st = "MC tracklet spatial resolution;";
- // define minimum info to be saved in non debug mode
- Int_t ndim=DebugLevel()>=1?kNdim:4;
- for(Int_t idim(0); idim<ndim; idim++){ st += trTitle[idim]; st+=";";}
- H = new THnSparseI(hn, st.Data(), ndim, trNbins, trMin, trMax);
+ H = (THnSparseI*)((THnSparseI*)fContainer->At(kTracklet))->Clone(hn);
+ H->SetTitle("MC tracklet spatial resolution");
} else H->Reset();
fContainer->AddAt(H, kMCtracklet);
//++++++++++++++++++++++
// TRDin to TrackRef
snprintf(hn, nhn, "h%s", fgPerformanceName[kMCtrackIn]);
if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
- st = "MC r-#phi/z/angular residuals @ TRD entry;";
- // set specific fields
- Int_t trNbins[kNdim]; memcpy(trNbins, fgkNbins, kNdim*sizeof(Int_t));
- Double_t trMin[kNdim]; memcpy(trMin, fgkMin, kNdim*sizeof(Double_t));
- Double_t trMax[kNdim]; memcpy(trMax, fgkMax, kNdim*sizeof(Double_t));
- trMin[kYrez] = -0.54; trMax[kYrez] = -trMin[kYrez];
- trMin[kPrez] = -2.4; trMax[kPrez] = -trMin[kPrez];
- trMin[kZrez] = -0.9; trMax[kZrez] = -trMin[kZrez];
- trNbins[kSpeciesChgRC] = Int_t(kNcharge)*AliPID::kSPECIES+1;trMin[kSpeciesChgRC] = -AliPID::kSPECIES-0.5; trMax[kSpeciesChgRC] = AliPID::kSPECIES+0.5;
- // define minimum info to be saved in non debug mode
- Int_t ndim=DebugLevel()>=1?kNdim:7;
- for(Int_t idim(0); idim<ndim; idim++){ st += fgkTitle[idim]; st+=";";}
- H = new THnSparseI(hn, st.Data(), ndim, trNbins, trMin, trMax);
+ 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);
//++++++++++++++++++++++
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[kSpeciesChgRC] = Int_t(kNcharge)*AliPID::kSPECIES+1;trMin[kSpeciesChgRC] = -AliPID::kSPECIES-0.5; trMax[kSpeciesChgRC] = AliPID::kSPECIES+0.5;
+ trNbins[kPt] =fNpt-1;trMax[kPt] = trNbins[kPt]-.5;
+ //trNbins[kSpeciesChgRC] = Int_t(kNcharge)*AliPID::kSPECIES+1;trMin[kSpeciesChgRC] = -AliPID::kSPECIES-0.5; trMax[kSpeciesChgRC] = AliPID::kSPECIES+0.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;";