From: Bjorn H Samset (bjornhs@rcf2.rhic.bnl.gov)
Date: Tue Dec 10 2002 - 14:24:28 EST
Hello dev'ils. A short time back we had a discussion on possible improvements to our analysis framework, and one of the things that came up was the need for a consistent way of documenting and recreating the running conditions of a bratmain job. (What I will below call a 'snapshot'.) I've discussed this somewhat with Flemming, and we've agreed on a possible way to implement this and I've made a test of it for a few classes. I'd like to describe here what we'd like to do so that you can all give some feedback before I get too far in the process. NB: This will be a major addition to brat, in that it adds a (small) method to each and every module and adds a new required flag to bratmain. Therefore, please read this and comment! What I'm currently implementing is this: In bratmain, there will be an option -l --log Logfile name, default is bratmainSnapshot.log The snapshot file, here bratmainSnapshot.log, is simply an ascii file - see below for the contents. This is the only part that the user will have to worry about, i.e. to set this logname to something useful. In the bratmain script, one more line is added: (also added to the brat-help lisp functions, so dont't worry) // The main module // BrMainModule* mainModule = new BrMainModule("testScript", "TestScript", "Bjorn H. Samset", 0, 1, 0); mainModule->SetMaxEvents(eventsOption->GetValue()); mainModule->SetMaxRuns(maxrunsOption->GetValue()); mainModule->SetSnapshotFile(logOption->GetValue()); The implementation below that is quite simple and only important to module-developers: * BrModule will have a virtual function called Snapshot(), which will be overloaded by all brat classes inheriting from BrModule. The BrModule one only outputs the class type, name and title. * Every module has its overloaded version of Snapshot(), and prints out all settable parameters that it has control over in addtiton to the name of the setter function. An example, from BrTileRdoModule: //_________________________________________________________________ void BrTileRdoModule::Snapshot(ofstream &f, Option_t* option) { // Output info on all settable members to file // Must be overloaded by all modules! TString opt(option); opt.ToLower(); if (opt.Contains("e")) f << "Module: " << IsA()->GetName() << " " << GetName() << " " << GetTitle() << endl; BrMultRdoModule::Snapshot(f); f << PrintIntMember("AdcGapLimit",fAdcGapLimit) << endl; f << PrintIntMember("SaturationChannel",fSaturationChannel) << endl; if (opt.Contains("e")) { f << "# CVS info: $Revision: 1.19 $ $Date: 2002/09/19 22:27:04 $ $Author: sanders $" << endl; f << endl; } } (PrintIntMember and similar are functions of BrModule...) Note that it outputs info like class name and CVS stuff iff it is the end-level class (option "e"). It also calles Snapshot for BrMultRdoModule, which it inherits from. * In BrMainModule::Main, there is a new small addition just after booking the histograms that looks like this: // Make snapshot logfile, return if this fails ofstream fLogFile(fSnapshotFile.Data()); if (fLogFile.is_open()) { Snapshot(fLogFile,"e"); fLogFile.close(); } else { Error("Main", "Couldn't open snapshot logfile"); return fStatus; } and its version of Snapshot() which looks like this: //____________________________________________________________________ void BrMainModule::Snapshot(ofstream &f, Option_t* option) { // Output module information to log file // for each module in the pipeline TString opt(option); opt.ToLower(); TIter next(fModuleList); BrModule *object; while((object = (BrModule*)next())) object->Snapshot(f,option); } i.e. it simply goes through its list of modules and calls Snapshot() for each one with the end-level option, and they in turn call Snapshot() for any parent classes without the end-level option. A test bratmain script which contains only the BrTileRdoModule then looks like this: --------------------------------------------------- Module: BrEventIO BRAHMS ROOT IO File eventInput Module: BrTileRdoModule MultTile MultTile AdcGapLimit 4096 SaturationChannel 30000 ThresholdFactor 5.000000 OutlierMethod 3 SingleAdcLow 0.000000 SingleAdcHigh 500.000000 SingleAdcComp 10.000000 AdcGapLimit 4096 SaturationChannel 30000 # CVS info: $Revision: 1.19 $ $Date: 2002/09/19 22:27:04 $ $Author: sanders $ Module: BrEventIO BRAHMS ROOT IO File ouputModule -------------------------------------------------- I'll get rid of the BrEventIOs in the next implementation - they shouldn't be there I think (see below for why). Also note that two of the parameters occur twice - that's because BrTileRdoModule has two setters that are identical to its parent class BrMultRdoModule. This framework also incourages cleaner coding ;-) The point of this excercise is two-fold: * First of all we get proper documentation of all relevant parameters for a given data reconstruction. This has been missing for a while and caused problems for both me and several others I have talked to. * Secondly, we get an easy way of recreating old bratmain scrips. By adding one more function e.g. to BrMainModule, it is easy to just read in this script, autogenerate all module with the proper parameters set and run the reco with the same conditions as before. This sounds to me like a nice feature, and I'd like to implement that too in this process. This is the reason why I don't want the EventIOs in the output - I only want the user-added modules to the basic bratmain script! That's the main outline - it's a bit sketchy, but I wanted to send something before I leave BNL (right about now...). I won't proceed on this until thursday, so please take some time to think this over before replying. What I'm offering to do is make the main framework for this and also add Snapshot() to the most frequently used modules, filters, packages etc. I can't promise I'll do them all as there are 101 modules in BRAT (and then filters, packages,... come in addition), but I'll try to do most of it. Timescale: Done before xmas if no big problems arise. The main framework is already implemented. If I run into trouble or we decide on a radically different approach then I need some more time... (And I have a hand-in exam in "Philosophy of Science" next week, but hey...) Ok, I'm off to the airport. Ping :-) -- Bjorn H. Samset Phone: 22856465/92051998 PhD student, heavy ion physics Adr: Schouterrassen 6 Inst. of Physics, University of Oslo 0573 Oslo \|/ ----------------------------> -*- <----------------------------- /|\
This archive was generated by hypermail 2.1.5 : Tue Dec 10 2002 - 15:03:17 EST