Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions proof/proof/inc/TDataSetManagerAliEn.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ class TAliEnFind : public TObject {
TString fTreeName;
TString fRegexpRaw;
TString fAnchor;
TString fQuery;
TString fFilter;
TString fAliphysicsVersionForFilter;
Bool_t fArchSubst;
TPMERegexp *fRegexp;
TString fSearchId;
Expand All @@ -65,7 +66,8 @@ class TAliEnFind : public TObject {
TAliEnFind(const TString &basePath = "", const TString &fileName = "",
const TString &anchor = "", const Bool_t archSubst = kFALSE,
const TString &treeName = "", const TString &regexp = "",
const TString &query = "");
const TString& filter = "",
const TString& aliphysicsVersionForFilter="");

TAliEnFind(const TAliEnFind &src);
TAliEnFind &operator=(const TAliEnFind &rhs);
Expand Down Expand Up @@ -113,7 +115,7 @@ class TDataSetManagerAliEn : public TDataSetManager {
static std::vector<Int_t> *ExpandRunSpec(TString &runSpec);

static Bool_t ParseCustomFindUri(TString &uri, TString &basePath,
TString &fileName, TString &anchor, TString &query, TString &treeName,
TString &fileName, TString &anchor, TString &filter, TString& aliphysicsVersionForFilter, TString &treeName,
TString &regexp);

static Bool_t ParseOfficialDataUri(TString &uri, Bool_t sim,
Expand Down
116 changes: 85 additions & 31 deletions proof/proof/src/TDataSetManagerAliEn.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,19 @@

#include "TDataSetManagerAliEn.h"
#include "TError.h"
#include "TSystem.h"
#include "Riostream.h"

ClassImp(TAliEnFind);

//______________________________________________________________________________
TAliEnFind::TAliEnFind(const TString &basePath, const TString &fileName,
const TString &anchor, const Bool_t archSubst, const TString &treeName,
const TString &regexp, const TString &query) :
const TString &regexp, const TString& filter, const TString& aliphysicsVersionForFilter) :
fBasePath(basePath), fFileName(fileName), fTreeName(treeName),
fRegexpRaw(regexp), fAnchor(anchor), fQuery(query), fArchSubst(archSubst),
fRegexp(0), fSearchId(""), fGridResult(0)
fRegexpRaw(regexp), fAnchor(anchor),
fFilter(filter), fAliphysicsVersionForFilter(aliphysicsVersionForFilter),
fArchSubst(archSubst), fRegexp(0), fSearchId(""), fGridResult(0)
{
// Constructor

Expand All @@ -47,7 +50,8 @@ TAliEnFind::TAliEnFind(const TAliEnFind &src) : TObject()
fFileName = src.fFileName;
fAnchor = src.fAnchor;
fArchSubst = src.fArchSubst;
fQuery = src.fQuery;
fFilter = src.fFilter;
fAliphysicsVersionForFilter = src.fAliphysicsVersionForFilter;
fTreeName = src.fTreeName;
fRegexpRaw = src.fRegexpRaw;

Expand All @@ -69,7 +73,8 @@ TAliEnFind &TAliEnFind::operator=(const TAliEnFind &rhs)
fFileName = rhs.fFileName;
fAnchor = rhs.fAnchor;
fArchSubst = rhs.fArchSubst;
fQuery = rhs.fQuery;
fFilter = rhs.fFilter;
fAliphysicsVersionForFilter = rhs.fAliphysicsVersionForFilter;
fTreeName = rhs.fTreeName;

SetRegexp(rhs.fRegexpRaw);
Expand Down Expand Up @@ -119,21 +124,15 @@ TGridResult *TAliEnFind::GetGridResult(Bool_t forceNewQuery)
fGridResult = gGrid->Query(fBasePath.Data(), fFileName.Data());
if (!fGridResult) return NULL;

if (fRegexp || fArchSubst || (fAnchor != "")) {
if (fRegexp || fArchSubst || (fAnchor != "") || fFilter ) {

TPMERegexp *reArchSubst = NULL;
TString substWith;
if (fArchSubst) {
TString temp;
temp.Form("/%s$", fFileName.Data());
reArchSubst = new TPMERegexp(temp.Data());
if (fQuery) {
substWith.Form("/root_archive.zip?%s#%s", fQuery.Data(),
fFileName.Data());
}
else {
substWith.Form("/root_archive.zip#%s", fFileName.Data());
}
substWith.Form("/root_archive.zip#%s", fFileName.Data());
}

TIter it(fGridResult);
Expand All @@ -142,7 +141,7 @@ TGridResult *TAliEnFind::GetGridResult(Bool_t forceNewQuery)
TString tUrl;

while (( map = dynamic_cast<TMap *>(it.Next()) ) != NULL) {

os = dynamic_cast<TObjString *>( map->GetValue("turl") );
if (!os) continue;
tUrl = os->String();
Expand All @@ -157,15 +156,30 @@ TGridResult *TAliEnFind::GetGridResult(Bool_t forceNewQuery)
reArchSubst->Substitute(tUrl, substWith, kFALSE);
os->SetString(tUrl.Data());
}
else if (fAnchor) {
if (fQuery) {
tUrl.Append("?");
tUrl.Append(fQuery);
}
else if (fAnchor.Length()) {
tUrl.Append("#");
tUrl.Append(fAnchor);
os->SetString(tUrl.Data());
}

if ( fFilter.Length() )
{
TString tmp = gSystem->BaseName(os->String());
Ssiz_t ix = tmp.Last('.');
TString file = gSystem->DirName(os->String());
file += "/";
file += tmp(0,ix);
file += ".";
file += "FILTER_";
file += fFilter;
if ( fAliphysicsVersionForFilter.Length() )
{
file += "_WITH_ALIPHYSICS_";
file += fAliphysicsVersionForFilter;
}
file += tmp(ix,tmp.Length()-ix);
os->SetString(file.Data());
}
}

if (reArchSubst) delete reArchSubst;
Expand Down Expand Up @@ -446,12 +460,13 @@ TList *TDataSetManagerAliEn::GetFindCommandsFromUri(TString &uri,
TString basePath;
TString fileName;
TString anchor;
TString query;
TString filter;
TString aliphysicsVersionForFilter;
TString treeName;
TString regexp;

// Custom search URI
if (!ParseCustomFindUri(uri, basePath, fileName, anchor, query, treeName,
if (!ParseCustomFindUri(uri, basePath, fileName, anchor, filter, aliphysicsVersionForFilter, treeName,
regexp)) {
Error("GetFindCommandsFromUri", "Malformed AliEn find command");
return NULL;
Expand All @@ -460,7 +475,7 @@ TList *TDataSetManagerAliEn::GetFindCommandsFromUri(TString &uri,
findCommands = new TList();
findCommands->SetOwner();
findCommands->Add( new TAliEnFind(basePath, fileName, anchor, kFALSE,
treeName, regexp, query) );
treeName, regexp, filter, aliphysicsVersionForFilter) );

}
else { // Data or Sim
Expand Down Expand Up @@ -609,7 +624,8 @@ TList *TDataSetManagerAliEn::GetFindCommandsFromUri(TString &uri,

//______________________________________________________________________________
Bool_t TDataSetManagerAliEn::ParseCustomFindUri(TString &uri,
TString &basePath, TString &fileName, TString &anchor, TString &query,
TString &basePath, TString &fileName, TString &anchor, TString& filter,
TString& aliphysicsVersionForFilter,
TString &treeName, TString &regexp)
{

Expand Down Expand Up @@ -654,13 +670,22 @@ Bool_t TDataSetManagerAliEn::ParseCustomFindUri(TString &uri,
anchor = reAnchor[3];
}

// Query string (optional)
TPMERegexp reQuery("(^|;)(Query=([^; ]+))(;|$)");
if (reQuery.Match(uri) != 5)
query = "";
// Filter string (optional)
TPMERegexp reFilter("(^|;)(Filter=([^; ]+))(;|$)");
if (reFilter.Match(uri) != 5)
filter = "";
else {
checkUri.ReplaceAll(reQuery[2], "");
query = reQuery[3];
checkUri.ReplaceAll(reFilter[2], "");
filter = reFilter[3];
}

// Aliphysics version for filter string (optional)
TPMERegexp reAliphysics("(^|;)(Aliphysics=([^; ]+))(;|$)");
if (reAliphysics.Match(uri) != 5)
aliphysicsVersionForFilter = "";
else {
checkUri.ReplaceAll(reAliphysics[2], "");
aliphysicsVersionForFilter = reAliphysics[3];
}

// Tree name (optional)
Expand All @@ -686,9 +711,24 @@ Bool_t TDataSetManagerAliEn::ParseCustomFindUri(TString &uri,
checkUri.ReplaceAll(" ", "");
if (!checkUri.IsNull()) {
::Error("TDataSetManagerAliEn::ParseCustomFindUri",
"There are unrecognized parameters in the dataset find string");
"There are unrecognized parameters in the dataset find string : %s",checkUri.Data());
return kFALSE;
}

if ( !aliphysicsVersionForFilter.IsNull() && filter.IsNull() )
{
::Error("TDataSetManagerAliEn::ParseCustomFindUri",
"Cannot specificy Aliphysics version without specifying a Filter name");
return kFALSE;
}

if ( aliphysicsVersionForFilter.IsNull() && !filter.IsNull() )
{
::Error("TDataSetManagerAliEn::ParseCustomFindUri",
"Cannot specificy a filter name without specifying the corresponding Aliphysics version to be used");
return kFALSE;
}

return kTRUE;
}

Expand Down Expand Up @@ -1088,7 +1128,7 @@ TFileCollection *TDataSetManagerAliEn::GetDataSet(const char *uri, const char *)

// Fill locality: initialize stager, locate URLs
if (fillLocality) {

if (fReadFromSE) {

// If we have the redirector's URL, file is staged; elsewhere, assume
Expand All @@ -1112,6 +1152,7 @@ TFileCollection *TDataSetManagerAliEn::GetDataSet(const char *uri, const char *)
// Fill locality with a redirector

fi = dynamic_cast<TFileInfo *>(newFc->GetList()->At(0));

if (fi) {
Info("GetDataSet", "Filling dataset locality information: "
"it might take time, be patient!");
Expand Down Expand Up @@ -1140,6 +1181,19 @@ TFileCollection *TDataSetManagerAliEn::GetDataSet(const char *uri, const char *)
else if (gDebug >= 1) {
Info("GetDataSet", "Lookup successful for %d file(s)", rv);
}
if ( TString(fi->GetCurrentUrl()->GetUrl()).Contains("FILTER_") )
{
TIter next(newFc->GetList());
TFileInfo* lfi;
FileStat_t stat;

while ( ( lfi = static_cast<TFileInfo*>(next()) ) )
{
gSystem->GetPathInfo(lfi->GetCurrentUrl()->GetUrl(),stat);

lfi->SetSize(stat.fSize);
}
}
}
} // end if fi
}
Expand Down