ROOT logo
Bool_t
GetInfoFromFileName(const char* path, 
		    Int_t& firstRun, Int_t& lastRun, 
		    Int_t& version, Int_t& subVersion)
{
  TString fn(gSystem->BaseName(path));
  int ret = sscanf(fn.Data(), "Run%d_%d_v%d_s%d.root", 
		   &firstRun, &lastRun, &version, &subVersion);
  return ret == 4;
}

void 
FixOne(const char* path, const char* id, const char* fn) 
{
  TFile* file = TFile::Open(Form("%s/%s/%s", path, id, fn));
  if (!file) { 
    Warning("FixOne", "%s/%s/%s not found", path, id, fn);
    return;
  }

  AliCDBEntry* entry = static_cast<AliCDBEntry*>(file->Get("AliCDBEntry"));
  if (!entry) { 
    Warning("FixOne", "Did not find an entry in the file");
    return;
  }

  Int_t firstRun, lastRun, version, subVersion;
  if (!GetInfoFromFileName(fn, firstRun, lastRun, version, subVersion)) { 
    Warning("FixOne", "Could not get info from file name");
    return;
  }

  if (firstRun    == entry->GetId().GetFirstRun() && 
      lastRun     == entry->GetId().GetLastRun()  && 
      version     == entry->GetId().GetVersion()  && 
      subVersion  == entry->GetId().GetSubVersion()) { 
    Info("FixOne", "Entry run range and version %d->%d %d.%d match "
	 "filename run range and version %d->%d %d.%d, not creating %s in %s", 
	 entry->GetId().GetFirstRun(), entry->GetId().GetLastRun(), 
	 entry->GetId().GetVersion(),  entry->GetId().GetSubVersion(), 
	 firstRun, lastRun, version, subVersion, fn, 
	 gSystem->WorkingDirectory());
    return;
  }

  AliCDBId cid(id, firstRun, lastRun, version, subVersion);
  entry->SetId(cid);

  Info("FixOne", "Creating %s", fn);
  TFile* out = TFile::Open(fn, "RECREATE");
  out->cd();
  entry->Write();
  out->ls();
  out->Close();
  file->Close();
}

FixCategory(const char* path, const char* id)
{
  TSystemDirectory dir(Form("%s/%s", path, id), Form("%s/%s", path, id));
  TList*       fl = dir.GetListOfFiles();
  TIter        next(fl);
  TSystemFile* file = 0;
  while ((file = static_cast<TSystemFile*>(next()))) { 
    if (file->IsDirectory()) { 
      Info("FixCategory", " skipping %s", file->GetName());
      continue;
    }

    TString fn(gSystem->BaseName(file->GetName()));
    if (!fn.EndsWith(".root")) { 
      Info("FixCategory", " Skipping %s", fn.Data());
      continue; 
    }

    Info("FixCategory", " Now processing %s/%s @ %s", id, fn.Data(), path);
    FixOne(path, id, fn.Data());
  }
}

FixOCDBEntries()
{
  const char* path = gSystem->ExpandPathName("$ALICE_ROOT/OCDB");

  AliCDBManager* cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage(Form("local://%s", path));
  cdb->SetRun(0);

  AliFMDParameters* fmdp = AliFMDParameters::Instance();
  fmdp->Init(kTRUE);
  
  const char* ids[] = { AliFMDParameters::PulseGainPath(), 
			AliFMDParameters::PedestalPath(),
			AliFMDParameters::DeadPath(),
			AliFMDParameters::ZeroSuppressionPath(),
			AliFMDParameters::SampleRatePath(),
			AliFMDParameters::StripRangePath(),    
			AliFMDParameters::AltroMapPath(),
			0 };
  const char** ptr = ids;
  while (*ptr) { 
    Info("FixOCDBEntries", "Now processing %s", *ptr);
    FixCategory(path, *ptr);
    ptr++;
  }
}


    
 FixOCDBEntries.C:1
 FixOCDBEntries.C:2
 FixOCDBEntries.C:3
 FixOCDBEntries.C:4
 FixOCDBEntries.C:5
 FixOCDBEntries.C:6
 FixOCDBEntries.C:7
 FixOCDBEntries.C:8
 FixOCDBEntries.C:9
 FixOCDBEntries.C:10
 FixOCDBEntries.C:11
 FixOCDBEntries.C:12
 FixOCDBEntries.C:13
 FixOCDBEntries.C:14
 FixOCDBEntries.C:15
 FixOCDBEntries.C:16
 FixOCDBEntries.C:17
 FixOCDBEntries.C:18
 FixOCDBEntries.C:19
 FixOCDBEntries.C:20
 FixOCDBEntries.C:21
 FixOCDBEntries.C:22
 FixOCDBEntries.C:23
 FixOCDBEntries.C:24
 FixOCDBEntries.C:25
 FixOCDBEntries.C:26
 FixOCDBEntries.C:27
 FixOCDBEntries.C:28
 FixOCDBEntries.C:29
 FixOCDBEntries.C:30
 FixOCDBEntries.C:31
 FixOCDBEntries.C:32
 FixOCDBEntries.C:33
 FixOCDBEntries.C:34
 FixOCDBEntries.C:35
 FixOCDBEntries.C:36
 FixOCDBEntries.C:37
 FixOCDBEntries.C:38
 FixOCDBEntries.C:39
 FixOCDBEntries.C:40
 FixOCDBEntries.C:41
 FixOCDBEntries.C:42
 FixOCDBEntries.C:43
 FixOCDBEntries.C:44
 FixOCDBEntries.C:45
 FixOCDBEntries.C:46
 FixOCDBEntries.C:47
 FixOCDBEntries.C:48
 FixOCDBEntries.C:49
 FixOCDBEntries.C:50
 FixOCDBEntries.C:51
 FixOCDBEntries.C:52
 FixOCDBEntries.C:53
 FixOCDBEntries.C:54
 FixOCDBEntries.C:55
 FixOCDBEntries.C:56
 FixOCDBEntries.C:57
 FixOCDBEntries.C:58
 FixOCDBEntries.C:59
 FixOCDBEntries.C:60
 FixOCDBEntries.C:61
 FixOCDBEntries.C:62
 FixOCDBEntries.C:63
 FixOCDBEntries.C:64
 FixOCDBEntries.C:65
 FixOCDBEntries.C:66
 FixOCDBEntries.C:67
 FixOCDBEntries.C:68
 FixOCDBEntries.C:69
 FixOCDBEntries.C:70
 FixOCDBEntries.C:71
 FixOCDBEntries.C:72
 FixOCDBEntries.C:73
 FixOCDBEntries.C:74
 FixOCDBEntries.C:75
 FixOCDBEntries.C:76
 FixOCDBEntries.C:77
 FixOCDBEntries.C:78
 FixOCDBEntries.C:79
 FixOCDBEntries.C:80
 FixOCDBEntries.C:81
 FixOCDBEntries.C:82
 FixOCDBEntries.C:83
 FixOCDBEntries.C:84
 FixOCDBEntries.C:85
 FixOCDBEntries.C:86
 FixOCDBEntries.C:87
 FixOCDBEntries.C:88
 FixOCDBEntries.C:89
 FixOCDBEntries.C:90
 FixOCDBEntries.C:91
 FixOCDBEntries.C:92
 FixOCDBEntries.C:93
 FixOCDBEntries.C:94
 FixOCDBEntries.C:95
 FixOCDBEntries.C:96
 FixOCDBEntries.C:97
 FixOCDBEntries.C:98
 FixOCDBEntries.C:99
 FixOCDBEntries.C:100
 FixOCDBEntries.C:101
 FixOCDBEntries.C:102
 FixOCDBEntries.C:103
 FixOCDBEntries.C:104
 FixOCDBEntries.C:105
 FixOCDBEntries.C:106
 FixOCDBEntries.C:107
 FixOCDBEntries.C:108
 FixOCDBEntries.C:109
 FixOCDBEntries.C:110