TNamed::Copy(c);
}
//__________________________________________________________________________________
-void AliCFTrackKineCuts::GetBitMap(TObject* obj, TBits *bitmap) {
- //
- // retrieve the pointer to the bitmap
- //
- TBits *bm = SelectionBitMap(obj);
- *bitmap = *bm;
-}
-//__________________________________________________________________________________
-TBits* AliCFTrackKineCuts::SelectionBitMap(TObject* obj) {
+void AliCFTrackKineCuts::SelectionBitMap(TObject* obj) {
//
// test if the track passes the single cuts
// and store the information in a bitmap
// bitmap stores the decision of each single cut
for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kFALSE);
- // cast TObject into VParticle
+ // check TObject and cast into VParticle
+ if (!obj) return ;
+ if (!obj->InheritsFrom("AliVParticle")) AliError("object must derived from AliVParticle !");
AliVParticle* particle = dynamic_cast<AliVParticle *>(obj);
- if ( !particle ) return fBitmap ;
-
- for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kTRUE);
+ if ( !particle ) return;
Int_t iCutBit = 0;
- if((particle->P() < fMomentumMin) || (particle->P() > fMomentumMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if((particle->P() >= fMomentumMin) && (particle->P() <= fMomentumMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Pt() < fPtMin) || (particle->Pt() > fPtMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Pt() >= fPtMin) && (particle->Pt() <= fPtMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Px() < fPxMin) || (particle->Px() > fPxMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Px() >= fPxMin) && (particle->Px() <= fPxMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Py() < fPyMin) || (particle->Py() > fPyMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Py() >= fPyMin) && (particle->Py() <= fPyMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Pz() < fPzMin) || (particle->Pz() > fPzMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Pz() >= fPzMin) && (particle->Pz() <= fPzMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Eta() < fEtaMin) || (particle->Eta() > fEtaMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Eta() >= fEtaMin) && (particle->Eta() <= fEtaMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Y() < fRapidityMin) || (particle->Y() > fRapidityMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Y() >= fRapidityMin) && (particle->Y() <= fRapidityMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if ((particle->Phi() < fPhiMin) || (particle->Phi() > fPhiMax))
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if ((particle->Phi() >= fPhiMin) && (particle->Phi() <= fPhiMax))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if (fCharge < 10 && particle->Charge() != fCharge)
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if (fCharge >= 10 || (particle->Charge() == fCharge))
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
iCutBit++;
- if (fRequireIsCharged && particle->Charge()==0)
- fBitmap->SetBitNumber(iCutBit,kFALSE);
+ if (fRequireIsCharged && particle->Charge()!=0)
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
+ if (!fRequireIsCharged)
+ fBitmap->SetBitNumber(iCutBit,kTRUE);
- return fBitmap;
+ return;
}
//__________________________________________________________________________________
Bool_t AliCFTrackKineCuts::IsSelected(TObject* obj) {
//
// loops over decisions of single cuts and returns if the track is accepted
//
- TBits* bitmap = SelectionBitMap(obj);
+ SelectionBitMap(obj);
+ if (fIsQAOn) FillHistograms(obj,0);
Bool_t isSelected = kTRUE;
- for (UInt_t icut=0; icut<bitmap->GetNbits();icut++)
- if(!bitmap->TestBitNumber(icut)) isSelected = kFALSE;
-
- return isSelected;
-}
-//__________________________________________________________________________________
-void AliCFTrackKineCuts::Init() {
- //
- // initialises all histograms and the TList which holds the histograms
- //
- if(fIsQAOn)
- DefineHistograms();
+ for (UInt_t icut=0; icut<fBitmap->GetNbits();icut++) {
+ if(!fBitmap->TestBitNumber(icut)) {
+ isSelected = kFALSE;
+ break;
+ }
+ }
+ if (!isSelected) return kFALSE ;
+ if (fIsQAOn) FillHistograms(obj,1);
+ return kTRUE;
}
//__________________________________________________________________________________
void AliCFTrackKineCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
// book QA histograms
- Char_t str[256];
+ Char_t str[5];
for (Int_t i=0; i<kNStepQA; i++) {
- if (i==0) sprintf(str," ");
- else sprintf(str,"_cut");
+ if (i==0) snprintf(str,5," ");
+ else snprintf(str,5,"_cut");
fhQA[kCutP][i] = new TH1F(Form("%s_momentum%s",GetName(),str), "",fhNBinsMomentum-1,fhBinLimMomentum);
fhQA[kCutPt][i] = new TH1F(Form("%s_transverse_momentum%s",GetName(),str),"",fhNBinsPt-1,fhBinLimPt);
//
// fill the QA histograms
//
- if(!fIsQAOn) return;
// cast TObject into VParticle
+ if (!obj) return;
AliVParticle* particle = dynamic_cast<AliVParticle *>(obj);
if ( !particle ) return;
- // index = 0: fill histograms before cuts
- // index = 1: fill histograms after cuts
- Int_t index = -1;
- index = ((b) ? 1 : 0);
-
- fhQA[kCutP][index]->Fill(particle->P());
- fhQA[kCutPt][index]->Fill(particle->Pt());
- fhQA[kCutPx][index]->Fill(particle->Px());
- fhQA[kCutPy][index]->Fill(particle->Py());
- fhQA[kCutPz][index]->Fill(particle->Pz());
- fhQA[kCutRapidity][index]->Fill(particle->Y());
- fhQA[kCutEta][index]->Fill(particle->Eta());
- fhQA[kCutPhi][index]->Fill(particle->Phi());
- fhQA[kCutCharge][index]->Fill((float)particle->Charge());
+ // b = 0: fill histograms before cuts
+ // b = 1: fill histograms after cuts
+ fhQA[kCutP][b]->Fill(particle->P());
+ fhQA[kCutPt][b]->Fill(particle->Pt());
+ fhQA[kCutPx][b]->Fill(particle->Px());
+ fhQA[kCutPy][b]->Fill(particle->Py());
+ fhQA[kCutPz][b]->Fill(particle->Pz());
+ fhQA[kCutRapidity][b]->Fill(particle->Y());
+ fhQA[kCutEta][b]->Fill(particle->Eta());
+ fhQA[kCutPhi][b]->Fill(particle->Phi());
+ fhQA[kCutCharge][b]->Fill((float)particle->Charge());
// fill cut statistics and cut correlation histograms with information from the bitmap
if (b) return;
- if (!obj) return;
- TBits* bitmap = SelectionBitMap(obj);
-
// Number of single cuts in this class
- UInt_t ncuts = bitmap->GetNbits();
+ UInt_t ncuts = fBitmap->GetNbits();
for(UInt_t bit=0; bit<ncuts;bit++) {
- if (!bitmap->TestBitNumber(bit)) {
- fhCutStatistics->Fill(bit+1);
- for (UInt_t bit2=bit; bit2<ncuts;bit2++) {
- if (!bitmap->TestBitNumber(bit2))
- fhCutCorrelation->Fill(bit+1,bit2+1);
- }
+ if (!fBitmap->TestBitNumber(bit)) {
+ fhCutStatistics->Fill(bit+1);
+ for (UInt_t bit2=bit; bit2<ncuts;bit2++) {
+ if (!fBitmap->TestBitNumber(bit2))
+ fhCutCorrelation->Fill(bit+1,bit2+1);
+ }
}
}
}
canvas3->SaveAs(Form("%s.ps", canvas3->GetName()));
}
//__________________________________________________________________________________
-void AliCFTrackKineCuts::AddQAHistograms(TList *qaList) const {
+void AliCFTrackKineCuts::AddQAHistograms(TList *qaList) {
//
// saves the histograms in a TList
//
- if(!fIsQAOn) return;
+ DefineHistograms();
qaList->Add(fhCutStatistics);
qaList->Add(fhCutCorrelation);