Exemple #1
0
TString GetFormatFromDataSet(TString dataset) {
  
//   Info("runAAF.C","Detecting format from dataset (may take while, depends on network connection)...");
  TString dsTreeName;
  if (dataset.Contains("#")) {
    Info("runAAF.C",Form("Detecting format from dataset name '%s' ...",dataset.Data()));
    dsTreeName=dataset(dataset.Last('#'),dataset.Length());
  } else {
    Info("runAAF.C",Form("Detecting format from dataset '%s' (may take while, depends on network connection) ...",dataset.Data()));
    TFileCollection *ds = gProof->GetDataSet(dataset.Data());
    if (!ds) {
      Error(Form("Dataset %s doesn't exist on proof cluster!!!!",dataset.Data()));
      return "";
    }
    dsTreeName = ds->GetDefaultTreeName();
  }

  if (dsTreeName.Contains("esdTree")) {
    Info("runAAF.C","ESD input format detected ...");
    return "ESD";
  } else if (dsTreeName.Contains("aodTree"))  {
    Info("runAAF.C","AOD input format detected ...");
    return "AOD";
  } else {
    Error("runAAF.C",Form("Tree %s is not supported !!!",dsTreeName.Data()));
    Error("runAAF.C",Form("Maybe set your DS to %s#esdTree or %s#aodTree",dataset.Data(),dataset.Data()));
  }
  
  return "";
}
Exemple #2
0
//_____________________________________________________________________________
Int_t ProofSimple::GetHistosFromFC(TCanvas *cv)
{
   // Check for the histograms in the files of a possible TFileCollection

   TIter nxo(fOutput);
   TFileCollection *fc = 0;
   Bool_t fc_found = kFALSE, hs_found = kFALSE;
   while ((fc = (TFileCollection *) nxo())) {
      if (strcmp(fc->ClassName(), "TFileCollection")) continue;
      fc_found = kTRUE;
      if (!fHist) {
         fHist = new TH1F*[fNhist];
         for (Int_t i = 0; i < fNhist; i++) { fHist[i] = 0; }
      } else {
         for (Int_t i = 0; i < fNhist; i++) { SafeDelete(fHist[i]); }
      }
      // Go through the list of files
      TIter nxf(fc->GetList());
      TFileInfo *fi = 0;
      while ((fi = (TFileInfo *) nxf())) {
         TFile *f = TFile::Open(fi->GetCurrentUrl()->GetUrl());
         if (f) {
            for (Int_t i = 0; i < fNhist; i++) {
               TString hn = TString::Format("h%d", i);
               TH1F *h = (TH1F *) f->Get(hn);
               if (h) {
                  hs_found = kTRUE;
                  if (!fHist[i]) {
                     fHist[i] = (TH1F *) h->Clone();
                     fHist[i]->SetDirectory(0);
                  } else {
                     fHist[i]->Add(h);
                  }
               } else {
                  Error("GetHistosFromFC", "histo '%s' not found in file '%s'",
                        hn.Data(), fi->GetCurrentUrl()->GetUrl());
               }
            }
            f->Close();
         } else {
            Error("GetHistosFromFC", "file '%s' could not be open", fi->GetCurrentUrl()->GetUrl());
         }
      }
      if (hs_found) break;
   }
   if (!fc_found) return -1;
   if (!hs_found) return -1;
   
   for (Int_t i = 0; i < fNhist; i++) {
      cv->cd(i+1);
      if (fHist[i]) {
         fHist[i]->DrawCopy();
      }
   }
   Info("GetHistosFromFC", "histograms read from %d files in TFileCollection '%s'",
                           fc->GetList()->GetSize(), fc->GetName());
   // Done
   return 0;
}
Exemple #3
0
void runProofFwdDetsQA(const char * dataset = "/COMMON/COMMON/LHC09a4_run8101X",Long64_t nentries=100000, Long64_t firstentry=0)
{
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");

  // Connect to Proof
  gEnv->SetValue("XSec.GSI.DelegProxy","2");
  TProof::Open("cheshkov:PWG0@alicecaf");

  // Upload and enable packages: please use the correct version!
  gProof->UploadPackage("/afs/cern.ch/alice/caf/sw/ALICE/PARs/v4-16-Release/AF-v4-16");
  gProof->EnablePackage("/afs/cern.ch/alice/caf/sw/ALICE/PARs/v4-16-Release/AF-v4-16");

  // Create the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("AliAnaFwdDetsQA");

  AliVEventHandler* esdH = new AliESDInputHandler();
  mgr->SetInputEventHandler(esdH);

  // Enable MC event handler
  AliVEventHandler* handler = new AliMCEventHandler;
  mgr->SetMCtruthEventHandler(handler);

  // Create task

  gProof->Load(Form("%s/PWGPP/AliAnaFwdDetsQA.cxx++g",
		    gSystem->Getenv("ALICE_ROOT")));
  AliAnalysisTask *task = new AliAnaFwdDetsQA("AliAnaFwdDetsQA");

  // Add task
  mgr->AddTask(task);

  // Create containers for input/output
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer *coutput = 
    mgr->CreateContainer("coutput", TList::Class(), 
    AliAnalysisManager::kOutputContainer, "FwdDetsQA.root");

  // Connect input/output
  mgr->ConnectInput(task, 0, cinput);
  mgr->ConnectOutput(task, 1, coutput);


  // Enable debug printouts
  mgr->SetDebugLevel(3);

  if (!mgr->InitAnalysis())
    return;

  mgr->PrintStatus();

  TFileCollection *proofColl = gProof->GetDataSet(dataset);
  TChain *chain = new TChain("esdTree");
  chain->AddFileInfoList((TCollection*)(proofColl->GetList()));
  mgr->StartAnalysis("proof", chain, nentries, firstentry);

    //  mgr->StartAnalysis("proof",dataset,nentries,firstentry);
}
Exemple #4
0
void TestPeacVerifier() {

//   gSystem->Load("libPeacUtils.so");

//   TProof *p = TProof::Open("skaf.saske.sk:1099","workers=1x");
//   TProof *p = TProof::Open("skaf.saske.sk","workers=1x");
    TProof *p = TProof::Open("alice-caf.cern.ch", "workers=1x");
    p->UploadPackage("../pars/PeacUtils");
    if (p->EnablePackage("PeacUtils")) return;

//   TProofNodes pn(p);
//   TMap *filesmap = new TMap;
//   TMap *nodesmap = pn.GetMapOfNodes();
//
//   TIter nxnd(nodesmap);
//   TList *wli = 0;
//   TObject *obj = 0;
//   Int_t kf = 1;
//   while ((obj = nxnd()) != 0) {
//      if ((wli = dynamic_cast<TList *>(nodesmap->GetValue(obj)))) {
//         THashList *fli = new THashList;
//         Int_t nf = wli->GetSize();
//         TSlaveInfo *wi = (TSlaveInfo *) wli->First();
//         Printf("WK: %s",wi->GetName());
//         fli->Add(new TObjString(wi->GetName()));
//         filesmap->Add(new TObjString(obj->GetName()), fli);
//      }
//   }
//
//   filesmap->SetName("PROOF_FilesToProcess");
//   p->AddInput(filesmap);

//   TFileCollection *coll = p->GetDataSet("myDS");
//   TFileCollection *coll = p->GetDataSet("myBigDS");
    TFileCollection *coll = p->GetDataSet("/PWG2/mvala/LHC11a_000146805_p4_with_SDD");
    TFileCollection *coll = p->GetDataSet("/PWG2/mvala/myDSNew");

    if (!coll) return;
    coll->SetName("PROOF_PEAC_FileCollectionIn");
    p->AddInput(coll);

//   p->SetParameter("PROOF_Packetizer", "TPacketizerFile");
//   p->SetParameter("PROOF_ProcessNotAssigned", (Int_t)1);
    p->SetParameter("PROOF_Packetizer", "TPacketizerUnit");
//   p->SetParameter("PROOF_ProcessNotAssigned", (Int_t)1);
    p->SetParameter("PROOF_UseMergers", "-1");
    TStopwatch timer;
    timer.Start();
    p->Process("TPeacVerifierSel", (Long64_t) 57);
    timer.Stop();
    timer.Print();
}
Exemple #5
0
void runLocal(TString dataset, TString treename = "", Long64_t nentries=TChain::kBigNumber,  Long64_t firstentry = 0)
{
	ProofAna* ana = new ProofAna();

	//Need to provide a TList for local running
	TList* list = new TList();
	ana->SetInputList(list);

	// Load dataset manager stuff, uses same local datasets as PROOF-Lite by design
	TString defaultdir(gSystem->HomeDirectory());
	defaultdir.Append("/.proof");
	TString dsetdir(gEnv->GetValue("ProofLite.Sandbox",defaultdir.Data()));
	dsetdir.Append("/datasets");
	dsetdir.Prepend("dir:");
	TDataSetManagerFile mgr(dsetdir);

	TString dsetfile(dataset);
	dsetfile.Append(".txt");
	dsetfile.Prepend("../filelists/");

	//Register dataset, if non-existent
	if(!mgr.ExistsDataSet(dataset)) {
		TFileCollection* dset = new TFileCollection(dataset,"",dsetfile);
		mgr.RegisterDataSet(dataset,dset,"V"); //This seems to return true regardless of success or failure at the moment
		if(treename.CompareTo("")!=0) {
			cout << "Setting default tree to " << treename << " (local and lite running)" << endl;
			TProof* lite = TProof::Open("lite://");
			if(lite->SetDataSetTreeName(dataset,treename)) {
				cout << "Failure to set default tree to " << treename << endl;
				return;
			}
			delete lite;
		}
	}
	mgr.ShowDataSets();

	// And yes, all this dataset garbage was to get the default tree name
	TFileCollection* dset = mgr.GetDataSet(dataset);
	TString defaultTree = dset->GetDefaultTreeName();

	// Make TChain from TFileCollection...doesn't seem like there is a more direct way
	if(defaultTree.First("/")==0) defaultTree.Remove(0,1);
	TChain* T = new TChain(defaultTree);
	TList* filelist = (TList*)dset->GetList();
	TIter next(filelist);
	TFileInfo* fileinfo = 0;
	while ((fileinfo = (TFileInfo*)next())) T->AddFile(fileinfo->GetCurrentUrl()->GetUrl());

	// Process TChain
	T->Process(ana,"", nentries, firstentry);
}
void TFileCollection::MergeFiles(const TFileCollection& files) {
    for (size_t i = 0; i < files.Size(); ++i)
        Merge(files[i]);

    if (files.Maximized)
        Maximized = true;
}
Exemple #7
0
//________________________________________________________________
void runAAF(Int_t nFilesMax, char* type, char* textFileName, Int_t task)
{
  Int_t analysisMC  = 0;
  Bool_t debug      = kTRUE;
  Bool_t readTR     = kFALSE;
  Bool_t esdAna     = kTRUE;  // run ESD analysis (kTRUE) or AOD analysis (kFALSE)
  Int_t runtype = -1;
  
  if(strstr(type,"aod") != NULL) {
    esdAna = kFALSE;; // AOD analysis
    cout << "Performing AOD analysis" << endl;
  } else 
    cout << "Performing ESD analysis" << endl;
  
  const Char_t* treeName = GetTreeName(esdAna);
  
  if(strstr(type,"PbPb") != NULL) runtype = 2; // PbPb
  if(strstr(type,"pp") != NULL) runtype = 3; // pp
  if(strstr(type,"900") != NULL){ // 900GeV pp
    if(runtype != -1){
      printf("conflicting run types\n");
      return;
    }
    runtype = 1;
  }
  if(runtype == -1) runtype = 0; // 7TeV pp
  
  char *test;
  test = strstr(type,"MC");
  if(test != NULL){
    analysisMC = kTRUE;
    cout << "Test: " << test << endl;
    if(sscanf(test,"MC%d",&analysisMC)){
      //  cout << "**************" << analysisMC << endl;
      if(!analysisMC) analysisMC = 1;
    }
  }
  cout << "MonteCarlo " << analysisMC << endl;
  
  const char* alirootver = "v5-02-17-AN";
  Int_t mode = -1; // mode 1: PROOF, 2: GRID, 0: LOCAL
  printf("===================================================================\n");
  if(strstr(type,"proof") != NULL){ 
    if(mode != -1){
      printf("===== CONFLICTING TYPES =====\n");
      return;
    }
    mode = 1; 
    printf("===============   RUNNING ANALYSIS IN CAF MODE   ================\n");
  }
  if(strstr(type,"grid") != NULL){
    if(mode != -1){
      printf("===== CONFLICTING TYPES =====\n");
      return;
    }
    printf("===============  RUNNING ANALYSIS IN GRID MODE   ================\n");
    mode = 2; 
  }
  if(strstr(type,"local") != NULL || mode<0){ 
    if(mode != -1){
      printf("===== CONFLICTING TYPES =====\n");
      return;
    }
    printf("===============  RUNNING ANALYSIS IN LOCAL MODE  ================\n");
    mode = 0;
  }
  
  printf("===================================================================\n");
  printf("===================================================================\n");
  if (analysisMC) printf(":: use MC    TRUE\n");
  else            printf(":: use MC    FALSE\n");
  if (readTR)     printf(":: read TR   TRUE\n");
  else            printf(":: read TR   FALSE\n");
  if (debug)      printf(":: debugging TRUE\n");
  else            printf(":: debugging FALSE\n");
  
  Char_t taskname[128];
  
  switch(task){
  case 1:
    sprintf(taskname,"HighPtDeDxCosmic");
    break;
  case 2:
    sprintf(taskname,"HighPtDeDx");
    break;
  case 3:
    sprintf(taskname,"HighPtDeDxV0");
    break;
  case 4:{
    sprintf(taskname,"EffDecomposition");
  }
    break;
  default:
    printf("Unknown task\n");
    return;
  }
  
  Char_t nameouputfiles[1280]={0};
  if(runtype ==2){
    for(Int_t i=0;i<6;++i){
      //Char_t tmpname[128]={0};
      sprintf(nameouputfiles,"%s %s_Tree_%1.0f_%1.0f.root",nameouputfiles,taskname,minCent[i],maxCent[i]);
      
    }
  }
  if(runtype ==3){
    sprintf(nameouputfiles,"%s %s_Tree.root",taskname);
  }
  


  cout<<"Files to be stored:"<<nameouputfiles<<endl;


  // Load common libraries   
  gSystem->Load("libTree.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so");
  gSystem->Load("libCDB.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  // tender

  gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName("$ALICE_ROOT")));


  cout << "mode " << mode << ", type " << type << endl;

  if (mode == 1){
    cout << "Connecting to CAF..." << endl;
    gEnv->SetValue("XSec.GSI.DelegProxy","2");

    //const char* AAF = "*****@*****.**";    
    const char* AAF = "*****@*****.**";    

    if(strstr(type,"reset") != NULL)
       TProof::Reset(AAF,kFALSE);
    //       TProof::Reset("*****@*****.**",kTRUE);
    //    TProof::Open(AAF);
    TProof::Open(AAF, "workers=10");

    TList *list = new TList();
    list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "CDB"));

    gProof->EnablePackage(Form("VO_ALICE@AliRoot::%s",alirootver), list);

    cout << "Connected to " << AAF << endl;
  }

 
  // Load the analysis macro (old version); should be removed when the library will be decided
  Char_t loadtask[128];

  if(task==4) {
    sprintf(loadtask,"AliAnaTaskV0%s.cxx++", taskname);
  }else{
    sprintf(loadtask,"AliAnalysisTask%s.cxx++", taskname);
  }
  
  if(mode == 1){ // PROOF
    
    // switch(task){
    // case 1: // ch fluct
    //   break;
    // case 2: // high pt dedx
    //gProof->Load("DebugClasses.C++g");
    //   break;
    // case 3: // high pt v0s
    //   gProof->Load("DebugClasses.C++g");
    //   break;
    // default:
    //   printf("Unknown task\n");
    //   return;
    // }

    gProof->Load(loadtask);
  }else{

    if(task==2) {
      
      cout << "Analysis task is loaded with AliRoot" << endl;
    } else {

      gROOT->LoadMacro(loadtask);
    }
  }

  // Make the analysis manager
  AliAnalysisManager* mgr = new AliAnalysisManager("PID histos", "testing analysis");


  // Dataset 
  switch(mode){
  case 1: // PROOF
    TFileCollection* proofColl = gProof->GetDataSet(textFileName);
    TFileCollection* stagedColl = proofColl->GetStagedSubset();
    TChain* chain = CreateChainCAF(nFilesMax, stagedColl, treeName);
//    TChain* chain = CreateChainCAF(nFilesMax, textFileName, treeName, analysisMC);
    break;
  case 2: // GRID
    //gSystem->Setenv("alien_CLOSE_SE", "ALICE::GSI::SE2");
    //    gSystem->Setenv("alien_CLOSE_SE", "ALICE::NIHAM::FILE");
    TGrid::Connect("alien://");
    //gSystem->Setenv("alien_CLOSE_SE", "ALICE::GSI::SE2");
    //    gSystem->Setenv("alien_CLOSE_SE", "ALICE::NIHAM::FILE");
    
    Char_t gridmode[64];
    sprintf(gridmode, "full");
    if(strstr(type,"term") != NULL) 
      sprintf(gridmode, "terminate");
    if(strstr(type,"off") != NULL) 
      sprintf(gridmode, "offline");
    if(strstr(type,"sub") != NULL) 
      sprintf(gridmode, "submit");
    if(strstr(type,"test") != NULL) 
      sprintf(gridmode, "test");


    gROOT->LoadMacro("CreateAlienHandler.C");
    //    AliAnalysisGrid *alienHandler = CreateAlienHandler(nFilesMax, analysisMC, runtype, taskname, gridmode);  
    AliAnalysisGrid *alienHandler = CreateAlienHandler(nFilesMax, analysisMC, esdAna, taskname, nameouputfiles, gridmode, textFileName, alirootver, task);  
    if (!alienHandler) return; 

    // DOES NOT WORK BECAUSE THERE ARE NO GETTERS?
    // // Here we can add extra files to the plugin
    // switch(task){
    // case 1: // ch fluct
    //   break;
    // case 2: // high pt dedx
    //   alienHandler->SetAnalysisSource(Form("DebugClasses.C %s", alienHandler->GetAnalysisSource()));
    //   alienHandler->SetAdditionalLibs(Form("DebugClasses.C %s", alienHandler->GetAdditionalLibs()));
    //   break;
    // case 3: // high pt v0s
    //   alienHandler->SetAnalysisSource(Form("DebugClasses.C %s", alienHandler->GetAnalysisSource()));
    //   alienHandler->SetAdditionalLibs(Form("DebugClasses.C %s", alienHandler->GetAdditionalLibs()));
    //   break;
    // default:
    //   printf("Unknown task\n");
    //   return;
    // }

    // Connect plugin to the analysis manager
    mgr->SetGridHandler(alienHandler); 
    break;
  case 0: // LOCAL
    // Process data - chain
    AliXRDPROOFtoolkit tool;
    TChain* chain = tool.MakeChain(textFileName,treeName, 0, 100);
    chain->Lookup();
    break;
  default:
    printf("Unknown mode");
    return;
  }
  
  // ESD input handler
  if(esdAna) {

    AliESDInputHandler *esdHandler = new AliESDInputHandler();
    mgr->SetInputEventHandler(esdHandler);
  } else {

    AliAODInputHandler* aodHandler = new AliAODInputHandler();
    mgr->SetInputEventHandler(aodHandler);
  }

  // Monte Carlo handler
  if (analysisMC) {
    AliMCEventHandler* mcHandler = new AliMCEventHandler();
    if(esdAna)
      mgr->SetMCtruthEventHandler(mcHandler);
    mcHandler->SetReadTR(readTR); 
  }

  // Debug if needed
  if (debug) 
    mgr->SetDebugLevel(3);


  // ######### Centrality task ###############  

  cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;
  cout<<"esdAna="<<esdAna<<"  runtype="<<runtype<<endl;
    
  // ######### PHYSICS SELECTION ###############
  if (esdAna) { // PC: 17/8-15: this does not work for AODs..... 

    cout << "Adding task physics selection" << endl;
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
    AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
    if (analysisMC) {
      AliPhysicsSelection* physSel = physSelTask->GetPhysicsSelection();
      physSel->SetAnalyzeMC();
    }
  }

  if(esdAna && runtype==2) { // only for ESD and PbPb

    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
    AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); 
    //taskCentrality->SetPass(2);
    if (analysisMC)
      taskCentrality->SetMCInput(); 
  }

  // ######### PID task ###############

  if(task == 2) {
    cout << "Loading macro in AliRoot!" << endl;
    gROOT->LoadMacro("$ALICE_PHYSICS/PWGLF/SPECTRA/IdentifiedHighPt/train/macros/AddTask.C");      
    cout << "Adding task!" << endl;
    AliAnalysisTask* taskPid = AddTask(analysisMC, taskname, runtype, kTriggerInt, minCent, maxCent);
  } else {
    cout << "Adding AliAnaTaskV0EffDecomposition" << endl;
    gROOT->LoadMacro("AddTask.C");  
    AliAnalysisTask* taskPid = AddTask(taskname);
  }
  
  // Run the analysis  
  if (mgr->InitAnalysis()){
    mgr->PrintStatus();
    switch(mode){
    case 1: // PROOF
      mgr->StartAnalysis("proof",chain);
      break;
    case 2: // GRID
      mgr->StartAnalysis("grid");
      break;
    case 0:
      mgr->StartAnalysis("local",chain);
      break;
    default:
      printf("Unknown mode\n");
      return;
    }
  } 
}  
TFileCollection* loadChunks(char chunk, TString protocol, TString dirname, TString datasetName, TString beautiful) {

  TFileCollection* c = new TFileCollection(beautiful+chunk,beautiful+chunk);

 //DYM20 EE
 if (beautifulDataset(datasetName) == "EEDYM20") {
  switch (chunk) {
    case '1':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_10*.root");
      break;
    case '2':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_11*.root");
      break;
    case '3':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_12*.root");
      break;
    case '4':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_13*.root");
      break;
    case '5':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_14*.root");
      break;
    case '6':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_15*.root");
      break;
    case '7':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_16*.root");
      break;
    case '8':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_17*.root");
      break;
    case '9':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_18*.root");
      break;
    case '10':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_19*.root");
      break;
    case '11':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_1_*.root");
      break;
    default:
      cout << "Wrong chunk" << endl;
      break;
    }
  //DYM20 MuMu
  } else if (beautifulDataset(datasetName) == "DYM20") {
  switch (chunk) {
    case '1':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_10*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_20*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_30*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_40*.root");
      break;
    case '2':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_11*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_21*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_31*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_41*.root");
      break;
    case '3':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_12*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_22*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_32*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_42*.root");
      break;
    case '4':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_13*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_23*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_33*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_43*.root");
      break;
    case '5':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_14*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_24*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_34*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_44*.root");
      break;
    case '6':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_15*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_25*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_35*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_45*.root");
      break;
    case '7':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_16*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_26*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_36*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_46*.root");
      break;
    case '8':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_17*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_27*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_37*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_47*.root");
      break;
    case '9':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_18*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_28*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_38*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_48*.root");
      break;
    case '10':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_19*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_29*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_39*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_49*.root");
      break;
    case '11':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_1_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_2_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_3_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_4_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_5*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_6*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_7*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_8*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_9*.root");
      break;
    default:
      cout << "Wrong chunk" << endl;
      break;
    }
  } else if (beautifulDataset(datasetName) == "DYM1020" || beautifulDataset(datasetName) == "EEDYM1020") {
  switch (chunk) {
    case '1':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_10*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_20*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_30*.root");
      break;
    case '2':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_11*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_21*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_31*.root");
      break;
    case '3':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_12*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_22*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_32*.root");
      break;
    case '4':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_13*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_23*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_33*.root");
      break;
    case '5':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_14*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_24*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_34*.root");
      break;
    case '6':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_15*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_25*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_35*.root");
      break;
    case '7':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_16*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_26*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_36*.root");
      break;
    case '8':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_17*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_27*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_37*.root");
      break;
    case '9':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_18*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_28*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_38*.root");
      break;
    case '10':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_19*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_29*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_39*.root");
      break;
    case '11':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_1_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_2_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_3_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_4*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_5*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_6*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_7*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_8*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_9*.root");
      break;
    default:
      cout << "Wrong chunk" << endl;
      break;
    }
  } else {
   //the rest ?
  switch (chunk) {
    case '1':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_1_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_2_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_3_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_4_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_5_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_6_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_7_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_8_*.root");
      break;
    case '2':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_9_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_10_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_11_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_12_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_13_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_14_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_15_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_16_*.root");
      break;
    case '3':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_20_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_21_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_22_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_23_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_24_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_25_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_26_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_27_*.root");
      break;
    case '4':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_30_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_31_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_32_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_33_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_34_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_35_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_36_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_37_*.root");
      break;
    case '5':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_40_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_41_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_42_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_43_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_44_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_45_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_46_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_47_*.root");
      break;
    case '6':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_50_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_51_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_52_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_53_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_54_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_55_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_56_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_57_*.root");
      break;
    case '7':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_60_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_61_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_62_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_63_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_64_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_65_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_66_*.root");
      break;
    case '8':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_70_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_71_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_72_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_73_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_74_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_75_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_76_*.root");
      break;
    case '9':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_80_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_81_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_28_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_29_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_38_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_39_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_48_*.root");
      break;
    case '10':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_58_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_59_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_68_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_69_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_78_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_79_*.root");
      break;
    case '11':
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_17_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_18_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_19_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_49_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_77_*.root");
      c->Add(protocol+dirname+datasetName+"/ntuple_skim_67_*.root");
      break;
    default:
      cout << "Wrong chunk" << endl;
      break;
    }
  }

  return c;

}