Changeset 8724
- Timestamp:
- 08/31/07 14:11:36 (17 years ago)
- Location:
- trunk/MagicSoft/Mars
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/Changelog
r8723 r8724 18 18 19 19 -*-*- END OF LINE -*-*- 20 2007/08/31 Thomas Bretz 21 22 * ganymed.rc, ganymed_onoff.rc, ganymed_wobble.rc: 23 - changed default values for starguider 24 - changed quality cuts (more efficiency at higher energy/sizes, 25 better spark suppression) 26 - added default for the starguider-calibrations 27 - added more examples how to use CalcDisp 28 29 * ganymed.cc: 30 - added new command-line option "--dataset" 31 32 * mbase/MParContainer.[h,cc]: 33 - added a lot of comments 34 - allow an empty prefix in GetEnvValue 35 - added GetEnvValue2 36 37 * mjobs/MDataSet.[h,cc]: 38 - added and updated comments 39 - moved code from constructor to Init 40 - added new constructor 41 - added support for collections of datasets in one file 42 - wobble mode is now set or unset automatically if not overwritten 43 - IsValid now also check if OnSequences are defined 44 45 * mjobs/MJCut.cc: 46 - improved the check after adding sequences for the first loop 47 48 49 20 50 2007/08/31 Stefan Ruegamer 21 51 -
trunk/MagicSoft/Mars/NEWS
r8716 r8724 52 52 a result which is highly independant of the source spectrum 53 53 and shows lower bias than all other options. 54 55 - general: Dataset files are allowed to contain collections of 56 datasets. For more details see the class reference of MDataSet. 57 58 - general: The default WobbleMode in a datset file now (if not 59 overwritten) is "auto", i.e. wobble mode is set if the dataset 60 doesn't contain off-sequences. 54 61 55 62 - merpp: Merpp can read file format version 9 now. Please realize … … 247 254 something strange (sparks!) in your signal-region. 248 255 256 - ganymed: To choose a dataset from a collection in a dataset file 257 use the new command line option "--dataset=12345" 258 249 259 - optim, sponde: should now properly support three off-regions. 250 260 Just produce your ganymed summary files with three off-regions. -
trunk/MagicSoft/Mars/ganymed.cc
r8683 r8724 43 43 gLog << " ganymed [options] dataset.txt|number" << endl << endl; 44 44 gLog << " Arguments:" << endl; 45 gLog << " dataset.txt: ASCII file defining a collection of sequences" << endl; 45 gLog << " dataset.txt: ASCII file defining a collection of datasets/sequences" << endl; 46 gLog << " (for more details see MSequence/MDataSet)" << endl; 46 47 gLog << " number: The dataset number (using file in the datacenter)" << endl; 47 48 gLog << " For more details see MDataSet." << endl; … … 63 64 gLog << " -f Force overwrite of existing files" << endl; 64 65 gLog << " --n=number Analysis number (required if not in dataset file)" << endl; 66 gLog << " --dataset=number Choose a dataset from a collection of datasets in your file" << endl; 67 gLog << " (for more details see MDataSet)" << endl; 65 68 gLog << " --out=path Path to write all output to [def=local path]" << endl; 66 69 gLog << " --ind=path Path to data/star files [default=datacenter path]" << endl; … … 71 74 gLog << " --skip-res Disable writing of result events" << endl; 72 75 gLog << " --write-only Only write output files. No histograms filled." << endl; 73 gLog << " --print-ds Print Dataset information" << endl;74 gLog << " --print-files Print Files taken from Sequences ('+' found, '-' missing)" << endl;76 gLog << " --print-ds Print the information interpreted from the dataset file" << endl; 77 gLog << " --print-files Print files taken from sequences ('+' found, '-' missing)" << endl; 75 78 // gLog << " --full-display Show as many plots as possible" << endl; 76 79 gLog << " --config=ganymed.rc Resource file [default=ganymed.rc]" << endl; … … 133 136 134 137 const Int_t kNumAnalysis = arg.GetIntAndRemove("--n=", -1); 138 const Int_t kNumDataset = arg.GetIntAndRemove("--dataset=", -1); 135 139 const TString kOutpath = arg.GetStringAndRemove("--out=", "."); 136 140 const TString kOutfile = arg.GetStringAndRemove("--outf=", ""); … … 201 205 // Setup sequence and check its validity 202 206 // 203 MDataSet seq(kSequences, kPathSequences, kPathDataFiles);207 MDataSet seq(kSequences, (UInt_t)kNumDataset, kPathSequences, kPathDataFiles); 204 208 if (!seq.IsMonteCarlo()) 205 209 seq.SetMonteCarlo(kIsMc); -
trunk/MagicSoft/Mars/mbase/MParContainer.cc
r8642 r8724 868 868 } 869 869 870 // -------------------------------------------------------------------------- 871 // 872 // Check if the given resource is defined. If there is a postfix, prefix 873 // the postfix with a dot. Calls IsEnvDefined(env, name, print) 874 // 870 875 Bool_t MParContainer::IsEnvDefined(const TEnv &env, TString prefix, TString postfix, Bool_t print) const 871 876 { … … 876 881 } 877 882 883 // -------------------------------------------------------------------------- 884 // 885 // If print==kTRUE print information about what's going on. This is necessary 886 // to debug parsing of resource files. Check if a resource "name" is defined 887 // and return kFALSE/kTRUE depending on the result. 888 // 878 889 Bool_t MParContainer::IsEnvDefined(const TEnv &env, TString name, Bool_t print) const 879 890 { … … 881 892 *fLog << all << GetDescriptor() << " - " << name << "... " << flush; 882 893 883 if (! ((TEnv&)env).Defined(name))894 if (!const_cast<TEnv&>(env).Defined(name)) 884 895 { 885 896 if (print) … … 894 905 } 895 906 907 // -------------------------------------------------------------------------- 908 // 909 // Return the resource prefix+"."+postfix from env or deftl if not available. 910 // If prefix IsNull search for postfix only. 911 // 896 912 Int_t MParContainer::GetEnvValue(const TEnv &env, TString prefix, TString postfix, Int_t dflt) const 897 913 { 898 return GetEnvValue(env, prefix+"."+postfix, dflt); 899 } 900 914 return GetEnvValue(env, prefix.IsNull()?postfix:(prefix+"."+postfix), dflt); 915 } 916 917 // -------------------------------------------------------------------------- 918 // 919 // Return the resource prefix+"."+postfix from env or deftl if not available. 920 // If prefix IsNull search for postfix only. 921 // 901 922 Double_t MParContainer::GetEnvValue(const TEnv &env, TString prefix, TString postfix, Double_t dflt) const 902 923 { 903 return GetEnvValue(env, prefix+"."+postfix, dflt); 904 } 905 924 return GetEnvValue(env, prefix.IsNull()?postfix:(prefix+"."+postfix), dflt); 925 } 926 927 // -------------------------------------------------------------------------- 928 // 929 // Return the resource prefix+"."+postfix from env or deftl if not available. 930 // If prefix IsNull search for postfix only. 931 // 906 932 const char *MParContainer::GetEnvValue(const TEnv &env, TString prefix, TString postfix, const char *dflt) const 907 933 { 908 return GetEnvValue(env, prefix+"."+postfix, dflt); 909 } 910 934 return GetEnvValue(env, prefix.IsNull()?postfix:(prefix+"."+postfix), dflt); 935 } 936 937 // -------------------------------------------------------------------------- 938 // 939 // Return the resource prefix from env or deftl if not available. 940 // 911 941 Int_t MParContainer::GetEnvValue(const TEnv &env, TString prefix, Int_t dflt) const 912 942 { 913 return ((TEnv&)env).GetValue(prefix, dflt); 914 } 915 943 return const_cast<TEnv&>(env).GetValue(prefix, dflt); 944 } 945 946 // -------------------------------------------------------------------------- 947 // 948 // Return the resource prefix from env or deftl if not available. 949 // 916 950 Double_t MParContainer::GetEnvValue(const TEnv &env, TString prefix, Double_t dflt) const 917 951 { 918 return ((TEnv&)env).GetValue(prefix, dflt); 919 } 920 952 return const_cast<TEnv&>(env).GetValue(prefix, dflt); 953 } 954 955 // -------------------------------------------------------------------------- 956 // 957 // Return the resource prefix from env or deftl if not available. 958 // 921 959 const char *MParContainer::GetEnvValue(const TEnv &env, TString prefix, const char *dflt) const 922 960 { 923 return ((TEnv&)env).GetValue(prefix, dflt); 961 return const_cast<TEnv&>(env).GetValue(prefix, dflt); 962 } 963 964 // -------------------------------------------------------------------------- 965 // 966 // Check for the resource prefix+"."+postfix. If it is not available or 967 // prefix IsNull check for the more common resource postfix. If none 968 // is found return the default. 969 // 970 template <class T> 971 T MParContainer::GetEnvValue2Imp(const TEnv &env, const TString &prefix, const TString &postfix, T dftl, Bool_t print) const 972 { 973 // Check for a dedicated resource (prefix.postfix) first 974 if (!prefix.IsNull()) 975 { 976 if (IsEnvDefined(env, prefix, postfix, print)) 977 return GetEnvValue(env, prefix, postfix, dftl); 978 } 979 980 // check for a general resource (postfix) 981 if (IsEnvDefined(env, postfix, print)) 982 return GetEnvValue(env, postfix, dftl); 983 984 // return default 985 return dftl; 986 } 987 988 // -------------------------------------------------------------------------- 989 // 990 // see template GetEnvValue2Imp 991 // 992 const char *MParContainer::GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, const char *dftl, Bool_t print) const 993 { 994 return GetEnvValue2Imp(env, prefix, postfix, dftl, print); 995 } 996 997 // -------------------------------------------------------------------------- 998 // 999 // see template GetEnvValue2Imp 1000 // 1001 Int_t MParContainer::GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, Int_t dftl, Bool_t print) const 1002 { 1003 return GetEnvValue2Imp(env, prefix, postfix, dftl, print); 1004 } 1005 1006 // -------------------------------------------------------------------------- 1007 // 1008 // see template GetEnvValue2Imp 1009 // 1010 Double_t MParContainer::GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, Double_t dftl, Bool_t print) const 1011 { 1012 return GetEnvValue2Imp(env, prefix, postfix, dftl, print); 924 1013 } 925 1014 -
trunk/MagicSoft/Mars/mbase/MParContainer.h
r8642 r8724 143 143 const char *GetEnvValue(const TEnv &env, TString prefix, const char *dflt) const; 144 144 145 template <class T> T GetEnvValue2Imp(const TEnv &env, const TString &prefix, const TString &postfix, T dflt, Bool_t print=kFALSE) const; 146 Int_t GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, Int_t dflt, Bool_t print=kFALSE) const; 147 Double_t GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, Double_t dflt, Bool_t print=kFALSE) const; 148 const char *GetEnvValue2(const TEnv &env, const TString &prefix, const TString &postfix, const char *dflt, Bool_t print=kFALSE) const; 149 145 150 MParContainer *GetNewObject(const char *name, const char *base) const; 146 151 MParContainer *GetNewObject(const char *name, TClass *base=MParContainer::Class()) const; -
trunk/MagicSoft/Mars/mjobs/MDataSet.cc
r8674 r8724 35 35 // AnalysisNumber: 1 36 36 // 37 // SequencesOn: 35222 37 // Name: SecondCrab 38 // 39 // SequencesOn: 35222 35229 38 40 // SequencesOff: 36817 39 41 // … … 47 49 // Sequence00036817.Dir: /data2/wuerzburg/Crab-Analyse/images/036817 48 50 // 51 // WobbleMode: No 49 52 // MonteCarlo: No 53 // 54 // SourceName: CrabNebula 55 // Catalog: /magic/datacenter/setup/magic_favorites_dc.edb 50 56 // 51 57 // AnalysisNumber: The analysis number is an artifical number used to name … … 80 86 // stored using Sequence%08d.Dir (make sure you have 8 digits!) 81 87 // 82 // 88 // WobbleMode: This is just a flag which is passed to the program 89 // end eveluated (or not) by the individual program, which takes this 90 // dataset as an input. For example this is necessary in ganymed to do 91 // some wobble mode special setup. If no resource is given (or it is 92 // set to "auto") wobble mode if set if the datset contains no off- 93 // sequences. 94 // 95 // MonetCarlo: This is just a flag which is passed to the program 96 // end eveluated (or not) by the individual program, which takes this 97 // dataset as an input. For example this tells ganymed to skip some 98 // parts accessing time stamps which are not available in the MCs. 99 // 100 // SequencePath/DataPath: This determined were the sequences and data-files 101 // are stored. The priorities are as follows: 102 // 0) Build in default path: /magic/sequences /magic/data/star 103 // 1) Def.path from dataset file: SequencePath DataPath 104 // 2) Indiv.path from dataset file: 12345.SequencePath 12345.DataPath 105 // 3) Path from command line: Argument in the constructors 106 // 4) Path for an indiv. dataset: Sequences00022555.File/Dir 107 // 108 // Catalog: This is the xephem-style file from the central control 109 // containing the observed sky positions. 110 // 111 // SourceName: The source name, as defined in the catalog, of the object 112 // the data corresponds to. 113 // 114 // Name: A name is stored for your convinience 115 // 116 // Comment: It is just stored. 117 // 118 // General Remark: MDataSet doesn't implement any action on the given 119 // resources. Whether a resource is used, necessary or ignored, and 120 // what will happen if you change the resource is always defined by the 121 // executed macro or program. 83 122 // 84 123 // Resource file entries are case sensitive! 124 // 125 // 126 // Collection of datsets 127 // --------------------- 128 // 129 // You can combine more than one datset in a file (if your program 130 // supports this) Such a dataset file could look like this: 131 // 132 // 35222.SequencesOn: 35222 133 // 35222.SequencesOff: 36817 134 // 135 // 65778.SequencesOn: 65778 136 // 137 // 12345.SequencesOn: 12345 138 // 139 // 12345.SequencePath: /home/nobody/specialsequences 140 // 65778.DataPath: /home/nobody/specialstars 141 // 142 // SequencePath: /home/nobody/defaultsequences 143 // DataPath: /home/nobody/defaultstars 144 // 145 // Sequence00035222.File: sequences/sequence035222.txt 146 // Sequence00035222.Dir: /data2/wuerzburg/Crab-Analyse/images/035222 147 // 148 // 35222.WobbleMode: Off 149 // WobbleMode: On 150 // 85 151 // 86 152 // IMPORTANT: … … 89 155 // * Sequence filenames should also have names allowing to order them 90 156 // in time, but it is not necessary. 157 // 158 // 159 // ToDO: 160 // * Default paths could be moved into the global .rootrc 161 // 91 162 // 92 163 // Class Version 2: … … 183 254 // The entries are sorted by filename. 184 255 // 185 void MDataSet::ResolveSequences( TEnv &env, const TArrayI &num, TList &list) const256 void MDataSet::ResolveSequences(const TEnv &env, const TString &prefix, const TArrayI &num, TList &list) const 186 257 { 187 258 TString sequences = fPathSequences; … … 190 261 for (int i=0; i<num.GetSize(); i++) 191 262 { 192 TString name = env.GetValue(Form("Sequence%08d.File", num[i]), "");193 TString dir = env.GetValue(Form("Sequence%08d.Dir", num[i]), "");263 TString name = GetEnvValue2(env, prefix, Form("Sequence%08d.File", num[i]), ""); 264 TString dir = GetEnvValue2(env, prefix, Form("Sequence%08d.Dir", num[i]), ""); 194 265 195 266 // Set default sequence file and dir name … … 213 284 } 214 285 215 // -------------------------------------------------------------------------- 216 // 217 // Read the file fname as setup file for the sequence. 218 // 219 MDataSet::MDataSet(const char *fname, TString sequences, TString data) 220 { 286 Bool_t MDataSet::GetWobbleMode(const TEnv &env, const TString &prefix) const 287 { 288 TString wob = GetEnvValue2(env, prefix, "WobbleMode", "auto"); 289 290 wob.ToLower(); 291 wob=wob.Strip(TString::kBoth); 292 293 if (wob=="auto") 294 return !HasOffSequences(); 295 296 return GetEnvValue2(env, prefix, "WobbleMode", kFALSE); 297 } 298 299 // -------------------------------------------------------------------------- 300 // 301 // Read a dataset from the file fname. If num is != -1 all resources are 302 // prefixed with the number. This allows constrcutions like: 303 // 304 // 89123.SequencesOn: 1 2 3 4 305 // 89130.SequencesOn: 5 6 7 8 306 // 307 // For one dataset: 308 // 309 // 89123.DataPath: /magic/data/star 310 // 311 // For all other datasets: 312 // 313 // DataPath: /magic/data/star 314 // 315 // For one sequence of one datasets: 316 // 317 // 89123.Sequence00000002.Dir: /magic/data/star 318 // 319 // and therefore allows storage of several datsets in one file with 320 // a defaults for non specific resources. 321 // 322 // sequences and data are the path to the sequences (/magic/sequences) 323 // and the data (/magic/data/star) respectively. Both can be overwritten 324 // be a default from the dataset file or a resource for an individual 325 // sequence. 326 // 327 void MDataSet::Init(const char *fname, const UInt_t num, TString sequences, TString &data) 328 { 329 // Store given file name as name 221 330 fName = fname; 222 331 332 // Delete the stored Sequences automatically at destruction 223 333 fSequencesOn.SetOwner(); 224 334 fSequencesOff.SetOwner(); 225 335 336 // Determin the prefix to access this resource 337 const TString prefix = num==(UInt_t)-1 ? "" : Form("%d", num); 338 339 // Expand the file name (eg $MARS or ~ are expanded) 226 340 TString expname(fname); 227 341 gSystem->ExpandPathName(expname); 228 342 343 // Check its accessibility 229 344 const Bool_t access = !gSystem->AccessPathName(expname, kFileExists); 230 345 if (!access) 231 346 gLog << err << "ERROR - Dataset file " << expname << " not accessible!" << endl; 232 347 348 // Open and read the file 233 349 MEnv env(expname); 234 350 235 fNumAnalysis = env.GetValue("AnalysisNumber", -1); 236 fTitle = env.GetValue("Name", expname); 237 351 // Get analysis number and name 352 fNumAnalysis = GetEnvValue2(env, prefix, "AnalysisNumber", (Int_t)num); 353 fTitle = GetEnvValue2(env, prefix, "Name", expname); 354 355 // Get sequences from file 238 356 TString str; 239 str = env.GetValue("SequencesOn", "");357 str = GetEnvValue2(env, prefix, "SequencesOn", ""); 240 358 Split(str, fNumSequencesOn); 241 str = env.GetValue("SequencesOff", "");359 str = GetEnvValue2(env, prefix, "SequencesOff", ""); 242 360 Split(str, fNumSequencesOff); 243 361 244 fNameSource = env.GetValue("SourceName", ""); 245 fCatalog = env.GetValue("Catalog", fgCatalog); 246 fWobbleMode = env.GetValue("WobbleMode", kFALSE); 247 fMonteCarlo = env.GetValue("MonteCarlo", kFALSE); 248 fComment = env.GetValue("Comment", ""); 249 250 const TString defpathseq = env.GetValue("SequencePath", GetDefPathSequences()); 251 const TString defpathdata = env.GetValue("DataPath", GetDefPathDataFiles()); 362 // Get other resources 363 fNameSource = GetEnvValue2(env, prefix, "SourceName", ""); 364 fCatalog = GetEnvValue2(env, prefix, "Catalog", fgCatalog); 365 fMonteCarlo = GetEnvValue2(env, prefix, "MonteCarlo", kFALSE); 366 fComment = GetEnvValue2(env, prefix, "Comment", ""); 367 368 fWobbleMode = GetWobbleMode(env, prefix); // needs the number of off sequences 369 370 fNameSource = fNameSource.Strip(TString::kBoth); 371 fCatalog = fCatalog.Strip(TString::kBoth); 372 373 // Check for sequence and data path (GetDefPath needs the monte carlo flag) 374 const TString defpathseq = GetEnvValue2(env, prefix, "SequencePath", GetDefPathSequences()); 375 const TString defpathdata = GetEnvValue2(env, prefix, "DataPath", GetDefPathDataFiles()); 252 376 253 377 SetupDefaultPath(sequences, defpathseq); … … 257 381 fPathDataFiles = data; 258 382 259 ResolveSequences(env, fNumSequencesOn, fSequencesOn); 260 ResolveSequences(env, fNumSequencesOff, fSequencesOff); 261 262 fNameSource = fNameSource.Strip(TString::kBoth); 263 fCatalog = fCatalog.Strip(TString::kBoth); 383 // Resolve sequences 384 ResolveSequences(env, prefix, fNumSequencesOn, fSequencesOn); 385 ResolveSequences(env, prefix, fNumSequencesOff, fSequencesOff); 264 386 265 387 // --- Now "touch" resources which are not yet stored in MDataSet --- … … 272 394 env.PrintUntouched(); 273 395 } 396 } 397 398 // -------------------------------------------------------------------------- 399 // 400 // Constructor. See Read for more details. 401 // 402 MDataSet::MDataSet(const char *fname, TString sequences, TString data) 403 { 404 Init(fname, (UInt_t)-1, sequences, data); 405 } 406 407 // -------------------------------------------------------------------------- 408 // 409 // Constructor. See Read for more details. 410 // 411 MDataSet::MDataSet(const char *fname, Int_t num, TString sequences, TString data) 412 { 413 Init(fname, num, sequences, data); 274 414 } 275 415 … … 330 470 gLog << "Catalog: " << fCatalog << endl; 331 471 332 gLog << "WobbleMode: " << (fWobbleMode?" On":"Off") << endl << endl;472 gLog << "WobbleMode: " << (fWobbleMode?"Yes":"No") << endl << endl; 333 473 gLog << "MonteCarlo: " << (fMonteCarlo?"Yes":"No") << endl << endl; 334 474 -
trunk/MagicSoft/Mars/mjobs/MDataSet.h
r8674 r8724 24 24 UInt_t fNumAnalysis; // Analysis number (artificial) 25 25 26 TString fPathSequences; 27 TString fPathDataFiles; 26 TString fPathSequences; // Default path to the sequence files 27 TString fPathDataFiles; // Default path to the data files 28 28 29 29 TArrayI fNumSequencesOn; // number of on-sequences … … 41 41 Bool_t fMonteCarlo; // For default paths use MC or data path 42 42 43 // Helper functions for constrcutors 43 44 void Split(TString &runs, TArrayI &data) const; 44 void ResolveSequences(TEnv &env, const TArrayI &num, TList &list/*, const TString &sequences, const TString &data*/) const; 45 void ResolveSequences(const TEnv &env, const TString &prefix, const TArrayI &num, TList &list/*, const TString &sequences, const TString &data*/) const; 46 Bool_t GetWobbleMode(const TEnv &env, const TString &prefix) const; 45 47 static void PrintFile(const MSequence &obj); 46 48 49 // Directory and file handling 47 50 void ReplaceDir(TList &list, const TString &old, const TString &news) const; 48 51 void ReplaceFile(TList &list, const TString &old, const TString &news) const; … … 64 67 } 65 68 69 // Initialize from constrcutors 70 void Init(const char *fname, const UInt_t num, TString sequences, TString &data); 71 66 72 public: 67 MDataSet( Int_t num=(UInt_t)-1) : fNumAnalysis(num) { }73 MDataSet() : fNumAnalysis((UInt_t)-1) { } 68 74 MDataSet(const char *fname, TString sequences="", TString data=""); 75 MDataSet(const char *fname, Int_t num, TString sequences="", TString data=""); 69 76 70 77 const char *GetName() const; … … 98 105 99 106 // Getter 100 Bool_t IsValid() const { return fNumAnalysis!=(UInt_t)-1 ; }107 Bool_t IsValid() const { return fNumAnalysis!=(UInt_t)-1 && GetNumSequencesOn()>0; } 101 108 102 109 UInt_t GetNumSequencesOn() const { return fNumSequencesOn.GetSize(); } -
trunk/MagicSoft/Mars/mjobs/MJCut.cc
r8720 r8724 683 683 MRead &readoff = set.IsMonteCarlo() ? (MRead&)readoffmc : (MRead&)readoffdata; 684 684 const Bool_t setrc = set.IsWobbleMode() ? set.AddFilesOn(readoff) : set.AddFilesOff(readoff); 685 if (!setrc && set.HasOffSequences())685 if (!setrc && (set.HasOffSequences() || set.IsWobbleMode())) 686 686 { 687 687 *fLog << err << "MDataSet::AddFiles" << (set.IsWobbleMode()?"On":"Off") << " failed." << endl;
Note:
See TracChangeset
for help on using the changeset viewer.