-TObjArray* AliTRDcheckTRK::Histos()
-{
- //
- // Create QA histogram tree
- //
-
- if(fContainer) return fContainer;
-
- THnSparseI *h(NULL);
- fContainer = new TObjArray(kNclasses);
- fContainer->SetOwner(kTRUE);
-
- const Char_t *ccn[kNclasses] = {"Entry", "Propag"};
- const Char_t *ctt[kNclasses] = {"r-#phi/z/angular residuals @ entry", "r-#phi/z/angular residuals each ly"};
-
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- Int_t bins[kNdim+1] = {Int_t(kNbunchCross)/*bc*/, 180/*phi*/, 50/*eta*/, Int_t(kNcharge)*AliPID::kSPECIES+1/*chg*species*/, kNpt/*pt*/, 50/*dy*/, 50/*dz*/, 40/*dphi*/, AliTRDgeometry::kNlayer};
- Double_t min[kNdim+1] = {-0.5, -TMath::Pi(), -1., -AliPID::kSPECIES-0.5, -0.5, -1.5, -2.5, -10., -0.5},
- max[kNdim+1] = {Int_t(kNbunchCross)-0.5, TMath::Pi(), 1., AliPID::kSPECIES+0.5, kNpt-0.5, 1.5, 2.5, 10., AliTRDgeometry::kNlayer-0.5};
- Char_t hn[100], ht[700];
- snprintf(hn, 100, "h%s", ccn[kEntry]);
- if(!(h = (THnSparseI*)gROOT->FindObject(hn))){
- snprintf(ht, 700, "%s;bunch cross;#phi [rad];#eta;chg*spec*rc;bin_p_{t};#Deltay [cm];#Deltaz [cm];#Delta#phi [deg];", ctt[kEntry]);
- h = new THnSparseI(hn, ht, kNdim, bins, min, max);
- } else h->Reset();
- fContainer->AddAt(h, kEntry);
-
- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- min[5] = -0.15; max[5] = 0.15;
- snprintf(hn, 100, "h%s", ccn[kPropagation]);
- if(!(h = (THnSparseI*)gROOT->FindObject(hn))){
- snprintf(ht, 700, "%s;bunch cross;#phi [rad];#eta;chg*spec*rc;bin_p_{t};#Deltay [cm];#Deltaz [cm];#Delta#phi [deg];layer;", ctt[kPropagation]);
- h = new THnSparseI(hn, ht, kNdim+1, bins, min, max);
- } else h->Reset();
- fContainer->AddAt(h, kPropagation);
-
- return fContainer;
-}
-
-//__________________________________________________________________________
-TH1* AliTRDcheckTRK::PlotEntry(const AliTRDtrackV1 *track)
-{
-// comment needed
- if(track) fkTrack = track;
- if(!fkTrack){
- AliDebug(4, "No Track defined.");
- return NULL;
- }
- // check container
- THnSparseI *h=(THnSparseI*)fContainer->At(kEntry);
- if(!h){
- AliError(Form("Missing container @ %d", Int_t(kEntry)));
- return NULL;
- }
- // check input track status
- AliExternalTrackParam *tin(NULL);
- if(!(tin = fkTrack->GetTrackIn())){
- AliError("Track did not entered TRD fiducial volume.");
- return NULL;
- }
- // check first tracklet
- AliTRDseedV1 *fTracklet(fkTrack->GetTracklet(0));
- if(!fTracklet){
- AliDebug(3, "No Tracklet in ly[0]. Skip track.");
- return NULL;
- }
- // check radial position
- 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()));
- return NULL;
- }
-
- Double_t xyz[3];
- if(!tin->GetXYZ(xyz)){
- AliDebug(1, "Failed getting global track postion");
- xyz[0]=x; xyz[1]=0.; xyz[2]=0.;
- }
- Float_t mass(fkTrack->GetMass()),
- eta(tin->Eta()),
- phi(TMath::ATan2(xyz[1], xyz[0]));
- Int_t charge(fkTrack->Charge()),
- species(GetSpeciesByMass(mass)),
- bc(fkESD->GetTOFbc());
- const Double_t *parR(tin->GetParameter());
- Double_t dyt(parR[0] - fTracklet->GetYfit(0)), dzt(parR[1] - fTracklet->GetZfit(0)),
- phit(fTracklet->GetYfit(1)),
- tilt(fTracklet->GetTilt());
-
- // correct for tilt rotation
- Double_t dy = dyt - dzt*tilt,
- dz = dzt + dyt*tilt;
- phit += tilt*parR[3];
- Double_t dphi = TMath::ASin(parR[2])-TMath::ATan(phit);
-
- Double_t val[kNdim];
- val[kBC] = (bc>=kNbunchCross)?(kNbunchCross-1):bc;
- val[kPhi] = phi;
- val[kEta] = eta;
- val[kSpeciesChgRC]= fTracklet->IsRowCross()?0:charge*(species+1);
- val[kPt] = GetPtBin(tin->Pt());
- val[kYrez] = dy;
- val[kZrez] = dz;
- val[kPrez] = dphi*TMath::RadToDeg();
- h->Fill(val);
- return NULL;
-}
-
-//__________________________________________________________________________
-TH1* AliTRDcheckTRK::PlotPropagation(const AliTRDtrackV1 *track)