]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTagCreator.cxx
LOG muondep:
[u/mrichter/AliRoot.git] / STEER / AliTagCreator.cxx
index 2890d934984ee13210d43c2ac33f6ce0a699e808..0e87a52028857945ca864ffea1918574ec3ad883 100644 (file)
@@ -89,7 +89,7 @@ Bool_t AliTagCreator::MergeTags(const char *type) {
     while((name = gSystem->GetDirEntry(dirp))) {
       if (strstr(name,tagPattern)) fgChain->Add(name);  
     }//directory loop
-    AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
   }//local mode
 
   else if(fStorage == 1) {
@@ -103,7 +103,7 @@ Bool_t AliTagCreator::MergeTags(const char *type) {
       TString alienUrl = tagresult->GetKey(i,"turl");
       fgChain->Add(alienUrl);
     }//grid result loop      
-    AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
   }//grid mode
  
   AliRunTag *tag = new AliRunTag;
@@ -112,7 +112,81 @@ Bool_t AliTagCreator::MergeTags(const char *type) {
   TString localFileName = "Run"; localFileName += tag->GetRunId(); 
   localFileName += ".Merged."; localFileName += tagPattern.Data();
      
-  TString filename = 0x0;
+  TString filename;
+  
+  if(fStorage == 0) {
+    filename = localFileName.Data();      
+    AliInfo(Form("Writing merged tags to local file: %s",filename.Data()));
+  } 
+  else if(fStorage == 1) {
+    TString alienFileName = "/alien";
+    alienFileName += gGrid->Pwd();
+    alienFileName += fgridpath.Data();
+    alienFileName += "/";
+    alienFileName +=  localFileName;
+    alienFileName += "?se=";
+    alienFileName += fSE.Data();
+    filename = alienFileName.Data();
+    AliInfo(Form("Writing merged tags to grid file: %s",filename.Data()));     
+  }
+
+  fgChain->Merge(filename);
+  gSystem->Exec("rm Run*.Event*");
+
+  return kTRUE;
+}
+
+
+//__________________________________________________________________________
+Bool_t AliTagCreator::MergeTags(const char *type, const char *inflist) {
+  //Merges the tags and stores the merged tag file 
+  //locally if fStorage=0 or in the grid if fStorage=1
+  AliInfo(Form("Merging tags....."));
+  TChain *fgChain = new TChain("T");
+  TString tagPattern = type; tagPattern += ".tag.root"; 
+
+//   if(fStorage == 0) {
+//     // 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)) fgChain->Add(name);  
+//     }//directory loop
+//     AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+//   }//local mode
+
+//   else if(fStorage == 1) {
+//     TString alienLocation = gGrid->Pwd();
+//     alienLocation += fgridpath.Data();
+//     alienLocation += "/";
+//     TString queryPattern = "*."; queryPattern += tagPattern;
+//     TGridResult *tagresult = gGrid->Query(alienLocation,queryPattern.Data(),"","");
+//     Int_t nEntries = tagresult->GetEntries();
+//     for(Int_t i = 0; i < nEntries; i++) {
+//       TString alienUrl = tagresult->GetKey(i,"turl");
+//       fgChain->Add(alienUrl);
+//     }//grid result loop      
+//     AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+//   }//grid mode
+
+  if (fStorage == 0) {
+    ifstream *istr = new ifstream(inflist);
+    char fname[200];
+    while (!(istr->eof())) {
+      (*istr) >> fname;
+      if (strstr(fname, tagPattern)) fgChain->Add(fname);
+    }
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
+  }
+  AliRunTag *tag = new AliRunTag;
+  fgChain->SetBranchAddress("AliTAG",&tag);
+  fgChain->GetEntry(0);
+  TString localFileName = "Run"; localFileName += tag->GetRunId(); 
+  localFileName += ".Merged."; localFileName += tagPattern.Data();
+     
+  TString filename;
   
   if(fStorage == 0) {
     filename = localFileName.Data();      
@@ -150,7 +224,7 @@ Bool_t AliTagCreator::MergeTags(const char *type, TGridResult *result) {
     alienUrl = result->GetKey(i,"turl");
     fgChain->Add(alienUrl);  
   }
-  AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+  AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
   AliRunTag *tag = new AliRunTag;
   fgChain->SetBranchAddress("AliTAG",&tag);
   fgChain->GetEntry(0);
@@ -158,7 +232,7 @@ Bool_t AliTagCreator::MergeTags(const char *type, TGridResult *result) {
   TString localFileName = "Run"; localFileName += tag->GetRunId(); 
   localFileName += ".Merged"; localFileName += tagPattern.Data();
      
-  TString filename = 0x0;
+  TString filename;
   
   if(fStorage == 0) {
     filename = localFileName.Data();      
@@ -180,3 +254,240 @@ Bool_t AliTagCreator::MergeTags(const char *type, TGridResult *result) {
 
   return kTRUE;
 }
+
+Bool_t AliTagCreator::MergeTagsForRun(const char* type) {
+  //Merges the tags and stores the merged tag file 
+  //locally if fStorage=0 or in the grid if fStorage=1
+  AliInfo(Form("Merging tags....."));
+  TChain *fgChain = new TChain("T");
+  TString tagPattern = type; tagPattern += ".tag.root"; 
+
+  if(fStorage == 0) {
+    // 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)) fgChain->Add(name);  
+    }//directory loop
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
+  }//local mode
+
+  else if(fStorage == 1) {
+    TString alienLocation = gGrid->Pwd();
+    alienLocation += fgridpath.Data();
+    alienLocation += "/";
+    TString queryPattern = "*."; queryPattern += tagPattern;
+    TGridResult *tagresult = gGrid->Query(alienLocation,queryPattern.Data(),"","");
+    Int_t nEntries = tagresult->GetEntries();
+    for(Int_t i = 0; i < nEntries; i++) {
+      TString alienUrl = tagresult->GetKey(i,"turl");
+      fgChain->Add(alienUrl);
+    }//grid result loop      
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
+  }//grid mode
+  AliRunTag *tag = new AliRunTag;
+  fgChain->SetBranchAddress("AliTAG",&tag);
+  fgChain->GetEntry(0);
+  TString localFileName = "Run"; localFileName += tag->GetRunId(); 
+  localFileName += ".Merged."; localFileName += tagPattern.Data();
+     
+  TString filename;
+  
+  if(fStorage == 0) {
+    filename = localFileName.Data();      
+    AliInfo(Form("Writing merged tags to local file: %s",filename.Data()));
+  } 
+  else if(fStorage == 1) {
+    TString alienFileName = "/alien";
+    alienFileName += gGrid->Pwd();
+    alienFileName += fgridpath.Data();
+    alienFileName += "/";
+    alienFileName +=  localFileName;
+    alienFileName += "?se=";
+    alienFileName += fSE.Data();
+    filename = alienFileName.Data();
+    AliInfo(Form("Writing merged tags to grid file: %s",filename.Data()));     
+  }
+
+  //  fgChain->Merge(filename);
+  MergeToSingleRunTag(fgChain, filename);
+
+  gSystem->Exec("rm Run*.Event*");
+
+  return kTRUE;
+}
+
+Bool_t AliTagCreator::MergeTagsForRun(const char* type, TGridResult *result) {
+  //Merges the tags that are listed in the TGridResult 
+  AliInfo(Form("Merging tags....."));
+  TChain *fgChain = new TChain("T");
+  TString tagPattern = "."; tagPattern += type; tagPattern += ".tag.root";
+
+  Int_t nEntries = result->GetEntries();
+
+  TString alienUrl;
+  for(Int_t i = 0; i < nEntries; i++) {
+    alienUrl = result->GetKey(i,"turl");
+    fgChain->Add(alienUrl);  
+  }
+  AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
+  AliRunTag *tag = new AliRunTag;
+  fgChain->SetBranchAddress("AliTAG",&tag);
+  fgChain->GetEntry(0);
+    
+  TString localFileName = "Run"; localFileName += tag->GetRunId(); 
+  localFileName += ".Merged"; localFileName += tagPattern.Data();
+     
+  TString filename;
+  
+  if(fStorage == 0) {
+    filename = localFileName.Data();      
+    AliInfo(Form("Writing merged tags to local file: %s",filename.Data()));
+  } 
+  else if(fStorage == 1) {
+    TString alienFileName = "/alien";
+    alienFileName += gGrid->Pwd();
+    alienFileName += fgridpath.Data();
+    alienFileName += "/";
+    alienFileName +=  localFileName;
+    alienFileName += "?se=";
+    alienFileName += fSE.Data();
+    filename = alienFileName.Data();
+    AliInfo(Form("Writing merged tags to grid file: %s",filename.Data()));     
+  }
+  
+  //  fgChain->Merge(filename);
+  MergeToSingleRunTag(fgChain, filename);
+
+  return kTRUE;
+}
+
+Bool_t AliTagCreator::MergeTagsForRun(const char* type, const char *inflist) {
+  //Merges the tags and stores the merged tag file 
+  //locally if fStorage=0 or in the grid if fStorage=1
+  AliInfo(Form("Merging tags....."));
+  TChain *fgChain = new TChain("T");
+  TString tagPattern = type; tagPattern += ".tag.root"; 
+
+//   if(fStorage == 0) {
+//     // 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)) fgChain->Add(name);  
+//     }//directory loop
+//     AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+//   }//local mode
+
+//   else if(fStorage == 1) {
+//     TString alienLocation = gGrid->Pwd();
+//     alienLocation += fgridpath.Data();
+//     alienLocation += "/";
+//     TString queryPattern = "*."; queryPattern += tagPattern;
+//     TGridResult *tagresult = gGrid->Query(alienLocation,queryPattern.Data(),"","");
+//     Int_t nEntries = tagresult->GetEntries();
+//     for(Int_t i = 0; i < nEntries; i++) {
+//       TString alienUrl = tagresult->GetKey(i,"turl");
+//       fgChain->Add(alienUrl);
+//     }//grid result loop      
+//     AliInfo(Form("Chained tag files: %d",fgChain->GetEntries()));
+//   }//grid mode
+
+  if (fStorage == 0) {
+    ifstream *istr = new ifstream(inflist);
+    char fname[200];
+    while (!(istr->eof())) {
+      (*istr) >> fname;
+      if (strstr(fname, tagPattern)) fgChain->Add(fname);
+    }
+    AliInfo(Form("Chained tag files: %lld",fgChain->GetEntries()));
+  }
+  AliRunTag *tag = new AliRunTag;
+  fgChain->SetBranchAddress("AliTAG",&tag);
+  fgChain->GetEntry(0);
+  TString localFileName = "Run"; localFileName += tag->GetRunId(); 
+  localFileName += ".Merged."; localFileName += tagPattern.Data();
+     
+  TString filename;
+  
+  if(fStorage == 0) {
+    filename = localFileName.Data();      
+    AliInfo(Form("Writing merged tags to local file: %s",filename.Data()));
+  } 
+  else if(fStorage == 1) {
+    TString alienFileName = "/alien";
+    alienFileName += gGrid->Pwd();
+    alienFileName += fgridpath.Data();
+    alienFileName += "/";
+    alienFileName +=  localFileName;
+    alienFileName += "?se=";
+    alienFileName += fSE.Data();
+    filename = alienFileName.Data();
+    AliInfo(Form("Writing merged tags to grid file: %s",filename.Data()));     
+  }
+
+  //  fgChain->Merge(filename);
+  MergeToSingleRunTag(fgChain, filename);
+
+  gSystem->Exec("rm Run*.Event*");
+
+  return kTRUE;
+}
+
+
+Bool_t AliTagCreator::MergeToSingleRunTag(TChain *chain, const char *filename)
+{
+  // Merge all tags for a given run into a single RunTag
+  TFile* ftag = TFile::Open(filename, "recreate");
+
+  AliRunTag *tag = new AliRunTag;
+  TTree * ttag = new TTree("T","A Tree with event tags");
+  TBranch * btag = ttag->Branch("AliTAG", &tag, 1000000);
+  btag->SetCompressionLevel(9);
+  ttag->AutoSave("10000");
+
+  AliRunTag *rtag = new AliRunTag();
+  chain->SetBranchAddress("AliTAG", &rtag);
+
+  AliFileTag *evt;
+
+  if (chain->GetEntries()) {
+    chain->GetEntry(0);
+    tag->CopyStandardContent(rtag);
+    tag->Clear();
+
+    int runno = rtag->GetRunId();
+
+    for (int iter=0; iter<chain->GetEntries(); iter++) {
+      chain->GetEntry(iter);
+      if (runno != rtag->GetRunId()) {
+       AliInfo(Form("Run tag ID %i is different from the Run ID for the merged run: %i\n", rtag->GetRunId(), runno));
+       continue;
+      }
+
+      for (int iev=0; iev<rtag->GetNFiles(); iev++) {
+       evt = (AliFileTag *) rtag->GetFileTag(iev);
+       tag->AddFileTag(new AliFileTag(*evt));
+      }
+    }
+  }
+  else {
+    AliInfo("Found no tag files to merge.");
+    return kFALSE;
+  }
+
+  ttag->Fill();
+
+  ftag->cd();
+  tag->Clear();
+  ttag->Write();
+  ftag->Close();
+  
+  return kTRUE;
+}
+
+