ROOT logo
#include "AliMuonQAMergeSubmitter.h"

#include "AliMuonAccEffSubmitter.h"
#include "AliAnalysisTriggerScalers.h"
#include "AliLog.h"
#include "TSystem.h"
#include "Riostream.h"
#include "TGrid.h"
#include "TGridResult.h"

namespace {
  const Int_t kFinal(999);
}

ClassImp(AliMuonQAMergeSubmitter)

//_____________________________________________________________________________
AliMuonQAMergeSubmitter::AliMuonQAMergeSubmitter(const char* period, const char* pass) :
AliMuonGridSubmitter(AliMuonGridSubmitter::kQAMerge),
fPeriod(period),
fPass(pass),
fWhatToMerge("Merged.QA.Data.root"),
fSplitMaxInputFileNumber(50)
{
  if (!fPeriod.BeginsWith("LHC"))
  {
    AliError("Period not starting with LHC !");
  }
  
  AddToTemplateFileList("QAMerge.C");
  AddToTemplateFileList("QAMerge.sh");
  AddToTemplateFileList("validation.sh");
  AddToTemplateFileList(MergeJDLName(kFALSE).Data());
  AddToTemplateFileList(MergeJDLName(kTRUE).Data());
  
  SetVar("VAR_MERGED_OUTPUT_NAME",Form("%s",fWhatToMerge.Data()));

  ShouldOverwriteFiles(kTRUE);

  TString speriod(period);
  
  Int_t year = 2000 + TString(speriod(3,3)).Atoi();

  SetMapKeyValue("DataDirFormat",Form("/alice/data/%d/%s/%%09d/ESDs/%s",year,period,pass));
}

//_____________________________________________________________________________
AliMuonQAMergeSubmitter::~AliMuonQAMergeSubmitter()
{
}

//______________________________________________________________________________
Bool_t AliMuonQAMergeSubmitter::Generate(const char* jdlname) const
{
  /// Create the JDL for merging jobs
  
  AliDebug(1,"");
  
  std::ostream* os = CreateJDLFile(jdlname);
  
  if (!os)
  {
    return kFALSE;
  }
  
  Bool_t final = TString(jdlname).Contains("final",TString::kIgnoreCase);
  
  (*os) << "# Generated merging jdl (production mode)" << std::endl
  << "# $1 = run number" << std::endl
  << "# $2 = merging stage" << std::endl
  << "# Stage_<n>.xml made via: find <OutputDir> *Stage<n-1>/*" << fWhatToMerge.Data() << std::endl;
  
  OutputToJDL(*os,"Packages",
         GetMapValue("AliRoot").Data(),
         GetMapValue("Geant3").Data(),
         GetMapValue("Root").Data(),
         GetMapValue("API").Data());
         
  OutputToJDL(*os,"Executable","QAMerge.sh");
  
  OutputToJDL(*os,"Price","1");
  
  if ( final )
  {
    OutputToJDL(*os,"Jobtag","comment: AliMuonQAMergeSubmitter final merging RUN $1");
  }
  else
  {
    OutputToJDL(*os,"Jobtag","comment: AliMuonQAMergeSubmitter merging RUN $1 stage $2");
  }
  
  OutputToJDL(*os,"Workdirectorysize","5000MB");
  
  OutputToJDL(*os,"Validationcommand",Form("%s/validation.sh",RemoteDir().Data()));
  
  OutputToJDL(*os,"TTL","14400");
  
  OutputToJDL(*os,"OutputArchive",
         "log_archive.zip:stderr,stdout@disk=1",
         Form("root_archive.zip:%s@disk=3",fWhatToMerge.Data())
         );
  
//  OutputToJDL(*os,"Arguments",(final ? "2":"1")); // for QAmerge.sh, 1 means intermediate merging stage, 2 means final merging
  
  if ( !final )
  {
    OutputToJDL(*os,"Arguments","wn.xml");
    OutputToJDL(*os,"InputFile",Form("LF:%s/QAMerge.C",RemoteDir().Data()));
    OutputToJDL(*os,"OutputDir",Form("%s/$1/Stage_$2/#alien_counter_03i#",RemoteDir().Data()));
    OutputToJDL(*os,"Split","se");
    OutputToJDL(*os,"InputDataCollection",Form("LF:%s/$1/Stage_$2.xml,nodownload",RemoteDir().Data()));    
    OutputToJDL(*os,"SplitMaxInputFileNumber",Form("%d",GetSplitMaxInputFileNumber()));
    OutputToJDL(*os,"InputDataListFormat","xml-single");
    OutputToJDL(*os,"InputDataList","wn.xml");
  }
  else
  {
    OutputToJDL(*os,"InputFile",Form("LF:%s/QAMerge.C",RemoteDir().Data()),
           Form("LF:%s/$1/Stage_$2.xml",RemoteDir().Data()));
    OutputToJDL(*os,"Arguments","Stage_$2.xml $1");
    OutputToJDL(*os,"OutputDir",Form("%s/$1",RemoteDir().Data()));
  }
  
  return kTRUE;
}

//_____________________________________________________________________________
UInt_t AliMuonQAMergeSubmitter::MakeXMLCollectionForRun(Int_t runNumber, Int_t stage)
{
  /// Create a collection named Stage_[stage].xml
  /// with the files from stage-1 (or all the files if stage=0)
  /// Return the total number of files to be merged
  
  if ( stage < 0 )
  {
    AliError(Form("Stage (%d) should be >=0",stage));
    return 0;
  }
  
  TString filename;
  TString sourcedir;

  if ( stage > 1 )
  {
    filename.Form("%s/%d/Stage_%d.xml",LocalDir().Data(),runNumber,stage);
    sourcedir.Form("%s/%d/Stage_%d",RemoteDir().Data(),runNumber,stage-1);
  }
  else if ( stage == 1 )
  {
    sourcedir = GetMapValue("DataDirFormat");
    
    if ( sourcedir.Length() == 0 )
    {
      AliError("Cannot make collections from an empty data dir !");
      return 0;
    }
    filename.Form("%s/%d/Stage_%d.xml",LocalDir().Data(),runNumber,stage);
  }
  else
  {
    AliError("oups");
    return 0;
  }
  
  UInt_t count(0);

  TGridResult* res = gGrid->Query(Form(sourcedir.Data(),runNumber),fWhatToMerge.Data());
  
  Int_t nFiles = res->GetEntries();
  
  if (!nFiles)
  {
    AliError(Form("Got no file for run %d",runNumber));
    return 0;
  }
  
  gSystem->mkdir(Form("%s/",gSystem->DirName(filename.Data())),kTRUE);
  
  AliDebug(1,Form("Creating %s",filename.Data()));
  
  std::ofstream out(filename.Data());
  
  out << Form("<?xml version=\"1.0\"?>\n<alien>\n  <collection name=\"%d-stage-%d\">",runNumber,stage) << std::endl;
  
  Long64_t size(0);
  const Double_t byte2GB(1024*1024*1024);
  
  for (Int_t i = 0; i < nFiles; ++i)
  {
    ++count;
    
    size += TString(res->GetKey(i,"size")).Atoll();
    
    out << Form("    <event name=\"%d\">",count) << std::endl;
    out << Form("      <file name=\"%s\" aclId=\"%s\" broken=\"%s\" ctime=\"%s\" "
                "dir=\"%s\" entryId=\"%s\" expiretime=\"%s\" gowner=\"%s\" "
                "guid=\"%s\" guidtime=\"%s\" lfn=\"%s\" md5=\"%s\" owner=\"%s\" "
                " perm=\"%s\" replicated=\"%s\" size=\"%s\" turl=\"%s\" type=\"%s\" />",
                gSystem->BaseName(res->GetKey(i,"lfn")),
                res->GetKey(i,"aclId"),
                res->GetKey(i,"broken"),
                res->GetKey(i,"ctime"),
                res->GetKey(i,"dir"),
                res->GetKey(i,"entryId"),
                res->GetKey(i,"expiretime"),
                res->GetKey(i,"gowner"),
                res->GetKey(i,"guid"),
                res->GetKey(i,"guidtime"),
                res->GetKey(i,"lfn"),
                res->GetKey(i,"md5"),
                res->GetKey(i,"owner"),
                res->GetKey(i,"perm"),
                res->GetKey(i,"replicated"),
                res->GetKey(i,"size"),
                res->GetKey(i,"turl"),
                res->GetKey(i,"type")) << std::endl;
    out <<      "    </event>" << std::endl;
  }
  
  TString summary(Form("numberoffiles=\"%d\" size=\"%7.2f GB\" ",count,size/byte2GB));
  
  out << Form("  <summary %s />",summary.Data()) << std::endl;
  out << "  </collection>" << std::endl;
  out << "</alien>" << std::endl;
  
  out.close();
  
  delete res;

  Bool_t ok = CopyFile(filename.Data());

  if (!ok) return 0;

  return count;
}

//_____________________________________________________________________________
void AliMuonQAMergeSubmitter::Print(Option_t*) const
{
  std::cout << "SplitMaxInputFileNumber : " << GetSplitMaxInputFileNumber() << std::endl;
  AliMuonGridSubmitter::Print();
}

//_____________________________________________________________________________
Bool_t AliMuonQAMergeSubmitter::Run(const char* mode)
{
  if (!IsValid()) return kFALSE;
  
  TString smode(mode);
  smode.ToUpper();
  
  if ( smode == "FULL")
  {
    return  ( Run("LOCAL") && Run("UPLOAD") && Run("SUBMIT") );
  }
  
  if ( smode == "LOCAL")
  {
    return CopyTemplateFilesToLocal();
  }
  
  if ( smode == "UPLOAD" )
  {
    return CopyLocalFilesToRemote();
  }
  
  if ( smode == "TEST" )
  {
    Bool_t ok = Run("LOCAL") && Run("UPLOAD");
    if ( ok )
    {
      ok = (Submit(kTRUE)>0);
    }
    return ok;
  }
  
  if ( smode == "SUBMIT" )
  {
    return (Submit(kFALSE)>0);
  }
  
  return kFALSE;

}

//_____________________________________________________________________________
Bool_t AliMuonQAMergeSubmitter::SetRemoteDir(const char* dir)
{
  if ( AliMuonGridSubmitter::SetRemoteDir(dir) )
  {
    Validate();
    return kTRUE;
  }
  else
  {
    Invalidate();
    return kFALSE;
  }
}

//______________________________________________________________________________
void AliMuonQAMergeSubmitter::ShowStage(Int_t runNumber)
{
  /// Show stage for a given run number
  
  Int_t stage(0);
  
  if ( RemoteFileExists(Form("%s/%d/%s",RemoteDir().Data(),runNumber,fWhatToMerge.Data())) )
  {
    stage = kFinal;
  }
  else
  {
    stage = GetLastStage(Form("%s/%d",RemoteDir().Data(),runNumber));
  }

  std::cout << "RUN " << runNumber << " ";

  if ( stage == kFinal )
  {
    std::cout << "FINAL";
  }
  else
  {
    std::cout << "Stage " << stage;
  }
  std::cout << std::endl;
}

//______________________________________________________________________________
void AliMuonQAMergeSubmitter::ShowStages()
{
  /// Show in remote dir the list of stages we're in for each run
  
  TGridResult* r = gGrid->Ls(RemoteDir());
  Int_t i(0);
  std::map<int,std::vector<int> > stages;
  
  while ( r->GetFileName(i) )
  {
    TString s(r->GetFileName(i));
    if  (s.IsDec())
    {
      Int_t runNumber = s.Atoi();
      Int_t stage(0);
      
      if ( RemoteFileExists(Form("%s/%d/%s",RemoteDir().Data(),runNumber,fWhatToMerge.Data())) )
      {
        stage = kFinal;
      }
      else
      {
        stage = GetLastStage(Form("%s/%d",RemoteDir().Data(),runNumber));
      }

      stages[stage].push_back(runNumber);
    }
    ++i;
  }
  delete r;
  
  std::map<int,std::vector<int> >::const_iterator it;
  
  for ( it = stages.begin(); it != stages.end(); ++it )
  {
    const std::vector<int>& runs = it->second;
    Int_t stage = it->first;
    if ( stage == kFinal )
    {
      std::cout << "FINAL";
    }
    else
    {
      std::cout << "Stage " << stage;
    }
    std::cout << std::endl;
    for ( std::vector<int>::size_type irun = 0; irun < runs.size(); ++irun )
    {
      std::cout << runs[irun] << " ";
    }
    std::cout << std::endl;
  }
}


//_____________________________________________________________________________
Bool_t AliMuonQAMergeSubmitter::Submit(Int_t runNumber, Bool_t dryRun)
{
  /// Submit merging job for one run
  
  TString runDir = GetRemoteDir(Form("%s/%d", RemoteDir().Data(), runNumber),kTRUE);
  
  if (RemoteFileExists(Form("%s/%s", runDir.Data(),fWhatToMerge.Data())))
  {
    AliWarning(" ! final merging already done");
    return kTRUE;
  }
  
  Int_t lastStage = GetLastStage(runDir.Data());
  
  AliDebug(1,Form("lastStage=%d",lastStage));
  
  ++lastStage;
  
  UInt_t n = MakeXMLCollectionForRun(runNumber,lastStage);
  
  Bool_t final  = ( n < GetSplitMaxInputFileNumber() );
  
  TString query;
  TString jdl(MergeJDLName(final));
  
  gGrid->Cd(RemoteDir().Data());
  
  query.Form("submit %s %d %d", jdl.Data(), runNumber, lastStage);

  AliInfo(Form("query=%s",query.Data()));
  
  if (dryRun)
  {
    return kTRUE;
  }

  Bool_t done = kFALSE;
  TGridResult *res = gGrid->Command(query);
  if (res)
  {
    TString cjobId1 = res->GetKey(0,"jobId");
    if (!cjobId1.IsDec())
    {
      AliError(" FAILED");
      gGrid->Stdout();
      gGrid->Stderr();
    }
    else
    {
      AliInfo(Form(" DONE\n   --> the job Id is: %s \n", cjobId1.Data()));
      done = kTRUE;
    }
    delete res;
  }
  else
  {
    AliError(" FAILED");
  }
  
  return done;
}

//_____________________________________________________________________________
Int_t AliMuonQAMergeSubmitter::Submit(Bool_t dryRun)
{
  /// Submit merging jobs

  if (!NofRuns())
  {
    AliError("No run to work with");
    return 0;
  }
  
  const std::vector<int>& runs = RunList();
  
  TString failed;
  
  for ( std::vector<int>::size_type i = 0; i < runs.size(); ++i )
  {
    Int_t run = runs[i];
    Bool_t ok = Submit(run,dryRun);
  
    if (!ok)
    {
      failed += TString::Format("%d",run);
      failed += " ";
    }
  }
  
  if (failed.Length()>0)
  {
    AliInfo(Form("List of failed runs : %s",failed.Data()));
    return 0;
  }
  
  return 1;
}

 AliMuonQAMergeSubmitter.cxx:1
 AliMuonQAMergeSubmitter.cxx:2
 AliMuonQAMergeSubmitter.cxx:3
 AliMuonQAMergeSubmitter.cxx:4
 AliMuonQAMergeSubmitter.cxx:5
 AliMuonQAMergeSubmitter.cxx:6
 AliMuonQAMergeSubmitter.cxx:7
 AliMuonQAMergeSubmitter.cxx:8
 AliMuonQAMergeSubmitter.cxx:9
 AliMuonQAMergeSubmitter.cxx:10
 AliMuonQAMergeSubmitter.cxx:11
 AliMuonQAMergeSubmitter.cxx:12
 AliMuonQAMergeSubmitter.cxx:13
 AliMuonQAMergeSubmitter.cxx:14
 AliMuonQAMergeSubmitter.cxx:15
 AliMuonQAMergeSubmitter.cxx:16
 AliMuonQAMergeSubmitter.cxx:17
 AliMuonQAMergeSubmitter.cxx:18
 AliMuonQAMergeSubmitter.cxx:19
 AliMuonQAMergeSubmitter.cxx:20
 AliMuonQAMergeSubmitter.cxx:21
 AliMuonQAMergeSubmitter.cxx:22
 AliMuonQAMergeSubmitter.cxx:23
 AliMuonQAMergeSubmitter.cxx:24
 AliMuonQAMergeSubmitter.cxx:25
 AliMuonQAMergeSubmitter.cxx:26
 AliMuonQAMergeSubmitter.cxx:27
 AliMuonQAMergeSubmitter.cxx:28
 AliMuonQAMergeSubmitter.cxx:29
 AliMuonQAMergeSubmitter.cxx:30
 AliMuonQAMergeSubmitter.cxx:31
 AliMuonQAMergeSubmitter.cxx:32
 AliMuonQAMergeSubmitter.cxx:33
 AliMuonQAMergeSubmitter.cxx:34
 AliMuonQAMergeSubmitter.cxx:35
 AliMuonQAMergeSubmitter.cxx:36
 AliMuonQAMergeSubmitter.cxx:37
 AliMuonQAMergeSubmitter.cxx:38
 AliMuonQAMergeSubmitter.cxx:39
 AliMuonQAMergeSubmitter.cxx:40
 AliMuonQAMergeSubmitter.cxx:41
 AliMuonQAMergeSubmitter.cxx:42
 AliMuonQAMergeSubmitter.cxx:43
 AliMuonQAMergeSubmitter.cxx:44
 AliMuonQAMergeSubmitter.cxx:45
 AliMuonQAMergeSubmitter.cxx:46
 AliMuonQAMergeSubmitter.cxx:47
 AliMuonQAMergeSubmitter.cxx:48
 AliMuonQAMergeSubmitter.cxx:49
 AliMuonQAMergeSubmitter.cxx:50
 AliMuonQAMergeSubmitter.cxx:51
 AliMuonQAMergeSubmitter.cxx:52
 AliMuonQAMergeSubmitter.cxx:53
 AliMuonQAMergeSubmitter.cxx:54
 AliMuonQAMergeSubmitter.cxx:55
 AliMuonQAMergeSubmitter.cxx:56
 AliMuonQAMergeSubmitter.cxx:57
 AliMuonQAMergeSubmitter.cxx:58
 AliMuonQAMergeSubmitter.cxx:59
 AliMuonQAMergeSubmitter.cxx:60
 AliMuonQAMergeSubmitter.cxx:61
 AliMuonQAMergeSubmitter.cxx:62
 AliMuonQAMergeSubmitter.cxx:63
 AliMuonQAMergeSubmitter.cxx:64
 AliMuonQAMergeSubmitter.cxx:65
 AliMuonQAMergeSubmitter.cxx:66
 AliMuonQAMergeSubmitter.cxx:67
 AliMuonQAMergeSubmitter.cxx:68
 AliMuonQAMergeSubmitter.cxx:69
 AliMuonQAMergeSubmitter.cxx:70
 AliMuonQAMergeSubmitter.cxx:71
 AliMuonQAMergeSubmitter.cxx:72
 AliMuonQAMergeSubmitter.cxx:73
 AliMuonQAMergeSubmitter.cxx:74
 AliMuonQAMergeSubmitter.cxx:75
 AliMuonQAMergeSubmitter.cxx:76
 AliMuonQAMergeSubmitter.cxx:77
 AliMuonQAMergeSubmitter.cxx:78
 AliMuonQAMergeSubmitter.cxx:79
 AliMuonQAMergeSubmitter.cxx:80
 AliMuonQAMergeSubmitter.cxx:81
 AliMuonQAMergeSubmitter.cxx:82
 AliMuonQAMergeSubmitter.cxx:83
 AliMuonQAMergeSubmitter.cxx:84
 AliMuonQAMergeSubmitter.cxx:85
 AliMuonQAMergeSubmitter.cxx:86
 AliMuonQAMergeSubmitter.cxx:87
 AliMuonQAMergeSubmitter.cxx:88
 AliMuonQAMergeSubmitter.cxx:89
 AliMuonQAMergeSubmitter.cxx:90
 AliMuonQAMergeSubmitter.cxx:91
 AliMuonQAMergeSubmitter.cxx:92
 AliMuonQAMergeSubmitter.cxx:93
 AliMuonQAMergeSubmitter.cxx:94
 AliMuonQAMergeSubmitter.cxx:95
 AliMuonQAMergeSubmitter.cxx:96
 AliMuonQAMergeSubmitter.cxx:97
 AliMuonQAMergeSubmitter.cxx:98
 AliMuonQAMergeSubmitter.cxx:99
 AliMuonQAMergeSubmitter.cxx:100
 AliMuonQAMergeSubmitter.cxx:101
 AliMuonQAMergeSubmitter.cxx:102
 AliMuonQAMergeSubmitter.cxx:103
 AliMuonQAMergeSubmitter.cxx:104
 AliMuonQAMergeSubmitter.cxx:105
 AliMuonQAMergeSubmitter.cxx:106
 AliMuonQAMergeSubmitter.cxx:107
 AliMuonQAMergeSubmitter.cxx:108
 AliMuonQAMergeSubmitter.cxx:109
 AliMuonQAMergeSubmitter.cxx:110
 AliMuonQAMergeSubmitter.cxx:111
 AliMuonQAMergeSubmitter.cxx:112
 AliMuonQAMergeSubmitter.cxx:113
 AliMuonQAMergeSubmitter.cxx:114
 AliMuonQAMergeSubmitter.cxx:115
 AliMuonQAMergeSubmitter.cxx:116
 AliMuonQAMergeSubmitter.cxx:117
 AliMuonQAMergeSubmitter.cxx:118
 AliMuonQAMergeSubmitter.cxx:119
 AliMuonQAMergeSubmitter.cxx:120
 AliMuonQAMergeSubmitter.cxx:121
 AliMuonQAMergeSubmitter.cxx:122
 AliMuonQAMergeSubmitter.cxx:123
 AliMuonQAMergeSubmitter.cxx:124
 AliMuonQAMergeSubmitter.cxx:125
 AliMuonQAMergeSubmitter.cxx:126
 AliMuonQAMergeSubmitter.cxx:127
 AliMuonQAMergeSubmitter.cxx:128
 AliMuonQAMergeSubmitter.cxx:129
 AliMuonQAMergeSubmitter.cxx:130
 AliMuonQAMergeSubmitter.cxx:131
 AliMuonQAMergeSubmitter.cxx:132
 AliMuonQAMergeSubmitter.cxx:133
 AliMuonQAMergeSubmitter.cxx:134
 AliMuonQAMergeSubmitter.cxx:135
 AliMuonQAMergeSubmitter.cxx:136
 AliMuonQAMergeSubmitter.cxx:137
 AliMuonQAMergeSubmitter.cxx:138
 AliMuonQAMergeSubmitter.cxx:139
 AliMuonQAMergeSubmitter.cxx:140
 AliMuonQAMergeSubmitter.cxx:141
 AliMuonQAMergeSubmitter.cxx:142
 AliMuonQAMergeSubmitter.cxx:143
 AliMuonQAMergeSubmitter.cxx:144
 AliMuonQAMergeSubmitter.cxx:145
 AliMuonQAMergeSubmitter.cxx:146
 AliMuonQAMergeSubmitter.cxx:147
 AliMuonQAMergeSubmitter.cxx:148
 AliMuonQAMergeSubmitter.cxx:149
 AliMuonQAMergeSubmitter.cxx:150
 AliMuonQAMergeSubmitter.cxx:151
 AliMuonQAMergeSubmitter.cxx:152
 AliMuonQAMergeSubmitter.cxx:153
 AliMuonQAMergeSubmitter.cxx:154
 AliMuonQAMergeSubmitter.cxx:155
 AliMuonQAMergeSubmitter.cxx:156
 AliMuonQAMergeSubmitter.cxx:157
 AliMuonQAMergeSubmitter.cxx:158
 AliMuonQAMergeSubmitter.cxx:159
 AliMuonQAMergeSubmitter.cxx:160
 AliMuonQAMergeSubmitter.cxx:161
 AliMuonQAMergeSubmitter.cxx:162
 AliMuonQAMergeSubmitter.cxx:163
 AliMuonQAMergeSubmitter.cxx:164
 AliMuonQAMergeSubmitter.cxx:165
 AliMuonQAMergeSubmitter.cxx:166
 AliMuonQAMergeSubmitter.cxx:167
 AliMuonQAMergeSubmitter.cxx:168
 AliMuonQAMergeSubmitter.cxx:169
 AliMuonQAMergeSubmitter.cxx:170
 AliMuonQAMergeSubmitter.cxx:171
 AliMuonQAMergeSubmitter.cxx:172
 AliMuonQAMergeSubmitter.cxx:173
 AliMuonQAMergeSubmitter.cxx:174
 AliMuonQAMergeSubmitter.cxx:175
 AliMuonQAMergeSubmitter.cxx:176
 AliMuonQAMergeSubmitter.cxx:177
 AliMuonQAMergeSubmitter.cxx:178
 AliMuonQAMergeSubmitter.cxx:179
 AliMuonQAMergeSubmitter.cxx:180
 AliMuonQAMergeSubmitter.cxx:181
 AliMuonQAMergeSubmitter.cxx:182
 AliMuonQAMergeSubmitter.cxx:183
 AliMuonQAMergeSubmitter.cxx:184
 AliMuonQAMergeSubmitter.cxx:185
 AliMuonQAMergeSubmitter.cxx:186
 AliMuonQAMergeSubmitter.cxx:187
 AliMuonQAMergeSubmitter.cxx:188
 AliMuonQAMergeSubmitter.cxx:189
 AliMuonQAMergeSubmitter.cxx:190
 AliMuonQAMergeSubmitter.cxx:191
 AliMuonQAMergeSubmitter.cxx:192
 AliMuonQAMergeSubmitter.cxx:193
 AliMuonQAMergeSubmitter.cxx:194
 AliMuonQAMergeSubmitter.cxx:195
 AliMuonQAMergeSubmitter.cxx:196
 AliMuonQAMergeSubmitter.cxx:197
 AliMuonQAMergeSubmitter.cxx:198
 AliMuonQAMergeSubmitter.cxx:199
 AliMuonQAMergeSubmitter.cxx:200
 AliMuonQAMergeSubmitter.cxx:201
 AliMuonQAMergeSubmitter.cxx:202
 AliMuonQAMergeSubmitter.cxx:203
 AliMuonQAMergeSubmitter.cxx:204
 AliMuonQAMergeSubmitter.cxx:205
 AliMuonQAMergeSubmitter.cxx:206
 AliMuonQAMergeSubmitter.cxx:207
 AliMuonQAMergeSubmitter.cxx:208
 AliMuonQAMergeSubmitter.cxx:209
 AliMuonQAMergeSubmitter.cxx:210
 AliMuonQAMergeSubmitter.cxx:211
 AliMuonQAMergeSubmitter.cxx:212
 AliMuonQAMergeSubmitter.cxx:213
 AliMuonQAMergeSubmitter.cxx:214
 AliMuonQAMergeSubmitter.cxx:215
 AliMuonQAMergeSubmitter.cxx:216
 AliMuonQAMergeSubmitter.cxx:217
 AliMuonQAMergeSubmitter.cxx:218
 AliMuonQAMergeSubmitter.cxx:219
 AliMuonQAMergeSubmitter.cxx:220
 AliMuonQAMergeSubmitter.cxx:221
 AliMuonQAMergeSubmitter.cxx:222
 AliMuonQAMergeSubmitter.cxx:223
 AliMuonQAMergeSubmitter.cxx:224
 AliMuonQAMergeSubmitter.cxx:225
 AliMuonQAMergeSubmitter.cxx:226
 AliMuonQAMergeSubmitter.cxx:227
 AliMuonQAMergeSubmitter.cxx:228
 AliMuonQAMergeSubmitter.cxx:229
 AliMuonQAMergeSubmitter.cxx:230
 AliMuonQAMergeSubmitter.cxx:231
 AliMuonQAMergeSubmitter.cxx:232
 AliMuonQAMergeSubmitter.cxx:233
 AliMuonQAMergeSubmitter.cxx:234
 AliMuonQAMergeSubmitter.cxx:235
 AliMuonQAMergeSubmitter.cxx:236
 AliMuonQAMergeSubmitter.cxx:237
 AliMuonQAMergeSubmitter.cxx:238
 AliMuonQAMergeSubmitter.cxx:239
 AliMuonQAMergeSubmitter.cxx:240
 AliMuonQAMergeSubmitter.cxx:241
 AliMuonQAMergeSubmitter.cxx:242
 AliMuonQAMergeSubmitter.cxx:243
 AliMuonQAMergeSubmitter.cxx:244
 AliMuonQAMergeSubmitter.cxx:245
 AliMuonQAMergeSubmitter.cxx:246
 AliMuonQAMergeSubmitter.cxx:247
 AliMuonQAMergeSubmitter.cxx:248
 AliMuonQAMergeSubmitter.cxx:249
 AliMuonQAMergeSubmitter.cxx:250
 AliMuonQAMergeSubmitter.cxx:251
 AliMuonQAMergeSubmitter.cxx:252
 AliMuonQAMergeSubmitter.cxx:253
 AliMuonQAMergeSubmitter.cxx:254
 AliMuonQAMergeSubmitter.cxx:255
 AliMuonQAMergeSubmitter.cxx:256
 AliMuonQAMergeSubmitter.cxx:257
 AliMuonQAMergeSubmitter.cxx:258
 AliMuonQAMergeSubmitter.cxx:259
 AliMuonQAMergeSubmitter.cxx:260
 AliMuonQAMergeSubmitter.cxx:261
 AliMuonQAMergeSubmitter.cxx:262
 AliMuonQAMergeSubmitter.cxx:263
 AliMuonQAMergeSubmitter.cxx:264
 AliMuonQAMergeSubmitter.cxx:265
 AliMuonQAMergeSubmitter.cxx:266
 AliMuonQAMergeSubmitter.cxx:267
 AliMuonQAMergeSubmitter.cxx:268
 AliMuonQAMergeSubmitter.cxx:269
 AliMuonQAMergeSubmitter.cxx:270
 AliMuonQAMergeSubmitter.cxx:271
 AliMuonQAMergeSubmitter.cxx:272
 AliMuonQAMergeSubmitter.cxx:273
 AliMuonQAMergeSubmitter.cxx:274
 AliMuonQAMergeSubmitter.cxx:275
 AliMuonQAMergeSubmitter.cxx:276
 AliMuonQAMergeSubmitter.cxx:277
 AliMuonQAMergeSubmitter.cxx:278
 AliMuonQAMergeSubmitter.cxx:279
 AliMuonQAMergeSubmitter.cxx:280
 AliMuonQAMergeSubmitter.cxx:281
 AliMuonQAMergeSubmitter.cxx:282
 AliMuonQAMergeSubmitter.cxx:283
 AliMuonQAMergeSubmitter.cxx:284
 AliMuonQAMergeSubmitter.cxx:285
 AliMuonQAMergeSubmitter.cxx:286
 AliMuonQAMergeSubmitter.cxx:287
 AliMuonQAMergeSubmitter.cxx:288
 AliMuonQAMergeSubmitter.cxx:289
 AliMuonQAMergeSubmitter.cxx:290
 AliMuonQAMergeSubmitter.cxx:291
 AliMuonQAMergeSubmitter.cxx:292
 AliMuonQAMergeSubmitter.cxx:293
 AliMuonQAMergeSubmitter.cxx:294
 AliMuonQAMergeSubmitter.cxx:295
 AliMuonQAMergeSubmitter.cxx:296
 AliMuonQAMergeSubmitter.cxx:297
 AliMuonQAMergeSubmitter.cxx:298
 AliMuonQAMergeSubmitter.cxx:299
 AliMuonQAMergeSubmitter.cxx:300
 AliMuonQAMergeSubmitter.cxx:301
 AliMuonQAMergeSubmitter.cxx:302
 AliMuonQAMergeSubmitter.cxx:303
 AliMuonQAMergeSubmitter.cxx:304
 AliMuonQAMergeSubmitter.cxx:305
 AliMuonQAMergeSubmitter.cxx:306
 AliMuonQAMergeSubmitter.cxx:307
 AliMuonQAMergeSubmitter.cxx:308
 AliMuonQAMergeSubmitter.cxx:309
 AliMuonQAMergeSubmitter.cxx:310
 AliMuonQAMergeSubmitter.cxx:311
 AliMuonQAMergeSubmitter.cxx:312
 AliMuonQAMergeSubmitter.cxx:313
 AliMuonQAMergeSubmitter.cxx:314
 AliMuonQAMergeSubmitter.cxx:315
 AliMuonQAMergeSubmitter.cxx:316
 AliMuonQAMergeSubmitter.cxx:317
 AliMuonQAMergeSubmitter.cxx:318
 AliMuonQAMergeSubmitter.cxx:319
 AliMuonQAMergeSubmitter.cxx:320
 AliMuonQAMergeSubmitter.cxx:321
 AliMuonQAMergeSubmitter.cxx:322
 AliMuonQAMergeSubmitter.cxx:323
 AliMuonQAMergeSubmitter.cxx:324
 AliMuonQAMergeSubmitter.cxx:325
 AliMuonQAMergeSubmitter.cxx:326
 AliMuonQAMergeSubmitter.cxx:327
 AliMuonQAMergeSubmitter.cxx:328
 AliMuonQAMergeSubmitter.cxx:329
 AliMuonQAMergeSubmitter.cxx:330
 AliMuonQAMergeSubmitter.cxx:331
 AliMuonQAMergeSubmitter.cxx:332
 AliMuonQAMergeSubmitter.cxx:333
 AliMuonQAMergeSubmitter.cxx:334
 AliMuonQAMergeSubmitter.cxx:335
 AliMuonQAMergeSubmitter.cxx:336
 AliMuonQAMergeSubmitter.cxx:337
 AliMuonQAMergeSubmitter.cxx:338
 AliMuonQAMergeSubmitter.cxx:339
 AliMuonQAMergeSubmitter.cxx:340
 AliMuonQAMergeSubmitter.cxx:341
 AliMuonQAMergeSubmitter.cxx:342
 AliMuonQAMergeSubmitter.cxx:343
 AliMuonQAMergeSubmitter.cxx:344
 AliMuonQAMergeSubmitter.cxx:345
 AliMuonQAMergeSubmitter.cxx:346
 AliMuonQAMergeSubmitter.cxx:347
 AliMuonQAMergeSubmitter.cxx:348
 AliMuonQAMergeSubmitter.cxx:349
 AliMuonQAMergeSubmitter.cxx:350
 AliMuonQAMergeSubmitter.cxx:351
 AliMuonQAMergeSubmitter.cxx:352
 AliMuonQAMergeSubmitter.cxx:353
 AliMuonQAMergeSubmitter.cxx:354
 AliMuonQAMergeSubmitter.cxx:355
 AliMuonQAMergeSubmitter.cxx:356
 AliMuonQAMergeSubmitter.cxx:357
 AliMuonQAMergeSubmitter.cxx:358
 AliMuonQAMergeSubmitter.cxx:359
 AliMuonQAMergeSubmitter.cxx:360
 AliMuonQAMergeSubmitter.cxx:361
 AliMuonQAMergeSubmitter.cxx:362
 AliMuonQAMergeSubmitter.cxx:363
 AliMuonQAMergeSubmitter.cxx:364
 AliMuonQAMergeSubmitter.cxx:365
 AliMuonQAMergeSubmitter.cxx:366
 AliMuonQAMergeSubmitter.cxx:367
 AliMuonQAMergeSubmitter.cxx:368
 AliMuonQAMergeSubmitter.cxx:369
 AliMuonQAMergeSubmitter.cxx:370
 AliMuonQAMergeSubmitter.cxx:371
 AliMuonQAMergeSubmitter.cxx:372
 AliMuonQAMergeSubmitter.cxx:373
 AliMuonQAMergeSubmitter.cxx:374
 AliMuonQAMergeSubmitter.cxx:375
 AliMuonQAMergeSubmitter.cxx:376
 AliMuonQAMergeSubmitter.cxx:377
 AliMuonQAMergeSubmitter.cxx:378
 AliMuonQAMergeSubmitter.cxx:379
 AliMuonQAMergeSubmitter.cxx:380
 AliMuonQAMergeSubmitter.cxx:381
 AliMuonQAMergeSubmitter.cxx:382
 AliMuonQAMergeSubmitter.cxx:383
 AliMuonQAMergeSubmitter.cxx:384
 AliMuonQAMergeSubmitter.cxx:385
 AliMuonQAMergeSubmitter.cxx:386
 AliMuonQAMergeSubmitter.cxx:387
 AliMuonQAMergeSubmitter.cxx:388
 AliMuonQAMergeSubmitter.cxx:389
 AliMuonQAMergeSubmitter.cxx:390
 AliMuonQAMergeSubmitter.cxx:391
 AliMuonQAMergeSubmitter.cxx:392
 AliMuonQAMergeSubmitter.cxx:393
 AliMuonQAMergeSubmitter.cxx:394
 AliMuonQAMergeSubmitter.cxx:395
 AliMuonQAMergeSubmitter.cxx:396
 AliMuonQAMergeSubmitter.cxx:397
 AliMuonQAMergeSubmitter.cxx:398
 AliMuonQAMergeSubmitter.cxx:399
 AliMuonQAMergeSubmitter.cxx:400
 AliMuonQAMergeSubmitter.cxx:401
 AliMuonQAMergeSubmitter.cxx:402
 AliMuonQAMergeSubmitter.cxx:403
 AliMuonQAMergeSubmitter.cxx:404
 AliMuonQAMergeSubmitter.cxx:405
 AliMuonQAMergeSubmitter.cxx:406
 AliMuonQAMergeSubmitter.cxx:407
 AliMuonQAMergeSubmitter.cxx:408
 AliMuonQAMergeSubmitter.cxx:409
 AliMuonQAMergeSubmitter.cxx:410
 AliMuonQAMergeSubmitter.cxx:411
 AliMuonQAMergeSubmitter.cxx:412
 AliMuonQAMergeSubmitter.cxx:413
 AliMuonQAMergeSubmitter.cxx:414
 AliMuonQAMergeSubmitter.cxx:415
 AliMuonQAMergeSubmitter.cxx:416
 AliMuonQAMergeSubmitter.cxx:417
 AliMuonQAMergeSubmitter.cxx:418
 AliMuonQAMergeSubmitter.cxx:419
 AliMuonQAMergeSubmitter.cxx:420
 AliMuonQAMergeSubmitter.cxx:421
 AliMuonQAMergeSubmitter.cxx:422
 AliMuonQAMergeSubmitter.cxx:423
 AliMuonQAMergeSubmitter.cxx:424
 AliMuonQAMergeSubmitter.cxx:425
 AliMuonQAMergeSubmitter.cxx:426
 AliMuonQAMergeSubmitter.cxx:427
 AliMuonQAMergeSubmitter.cxx:428
 AliMuonQAMergeSubmitter.cxx:429
 AliMuonQAMergeSubmitter.cxx:430
 AliMuonQAMergeSubmitter.cxx:431
 AliMuonQAMergeSubmitter.cxx:432
 AliMuonQAMergeSubmitter.cxx:433
 AliMuonQAMergeSubmitter.cxx:434
 AliMuonQAMergeSubmitter.cxx:435
 AliMuonQAMergeSubmitter.cxx:436
 AliMuonQAMergeSubmitter.cxx:437
 AliMuonQAMergeSubmitter.cxx:438
 AliMuonQAMergeSubmitter.cxx:439
 AliMuonQAMergeSubmitter.cxx:440
 AliMuonQAMergeSubmitter.cxx:441
 AliMuonQAMergeSubmitter.cxx:442
 AliMuonQAMergeSubmitter.cxx:443
 AliMuonQAMergeSubmitter.cxx:444
 AliMuonQAMergeSubmitter.cxx:445
 AliMuonQAMergeSubmitter.cxx:446
 AliMuonQAMergeSubmitter.cxx:447
 AliMuonQAMergeSubmitter.cxx:448
 AliMuonQAMergeSubmitter.cxx:449
 AliMuonQAMergeSubmitter.cxx:450
 AliMuonQAMergeSubmitter.cxx:451
 AliMuonQAMergeSubmitter.cxx:452
 AliMuonQAMergeSubmitter.cxx:453
 AliMuonQAMergeSubmitter.cxx:454
 AliMuonQAMergeSubmitter.cxx:455
 AliMuonQAMergeSubmitter.cxx:456
 AliMuonQAMergeSubmitter.cxx:457
 AliMuonQAMergeSubmitter.cxx:458
 AliMuonQAMergeSubmitter.cxx:459
 AliMuonQAMergeSubmitter.cxx:460
 AliMuonQAMergeSubmitter.cxx:461
 AliMuonQAMergeSubmitter.cxx:462
 AliMuonQAMergeSubmitter.cxx:463
 AliMuonQAMergeSubmitter.cxx:464
 AliMuonQAMergeSubmitter.cxx:465
 AliMuonQAMergeSubmitter.cxx:466
 AliMuonQAMergeSubmitter.cxx:467
 AliMuonQAMergeSubmitter.cxx:468
 AliMuonQAMergeSubmitter.cxx:469
 AliMuonQAMergeSubmitter.cxx:470
 AliMuonQAMergeSubmitter.cxx:471
 AliMuonQAMergeSubmitter.cxx:472
 AliMuonQAMergeSubmitter.cxx:473
 AliMuonQAMergeSubmitter.cxx:474
 AliMuonQAMergeSubmitter.cxx:475
 AliMuonQAMergeSubmitter.cxx:476
 AliMuonQAMergeSubmitter.cxx:477
 AliMuonQAMergeSubmitter.cxx:478
 AliMuonQAMergeSubmitter.cxx:479
 AliMuonQAMergeSubmitter.cxx:480
 AliMuonQAMergeSubmitter.cxx:481
 AliMuonQAMergeSubmitter.cxx:482
 AliMuonQAMergeSubmitter.cxx:483
 AliMuonQAMergeSubmitter.cxx:484