/************************************************************************* * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * **************************************************************************/ ////////////////////////////////////////////////////////////////////////// // CutQA // // // /* Allow to monitor how many tracks,pair,events pass the selection criterion in any of the cuts added to the corresponding filters. All you need to add to your config is the following: papa->SetCutQA(); */ // // ////////////////////////////////////////////////////////////////////////// #include "PairAnalysisCutQA.h" #include #include #include "PairAnalysisCutGroup.h" #include "AnalysisCuts.h" #include "PairAnalysisEvent.h" //#include "AliVParticle.h" #include "PairAnalysisTrack.h" #include "PairAnalysisPair.h" ClassImp(PairAnalysisCutQA) PairAnalysisCutQA::PairAnalysisCutQA() : TNamed(), fQAHistArray() { // // Default constructor // for(Int_t itype=0; itypeGetXaxis()->SetBinLabel(i+1,fCutNames[i][itype]); // printf(" %s \n",fCutNames[i][itype]); } fQAHistArray.AddLast(fCutQA[itype]); } } //_____________________________________________________________________ void PairAnalysisCutQA::AddTrackFilter(AnalysisFilter *trackFilter) { // // add track filter cuts to the qa histogram // TIter listIterator(trackFilter->GetCuts()); while (AnalysisCuts *thisCut = (AnalysisCuts*) listIterator()) { Bool_t addCut=kTRUE; // add new cut class to the array if(addCut) { fCutNames[fNCuts[kTrack]][kTrack]=thisCut->GetTitle(); // printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kTrack]); fNCuts[kTrack]++; } } // pair filter loop } //_____________________________________________________________________ void PairAnalysisCutQA::AddPairFilter(AnalysisFilter *pairFilter) { // // add track filter cuts to the qa histogram // TIter listIterator(pairFilter->GetCuts()); while (AnalysisCuts *thisCut = (AnalysisCuts*) listIterator()) { Bool_t addCut=kTRUE; // add new cut class to the array if(addCut) { fCutNames[fNCuts[kPair]][kPair]=thisCut->GetTitle(); // printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kPair]); fNCuts[kPair]++; } } // trk filter loop } //_____________________________________________________________________ void PairAnalysisCutQA::AddEventFilter(AnalysisFilter *eventFilter) { // // add track filter cuts to the qa histogram // TIter listIterator(eventFilter->GetCuts()); while (AnalysisCuts *thisCut = (AnalysisCuts*) listIterator()) { Bool_t addCut=kTRUE; // add new cut class to the array if(addCut) { fCutNames[fNCuts[kEvent]][kEvent]=thisCut->GetTitle(); // printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kEvent]); fNCuts[kEvent]++; } } // trk filter loop } //_____________________________________________________________________ void PairAnalysisCutQA::Fill(UInt_t mask, TObject *obj) { // // fill the corresponding step in the qa histogram // UInt_t idx = GetObjIndex(obj); Int_t cutstep=1; for (Int_t iCut=0; iCutFill(cutstep); ++cutstep; } } } //_____________________________________________________________________ void PairAnalysisCutQA::FillAll(TObject *obj) { // // fill the corresponding step in the qa histogram // UInt_t idx = GetObjIndex(obj); fCutQA[idx]->Fill(0); } //______________________________________________________________________ UInt_t PairAnalysisCutQA::GetObjIndex(TObject *obj) { // // return the corresponding idex // // printf("INFO: object type is a %s \n", obj->IsA()->GetName()); if(obj->InheritsFrom(PairAnalysisPair::Class()) ) return kPair; if(obj->InheritsFrom(PairAnalysisTrack::Class()) ) return kTrack; if(obj->InheritsFrom(PairAnalysisEvent::Class()) ) return kEvent; // printf("FATAL: object type %s not yet supported, please let the author know\n", obj->IsA()->GetName()); return -1; }