00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 void QAmergeRefHists(char* listFile, char* oldFile, char* modFile, char* newFile) {
00013
00014
00015 gSystem->Load("St_base");
00016 gSystem->Load("StarClassLibrary");
00017 gSystem->Load("StUtilities");
00018
00019 TFile oldFi(oldFile,"READ");
00020 TFile modFi(modFile,"READ");
00021 TFile newFi(newFile,"RECREATE");
00022
00023 TList* oldKeys = oldFi.GetListOfKeys();
00024 TList* modKeys = modFi.GetListOfKeys();
00025 TList newKeys;
00026
00027 Char_t buffer[512];
00028 TString histName,modName;
00029 TMap modNames;
00030 Int_t nkeys,i;
00031
00032 nkeys = oldKeys->GetSize();
00033
00034 for (i = 0; i < nkeys; i++) newKeys.Add(oldKeys->At(i));
00035
00036 ifstream listFi(listFile);
00037 while (listFi.good()) {
00038 listFi >> buffer;
00039 histName = buffer;
00040 Bool_t modifyName = histName.BeginsWith("__");
00041 if (modifyName) {
00042
00043
00044 Ssiz_t endNewName = histName.Index("__x__",5,2);
00045 if (endNewName > 0 && endNewName < histName.Length()-5) {
00046 modName = histName(2,endNewName-2);
00047 histName.Remove(0,endNewName+5);
00048 } else modifyName = kFALSE;
00049 }
00050 TKey* modKey = (TKey*) (modKeys->FindObject(histName.Data()));
00051 if (!modKey) {
00052 histName.ReplaceAll('_',' ');
00053 if (modifyName) modName.ReplaceAll('_',' ');
00054 modKey = (TKey*) (modKeys->FindObject(histName.Data()));
00055 }
00056 if (modKey) {
00057
00058 if (newKeys.FindObject(modKey)) continue;
00059
00060
00061 TObject* oldKey = newKeys.FindObject(modifyName ?
00062 modName.Data() : histName.Data());
00063 if (oldKey) {
00064 newKeys.AddAfter(oldKey,modKey);
00065 newKeys.Remove(oldKey);
00066 } else {
00067 newKeys.Add(modKey);
00068 }
00069 if (modifyName) modNames.Add(modKey, new TNamed(modName,modName));
00070 }
00071 }
00072 listFi.close();
00073
00074
00075 nkeys = newKeys.GetSize();
00076 for (i = 0; i < nkeys; i++) {
00077 TKey* key = (TKey*) (newKeys.At(i));
00078 TObject* obj = key->ReadObj();
00079 TObject* modValue = modNames.GetValue(key);
00080
00081 if (modValue) ((TNamed*) obj)->SetName(modValue->GetName());
00082 newFi.cd();
00083 obj->Write();
00084 }
00085
00086 oldFi.Close();
00087 modFi.Close();
00088
00089
00090 }
00091
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107