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.
}
+void AliNanoAODHeader::Clear(Option_t * /*opt*/) {
+ // empty storage
+ fVars.clear();
+ fNVars = 0;
+}
{
public:
using AliVHeader::ClassName;
- AliNanoAODHeader(){;}
+ AliNanoAODHeader() {;}
AliNanoAODHeader(Int_t size){ AllocateInternalStorage(size);}
virtual ~AliNanoAODHeader(){;}
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);}
{
// default ctor
- std::cout << "Default constructor" << std::endl;
+
}
AliNanoAODTrackMapping::AliNanoAODTrackMapping(const char * mappingString) :
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();