Removed 1 short run from LHC10b GoodRuns
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / RunAnalysisAODVertexingHF.C
CommitLineData
8931206f 1class AliAnalysisGrid;
54d54d1a 2class AliAnalysisAlien;
8931206f 3
4void RunAnalysisAODVertexingHF()
5{
6 //
7 // Test macro for AliAnalysisTaskSE's for heavy-flavour candidates
8 // It has the structure of a Analysis Train:
9 // - in this macro, change things related to running mode
10 // and input preparation
11 // - add your task using a AddTaskXXX macro
12 //
13 // A.Dainese, andrea.dainese@lnl.infn.it
14 // "grid" mode added by R.Bala, bala@to.infn.it
15 //
16
17
18 gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -g");
19 //
20 TString trainName = "D2H";
21 TString analysisMode = "grid"; // "local", "grid", or "proof"
22 TString inputMode = "list"; // "list", "xml", or "dataset"
23 Long64_t nentries=123567890,firstentry=0;
24 Bool_t useParFiles=kFALSE;
25 Bool_t useAlienPlugin=kTRUE;
7dc1b6b2 26 TString pluginmode="full";
8931206f 27 Bool_t saveProofToAlien=kFALSE;
28 TString proofOutdir = "";
29 TString loadMacroPath="$ALICE_ROOT/PWG3/vertexingHF/macros/";
30 //TString loadMacroPath="./"; // this is normally needed for CAF
31 //
32
33 if(analysisMode=="grid") {
34 // Connect to AliEn
35 TGrid::Connect("alien://");
36 } else if(analysisMode=="proof") {
37 // Connect to the PROOF cluster
38 if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
39 gEnv->SetValue("XSec.GSI.DelegProxy","2");
40 TProof::Open("alicecaf");
41 //TProof::Reset("alicecaf");
42 if(saveProofToAlien) {
43 TGrid::Connect("alien://");
44 if(gGrid) {
45 TString homedir = gGrid->GetHomeDirectory();
46 TString workdir = homedir + trainName;
47 if(!gGrid->Cd(workdir)) {
48 gGrid->Cd(homedir);
49 if(gGrid->Mkdir(workdir)) {
50 gGrid->Cd(trainName);
51 ::Info("VertexingTrain::Connect()", "Directory %s created", gGrid->Pwd());
52 }
53 }
54 gGrid->Mkdir("proof_output");
55 gGrid->Cd("proof_output");
56 proofOutdir = Form("alien://%s", gGrid->Pwd());
57 }
58 }
59 }
60
61
62 // AliRoot libraries
63 if(analysisMode=="local" || analysisMode=="grid") {
64 TString loadLibraries="LoadLibraries.C"; loadLibraries.Prepend(loadMacroPath.Data());
65 gROOT->LoadMacro(loadLibraries.Data());
66 LoadLibraries(useParFiles);
67 } else if (analysisMode=="proof") {
68 gSystem->Load("libTree.so");
69 gSystem->Load("libGeom.so");
70 gSystem->Load("libPhysics.so");
71 gSystem->Load("libVMC.so");
72 gSystem->Load("libMinuit.so");
73 // Enable the needed packages
74 //gProof->ClearPackages();
75 TString parDir="/afs/cern.ch/user/d/dainesea/code/";
76 TString parFile;
77 if(!useParFiles) {
78 gProof->UploadPackage("AF-v4-17");
79 gProof->EnablePackage("AF-v4-17");
80 // --- Enable the PWG3vertexingHF Package
81 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
82 gProof->UploadPackage(parFile.Data());
83 gProof->EnablePackage("PWG3vertexingHF");
84 } else {
85 // --- Enable the STEERBase Package
86 parFile="STEERBase.par"; parFile.Prepend(parDir.Data());
87 gProof->UploadPackage(parFile.Data());
88 gProof->EnablePackage("STEERBase");
89 // --- Enable the ESD Package
90 parFile="ESD.par"; parFile.Prepend(parDir.Data());
91 gProof->UploadPackage(parFile.Data());
92 gProof->EnablePackage("ESD");
93 // --- Enable the AOD Package
94 parFile="AOD.par"; parFile.Prepend(parDir.Data());
95 gProof->UploadPackage(parFile.Data());
96 gProof->EnablePackage("AOD");
97 // --- Enable the ANALYSIS Package
98 parFile="ANALYSIS.par"; parFile.Prepend(parDir.Data());
99 gProof->UploadPackage(parFile.Data());
100 gProof->EnablePackage("ANALYSIS");
101 // --- Enable the ANALYSISalice Package
102 parFile="ANALYSISalice.par"; parFile.Prepend(parDir.Data());
103 gProof->UploadPackage(parFile.Data());
104 gProof->EnablePackage("ANALYSISalice");
105 // --- Enable the CORRFW Package
106 parFile="CORRFW.par"; parFile.Prepend(parDir.Data());
107 gProof->UploadPackage(parFile.Data());
108 gProof->EnablePackage("CORRFW");
109 // --- Enable the PWG3base Package
110 parFile="PWG3base.par"; parFile.Prepend(parDir.Data());
111 gProof->UploadPackage(parFile.Data());
112 gProof->EnablePackage("PWG3base");
113 // --- Enable the PWG3vertexingHF Package
114 parFile="PWG3vertexingHF.par"; parFile.Prepend(parDir.Data());
115 gProof->UploadPackage(parFile.Data());
116 gProof->EnablePackage("PWG3vertexingHF");
117 // --- Enable the PWG3muon Package
118 parFile="PWG3muon.par"; parFile.Prepend(parDir.Data());
119 gProof->UploadPackage(parFile.Data());
120 gProof->EnablePackage("PWG3muon");
121 }
122 gProof->ShowEnabledPackages(); // show a list of enabled packages
123 }
124
125
126 // Create Alien plugin, if requested
127 if(useAlienPlugin) {
128 if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
129 AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,useParFiles);
130 if(!alienHandler) return;
131 }
132
133
134 //-------------------------------------------------------------------
135 // Prepare input
136 TChain *chainAOD = 0;
137 TString dataset; // for proof
138
139 if(!useAlienPlugin) {
140 TString makeAODInputChain="MakeAODInputChain.C"; makeAODInputChain.Prepend(loadMacroPath.Data());
141 if(inputMode=="list") {
142 // Local files
143 gROOT->LoadMacro(makeAODInputChain.Data());
144 chainAOD = MakeAODInputChain();// with this it reads ./AliAOD.root and ./AliAOD.VertexingHF.root
145 //chainAOD = MakeAODInputChain("alien:///alice/cern.ch/user/r/rbala/newtrain/out_lhc08x/180100/",1,1);
146 printf("ENTRIES %d\n",chainAOD->GetEntries());
147 } else if(inputMode=="xml") {
148 // xml
149 gROOT->LoadMacro(makeAODInputChain.Data());
150 chainAOD = MakeAODInputChain("collection_aod.xml","collection_aodHF.xml");
151 } else if(inputMode=="dataset") {
152 // CAF dataset
153 //gProof->ShowDataSets();
154 dataset="/ITS/dainesea/AODVertexingHF_LHC08x_180100";
155 }
156 }
157
158 // Create the analysis manager
159 AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");
160 mgr->SetDebugLevel(10);
161 // Connect plug-in to the analysis manager
162 if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
163
164 // Input
165 AliAODInputHandler *inputHandler = new AliAODInputHandler();
8931206f 166 if(analysisMode=="proof" ) {
efb0a9e5 167 inputHandler->AddFriend("./AliAOD.VertexingHF.root");
168 //inputHandler->AddFriend("deltas/AliAOD.VertexingHF.root");
8931206f 169 if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
170 }
171 mgr->SetInputEventHandler(inputHandler);
172 //-------------------------------------------------------------------
173
174
175 //-------------------------------------------------------------------
176 // Analysis tasks (wagons of the train)
177 //
178 TString taskName;
179
180 ////// ADD THE FULL D2H TRAIN
efb0a9e5 181 /*taskName="AddD2HTrain.C"; taskName.Prepend(loadMacroPath.Data());
8931206f 182 gROOT->LoadMacro(taskName.Data());
183 Bool_t readMC=kFALSE;
efb0a9e5 184 AddD2HTrain(readMC);//,1,0,0,0,0,0,0,0,0,0,0);*/
8931206f 185
186 ////// OR ADD INDIVIDUAL TASKS
187
efb0a9e5 188
189 /* taskName="AddTaskCompareHF.C"; taskName.Prepend(loadMacroPath.Data());
8931206f 190 gROOT->LoadMacro(taskName.Data());
191 AliAnalysisTaskSECompareHF *cmpTask = AddTaskCompareHF();
efb0a9e5 192 */
8931206f 193 taskName="AddTaskD0Mass.C"; taskName.Prepend(loadMacroPath.Data());
194 gROOT->LoadMacro(taskName.Data());
195 AliAnalysisTaskSED0Mass *d0massTask = AddTaskD0Mass();
196 AliAnalysisTaskSED0Mass *d0massLikeSignTask = AddTaskD0Mass(1);
efb0a9e5 197 /*
8931206f 198 taskName="AddTaskDplus.C"; taskName.Prepend(loadMacroPath.Data());
199 gROOT->LoadMacro(taskName.Data());
200 AliAnalysisTaskSEDplus *dplusTask = AddTaskDplus();
201
202 taskName="AddTaskDs.C"; taskName.Prepend(loadMacroPath.Data());
203 gROOT->LoadMacro(taskName.Data());
204 AliAnalysisTaskSEDs *dsTask = AddTaskDs();
205
206 //taskName="AddTaskSelectHF.C"; taskName.Prepend(loadMacroPath.Data());
207 //gROOT->LoadMacro(taskName.Data());
208 //AliAnalysisTaskSESelectHF *seleTask = AddTaskSelectHF();
209
210 taskName="AddTaskBkgLikeSignD0.C"; taskName.Prepend(loadMacroPath.Data());
211 gROOT->LoadMacro(taskName.Data());
212 AliAnalysisTaskSEBkgLikeSignD0 *lsD0Task = AddTaskBkgLikeSignD0();
213
214 taskName="AddTaskBkgLikeSignJPSI.C"; taskName.Prepend(loadMacroPath.Data());
215 gROOT->LoadMacro(taskName.Data());
216 AliAnalysisTaskSEBkgLikeSignJPSI *lsJPSITask = AddTaskBkgLikeSignJPSI();
217
218 //taskName="AddTaskBtoJPSItoEle.C"; taskName.Prepend(loadMacroPath.Data());
219 //gROOT->LoadMacro(taskName.Data());
220 //AliAnalysisTaskSEBtoJPSItoEle *jpsiTask = AddTaskBtoJPSItoEle();
221
222 taskName="AddTaskCFMultiVarMultiStep.C"; taskName.Prepend(loadMacroPath.Data());
223 gROOT->LoadMacro(taskName.Data());
224 AliCFHeavyFlavourTaskMultiVarMultiStep *cfmvmsTask = AddTaskCFMultiVarMultiStep();
225
e047b348 226
227 taskName="AddTaskSECharmFraction.C";
228 taskName.Prepend(loadMacroPath.Data());
8931206f 229 gROOT->LoadMacro(taskName.Data());
e047b348 230 Int_t switchMC[5]={0,0,0,0,0};
231 // arguments: filename,switchMC,readmc,usepid,likesign,cutfilename,containerprefix
232 AliAnalysisTaskSECharmFraction *cFractTask = AddTaskSECharmFraction("standard",switchMC);
8931206f 233
234 // attach a private task (not committed)
235 // (the files MyTask.h MyTask.cxx AddMyTask.C have to be declared in plugin
236 // configuration, see below)
237
238 if(analysisMode.Data()=="proof") {
239 gProof->LoadMacro("MyTask.cxx++g");
240 } else {
241 gROOT->LoadMacro("MyTask.cxx++g");
242 }
243 gROOT->LoadMacro("AddMyTask.C");
244 MyTask *myTask = AddMyTask();
245
246
247 if(analysisMode.Data()=="proof") {
248 gProof->LoadMacro("AliDStarJets.cxx++g");
249 } else {
250 gROOT->LoadMacro("AliDStarJets.cxx++g");
251 }
252 gROOT->LoadMacro("AddTaskDStarJets.C");
253 AliDStarJets *myTask = AddTaskDStarJets();
254 */
255 //-------------------------------------------------------------------
256
257 //
258 // Run the analysis
259 //
260 if(chainAOD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainAOD->GetEntries());
261
262 if(!mgr->InitAnalysis()) return;
263 mgr->PrintStatus();
264 if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
265 if(analysisMode!="proof") {
266 mgr->StartAnalysis(analysisMode.Data(),chainAOD,nentries,firstentry);
267 } else {
268 // proof
269 mgr->StartAnalysis(analysisMode.Data(),dataset.Data(),nentries,firstentry);
270 }
271
272 return;
273}
274//_____________________________________________________________________________
275//
276AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test",Bool_t useParFiles=kFALSE)
277{
278 // Check if user has a valid token, otherwise make one. This has limitations.
279 // One can always follow the standard procedure of calling alien-token-init then
280 // source /tmp/gclient_env_$UID in the current shell.
8931206f 281 AliAnalysisAlien *plugin = new AliAnalysisAlien();
282 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
283 plugin->SetRunMode(pluginmode.Data());
efb0a9e5 284 plugin->SetUser("dainesea");
b2b62321 285 plugin->SetNtestFiles(3);
8931206f 286 // Set versions of used packages
287 plugin->SetAPIVersion("V1.1x");
7dc1b6b2 288 plugin->SetROOTVersion("v5-27-05-build3");
289 plugin->SetAliROOTVersion("v4-20-10-AN");
8931206f 290 // Declare input data to be processed.
b9015c51 291 //************************************************
292 // Set data search pattern for DATA
293 //************************************************
b2b62321 294 /*
295 plugin->SetGridDataDir("/alice/data/2010/LHC10b"); // specify LHC period
6bdc10c7 296 plugin->SetDataPattern("pass2/AOD006/*AliAOD.root"); // specify reco pass and AOD set
b2b62321 297 plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
b9015c51 298 // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
46627015 299 // Adds only the good runs from the Monalisa Run Condition Table
b9015c51 300 // More than one period can be added but the period name has to be removed from GridDataDir (to be tested)
b2b62321 301 Int_t totruns=0;
302 totruns += AddGoodRuns(plugin,"LHC10b"); // specify LHC period
b9015c51 303 //totruns += AddGoodRuns(plugin,"LHC10c"); // specify LHC period
b2b62321 304 plugin->SetNrunsPerMaster(totruns);
305 */
b9015c51 306 //************************************************
307 // Set data search pattern for MONTECARLO
308 //************************************************
b2b62321 309
310 plugin->SetGridDataDir("/alice/sim/LHC10d3"); // specify MC sample
311 plugin->SetDataPattern("AOD005/*AliAOD.root"); // specify AOD set
b9015c51 312 plugin->SetFriendChainName("./AliAOD.VertexingHF.root");
313 // OR plugin->SetFriendChainName("deltas/AliAOD.VertexingHF.root");
314 // Adds only the good runs from the Monalisa Run Condition Table
315 // More than one period can be added!
316 Int_t totruns=0;
b2b62321 317 totruns += AddGoodRuns(plugin,"LHC10b","LHC10d3"); // specify LHC period for anchor runs; and the name of the MC production
318 //totruns += AddGoodRuns(plugin,"LHC10c","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
319 //totruns += AddGoodRuns(plugin,"LHC10d","LHC10f7"); // specify LHC period for anchor runs; and the name of the MC production
b9015c51 320 plugin->SetNrunsPerMaster(totruns);
b2b62321 321
b9015c51 322 //
efb0a9e5 323 // plugin->SetMaxMergeFiles(100);
8931206f 324 // Define alien work directory where all files will be copied. Relative to alien $HOME.
325 plugin->SetGridWorkingDir("myHFanalysis");
326 // Declare alien output directory. Relative to working directory.
327 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
328 // Declare the analysis source files names separated by blancs. To be compiled runtime
329 // using ACLiC on the worker nodes.
330 //plugin->SetAnalysisSource("AliDStarJets.cxx");
331 // Declare all libraries (other than the default ones for the framework. These will be
332 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
333 plugin->SetAdditionalLibs("libPWG3vertexingHF.so libPWG3base.so libPWG3muon.so");
334 // use par files
335 if(useParFiles) {
336 plugin->EnablePackage("STEERBase.par");
337 plugin->EnablePackage("ESD.par");
338 plugin->EnablePackage("AOD.par");
339 plugin->EnablePackage("ANALYSIS.par");
340 plugin->EnablePackage("ANALYSISalice.par");
341 plugin->EnablePackage("CORRFW.par");
342 plugin->EnablePackage("PWG3base.par");
343 plugin->EnablePackage("PWG3vertexingHF.par");
344 plugin->EnablePackage("PWG3muon.par");
345 }
346 plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -g");
347 // Declare the output file names separated by blancs.
348 // (can be like: file.root or file.root@ALICE::Niham::File)
349 plugin->SetDefaultOutputs(kTRUE);
350 //plugin->SetOutputFiles("output.root CmpHF.root CmpHFnt.root D0InvMass.root InvMassDplus.root InvMassDplus_nt1.root InvMassDplus_nt2.root");
351 // Optionally define the files to be archived.
352 // plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:*.root@ALICE::NIHAM::File");
353 // plugin->SetOutputArchive("log_archive.zip:stdout,stderr");
354 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
355 plugin->SetAnalysisMacro("AnalysisHF.C");
356 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
357 plugin->SetSplitMaxInputFileNumber(10);
358 // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
359 //plugin->SetMaxInitFailed(5);
360 // Optionally resubmit threshold.
361 //plugin->SetMasterResubmitThreshold(90);
362 // Optionally set time to live (default 30000 sec)
363 //plugin->SetTTL(20000);
364 // Optionally set input format (default xml-single)
365 plugin->SetInputFormat("xml-single");
366 // Optionally modify the name of the generated JDL (default analysis.jdl)
367 plugin->SetJDLName("TaskHF.jdl");
368 // Optionally modify job price (default 1)
369 //plugin->SetPrice(1);
370 // Optionally modify split mode (default 'se')
371 plugin->SetSplitMode("se");
372
373
374 return plugin;
375}
46627015 376//----------------------------------------------------------------------------
b2b62321 377Int_t AddGoodRuns(AliAnalysisAlien* plugin,TString lhcPeriod,TString mcprod="") {
46627015 378 //
379 // Adds good runs from the Monalisa Run Condition Table
380 //
b2b62321 381 if(mcprod=="") plugin->SetRunPrefix("000"); // DATA
382
383 Int_t firstrun=0,lastrun=9999999;
384 Int_t nruns=0,ngoodruns=0;
b9015c51 385
b2b62321 386 if(mcprod=="LHC10d3") {firstrun=117054;lastrun=117222;}
387 if(mcprod=="LHC10d5") {firstrun=117086;lastrun=117222;}
46627015 388
389 if(lhcPeriod=="LHC10b") {
9899a797 390 nruns=32;
391 Int_t runlist[32]={117222, 117220, 117116, 117112, 117109, 117099, 117092, 117086, 117077, 117065, 117063, 117060, 117059, 117054, 117053, 117052, 117050, 117048, 116645, 116643, 116574, 116571, 116562, 116403, 116288, 116102, 115414, 115401, 115393, 115193, 115186, 114931};
46627015 392
393 for(Int_t k=0;k<nruns;k++){
b2b62321 394 if(runlist[k]<firstrun || runlist[k]>lastrun) continue;
46627015 395 plugin->AddRunNumber(runlist[k]);
b2b62321 396 ngoodruns++;
46627015 397 }
b2b62321 398 plugin->SetNrunsPerMaster(ngoodruns);
46627015 399 }
400
401 if(lhcPeriod=="LHC10c") {
b2b62321 402 nruns=36;
403 Int_t runlist[36]={120829, 120825, 120824, 120823, 120822, 120821, 120820, 120758, 120750, 120741, 120671, 120617, 120616, 120505, 120504, 120503, 120244, 120079, 120076, 120073, 120072, 120069, 120067, 119862, 119859, 119856, 119853, 119849, 119846, 119845, 119844, 119842, 119841, 119163, 119161, 119159};
46627015 404
405 for(Int_t k=0;k<nruns;k++){
b2b62321 406 if(runlist[k]<firstrun || runlist[k]>lastrun) continue;
46627015 407 plugin->AddRunNumber(runlist[k]);
b2b62321 408 ngoodruns++;
46627015 409 }
b2b62321 410 plugin->SetNrunsPerMaster(ngoodruns);
46627015 411 }
412
b01ef8f7 413 if(lhcPeriod=="LHC10dhighmu") { // only runs with high mu
b9015c51 414 nruns=19;
b01ef8f7 415 Int_t runlist[19]={124750, 124746, 124702, 124608, 124607, 124606, 124605, 124604, 124381, 124380, 124378, 124367, 124362, 124358, 124355, 124191, 124187, 122375, 122374};
416
417 for(Int_t k=0;k<nruns;k++){
b2b62321 418 if(runlist[k]<firstrun || runlist[k]>lastrun) continue;
b01ef8f7 419 plugin->AddRunNumber(runlist[k]);
b2b62321 420 ngoodruns++;
b01ef8f7 421 }
b2b62321 422 plugin->SetNrunsPerMaster(ngoodruns);
b01ef8f7 423 }
424
425 if(lhcPeriod=="LHC10d") { // runs with high mu excluded
b9015c51 426 nruns=59;
0ab6624e 427 Int_t runlist[59]={126437, 126432, 126425, 126424, 126422, 126409, 126408, 126407, 126406, 126405, 126404, 126403, 126359, 126352, 126351, 126350, 126285, 126284, 126283, 126168, 126167, 126160, 126158, 126097, 126090, 126088, 126082, 126081, 126078, 126073, 126008, 126007, 126004, 125855, 125851, 125850, 125849, 125848, 125847, 125844, 125843, 125842, 125633, 125632, 125630, 125628, 125296, 125186, 125156, 125140, 125139, 125134, 125133, 125101, 125100, 125097, 125085, 125023, 124751};
b01ef8f7 428
429 for(Int_t k=0;k<nruns;k++){
b2b62321 430 if(runlist[k]<firstrun || runlist[k]>lastrun) continue;
b01ef8f7 431 plugin->AddRunNumber(runlist[k]);
b2b62321 432 ngoodruns++;
b01ef8f7 433 }
b2b62321 434 plugin->SetNrunsPerMaster(ngoodruns);
b01ef8f7 435 }
436
437
b2b62321 438 return ngoodruns;
46627015 439}