source: branches/Mars_McMismatchStudy/fact/analysis/mc/ganymed.C@ 19365

Last change on this file since 19365 was 18102, checked in by ghughes, 10 years ago
Added Scaled Width and Length Parameters to output
File size: 18.5 KB
Line 
1void SetupWriter(MWriteRootFile *write, const char *name, Bool_t ismc) const
2{
3 if (!write)
4 return;
5
6 write->SetName(name);
7 write->AddContainer("MHillas", "Events");
8 write->AddContainer("MHillasSrc", "Events");
9 write->AddContainer("MHillasExt", "Events");
10 write->AddContainer("MPointingPos", "Events");
11 write->AddContainer("MHillasSrcAnti", "Events", kFALSE);
12 write->AddContainer("MImagePar", "Events", kFALSE);
13 write->AddContainer("MNewImagePar", "Events", kFALSE);
14 write->AddContainer("MNewImagePar2", "Events", kFALSE);
15 write->AddContainer("Hadronness", "Events", kFALSE);
16 write->AddContainer("MSrcPosCam", "Events", kFALSE);
17 write->AddContainer("MSrcPosAnti", "Events", kFALSE);
18 write->AddContainer("ThetaSquared", "Events", kFALSE);
19 write->AddContainer("OpticalAxis", "Events", kFALSE);
20 write->AddContainer("Disp", "Events", kFALSE);
21 write->AddContainer("Ghostbuster", "Events", kFALSE);
22 write->AddContainer("MEnergyEst", "Events", kFALSE);
23 write->AddContainer("MTime", "Events", kFALSE);
24 write->AddContainer("MMcEvt", "Events", kFALSE);
25 //write->AddContainer("MEnergyTable", "Events", kFALSE);
26 //write->AddContainer("ScaledLength", "Events", kFALSE);
27 //write->AddContainer("ScaledWidth", "Events", kFALSE);
28 write->AddContainer("DataType", "Events");
29 write->AddContainer("Weight", "Events");
30 write->AddContainer("FileId", "Events");
31 write->AddContainer("EvtNumber", "Events");
32
33 write->AddContainer("MMcRunHeader", "RunHeaders", kFALSE);
34 write->AddContainer("MMcCorsikaRunHeader", "RunHeaders", kFALSE);
35 write->AddContainer("MCorsikaRunHeader", "RunHeaders", kFALSE);
36
37 //if (ismc)
38 // write->AddCopySource("OriginalMC");
39}
40
41int ganymed(const char *dataset, const char *outfile, Float_t ra, Float_t dec, Bool_t ismc=false)
42{
43 MDirIter files;
44 if (files.ReadList(dataset)<=0)
45 return 2;
46 files.Sort();
47
48 // =============================================================
49
50 // Crab (05h34'32" 22d00'52")
51 MPointingPos source("MSourcePos");
52 //source.SetSkyPosition(5.5755, 22.0144); // ra[h], dec[deg]
53 //source.SetSkyPosition(12.356089, 30.176897); // ra[h], dec[deg]//1218
54 //source.SetSkyPosition(16.897867,39.760201);// mrk501
55 //source.SetSkyPosition(11.0742, 38.2089); // ra[h], dec[deg]//mrk421
56
57 if (ismc)
58 source.SetLocalPosition(ra, dec); // RA is ZD, DEC, is AZ!!!!
59 else
60 source.SetSkyPosition(ra, dec); // ra[h], dec[deg]//mrk421
61
62 UInt_t fNumOffSourcePos = 5;
63
64 // =============================================================
65
66 // FIXME: If fPathIn read cuts and energy estimator from file!
67 MContinue contq("MImagePar.fNumIslands>3.5"
68 "|| MNewImagePar.fNumUsedPixels<5.5"
69 "|| MNewImagePar.fLeakage1>0.1",
70 "CutQ");
71
72 MContinue cont0("MHillas.fSize<0"
73 "|| MHillasExt.fSlopeSpreadWeighted>0.68"
74 "|| MHillasExt.fSlopeSpreadWeighted<0.18"
75 "|| log10(MHillas.GetArea*MGeomCam.fConvMm2Deg^2)>(log10(MHillas.fSize)-2)*1.1-1.55"
76 "|| MNewImagePar.fConcCore < 0.13"
77 "|| MNewImagePar.fConcCOG < 0.15"
78 , "Cut0");
79
80 // Cuts before plots
81 MContinue cont2("0"
82 "|| MHillasExt.fM3Long*sign(MHillasSrc.fCosDeltaAlpha)*MGeomCam.fConvMm2Deg<-0.07"
83 "|| log10(MNewImagePar.fConc1)<-log10(MHillas.fSize)*0.57+0.13"
84 //"|| log10(MNewImagePar.fConc1)>-log10(MHillas.fSize)*0.57+0.5"
85 //"|| MHillasSrc.fDist*MGeomCam.fConvMm2Deg>log10(MHillas.fSize)*0.42+0.29"
86 "|| MHillas.GetArea*MGeomCam.fConvMm2Deg^2<0.01"
87 "|| MHillasSrc.fDist*MGeomCam.fConvMm2Deg>log10(MHillas.fSize)*0.5+0.095"
88 "|| MHillasSrc.fDist*MGeomCam.fConvMm2Deg<0.4"
89 "|| MHillasSrc.fDist*MGeomCam.fConvMm2Deg>1.2",
90 "Cut2");
91
92 TArrayD param(12);
93 // Parametrization of Disp
94 param[0] = 1.15136; // constant
95 param[8] = 0.0681437; // slope
96 param[9] = 2.62932; // leak
97 param[10] = 1.51279; // size-offset
98 param[11] = 0.0507821; // size-slope
99 // Parametrization for sign of disp (m3long, slope)
100 param[5] = -0.07;
101 param[6] = 7.2;
102 param[7] = 0.5;
103 // ThetaSq-Cut
104 param[1] = 0.11; // 0.215
105 // Area-Cut
106 param[2] = 0.215468;
107 param[3] = 5.63973;
108 param[4] = 0.0836169;
109
110 // --------------------------------------------------------------------------------
111
112 // Setup fitter and histograms
113 MAlphaFitter fit;
114 fit.SetBackgroundFitMin(0.09);
115 fit.SetBackgroundFitMax(0.25);
116 fit.SetPolynomOrder(1);
117 fit.SetSignalFunction(MAlphaFitter::kThetaSq);
118 fit.SetScaleUser(1./fNumOffSourcePos); // includes fit.SetScaleMode(MAlphaFitter::kUserScale);
119
120 // --------------------------------------------------------------------------------
121
122 MBinning bins3( 67, -0.005, 0.665, "BinningTheta", "asin");
123 MBinning binsD( 25, 0, 2.5, "BinningDist");
124 MBinning binsC( 25, 0, 2.5, "BinningDistC");
125 MBinning binsR( 60, 0, 300, "BinningRate");
126
127 // --------------------------------------------------------------------------------
128
129 MParList plist;
130 plist.AddToList(&source);
131 plist.AddToList(&fit);
132
133 // Initialize default binnings
134 plist.AddToList(&bins3);
135 plist.AddToList(&binsD);
136 plist.AddToList(&binsC);
137 plist.AddToList(&binsR);
138
139 MParameterI par("DataType");
140 MParameterD weight("Weight");
141 plist.AddToList(&par);
142 plist.AddToList(&weight);
143
144 // Setup Tasklist
145 MTaskList tlist;
146 plist.AddToList(&tlist);
147
148 // La Palma Magic1
149 MObservatory obs;
150 plist.AddToList(&obs);
151
152 // --------------------------------------------------------------------------------
153
154 MParameterD scale;
155 scale.SetVal(1./fNumOffSourcePos);
156
157 MHThetaSq *halphaoff = plist.FindCreateObj("MHThetaSq", "HistOff");
158 halphaoff->ForceUsingSize();
159
160 MFillH falpha(halphaoff, "", "FillHist");
161 MFillH fenergy1("HistEOff [MHThetaSq]", "", "FillHistE");
162
163 MFMagicCuts cuts;
164 cuts.SetHadronnessCut(MFMagicCuts::kNoCut);
165 cuts.SetVariables(param);
166
167 // Cuts before thetasq
168 MContinue cont1(&cuts, "Cut1");
169
170 // Energy estimation
171 MEnergyEstimate energyest;
172 energyest.SetRule("MHillas.fSize^0.815*pow(10, 0.0199*(MHillasSrc.fDist*1.17e-2 - (-6.95))^2*(MHillasSrc.fDist*1.17e-2>(-6.95)) + 0.5997 *(MHillasSrc.fDist*1.17e-2 - 0.7568)^2 * (MHillasSrc.fDist*1.17e-2>0.7568) )");
173 // energyest.SetRule("1737 * (MHillas.fSize / 300.)^0.810");
174
175 //MEnergyTable energytable;
176 // Tables available from GH
177 //energytable.SetTableFile("Table_standard_test.root");
178
179 // Cuts before writing
180 MContinue cont3("", "Cut3");
181 contq.SetAllowEmpty();
182 cont0.SetAllowEmpty();
183 cont1.SetAllowEmpty();
184 cont2.SetAllowEmpty();
185 cont3.SetAllowEmpty();
186
187 cont1.SetInverted();
188
189 // Filter for VsSize
190 MFDataPhrase ftheta("ThetaSquared.fVal < ThetaSquaredCut.fVal", "CutT");
191
192 // ------------- Loop Off Data --------------------
193 MRead *readoffdata = NULL;
194 if (ismc)
195 {
196 MReadMarsFile *read = new MReadMarsFile("Events");
197 read->DisableAutoScheme();
198 readoffdata = read;
199 }
200 else
201 {
202 MReadReports *read = new MReadReports;
203 read->AddTree("Events", "MTime.", MReadReports::kMaster);
204 read->AddTree("Drive",MReadReports::kRequired);
205 read->AddTree("Rates",MReadReports::kRequired);
206 readoffdata = read;
207 }
208
209 readoffdata->AddFiles(files);
210
211 TString fname0 = Form("%s-summary.root", outfile);
212 TString fname1 = Form("%s-analysis.root", outfile);
213
214 MWriteRootFile dummy0(fname0.Data(), "RECREATE");
215 MWriteRootFile dummy1(fname1.Data(), "RECREATE");
216
217 MWriteRootFile *write0 = &dummy0;
218 MWriteRootFile *write1 = &dummy1;
219 SetupWriter(write0, "WriteAfterCut0", ismc);
220 SetupWriter(write1, "WriteAfterCut3", ismc);
221
222 MWriteRootFile write2(fname1.Data(), "RECRATE");
223 write2.AddContainer("MReportRates", "Rates");
224 write2.AddContainer("MTimeRates", "Rates");
225
226 MParameterCalc setevtnum("MRawEvtHeader.fDAQEvtNumber", "SetEvtNumber");
227 setevtnum.SetNameParameter("EvtNumber");
228
229 MParameterCalc setrunnum("MRawRunHeader.GetFileID", "SetFileId");
230 setrunnum.SetNameParameter("FileId");
231
232 MFillH fill1a("MHHillasOffPre [MHHillas]", "MHillas", "FillHillasPre");
233 MFillH fill2a("MHHillasOffPost [MHHillas]", "MHillas", "FillHillasPost");
234 MFillH fill3a("MHVsSizeOffPost [MHVsSize]", "MHillasSrc", "FillVsSizePost");
235 MFillH fill3c("MHVsSizeOffTheta [MHVsSize]", "MHillasSrc", "FillVsSizeTheta");
236 MFillH fill4a("MHHilExtOffPost [MHHillasExt]", "MHillasSrc", "FillHilExtPost");
237 MFillH fill5a("MHHilSrcOffPost [MHHillasSrc]", "MHillasSrc", "FillHilSrcPost");
238 MFillH fill6a("MHImgParOffPost [MHImagePar]", "MImagePar", "FillImgParPost");
239 MFillH fill7a("MHNewParOffPost [MHNewImagePar]", "MNewImagePar", "FillNewParPost");
240 //MFillH fill9a("MHEffOffTime [MHEffectiveOnTime]", "MTime", "FillEffOnTime");
241 fill1a.SetNameTab("PreCut");
242 fill2a.SetNameTab("PostCut");
243 fill3a.SetNameTab("VsSize");
244 fill3c.SetNameTab("CutT");
245 fill4a.SetNameTab("HilExt");
246 fill5a.SetNameTab("HilSrc");
247 fill6a.SetNameTab("ImgPar");
248 fill7a.SetNameTab("NewPar");
249 //fill9a.SetNameTab("EffOffT");
250
251 fill3c.SetFilter(&ftheta);
252
253 //MFDataMember fbin("Bin.fVal", '>', 0);
254 //fill9a.SetFilter(&fbin);
255
256 MTaskList tlist2;
257 tlist2.SetNumPasses(fNumOffSourcePos);
258 fill2a.SetWeight(&scale);
259 fill3a.SetWeight(&scale);
260 fill3c.SetWeight(&scale);
261 fill4a.SetWeight(&scale);
262 fill5a.SetWeight(&scale);
263 fill6a.SetWeight(&scale);
264 fill7a.SetWeight(&scale);
265
266 // How to get source position from off- and on-data?
267 MSrcPosCalc scalc;
268 scalc.SetMode(MSrcPosCalc::kWobble);
269 scalc.SetCallback(&tlist2);
270
271 MSrcPosCorrect scor;
272
273 MHillasCalc hcalc;
274 MHillasCalc hcalc2("MHillasCalcAnti");
275 hcalc.SetFlags(MHillasCalc::kCalcHillasSrc);
276 hcalc2.SetFlags(MHillasCalc::kCalcHillasSrc);
277 hcalc2.SetNameHillasSrc("MHillasSrcAnti");
278 hcalc2.SetNameSrcPosCam("MSrcPosAnti");
279
280 MSrcPosRndm srcrndm;
281
282 tlist2.AddToList(&scalc);
283 //tlist2.AddToList(&scor);
284 tlist2.AddToList(&srcrndm);
285 tlist2.AddToList(&hcalc);
286 tlist2.AddToList(&hcalc2);
287 tlist2.AddToList(&setrunnum);
288 tlist2.AddToList(&setevtnum);
289 tlist2.AddToList(&cuts);
290 tlist2.AddToList(&energyest);
291 //tlist2.AddToList(&energytable);
292 tlist2.AddToList(write0);
293 tlist2.AddToList(&cont0); // Post/Pre shown cuts
294 tlist2.AddToList(&cont1); // Calculate ThetaSq
295 tlist2.AddToList(&fill2a);
296 tlist2.AddToList(&ftheta); // Calculate theta Cut
297 if (!ismc)
298 {
299 tlist2.AddToList(&falpha);
300 tlist2.AddToList(&fenergy1);
301 }
302 tlist2.AddToList(&fill3c); // With theta cut
303 tlist2.AddToList(&cont2);
304 tlist2.AddToList(&fill3a);
305 tlist2.AddToList(&fill4a);
306 tlist2.AddToList(&fill5a);
307 tlist2.AddToList(&fill6a);
308 tlist2.AddToList(&fill7a);
309 tlist2.AddToList(&cont3);
310 tlist2.AddToList(write1);
311
312 MPointingPosCalc pcalc;
313 MPointingDevCalc devcalc;
314
315 tlist.AddToList(readoffdata);
316 if (!ismc)
317 tlist.AddToList(&pcalc, "Drive");
318 tlist.AddToList(&contq, "Events");
319 tlist.AddToList(&fill1a, "Events");
320 tlist.AddToList(&tlist2, "Events");
321
322 // by setting it here it is distributed to all consecutive tasks
323 tlist.SetAccelerator(MTask::kAccDontReset|MTask::kAccDontTime);
324
325 par.SetVal(0);
326 weight.SetVal(-1./fNumOffSourcePos);
327
328 MStatusDisplay *d = new MStatusDisplay;
329
330 // Create and setup the eventloop
331 MEvtLoop evtloop("Off");
332 evtloop.SetParList(&plist);
333 evtloop.SetDisplay(d);
334
335 // Execute first analysis
336 if (!evtloop.Eventloop())
337 return 2;
338
339 if (!evtloop.GetDisplay())
340 return 2;
341
342 // ------------- Loop On Data --------------------
343 MRead *readondata = NULL;
344 if (ismc)
345 {
346 MReadMarsFile *read = new MReadMarsFile("Events");
347 read->DisableAutoScheme();
348 readondata = read;
349 }
350 else
351 {
352 MReadReports *read = new MReadReports;
353 read->AddTree("Events", "MTime.", MReadReports::kMaster);
354 read->AddTree("Drive", MReadReports::kRequired);
355 read->AddTree("Rates", MReadReports::kRequired);
356 read->AddTree("Humidity", MReadReports::kRequired);
357 read->AddTree("Temperatures", MReadReports::kRequired);
358 readondata = read;
359 }
360 readondata->AddFiles(files);
361
362 scalc.SetMode(MSrcPosCalc::kDefault);
363 scalc.SetNumRandomOffPositions(fNumOffSourcePos);
364
365 MFillH fill1b("MHHillasOnPre [MHHillas]", "MHillas", "FillHillasPre");
366 MFillH fill2b("MHHillasOnPost [MHHillas]", "MHillas", "FillHillasPost");
367 MFillH fill3b("MHVsSizeOnPost [MHVsSize]", "MHillasSrc", "FillVsSizePost");
368 MFillH fill3d("MHVsSizeOnTheta [MHVsSize]", "MHillasSrc", "FillVsSizeTheta");
369 MFillH fill4b("MHHilExtOnPost [MHHillasExt]", "MHillasSrc", "FillHilExtPost");
370 MFillH fill5b("MHHilSrcOnPost [MHHillasSrc]", "MHillasSrc", "FillHilSrcPost");
371 MFillH fill6b("MHImgParOnPost [MHImagePar]", "MImagePar", "FillImgParPost");
372 MFillH fill7b("MHNewParOnPost [MHNewImagePar]", "MNewImagePar", "FillNewParPost");
373 //MFillH fill9b("MHEffOnTime [MHEffectiveOnTime]", "MTime", "FillEffOnTime");
374 fill1b.SetNameTab("PreCut");
375 fill2b.SetNameTab("PostCut");
376 fill3b.SetNameTab("VsSize");
377 fill3d.SetNameTab("CutT");
378 fill4b.SetNameTab("HilExt");
379 fill5b.SetNameTab("HilSrc");
380 fill6b.SetNameTab("ImgPar");
381 fill7b.SetNameTab("NewPar");
382 //fill9b.SetNameTab("EffOnT");
383 fill1b.SetDrawOption("same");
384 fill2b.SetDrawOption("same");
385 fill3b.SetDrawOption("same");
386 fill3d.SetDrawOption("same");
387 fill4b.SetDrawOption("same");
388 fill5b.SetDrawOption("same");
389 fill6b.SetDrawOption("same");
390 fill7b.SetDrawOption("same");
391 //fill9b.SetFilter(&fbin);
392
393 fill3d.SetFilter(&ftheta);
394
395 MHThetaSq *halphaon = plist.FindCreateObj("MHThetaSq", "Hist");
396 halphaon->ForceUsingSize();
397
398 MFillH falpha2(halphaon, "", "FillHist");
399 MFillH fenergy2("HistE [MHThetaSq]", "", "FillHistE");
400
401 tlist2.SetNumPasses();
402
403 tlist.Replace(readondata);
404
405 MHSrcPosCam hsrcpos(kTRUE);
406
407 MFillH fillsrc(&hsrcpos, "MSrcPosCam", "FillSrcPosCam");
408 fillsrc.SetNameTab("SrcPos");
409
410 tlist2.AddToListBefore(&fillsrc, &hcalc);
411
412 MH3 hvs1("MPointingPos.fZd");
413 MH3 hvs2("MPointingPos.fZd");
414 MHVsTime hvstM("MTimeDrive.GetMjd");
415 MHVsTime hvst0("MPointingPos.fZd");
416 MHVsTime hvst1("MReportRates.fTriggerRate");
417 MH3 hvst2("MPointingPos.fZd", "MReportRates.fTriggerRate");
418 MHVsTime hvst("MReportTemperatures.GetTempMean");
419 MHVsTime hvsh("MReportHumidity.GetMean");
420 hvs1.SetName("ObsTime;Theta");
421 hvs2.SetName("OnTime;Theta");
422 hvstM.SetName("MJD");
423 hvst0.SetName("ZdTime");
424 hvst1.SetName("Rate");
425 hvst2.SetName("RateZd;Theta;Rate");
426 hvst.SetName("CamTemp");
427 hvsh.SetName("CamHum");
428 hvs1.SetTitle("Observation time vs. Zenith Angle;\\Theta [\\circ];T_{on} [s]");
429 hvs2.SetTitle("On-Time vs. Zenith Angle;\\Theta [\\circ];T_{on} [s]");
430 hvstM.SetTitle("MJD vs time;Time;MJD");
431 hvst0.SetTitle("Zenith distance vs time;Time;Zd [\\circ]");
432 hvst1.SetTitle("Camera trigger rate vs time;Time;Rate [Hz]");
433 hvst2.SetTitle("Camera trigger rate vs Zd; Zd [\\circ];Rate [Hz]");
434 hvst.SetTitle("Average sensor compartment temperature;Time;T [\\circ C]");
435 hvsh.SetTitle("Average camera humidity;Time;Hum [%]");
436
437 MFillH fillvs1(&hvs1, "", "FillObsTime");
438 MFillH fillvs2(&hvs2, "", "FillOnTime");
439 MFillH fillvstM(&hvstM, "MTime", "FillMjdVsTime");
440 MFillH fillvst0(&hvst0, "MTimeDrive", "FillZdVsTime");
441 MFillH fillvst1(&hvst1, "MTimeRates", "FillRate");
442 MFillH fillvst2(&hvst2, "", "FillRateVsZd");
443 MFillH fillvst(&hvst, "MTimeTemperatures", "FillCamTemp");
444 MFillH fillvsh(&hvsh, "MTimeHumidity", "FillCamHum");
445 fillvs1.SetNameTab("ObsTime");
446 fillvs2.SetNameTab("OnTime");
447 fillvst1.SetNameTab("Rate");
448 fillvst2.SetNameTab("RateZd");
449 fillvst.SetNameTab("CamTemp");
450 fillvsh.SetNameTab("CamHum");
451
452 hvs1.SetWeight("MReportRates.fElapsedTime");
453 hvs2.SetWeight("MReportRates.fElapsedOnTime");
454
455 hvst1.SetMinimum(0);
456 hvst2.SetDrawOption("colz");
457
458 MH3 hrate("MRawRunHeader.GetFileID"/*, "MRawEvtHeader.GetTriggerID"*/);
459 hrate.SetWeight("1./TMath::Max(MRawRunHeader.GetRunLength,1)");
460 hrate.SetName("RateVsRun");
461 hrate.SetTitle("Event rate after quality cuts;File Id;Event Rate [Hz];");
462 hrate.InitLabels(MH3::kLabelsX);
463 hrate.GetHist().SetMinimum(0);
464
465 MFillH fillr(&hrate, "", "FillRateVsRun");
466 tlist.AddToListAfter(&fillr, &contq, "Events");
467
468 tlist.Replace(&fill1b);
469
470 tlist2.Replace(&fill2b);
471 tlist2.Replace(&fill3b);
472 tlist2.Replace(&fill3d);
473 tlist2.Replace(&fill4b);
474 tlist2.Replace(&fill5b);
475 tlist2.Replace(&fill6b);
476 tlist2.Replace(&fill7b);
477 tlist2.Replace(&falpha2);
478 tlist2.Replace(&fenergy2);
479 if (!ismc)
480 {
481 tlist.AddToList(&fillvs1, "Rates");
482 tlist.AddToList(&fillvs2, "Rates");
483 tlist.AddToList(&fillvst1, "Rates");
484 tlist.AddToList(&fillvst2, "Rates");
485 tlist.AddToList(&write2, "Rates");
486 tlist.AddToList(&fillvst, "Temperatures");
487 tlist.AddToList(&fillvsh, "Humidity");
488 tlist.AddToList(&fillvst0, "Drive");
489 tlist.AddToList(&fillvstM, "Drive");
490 }
491
492 // by setting it here it is distributed to all consecutive tasks
493 tlist.SetAccelerator(MTask::kAccDontReset|MTask::kAccDontTime);
494
495 par.SetVal(1);
496 weight.SetVal(1);
497
498 // Execute first analysis
499 if (!evtloop.Eventloop())
500 return 2;
501
502 if (!evtloop.GetDisplay())
503 return 2;
504
505 delete readondata;
506 delete readoffdata;
507
508 TObjArray cont;
509 //cont.Add(const_cast<TEnv*>(GetEnv()));
510 //cont.Add(const_cast<MSequence*>(&fSequence));
511
512 //TNamed cmdline("CommandLine", fCommandLine.Data());
513 //cont.Add(&cmdline);
514
515 if (d)
516 {
517 TString title = "-- Analysis #";
518 title += dataset;
519 title += " --";
520 d->SetTitle(title, kFALSE);
521
522 cont.Add(d);
523 TString path;
524 path += fname1;
525
526 d->Write();
527 }
528
529// if (!WriteContainer(cont, fname1, "RECREATE"))
530// return;
531
532 return 0;
533}
Note: See TracBrowser for help on using the repository browser.