@@ -1991,6 +1991,7 @@ struct AnalysisAsymmetricPairing {
19911991 Configurable<uint32_t > fConfigLegCFilterMask {" cfgLegCFilterMask" , 0 , " Filter mask corresponding to cuts in track-selection" };
19921992 Configurable<string> fConfigCommonTrackCuts {" cfgCommonTrackCuts" , " " , " Comma separated list of cuts to be applied to all legs" };
19931993 Configurable<string> fConfigPairCuts {" cfgPairCuts" , " " , " Comma separated list of pair cuts" };
1994+ Configurable<string> fConfigPairCutsJSON {" cfgPairCutsJSON" , " " , " Additional list of pair cuts in JSON format" };
19941995 Configurable<bool > fConfigSkipAmbiguousIdCombinations {" cfgSkipAmbiguousIdCombinations" , true , " Choose whether to skip pairs/triples which pass a stricter combination of cuts, e.g. KKPi triplets for D+ -> KPiPi" };
19951996
19961997 Configurable<std::string> fConfigHistogramSubgroups {" cfgAsymmetricPairingHistogramsSubgroups" , " barrel,vertexing" , " Comma separated list of asymmetric-pairing histogram subgroups" };
@@ -2013,7 +2014,7 @@ struct AnalysisAsymmetricPairing {
20132014 HistogramManager* fHistMan ;
20142015
20152016 std::map<int , std::vector<TString>> fTrackHistNames ;
2016- std::vector<AnalysisCompositeCut> fPairCuts ;
2017+ std::vector<AnalysisCompositeCut* > fPairCuts ;
20172018
20182019 // Filter masks to find legs in BarrelTrackCuts table
20192020 uint32_t fLegAFilterMask ;
@@ -2058,13 +2059,31 @@ struct AnalysisAsymmetricPairing {
20582059 if (!cutNamesStr.IsNull ()) {
20592060 std::unique_ptr<TObjArray> objArray (cutNamesStr.Tokenize (" ," ));
20602061 for (int icut = 0 ; icut < objArray->GetEntries (); ++icut) {
2061- fPairCuts .push_back (*dqcuts::GetCompositeCut (objArray->At (icut)->GetName ()));
2062+ fPairCuts .push_back (dqcuts::GetCompositeCut (objArray->At (icut)->GetName ()));
2063+ }
2064+ }
2065+ // Extra pair cuts via JSON
2066+ TString addPairCutsStr = fConfigPairCutsJSON .value ;
2067+ if (addPairCutsStr != " " ) {
2068+ std::vector<AnalysisCut*> addPairCuts = dqcuts::GetCutsFromJSON (addPairCutsStr.Data ());
2069+ for (auto & t : addPairCuts) {
2070+ fPairCuts .push_back ((AnalysisCompositeCut*)t);
2071+ cutNamesStr += Form (" ,%s" , t->GetName ());
20622072 }
20632073 }
20642074 // Get the barrel track selection cuts
20652075 string tempCuts;
20662076 getTaskOptionValue<string>(context, " analysis-track-selection" , " cfgTrackCuts" , tempCuts, false );
20672077 TString tempCutsStr = tempCuts;
2078+ // check also the cuts added via JSON and add them to the string of cuts
2079+ getTaskOptionValue<string>(context, " analysis-track-selection" , " cfgBarrelTrackCutsJSON" , tempCuts, false );
2080+ TString addTrackCutsStr = tempCuts;
2081+ if (addTrackCutsStr != " " ) {
2082+ std::vector<AnalysisCut*> addTrackCuts = dqcuts::GetCutsFromJSON (addTrackCutsStr.Data ());
2083+ for (auto & t : addTrackCuts) {
2084+ tempCutsStr += Form (" ,%s" , t->GetName ());
2085+ }
2086+ }
20682087 std::unique_ptr<TObjArray> objArray (tempCutsStr.Tokenize (" ," ));
20692088 // Get the common leg cuts
20702089 int commonCutIdx;
@@ -2164,7 +2183,6 @@ struct AnalysisAsymmetricPairing {
21642183 fTrackHistNames [fNLegCuts + icut * fNCommonTrackCuts + iCommonCut] = names;
21652184 }
21662185
2167- TString cutNamesStr = fConfigPairCuts .value ;
21682186 if (!cutNamesStr.IsNull ()) { // if pair cuts
21692187 std::unique_ptr<TObjArray> objArrayPair (cutNamesStr.Tokenize (" ," ));
21702188 fNPairCuts = objArrayPair->GetEntries ();
@@ -2431,9 +2449,9 @@ struct AnalysisAsymmetricPairing {
24312449 }
24322450 }
24332451 } // end loop (common cuts)
2434- for ( unsigned int iPairCut = 0 ; iPairCut < fPairCuts . size (); iPairCut++) {
2435- AnalysisCompositeCut cut = fPairCuts .at (iPairCut);
2436- if (!(cut. IsSelected (VarManager::fgValues))) // apply pair cuts
2452+ int iPairCut = 0 ;
2453+ for ( auto cut = fPairCuts . begin (); cut ! = fPairCuts .end (); cut++, iPairCut++) {
2454+ if (!((* cut)-> IsSelected (VarManager::fgValues))) // apply pair cuts
24372455 continue ;
24382456 pairFilter |= (static_cast <uint32_t >(1 ) << iPairCut);
24392457 // Histograms with pair cuts
@@ -2607,11 +2625,10 @@ struct AnalysisAsymmetricPairing {
26072625 fHistMan ->FillHistClass (histNames[fNLegCuts + icut * fNCommonTrackCuts + iCommonCut][0 ].Data (), VarManager::fgValues);
26082626 }
26092627 } // end loop (common cuts)
2610- for ( unsigned int iPairCut = 0 ; iPairCut < fPairCuts . size (); iPairCut++) {
2611- AnalysisCompositeCut cut = fPairCuts .at (iPairCut);
2612- if (!(cut. IsSelected (VarManager::fgValues))) { // apply pair cuts
2628+ int iPairCut = 0 ;
2629+ for ( auto cut = fPairCuts . begin (); cut ! = fPairCuts .end (); cut++, iPairCut++) {
2630+ if (!((* cut)-> IsSelected (VarManager::fgValues))) // apply pair cuts
26132631 continue ;
2614- }
26152632 // Histograms with pair cuts
26162633 fHistMan ->FillHistClass (histNames[fNLegCuts * (fNCommonTrackCuts + 1 ) + icut * fNPairCuts + iPairCut][0 ].Data (), VarManager::fgValues);
26172634 // Histograms with pair cuts and common track cuts
0 commit comments