]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Temporary patch for Nano AOD tests in AliAODEvent
authormfloris <michele.floris@cern.ch>
Mon, 17 Mar 2014 10:03:40 +0000 (11:03 +0100)
committermfloris <michele.floris@cern.ch>
Mon, 17 Mar 2014 10:10:12 +0000 (11:10 +0100)
We are storing an AliNanoAODHeader in the Nano AODs, but all other AOD
classes still assume an AliAODHeader.  Calling methods from
AliAODHeader on an AliNanoAodHeader produces an undefined behavior. In
particular, AliAODEvent::ClearStd was calling fHeader->Clear(); Added
a protection to cast the header to AliVHeader in case it is not a
standard header.
If the Nano AOD solution is accepted, fHeader will be of AliVHEader.

PWG/DevNanoAOD/AliNanoAODHeader.cxx
PWG/DevNanoAOD/AliNanoAODHeader.h
PWG/DevNanoAOD/AliNanoAODTrackMapping.cxx
STEER/AOD/AliAODEvent.cxx

index df1c12daef52dac3c73d0c177833546218cc40c4..4c1cbddcfb8582d361646245cb32a169f3f3d4c5 100644 (file)
@@ -12,3 +12,8 @@ AliNanoAODHeader& AliNanoAODHeader::operator=(const AliNanoAODHeader& evt) {
 }
 
 
+void  AliNanoAODHeader::Clear(Option_t * /*opt*/) {
+  // empty storage
+  fVars.clear();
+  fNVars = 0;
+}
index 79d99e25ed2de31a856d2e2a71e11d49c79f4929..869725f818914fdefe5183d7d68effe618fff03a 100644 (file)
@@ -10,7 +10,7 @@ class AliNanoAODHeader : public AliVHeader, public AliNanoAODStorage
 {
 public:
   using AliVHeader::ClassName;
-  AliNanoAODHeader(){;}
+  AliNanoAODHeader()  {;}
   AliNanoAODHeader(Int_t size){ AllocateInternalStorage(size);}
   virtual ~AliNanoAODHeader(){;}
 
@@ -26,6 +26,9 @@ public:
   virtual UChar_t   GetTriggerCluster()     const { AliError("Not implemented");return 0;}
   virtual UInt_t    GetEventType()          const { AliError("Not implemented");return 0;}
   virtual void Print(Option_t* /*option = ""*/) const  {Printf("I'm a special header!");}
+  virtual void Clear(Option_t * opt) ;
+
 
   Double_t  GetMagneticField()      const { return GetVar(1); }
   Double_t  GetCentrality (const char *estimator = "V0M") { return GetVar(0);}
index d882b9ceac5cbafdaefa11cf40646c08285b31e2..ca08e8219a7c616228c9b2ef881b92139e035adb 100644 (file)
@@ -50,7 +50,7 @@ AliNanoAODTrackMapping::AliNanoAODTrackMapping() :
 
 { 
   // default ctor
-  std::cout << "Default constructor" << std::endl;
+
 }
 
 AliNanoAODTrackMapping::AliNanoAODTrackMapping(const char * mappingString) :
index b54617dd1ce1d344e34a95dcb76e67e8d83c9c48..c785a25919a5638348735cc5ca5e00a8c54760ae 100644 (file)
@@ -513,8 +513,17 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
 void AliAODEvent::ClearStd()
 {
   // clears the standard arrays
-  if (fHeader)
-    fHeader        ->Clear();
+  if (fHeader){
+    // FIXME: this if-else patch was introduced by Michele Floris on 17/03/14 to test nano AOD. To be removed.
+    if(fHeader->InheritsFrom("AliAODHeader")){
+      fHeader        ->Clear();
+    }
+    else {
+      AliVHeader * head = 0;
+      head = dynamic_cast<AliVHeader*>(fHeader);
+      if(head) head->Clear();
+    }
+  }
   fTracksConnected = kFALSE;
   if (fTracks)
     fTracks        ->Delete();