Adding a reminder for coders
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskFilterFriend.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2009, 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 /*$Id$*/
17
18 /////////////////////////////////////////////////////////////
19 //
20 //   Test task
21 //
22 // /////////////////////////////////////////////////////////////
23
24 #include <TTree.h>
25 #include <TChain.h>
26
27 #include "AliLog.h"
28 #include "AliESDInputHandler.h"
29 #include "AliESDtrack.h"
30 #include "AliESDEvent.h"
31 #include "AliESDfriend.h"
32 #include "AliAnalysisTaskFilter.h"
33 #include "AliAnalysisManager.h"
34 #include "AliAnalysisTaskFilterFriend.h"
35
36
37 ClassImp(AliAnalysisTaskFilterFriend)
38
39
40 //________________________________________________________________________
41 AliAnalysisTaskFilterFriend::AliAnalysisTaskFilterFriend():
42 AliAnalysisTaskFilter(),
43 fESDInput(0),
44 fESDfriendInput(0)
45 {
46         // Constructor
47         
48         // Define input and output slots here
49         // Input slot #0 works with a TChain
50         DefineInput(0, TChain::Class());
51         // Output slot #0 writes into a TTree
52         //DefineOutput(0,TTree::Class());  
53 }
54
55 //________________________________________________________________________
56 AliAnalysisTaskFilterFriend::AliAnalysisTaskFilterFriend(const char* name):
57 AliAnalysisTaskFilter(name),
58 fESDInput(0),
59 fESDfriendInput(0)
60 {
61         // Constructor
62         
63         // Define input and output slots here
64         // Input slot #0 works with a TChain
65         DefineInput(0, TChain::Class());
66         // Output slot #0 writes into a TTree
67         //DefineOutput(0,TTree::Class());  
68 }
69
70 //________________________________________________________________________
71 AliAnalysisTaskFilterFriend::~AliAnalysisTaskFilterFriend()
72 {
73
74         // dtor
75
76 }  
77
78 //________________________________________________________________________
79 void AliAnalysisTaskFilterFriend::Init()
80 {
81         // Initialization
82         
83         return;
84 }
85
86 //________________________________________________________________________
87 void AliAnalysisTaskFilterFriend::UserCreateOutputObjects()
88 {
89         //
90         // Create the output container
91         //
92         
93         return;
94 }
95
96 //________________________________________________________________________
97 void AliAnalysisTaskFilterFriend::UserExec(Option_t */*option*/)
98 {
99
100         //
101         // Filtering
102         //
103
104         fESDInput = dynamic_cast<AliESDEvent*>(InputEvent()); // get the input ESD
105         fESDfriendInput = InputFriend(); // get the input friend
106         if(!fESDInput) {
107                 printf("AliAnalysisTaskFilterFriend::Exec(): no ESD \n");
108                 return;
109         } 
110         if(!fESDfriendInput) {
111                 printf("AliAnalysisTaskFilterFriend::Exec(): no ESDfriend \n");
112                 return;
113         } 
114         // attach ESDfriend
115         
116         AliESDfriend* esdFriendOutput = (AliESDfriend*)ESDfriend();  
117         AliDebug(3,Form("Number of ESD tracks in input = %d ",fESDInput->GetNumberOfTracks()));
118         AliDebug(3,Form("Number of tracks in input friends = %d ",fESDfriendInput->GetNumberOfTracks()));
119         AliDebug(3,Form("Number of tracks in output friendsNew before filtering = %d ",esdFriendOutput->GetNumberOfTracks()));
120         
121         for (Int_t i = 0; i< fESDInput->GetNumberOfTracks(); i++){
122                 if (i%2 ==0){
123                         // keep friend
124                         AliDebug(2,Form("Keeping %d-th track",i));
125                         AliESDfriendTrack* tOld = (AliESDfriendTrack*)fESDfriendInput->GetTrack(i);
126                         AliDebug(3,Form("1P of the %d-th track = %f",i,tOld->Get1P()));
127                         AliDebug(3,Form("MaxITScluster %d-th track = %d",i,tOld->GetMaxITScluster()));
128                         //      tOld->Dump();
129                         AddFriendTrackAt(tOld,i);
130                 
131                 }
132                 else {
133                         //discard friend 
134                         SkipFriendTrackAt(i);
135                 }
136                 
137         } 
138         AliDebug(2,Form("Number of tracks in output friendsNew after filtering with GetEntries() = %d ",esdFriendOutput->GetEntriesInTracks()));
139         return;
140 }
141
142 //________________________________________________________________________
143 void AliAnalysisTaskFilterFriend::Terminate(Option_t */*option*/)
144 {
145         // Terminate analysis
146         //
147         AliDebug(2,"AliAnalysisTaskFilterFriend: Terminate() \n");
148         
149         return;
150 }
151 //________________________________________________________________________
152 Bool_t AliAnalysisTaskFilterFriend::UserSelectESDfriendForCurrentEvent()
153 {
154         // 
155         // Selecting or discarding current event
156         //
157
158         
159         fESDInput = dynamic_cast<AliESDEvent*>(InputEvent()); // get the input ESD
160         if (!fESDInput){
161                 AliError("No ESD Input, discarding event...");
162                 return kFALSE;
163         }
164         if ((fESDInput->GetNumberOfTracks())%2 == 0) {
165                 AliDebug(2,"******************Selecting event");
166                 return kTRUE;
167         }
168         AliDebug(2,"*******************Discarding event");      
169         return kFALSE;
170 }