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 df1c12d..4c1cbdd 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 79d99e2..869725f 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 d882b9c..ca08e82 100644 (file)
@@ -50,7 +50,7 @@ AliNanoAODTrackMapping::AliNanoAODTrackMapping() :
 
 { 
   // default ctor
-  std::cout << "Default constructor" << std::endl;
+
 }
 
 AliNanoAODTrackMapping::AliNanoAODTrackMapping(const char * mappingString) :
index b54617d..c785a25 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();