example macros to run on proof
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnTarget.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 ////////////////////////////////////////////////////////////////////////////////
17 //
18 //  Base class used wherever it is needed to check the class type of
19 //  an object w.r. to the RSN framework analysis (daughter, mother, event) 
20 //  which could be used for cut checking or value computing.
21 //  Since most of these operation are implemented into classes that
22 //  operate on any of such objects, then this class helps in making sure
23 //  that the object being processed corresponds to what is expected.
24 //  It also contains three pointers to which any passed object is casted
25 //  in order to have a quick reference to any allowed object type from
26 //  an appropriate pointer, which is propagated to all inheriting classes.
27 //
28 //  authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
29 //           M. Vala (martin.vala@cern.ch)
30 //
31 ////////////////////////////////////////////////////////////////////////////////
32
33 #include "AliLog.h"
34
35 #include "AliRsnDaughter.h"
36 #include "AliRsnMother.h"
37
38 #include "AliRsnTarget.h"
39
40 ClassImp(AliRsnTarget)
41
42 //_____________________________________________________________________________
43 Bool_t AliRsnTarget::TargetOK(TObject *object)
44 {
45 //
46 // This method doew the following things:
47 // 1) check if the object class matches the required target type
48 // 2) if (1) is successful, set the built-in pointer data member
49 //    in order to point to it, after being casted accordingly
50 // 3) if the target is a daughter or a mother, adjust the pointer 
51 //    to reference event accordingly
52 //
53
54    // reset local pointers and then initialize
55    // only the right one by static cast, if found
56    fDaughter = 0x0;
57    fMother   = 0x0;
58    fEvent    = 0x0;
59
60    // fails by default if a NULL pointer is passed
61    if (!object) {
62       AliError("Passed a NULL object");
63       return kFALSE;
64    }
65    
66    // checks matching between argument type and expected object type
67    // the passed object is also casted into the appropriate pointer
68    // when a daughter or mother is passed and the target type expects
69    // and event, the check is yes successful and the owner event is used
70    if (object->IsA() == AliRsnDaughter::Class() && (fTargetType == kDaughter || fTargetType == kEvent)) {
71       fDaughter = static_cast<AliRsnDaughter*>(object);
72       fEvent = fDaughter->GetOwnerEvent();
73       return kTRUE;
74    }
75    else if (object->IsA() == AliRsnMother::Class() && (fTargetType == kMother || fTargetType == kEvent)) {
76       fMother = static_cast<AliRsnMother*>(object);
77       fEvent = fMother->GetRefEvent();
78       return kTRUE;
79    }
80    else if (object->IsA() == AliRsnEvent::Class() && fTargetType == kEvent) {
81       fEvent = static_cast<AliRsnEvent*>(object);
82       return kTRUE;
83    }
84    else {
85       if (object) {
86          AliError(Form("[%s] Target mismatch: expected '%s', passed '%s'", GetName(), GetTargetTypeName(), object->ClassName()));
87       } else {
88          AliError(Form("[%s] Target mismatch: expected '%s', passed 'NULL'", GetName(), GetTargetTypeName()));
89       }
90       return kFALSE;
91    }
92 }
93
94 //______________________________________________________________________________
95 Char_t AliRsnTarget::GetTargetTypeChar() const
96 {
97 //
98 // Returns a single character identifying the cut target type.
99 //
100
101    switch (fTargetType) {
102       case kDaughter: return 'D';
103       case kMother: return 'M';
104       case kEvent: return 'E';
105       default: return 'X';
106    }
107 }
108
109 //______________________________________________________________________________
110 const char* AliRsnTarget::GetTargetTypeName() const
111 {
112 //
113 // Returns a string with the name of the cut target type-
114 //
115
116    switch (fTargetType) {
117       case kDaughter: return "Daughter";
118       case kMother: return "Mother";
119       case kEvent: return "Event";
120       default: return "Undefined";
121    }
122 }