* AliEveEventManager
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 22 Nov 2009 12:51:34 +0000 (12:51 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 22 Nov 2009 12:51:34 +0000 (12:51 +0000)
  Add support for automatically finding appropriate raw-data file when
  connecting to a centrally reconstructed run in alien.
  This is enabled by calling a static function:
    AliEveEventManager::SearchRawForCentralReconstruction();

* macros/visscan_raw_raw.C
  New wrapper macro -- enable SearchRawForCentralReconstruction().

One can now do:
  alieve visscan_raw_raw.C'("alien:///alice/data/2009/LHC09c/000101134/ESDs/pass1/09000101134018.10")'
and both reco and raw will be available.

EVE/EveBase/AliEveEventManager.cxx
EVE/EveBase/AliEveEventManager.h
EVE/macros/visscan_raw_raw.C [new file with mode: 0644]

index 9d26760..d7e2453 100644 (file)
@@ -88,9 +88,11 @@ TString  AliEveEventManager::fgCdbUri;
 
 TList*   AliEveEventManager::fgAODfriends = 0;
 
-Bool_t        AliEveEventManager::fgGRPLoaded    = kFALSE;
-AliMagF*      AliEveEventManager::fgMagField     = 0;
-Bool_t        AliEveEventManager::fgUniformField = kFALSE;
+Bool_t   AliEveEventManager::fgRawFromStandardLoc = kFALSE;
+
+Bool_t   AliEveEventManager::fgGRPLoaded    = kFALSE;
+AliMagF* AliEveEventManager::fgMagField     = 0;
+Bool_t   AliEveEventManager::fgUniformField = kFALSE;
 
 AliEveEventManager* AliEveEventManager::fgMaster  = 0;
 AliEveEventManager* AliEveEventManager::fgCurrent = 0;
@@ -252,6 +254,15 @@ void AliEveEventManager::SetAssertElements(Bool_t assertRunloader, Bool_t assert
   fgAssertRaw = assertRaw;
 }
 
+void AliEveEventManager::SearchRawForCentralReconstruction()
+{
+  // Enable searching of raw data in standard location. The path passed to
+  // Open() is expected to point to a centrally reconstructed run, e.g.:
+  // "alien:///alice/data/2009/LHC09c/000101134/ESDs/pass1/09000101134018.10".
+
+  fgRawFromStandardLoc = kTRUE;
+}
+
 /******************************************************************************/
 
 void AliEveEventManager::Open()
@@ -471,7 +482,31 @@ void AliEveEventManager::Open()
 
   // Open raw-data file
 
-  TString rawPath(Form("%s/%s", fPath.Data(), fgRawFileName.Data()));
+  TString rawPath;
+  if (fgRawFromStandardLoc)
+  {
+    if (!fPath.BeginsWith("alien:"))
+      throw kEH + "Standard raw search requested, but the directory is not in AliEn.";
+    if (!fPath.Contains("/ESDs/"))
+      throw kEH + "Standard raw search requested, but does not contain 'ESDs' directory.";
+
+    TPMERegexp chunk("/([\\d\\.])+/?$");
+    Int_t nm = chunk.Match(fPath);
+    if (nm != 2)
+      throw kEH + "Standard raw search requested, but the path does not end with chunk-id directory.";
+
+    TPMERegexp esdstrip("/ESDs/.*");
+    rawPath = fPath;
+    esdstrip.Substitute(rawPath, "/raw/");
+    rawPath += chunk[0];
+    rawPath += ".root";
+
+    Info(kEH, "Standard raw search requested, using the following path:\n  %s\n", rawPath.Data());
+  }
+  else
+  {
+    rawPath.Form("%s/%s", fPath.Data(), fgRawFileName.Data());
+  }
   // If i use open directly, raw-reader reports an error but i have
   // no way to detect it.
   // Is this (AccessPathName check) ok for xrootd / alien? Yes, not for http.
index 81b47ff..e248e5c 100644 (file)
@@ -50,7 +50,7 @@ public:
   static void SetCdbUri     (const TString& cdb);
   static void SetAssertElements(Bool_t assertRunloader, Bool_t assertEsd,
                                Bool_t assertAod, Bool_t assertRaw);
-
+  static void SearchRawForCentralReconstruction();
 
   AliEveEventManager(const TString& name="Event");
   AliEveEventManager(const TString& name, const TString& path, Int_t ev=0);
@@ -168,6 +168,8 @@ protected:
 
   static TList   *fgAODfriends;         // Global list of AOD friend names to be attached during opening of the event-data (empty by default).
 
+  static Bool_t   fgRawFromStandardLoc; // Global flag to enable looking for raw data in ../../../raw/, as it is stored for central reco.
+
   static Bool_t        fgGRPLoaded;     // Global run parameters loaded?
   static AliMagF      *fgMagField;      // Global pointer to magnetic field.
   static Bool_t        fgUniformField;  // Track with uniform field.
diff --git a/EVE/macros/visscan_raw_raw.C b/EVE/macros/visscan_raw_raw.C
new file mode 100644 (file)
index 0000000..6401ba5
--- /dev/null
@@ -0,0 +1,6 @@
+void visscan_raw_raw(const TString& path = ".", Bool_t show_extra_geo = kFALSE)
+{
+  AliEveEventManager::SearchRawForCentralReconstruction();
+  gROOT->ProcessLine(TString::Format(".x visscan_init.C(\"raw://\", \"%s\", %d)",
+                                    path.Data(), show_extra_geo));
+}