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.                  *
 **************************************************************************/

//_________________________________________________________________________
// Class for reading data (AODs) in order to do prompt gamma
//  or other particle identification and correlations.
// This part is commented: Mixing analysis can be done, input AOD with events
// is opened in the AliCaloTrackReader::Init()
// 
//
//*-- Author: Gustavo Conesa (LNF-INFN) 
//////////////////////////////////////////////////////////////////////////////

//---- ANALYSIS system ----
#include "AliCaloTrackAODReader.h" 
#include "AliAODInputHandler.h"
#include "AliMultiEventInputHandler.h"
#include "AliAnalysisManager.h"
#include "AliMixedEvent.h"
#include "AliAODEvent.h"
#include "AliLog.h"

ClassImp(AliCaloTrackAODReader)

//____________________________________________________________________________
AliCaloTrackAODReader::AliCaloTrackAODReader() : 
  AliCaloTrackReader(),   fOrgInputEvent(0x0),
  fSelectHybridTracks(0), fSelectPrimaryTracks(0),
  fTrackFilterMask(0),    fTrackFilterMaskComplementary(0),
  fSelectFractionTPCSharedClusters(0), fCutTPCSharedClustersFraction(0)
{
  //Default Ctor
  
  //Initialize parameters
  fDataType = kAOD;
  
  fReadStack          = kTRUE;
  fReadAODMCParticles = kFALSE;
 
  fTrackFilterMask = 128;
  fTrackFilterMaskComplementary = 0; // in case of hybrid tracks, without using the standard method
  
  fSelectFractionTPCSharedClusters = kTRUE;
  fCutTPCSharedClustersFraction    = 0.4;
  
}

//_________________________________________________________
Bool_t AliCaloTrackAODReader::CheckForPrimaryVertex() const
{
  //Check if the vertex was well reconstructed, copy of conversion group
  
  AliAODEvent * aodevent = dynamic_cast<AliAODEvent*>(fInputEvent);
  if(!aodevent) return kFALSE;
  
  if (aodevent->GetPrimaryVertex() != NULL)
  {
    if(aodevent->GetPrimaryVertex()->GetNContributors() > 0)
    {
      return kTRUE;
    }
  }
  
  if(aodevent->GetPrimaryVertexSPD() != NULL)
  {
    if(aodevent->GetPrimaryVertexSPD()->GetNContributors() > 0)
    {
      return kTRUE;
    }
    else
    {
      AliWarning(Form("Number of contributors from bad vertex type:: %s",
                      aodevent->GetPrimaryVertex()->GetName()));
      return kFALSE;
    }
  }
  
  return kFALSE;
  
}

//____________________________________________________________
TClonesArray* AliCaloTrackAODReader::GetAODMCParticles() const
{
  //Return list of particles in AOD. Do it for the corresponding input event.
  
  TClonesArray * particles = NULL ;

  AliAODEvent * aod = dynamic_cast<AliAODEvent*> (fInputEvent) ;
  if(aod) particles = (TClonesArray*) aod->FindListObject("mcparticles");
  
  return particles ;
}

//___________________________________________________________
AliAODMCHeader* AliCaloTrackAODReader::GetAODMCHeader() const
{
  //Return MC header in AOD. Do it for the corresponding input event.
  
  AliAODMCHeader *mch = NULL;
  
  AliAODEvent * aod = dynamic_cast<AliAODEvent*> (fInputEvent);
  if(aod) mch = dynamic_cast<AliAODMCHeader*>(aod->FindListObject("mcHeader"));
  
  return mch;
}


//_____________________________________________________________________________
Bool_t AliCaloTrackAODReader::SelectTrack(AliVTrack* track, Double_t pTrack[3])
{
  // Select AOD track using the AOD filter bits
  
  AliAODTrack *aodtrack = dynamic_cast <AliAODTrack*>(track);
  
  if(!aodtrack) return kFALSE;
  
  AliDebug(2,Form("AOD track type: %d (primary %d), hybrid? %d",
                  aodtrack->GetType(),AliAODTrack::kPrimary,
                  aodtrack->IsHybridGlobalConstrainedGlobal()));
  
  // Hybrid?
  if (fSelectHybridTracks && fTrackFilterMaskComplementary == 0)
  {
    if (!aodtrack->IsHybridGlobalConstrainedGlobal()) return kFALSE ;
  }
  else // Filter Bit?
  {
    Bool_t accept = aodtrack->TestFilterBit(fTrackFilterMask);
    
    if(!fSelectHybridTracks && !accept) return kFALSE ;
    
    if(fSelectHybridTracks) // Second filter bit for hybrids?
    {
      Bool_t acceptcomplement = aodtrack->TestFilterBit(fTrackFilterMaskComplementary);
      if (!accept && !acceptcomplement) return kFALSE ;
    }
  }
  
  //
  if(fSelectSPDHitTracks)
  { // Not much sense to use with TPC only or Hybrid tracks
    if(!aodtrack->HasPointOnITSLayer(0) && !aodtrack->HasPointOnITSLayer(1)) return kFALSE ;
  }
  
  //
  if ( fSelectFractionTPCSharedClusters )
  {
    Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls());
    if (frac > fCutTPCSharedClustersFraction)
    {
      AliDebug(2,Form("\t Reject track, shared cluster fraction %f > %f",frac, fCutTPCSharedClustersFraction));
      return kFALSE ;
    }
  }
  
  //
  if ( fSelectPrimaryTracks )
  {
    if ( aodtrack->GetType()!= AliAODTrack::kPrimary )
    {
      AliDebug(2,"\t Remove not primary track");
      return kFALSE ;
    }
  }
  
  AliDebug(2,"\t accepted track!");
  
  track->GetPxPyPz(pTrack) ;
  
  return kTRUE;
  
}


//_________________________________________________________________
void AliCaloTrackAODReader::SetInputOutputMCEvent(AliVEvent* input,
                                                  AliAODEvent* aod,
                                                  AliMCEvent* mc)
{
  // Connect the data pointers
  // If input is AOD, do analysis with input, if not, do analysis with the output aod.
  
  //printf("AODInputHandler %p, MergeEvents %d \n",aodIH, aodIH->GetMergeEvents());
  
  Bool_t tesd = kFALSE ; 
  Bool_t taod = kTRUE ; 
  if ( strcmp(input->GetName(), "AliMixedEvent") == 0 ) 
  {
    AliMultiEventInputHandler* multiEH = dynamic_cast<AliMultiEventInputHandler*>((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
    if(multiEH){
      if (multiEH->GetFormat() == 0 ) 
      {
        tesd = kTRUE ; 
      } else if (multiEH->GetFormat() == 1) 
      {
        taod = kTRUE ; 
      }
    }
    else
    {
      AliFatal("MultiEventHandler is NULL");
      return;
    }
  }
  if        (strcmp(input->GetName(),"AliESDEvent") == 0) 
  {
    tesd = kTRUE ; 
  } else if (strcmp(input->GetName(),"AliAODEvent") == 0) 
  {
    taod = kTRUE ; 
  }
  
  
  if(tesd)   
  {
    SetInputEvent(aod);
    SetOutputEvent(aod);
    fOrgInputEvent = input;
  }
  else if(taod)
  {
    AliAODInputHandler* aodIH = dynamic_cast<AliAODInputHandler*>((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
    
	  if (aodIH && aodIH->GetMergeEvents()) 
    {
		  //Merged events, use output AOD.
		  SetInputEvent(aod);
		  SetOutputEvent(aod);
      fOrgInputEvent = input;
	  }
	  else
    {
		  SetInputEvent(input);
		  SetOutputEvent(aod);
	  }
  }
  else
  { 
    AliFatal(Form("STOP : Wrong data format: %s",input->GetName()));
  }
  
  SetMC(mc);
  
}

 AliCaloTrackAODReader.cxx:1
 AliCaloTrackAODReader.cxx:2
 AliCaloTrackAODReader.cxx:3
 AliCaloTrackAODReader.cxx:4
 AliCaloTrackAODReader.cxx:5
 AliCaloTrackAODReader.cxx:6
 AliCaloTrackAODReader.cxx:7
 AliCaloTrackAODReader.cxx:8
 AliCaloTrackAODReader.cxx:9
 AliCaloTrackAODReader.cxx:10
 AliCaloTrackAODReader.cxx:11
 AliCaloTrackAODReader.cxx:12
 AliCaloTrackAODReader.cxx:13
 AliCaloTrackAODReader.cxx:14
 AliCaloTrackAODReader.cxx:15
 AliCaloTrackAODReader.cxx:16
 AliCaloTrackAODReader.cxx:17
 AliCaloTrackAODReader.cxx:18
 AliCaloTrackAODReader.cxx:19
 AliCaloTrackAODReader.cxx:20
 AliCaloTrackAODReader.cxx:21
 AliCaloTrackAODReader.cxx:22
 AliCaloTrackAODReader.cxx:23
 AliCaloTrackAODReader.cxx:24
 AliCaloTrackAODReader.cxx:25
 AliCaloTrackAODReader.cxx:26
 AliCaloTrackAODReader.cxx:27
 AliCaloTrackAODReader.cxx:28
 AliCaloTrackAODReader.cxx:29
 AliCaloTrackAODReader.cxx:30
 AliCaloTrackAODReader.cxx:31
 AliCaloTrackAODReader.cxx:32
 AliCaloTrackAODReader.cxx:33
 AliCaloTrackAODReader.cxx:34
 AliCaloTrackAODReader.cxx:35
 AliCaloTrackAODReader.cxx:36
 AliCaloTrackAODReader.cxx:37
 AliCaloTrackAODReader.cxx:38
 AliCaloTrackAODReader.cxx:39
 AliCaloTrackAODReader.cxx:40
 AliCaloTrackAODReader.cxx:41
 AliCaloTrackAODReader.cxx:42
 AliCaloTrackAODReader.cxx:43
 AliCaloTrackAODReader.cxx:44
 AliCaloTrackAODReader.cxx:45
 AliCaloTrackAODReader.cxx:46
 AliCaloTrackAODReader.cxx:47
 AliCaloTrackAODReader.cxx:48
 AliCaloTrackAODReader.cxx:49
 AliCaloTrackAODReader.cxx:50
 AliCaloTrackAODReader.cxx:51
 AliCaloTrackAODReader.cxx:52
 AliCaloTrackAODReader.cxx:53
 AliCaloTrackAODReader.cxx:54
 AliCaloTrackAODReader.cxx:55
 AliCaloTrackAODReader.cxx:56
 AliCaloTrackAODReader.cxx:57
 AliCaloTrackAODReader.cxx:58
 AliCaloTrackAODReader.cxx:59
 AliCaloTrackAODReader.cxx:60
 AliCaloTrackAODReader.cxx:61
 AliCaloTrackAODReader.cxx:62
 AliCaloTrackAODReader.cxx:63
 AliCaloTrackAODReader.cxx:64
 AliCaloTrackAODReader.cxx:65
 AliCaloTrackAODReader.cxx:66
 AliCaloTrackAODReader.cxx:67
 AliCaloTrackAODReader.cxx:68
 AliCaloTrackAODReader.cxx:69
 AliCaloTrackAODReader.cxx:70
 AliCaloTrackAODReader.cxx:71
 AliCaloTrackAODReader.cxx:72
 AliCaloTrackAODReader.cxx:73
 AliCaloTrackAODReader.cxx:74
 AliCaloTrackAODReader.cxx:75
 AliCaloTrackAODReader.cxx:76
 AliCaloTrackAODReader.cxx:77
 AliCaloTrackAODReader.cxx:78
 AliCaloTrackAODReader.cxx:79
 AliCaloTrackAODReader.cxx:80
 AliCaloTrackAODReader.cxx:81
 AliCaloTrackAODReader.cxx:82
 AliCaloTrackAODReader.cxx:83
 AliCaloTrackAODReader.cxx:84
 AliCaloTrackAODReader.cxx:85
 AliCaloTrackAODReader.cxx:86
 AliCaloTrackAODReader.cxx:87
 AliCaloTrackAODReader.cxx:88
 AliCaloTrackAODReader.cxx:89
 AliCaloTrackAODReader.cxx:90
 AliCaloTrackAODReader.cxx:91
 AliCaloTrackAODReader.cxx:92
 AliCaloTrackAODReader.cxx:93
 AliCaloTrackAODReader.cxx:94
 AliCaloTrackAODReader.cxx:95
 AliCaloTrackAODReader.cxx:96
 AliCaloTrackAODReader.cxx:97
 AliCaloTrackAODReader.cxx:98
 AliCaloTrackAODReader.cxx:99
 AliCaloTrackAODReader.cxx:100
 AliCaloTrackAODReader.cxx:101
 AliCaloTrackAODReader.cxx:102
 AliCaloTrackAODReader.cxx:103
 AliCaloTrackAODReader.cxx:104
 AliCaloTrackAODReader.cxx:105
 AliCaloTrackAODReader.cxx:106
 AliCaloTrackAODReader.cxx:107
 AliCaloTrackAODReader.cxx:108
 AliCaloTrackAODReader.cxx:109
 AliCaloTrackAODReader.cxx:110
 AliCaloTrackAODReader.cxx:111
 AliCaloTrackAODReader.cxx:112
 AliCaloTrackAODReader.cxx:113
 AliCaloTrackAODReader.cxx:114
 AliCaloTrackAODReader.cxx:115
 AliCaloTrackAODReader.cxx:116
 AliCaloTrackAODReader.cxx:117
 AliCaloTrackAODReader.cxx:118
 AliCaloTrackAODReader.cxx:119
 AliCaloTrackAODReader.cxx:120
 AliCaloTrackAODReader.cxx:121
 AliCaloTrackAODReader.cxx:122
 AliCaloTrackAODReader.cxx:123
 AliCaloTrackAODReader.cxx:124
 AliCaloTrackAODReader.cxx:125
 AliCaloTrackAODReader.cxx:126
 AliCaloTrackAODReader.cxx:127
 AliCaloTrackAODReader.cxx:128
 AliCaloTrackAODReader.cxx:129
 AliCaloTrackAODReader.cxx:130
 AliCaloTrackAODReader.cxx:131
 AliCaloTrackAODReader.cxx:132
 AliCaloTrackAODReader.cxx:133
 AliCaloTrackAODReader.cxx:134
 AliCaloTrackAODReader.cxx:135
 AliCaloTrackAODReader.cxx:136
 AliCaloTrackAODReader.cxx:137
 AliCaloTrackAODReader.cxx:138
 AliCaloTrackAODReader.cxx:139
 AliCaloTrackAODReader.cxx:140
 AliCaloTrackAODReader.cxx:141
 AliCaloTrackAODReader.cxx:142
 AliCaloTrackAODReader.cxx:143
 AliCaloTrackAODReader.cxx:144
 AliCaloTrackAODReader.cxx:145
 AliCaloTrackAODReader.cxx:146
 AliCaloTrackAODReader.cxx:147
 AliCaloTrackAODReader.cxx:148
 AliCaloTrackAODReader.cxx:149
 AliCaloTrackAODReader.cxx:150
 AliCaloTrackAODReader.cxx:151
 AliCaloTrackAODReader.cxx:152
 AliCaloTrackAODReader.cxx:153
 AliCaloTrackAODReader.cxx:154
 AliCaloTrackAODReader.cxx:155
 AliCaloTrackAODReader.cxx:156
 AliCaloTrackAODReader.cxx:157
 AliCaloTrackAODReader.cxx:158
 AliCaloTrackAODReader.cxx:159
 AliCaloTrackAODReader.cxx:160
 AliCaloTrackAODReader.cxx:161
 AliCaloTrackAODReader.cxx:162
 AliCaloTrackAODReader.cxx:163
 AliCaloTrackAODReader.cxx:164
 AliCaloTrackAODReader.cxx:165
 AliCaloTrackAODReader.cxx:166
 AliCaloTrackAODReader.cxx:167
 AliCaloTrackAODReader.cxx:168
 AliCaloTrackAODReader.cxx:169
 AliCaloTrackAODReader.cxx:170
 AliCaloTrackAODReader.cxx:171
 AliCaloTrackAODReader.cxx:172
 AliCaloTrackAODReader.cxx:173
 AliCaloTrackAODReader.cxx:174
 AliCaloTrackAODReader.cxx:175
 AliCaloTrackAODReader.cxx:176
 AliCaloTrackAODReader.cxx:177
 AliCaloTrackAODReader.cxx:178
 AliCaloTrackAODReader.cxx:179
 AliCaloTrackAODReader.cxx:180
 AliCaloTrackAODReader.cxx:181
 AliCaloTrackAODReader.cxx:182
 AliCaloTrackAODReader.cxx:183
 AliCaloTrackAODReader.cxx:184
 AliCaloTrackAODReader.cxx:185
 AliCaloTrackAODReader.cxx:186
 AliCaloTrackAODReader.cxx:187
 AliCaloTrackAODReader.cxx:188
 AliCaloTrackAODReader.cxx:189
 AliCaloTrackAODReader.cxx:190
 AliCaloTrackAODReader.cxx:191
 AliCaloTrackAODReader.cxx:192
 AliCaloTrackAODReader.cxx:193
 AliCaloTrackAODReader.cxx:194
 AliCaloTrackAODReader.cxx:195
 AliCaloTrackAODReader.cxx:196
 AliCaloTrackAODReader.cxx:197
 AliCaloTrackAODReader.cxx:198
 AliCaloTrackAODReader.cxx:199
 AliCaloTrackAODReader.cxx:200
 AliCaloTrackAODReader.cxx:201
 AliCaloTrackAODReader.cxx:202
 AliCaloTrackAODReader.cxx:203
 AliCaloTrackAODReader.cxx:204
 AliCaloTrackAODReader.cxx:205
 AliCaloTrackAODReader.cxx:206
 AliCaloTrackAODReader.cxx:207
 AliCaloTrackAODReader.cxx:208
 AliCaloTrackAODReader.cxx:209
 AliCaloTrackAODReader.cxx:210
 AliCaloTrackAODReader.cxx:211
 AliCaloTrackAODReader.cxx:212
 AliCaloTrackAODReader.cxx:213
 AliCaloTrackAODReader.cxx:214
 AliCaloTrackAODReader.cxx:215
 AliCaloTrackAODReader.cxx:216
 AliCaloTrackAODReader.cxx:217
 AliCaloTrackAODReader.cxx:218
 AliCaloTrackAODReader.cxx:219
 AliCaloTrackAODReader.cxx:220
 AliCaloTrackAODReader.cxx:221
 AliCaloTrackAODReader.cxx:222
 AliCaloTrackAODReader.cxx:223
 AliCaloTrackAODReader.cxx:224
 AliCaloTrackAODReader.cxx:225
 AliCaloTrackAODReader.cxx:226
 AliCaloTrackAODReader.cxx:227
 AliCaloTrackAODReader.cxx:228
 AliCaloTrackAODReader.cxx:229
 AliCaloTrackAODReader.cxx:230
 AliCaloTrackAODReader.cxx:231
 AliCaloTrackAODReader.cxx:232
 AliCaloTrackAODReader.cxx:233
 AliCaloTrackAODReader.cxx:234
 AliCaloTrackAODReader.cxx:235
 AliCaloTrackAODReader.cxx:236
 AliCaloTrackAODReader.cxx:237
 AliCaloTrackAODReader.cxx:238
 AliCaloTrackAODReader.cxx:239
 AliCaloTrackAODReader.cxx:240
 AliCaloTrackAODReader.cxx:241
 AliCaloTrackAODReader.cxx:242
 AliCaloTrackAODReader.cxx:243
 AliCaloTrackAODReader.cxx:244
 AliCaloTrackAODReader.cxx:245
 AliCaloTrackAODReader.cxx:246
 AliCaloTrackAODReader.cxx:247
 AliCaloTrackAODReader.cxx:248
 AliCaloTrackAODReader.cxx:249
 AliCaloTrackAODReader.cxx:250
 AliCaloTrackAODReader.cxx:251
 AliCaloTrackAODReader.cxx:252
 AliCaloTrackAODReader.cxx:253
 AliCaloTrackAODReader.cxx:254
 AliCaloTrackAODReader.cxx:255
 AliCaloTrackAODReader.cxx:256
 AliCaloTrackAODReader.cxx:257
 AliCaloTrackAODReader.cxx:258
 AliCaloTrackAODReader.cxx:259