/////////////////////////////////////////////////////////////////////////// // // // Authors: // Julian Book /* Advanced cut class. Add cuts that are applied only for certain types of e.g. tracks or under some defined condition: AddCut(AnalysisCuts *cuts, AnalysisCuts *range) Example - apply TRD PID only for track with 3-4 reconstructed hits // TRD reconstruction cuts PairAnalysisVarCuts *recTRD = new PairAnalysisVarCuts("recTRD","recTRD"); recTRD->AddCut(PairAnalysisVarManager::kTRDHits, 3., 4.); // TRD Pid - 1-dimensional PairAnalysisVarCuts *pidTRD = new PairAnalysisVarCuts("pidTRD","pidTRD"); pidTRD->AddCut(PairAnalysisVarManager::kTRDPidANN, 0.5, 1.5); // build PID cut depending on track quality PairAnalysisCutCombi *pidTRDavai = new PairAnalysisCutCombi("TRDPidAvai","TRDPidAvai"); pidTRDavai->AddCut(pidTRD, recTRD); */ // // /////////////////////////////////////////////////////////////////////////// #include "PairAnalysisVarManager.h" #include "PairAnalysisCutCombi.h" ClassImp(PairAnalysisCutCombi) PairAnalysisCutCombi::PairAnalysisCutCombi() : AnalysisCuts(), fNActiveCuts(0), fActiveCutsMask(0), fSelectedCutsMask(0), fCutType(kAll) { // // Default Constructor // for (Int_t i=0; iIsSelected(values) ) continue; // check decision if ( !fCuts[iCut]->IsSelected(values) ) CLRBIT(fSelectedCutsMask,iCut); // cut type and intermediate decision if ( fCutType==kAll && !TESTBIT(fSelectedCutsMask,iCut) ) return kFALSE; } // cut type and final decision Bool_t isSelected=(fSelectedCutsMask==fActiveCutsMask); if ( fCutType==kAny ) isSelected=(fSelectedCutsMask>0); SetSelected(isSelected); return isSelected; } //________________________________________________________________________ void PairAnalysisCutCombi::Print(const Option_t* /*option*/) const { // // Print cuts and the range // printf("-----------------------------------------------------------------\n"); printf("cut ranges for '%s'\n",GetTitle()); if (fCutType==kAll){ printf("All Cuts have to be fulfilled\n"); } else { printf("Any Cut has to be fulfilled\n"); } for (Int_t iCut=0; iCutPrint(); printf("For the following conditions:\n"); fRangeCuts[iCut]->Print(); } printf("-----------------------------------------------------------------\n"); }