ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */
// Author: Andrei Gheata, 28/07/2009

#include "AliTrigEvent.h"

#include <TClass.h>
#include <TBits.h>
#include <TROOT.h>

ClassImp(AliTrigEvent)

//==============================================================================
//   AliTrigEvent - Base class for generic information exchanged by a trigger
//                  device. Trigger inputs and outputs are represented and
//                  handled via AliTrigEvent objects. Trigger events are typically
//                  wrappers for the information exchanged on a single I/O slot
//                  or a group of correlated inputs.
//==============================================================================

//______________________________________________________________________________
AliTrigEvent &AliTrigEvent::operator=(const AliTrigEvent &other)
{
// Assignment operator.
   if (&other == this) return *this;
   TNamed::operator=(other);
   return *this;
}
//______________________________________________________________________________
void AliTrigEvent::Activate(Bool_t flag)
{
// Activate/deactivate this signal.
  TObject::SetBit(kActive, flag);
}                        

ClassImp(AliTrigEventWithMask)

//______________________________________________________________________________
Bool_t AliTrigEventWithMask::ImportData(AliTrigEvent *source)
{
// Import data from likewise signal.
  AliTrigEventWithMask *src = (AliTrigEventWithMask *)source;
  SetValue(src->GetValue());
  return kTRUE;
}

//______________________________________________________________________________
void AliTrigEventWithMask::SetValue(TBits *value)
{
// Set the mask value.
  *fValue = *value;
}

//______________________________________________________________________________
AliTrigEventWithMask::AliTrigEventWithMask(const AliTrigEventWithMask &other)
                       :AliTrigEvent(other),
                        fValue(NULL)
{
// Copy constructor.   
  *fValue = *other.fValue;
}

//______________________________________________________________________________
AliTrigEventWithMask &AliTrigEventWithMask::operator=(const AliTrigEventWithMask &other)
{
// Assignment operator.
   if (&other == this) return *this;
   AliTrigEvent::operator=(other);
   *fValue = *other.fValue;
   return *this;
}

ClassImp(AliTrigEventWithObject)

//______________________________________________________________________________
AliTrigEventWithObject::AliTrigEventWithObject(const char *name,const char *classname)
                       :AliTrigEvent(name),
                        fValue(0),
                        fType("")
{
// Normal constructor where a class name is provided for the embedded object.
// If the event is created in this way one will only be able to connect to 
// events embedding the same object type (via connectors). If empty string the type
// will be set upon the first call of SetValue.
  SetType(classname);
}   

//______________________________________________________________________________
AliTrigEventWithObject::AliTrigEventWithObject(const AliTrigEventWithObject &other)
                       :AliTrigEvent(other),
                        fValue(NULL),
                        fType(other.fType)
{
// Copy constructor.   
  TClass* pClass=TClass::GetClass(fType);
  if (!pClass) return;
  fValue = (TObject*)pClass->New();
  fValue->Copy(*other.fValue);
}

//______________________________________________________________________________
AliTrigEventWithObject &AliTrigEventWithObject::operator=(const AliTrigEventWithObject &other)
{
// Assignment operator.
  if (&other == this) return *this;
  AliTrigEvent::operator=(other);
  fType = other.fType;
  TClass* pClass=TClass::GetClass(fType);
  if (!pClass) return *this;
  fValue = (TObject*)pClass->New();
  fValue->Copy(*other.fValue);
  return *this;
}

//______________________________________________________________________________
Bool_t AliTrigEventWithObject::ImportData(AliTrigEvent *source)
{
// Import data from likewise signal.
  AliTrigEventWithObject *src = (AliTrigEventWithObject *)source;
  Bool_t done = SetValue(src->GetValue());
  if (!done) Error("ImportData", "Cannot import object <%s> of class <%s> since event type was set to: <%s>",
                   src->GetValue()->GetName(), src->GetValue()->ClassName(), fType.Data());
  return done;
}

//______________________________________________________________________________
Bool_t AliTrigEventWithObject::SetType(const char *classname)
{
// Set the type of this event. Can be done only once.
  if (!strlen(classname)) return kFALSE;
  if (!fType.IsNull()) {
    Error("SetType", "Type for this trigger event already set to: %s", fType.Data());
    return kFALSE;
  }  
  TClass *type = gROOT->GetClass(classname);
  if (!type) {
    Error("SetType", "Unknown class %s", classname);
    return kFALSE;
  }
  fType = classname;
  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliTrigEventWithObject::SetValue(TObject *value)
{
// Set the current event content. Checks consistency with event type.
  if (!value) {
    // Reset current value.
    fValue = NULL;
    return kTRUE;
  }
  // Set the type if used for the first time.
  if (!fType) fType = value->ClassName();
  fValue = value;
  return kTRUE;
}  
 AliTrigEvent.cxx:1
 AliTrigEvent.cxx:2
 AliTrigEvent.cxx:3
 AliTrigEvent.cxx:4
 AliTrigEvent.cxx:5
 AliTrigEvent.cxx:6
 AliTrigEvent.cxx:7
 AliTrigEvent.cxx:8
 AliTrigEvent.cxx:9
 AliTrigEvent.cxx:10
 AliTrigEvent.cxx:11
 AliTrigEvent.cxx:12
 AliTrigEvent.cxx:13
 AliTrigEvent.cxx:14
 AliTrigEvent.cxx:15
 AliTrigEvent.cxx:16
 AliTrigEvent.cxx:17
 AliTrigEvent.cxx:18
 AliTrigEvent.cxx:19
 AliTrigEvent.cxx:20
 AliTrigEvent.cxx:21
 AliTrigEvent.cxx:22
 AliTrigEvent.cxx:23
 AliTrigEvent.cxx:24
 AliTrigEvent.cxx:25
 AliTrigEvent.cxx:26
 AliTrigEvent.cxx:27
 AliTrigEvent.cxx:28
 AliTrigEvent.cxx:29
 AliTrigEvent.cxx:30
 AliTrigEvent.cxx:31
 AliTrigEvent.cxx:32
 AliTrigEvent.cxx:33
 AliTrigEvent.cxx:34
 AliTrigEvent.cxx:35
 AliTrigEvent.cxx:36
 AliTrigEvent.cxx:37
 AliTrigEvent.cxx:38
 AliTrigEvent.cxx:39
 AliTrigEvent.cxx:40
 AliTrigEvent.cxx:41
 AliTrigEvent.cxx:42
 AliTrigEvent.cxx:43
 AliTrigEvent.cxx:44
 AliTrigEvent.cxx:45
 AliTrigEvent.cxx:46
 AliTrigEvent.cxx:47
 AliTrigEvent.cxx:48
 AliTrigEvent.cxx:49
 AliTrigEvent.cxx:50
 AliTrigEvent.cxx:51
 AliTrigEvent.cxx:52
 AliTrigEvent.cxx:53
 AliTrigEvent.cxx:54
 AliTrigEvent.cxx:55
 AliTrigEvent.cxx:56
 AliTrigEvent.cxx:57
 AliTrigEvent.cxx:58
 AliTrigEvent.cxx:59
 AliTrigEvent.cxx:60
 AliTrigEvent.cxx:61
 AliTrigEvent.cxx:62
 AliTrigEvent.cxx:63
 AliTrigEvent.cxx:64
 AliTrigEvent.cxx:65
 AliTrigEvent.cxx:66
 AliTrigEvent.cxx:67
 AliTrigEvent.cxx:68
 AliTrigEvent.cxx:69
 AliTrigEvent.cxx:70
 AliTrigEvent.cxx:71
 AliTrigEvent.cxx:72
 AliTrigEvent.cxx:73
 AliTrigEvent.cxx:74
 AliTrigEvent.cxx:75
 AliTrigEvent.cxx:76
 AliTrigEvent.cxx:77
 AliTrigEvent.cxx:78
 AliTrigEvent.cxx:79
 AliTrigEvent.cxx:80
 AliTrigEvent.cxx:81
 AliTrigEvent.cxx:82
 AliTrigEvent.cxx:83
 AliTrigEvent.cxx:84
 AliTrigEvent.cxx:85
 AliTrigEvent.cxx:86
 AliTrigEvent.cxx:87
 AliTrigEvent.cxx:88
 AliTrigEvent.cxx:89
 AliTrigEvent.cxx:90
 AliTrigEvent.cxx:91
 AliTrigEvent.cxx:92
 AliTrigEvent.cxx:93
 AliTrigEvent.cxx:94
 AliTrigEvent.cxx:95
 AliTrigEvent.cxx:96
 AliTrigEvent.cxx:97
 AliTrigEvent.cxx:98
 AliTrigEvent.cxx:99
 AliTrigEvent.cxx:100
 AliTrigEvent.cxx:101
 AliTrigEvent.cxx:102
 AliTrigEvent.cxx:103
 AliTrigEvent.cxx:104
 AliTrigEvent.cxx:105
 AliTrigEvent.cxx:106
 AliTrigEvent.cxx:107
 AliTrigEvent.cxx:108
 AliTrigEvent.cxx:109
 AliTrigEvent.cxx:110
 AliTrigEvent.cxx:111
 AliTrigEvent.cxx:112
 AliTrigEvent.cxx:113
 AliTrigEvent.cxx:114
 AliTrigEvent.cxx:115
 AliTrigEvent.cxx:116
 AliTrigEvent.cxx:117
 AliTrigEvent.cxx:118
 AliTrigEvent.cxx:119
 AliTrigEvent.cxx:120
 AliTrigEvent.cxx:121
 AliTrigEvent.cxx:122
 AliTrigEvent.cxx:123
 AliTrigEvent.cxx:124
 AliTrigEvent.cxx:125
 AliTrigEvent.cxx:126
 AliTrigEvent.cxx:127
 AliTrigEvent.cxx:128
 AliTrigEvent.cxx:129
 AliTrigEvent.cxx:130
 AliTrigEvent.cxx:131
 AliTrigEvent.cxx:132
 AliTrigEvent.cxx:133
 AliTrigEvent.cxx:134
 AliTrigEvent.cxx:135
 AliTrigEvent.cxx:136
 AliTrigEvent.cxx:137
 AliTrigEvent.cxx:138
 AliTrigEvent.cxx:139
 AliTrigEvent.cxx:140
 AliTrigEvent.cxx:141
 AliTrigEvent.cxx:142
 AliTrigEvent.cxx:143
 AliTrigEvent.cxx:144
 AliTrigEvent.cxx:145
 AliTrigEvent.cxx:146
 AliTrigEvent.cxx:147
 AliTrigEvent.cxx:148
 AliTrigEvent.cxx:149
 AliTrigEvent.cxx:150
 AliTrigEvent.cxx:151
 AliTrigEvent.cxx:152
 AliTrigEvent.cxx:153
 AliTrigEvent.cxx:154
 AliTrigEvent.cxx:155
 AliTrigEvent.cxx:156
 AliTrigEvent.cxx:157
 AliTrigEvent.cxx:158
 AliTrigEvent.cxx:159
 AliTrigEvent.cxx:160
 AliTrigEvent.cxx:161
 AliTrigEvent.cxx:162
 AliTrigEvent.cxx:163
 AliTrigEvent.cxx:164
 AliTrigEvent.cxx:165
 AliTrigEvent.cxx:166
 AliTrigEvent.cxx:167
 AliTrigEvent.cxx:168
 AliTrigEvent.cxx:169
 AliTrigEvent.cxx:170
 AliTrigEvent.cxx:171