ROOT logo
void tag() {
  const char* turl = gSystem->Getenv("ALIEN_JDL_OUTPUTDIR");
  TString fESDFileName = "alien://";
  fESDFileName += turl;
  fESDFileName += "/AliESDs.root";

  TString fGUID = 0;
  GetGUID(fGUID);

  TString fAliroot, fRoot, fGeant;
  GetVersions(fAliroot,fRoot,fGeant);

  UpdateTag(fAliroot,fRoot,fGeant,fESDFileName,fGUID);
}

//_____________________________________//
GetVersions(TString &fAliroot, TString &froot, TString &fgeant) {
  const char* fver = gSystem->Getenv("ALIEN_JDL_PACKAGES");
  TString fS = fver;
  Int_t fFirst = fS.First("#");

  while(fFirst != -1) {
    Int_t fTotalLength = fS.Length();
    TString tmp = fS;
    TString fS1 = fS(0,fFirst);
    tmp = fS(fFirst+2,fTotalLength);
    fS = tmp;

    if(fS1.Contains("Root")) fAliroot = fS1;
    if(fS1.Contains("ROOT")) froot = fS1;
    if(fS1.Contains("GEANT")) fgeant = fS1;

    if(tmp.Contains("Root")) fAliroot = tmp;
    if(tmp.Contains("ROOT")) froot = tmp;
    if(tmp.Contains("GEANT")) fgeant = tmp;

    fFirst = tmp.First("#");
  }
}

//_____________________________________//
GetGUID(TString &guid) {
  ofstream myfile ("guid.txt");
  if (myfile.is_open()) {
    TFile *f = TFile::Open("AliESDs.root","read");
    if(f->IsOpen()) {
      guid = f->GetUUID().AsString();
      myfile << "AliESDs.root \t"<<f->GetUUID().AsString();
      cout<<guid.Data()<<endl;
      myfile.close();
    }
    else cout<<"Input file not found"<<endl;
  }
  else cout<<"Output file can't be created..."<<endl;
}


//_____________________________________//
Bool_t UpdateTag(TString faliroot, TString froot, TString fgeant, TString turl, TString guid) {
  cout<<"Updating tags....."<<endl;

  const char * tagPattern = "tag.root";
  // Open the working directory
  void * dirp = gSystem->OpenDirectory(gSystem->pwd());
  const char * name = 0x0;
  // Add all files matching *pattern* to the chain
  while((name = gSystem->GetDirEntry(dirp))) {
    if (strstr(name,tagPattern)) {
      TFile *f = TFile::Open(name,"read") ;

      AliRunTag *tag = new AliRunTag;
      AliEventTag *evTag = new AliEventTag;
      TTree *fTree = (TTree *)f->Get("T");
      fTree->SetBranchAddress("AliTAG",&tag);

      //Defining new tag objects
      AliRunTag *newTag = new AliRunTag();
      TTree ttag("T","A Tree with event tags");
      TBranch * btag = ttag.Branch("AliTAG", &newTag);
      btag->SetCompressionLevel(9);
      for(Int_t iTagFiles = 0; iTagFiles < fTree->GetEntries(); iTagFiles++) {
	fTree->GetEntry(iTagFiles);
	newTag->SetRunId(tag->GetRunId());
	newTag->SetAlirootVersion(faliroot);
	newTag->SetRootVersion(froot);
	newTag->SetGeant3Version(fgeant);
	const TClonesArray *tagList = tag->GetEventTags();
	for(Int_t j = 0; j < tagList->GetEntries(); j++) {
	  evTag = (AliEventTag *) tagList->At(j);
	  evTag->SetTURL(turl);
	  evTag->SetGUID(guid);
	  newTag->AddEventTag(*evTag);
	}
	ttag.Fill();
	newTag->Clear();
      }//tag file loop

      TFile* ftag = TFile::Open(name, "recreate");
      ftag->cd();
      ttag.Write();
      ftag->Close();

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