ROOT logo
/*************************************************************************
* Copyright(c) 1998-2009, 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.                  *
**************************************************************************/

///////////////////////////////////////////////////////////////////////////
//                Dielectron DebugTree                                  //
//                                                                       //
//                                                                       //
/*
register variables from the variable manager. The output will be written
to a tree

NOTE: Please use with extream care! Only for debugging and test purposes!!!

*/
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#include <TFile.h>
#include <TTree.h>
#include <TTreeStream.h>
#include <TObjString.h>
#include <TString.h>

#include <AliAnalysisManager.h>
#include <AliESDInputHandler.h>
#include <AliESDEvent.h>
#include <AliVTrack.h>

#include "AliDielectron.h"
#include "AliDielectronMC.h"
#include "AliDielectronPair.h"

#include "AliDielectronDebugTree.h"

ClassImp(AliDielectronDebugTree)

AliDielectronDebugTree::AliDielectronDebugTree() :
  TNamed(),
  fFileName("jpsi_debug.root"),
  fNVars(0),
  fNVarsLeg(0),
  fStreamer(0x0),
  fDielectron(0x0)
{
  //
  // Default Constructor
  //
  for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i){
    fVariables[i]=0;
    fVariablesLeg[i]=0;
  }
}

//______________________________________________
AliDielectronDebugTree::AliDielectronDebugTree(const char* name, const char* title) :
  TNamed(name, title),
  fFileName("jpsi_debug.root"),
  fNVars(0),
  fNVarsLeg(0),
  fStreamer(0x0),
  fDielectron(0x0)
{
  //
  // Named Constructor
  //
  for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues;++i){
    fVariables[i]=0;
    fVariablesLeg[i]=0;
  }
}

//______________________________________________
AliDielectronDebugTree::~AliDielectronDebugTree()
{
  //
  // Default Destructor
  //
  if (fStreamer){
    fStreamer->GetFile()->Write();
    delete fStreamer;
  }
}

//______________________________________________
void AliDielectronDebugTree::Fill(AliDielectronPair *pair)
{
  //
  // Fill configured variables to the tree
  //

  //is there anything to fill
  if (fNVars==0&&fNVarsLeg==0) return;
  
  //only in local mode!!!
  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
  if (!man) return;
//   if (man->GetAnalysisType()!=AliAnalysisManager::kLocalAnalysis) return;
  
  //Get File and event information
  TObjString fileName;
  Int_t eventInFile=-1;
  Int_t runNumber=-1;
  UInt_t eventTime=0;
  
  TTree *t=man->GetTree();
  if (t) {
    TFile *file=t->GetCurrentFile();
    if (file) fileName.SetString(file->GetName());
  }

  AliESDInputHandler *han=dynamic_cast<AliESDInputHandler*>(man->GetInputEventHandler());
  if (han){
    AliESDEvent *ev=dynamic_cast<AliESDEvent*>(han->GetEvent());
    eventInFile=ev->GetEventNumberInFile();
    runNumber=ev->GetRunNumber();
    eventTime=ev->GetTimeStamp();
  }
  
  if (!fStreamer) fStreamer=new TTreeSRedirector(fFileName.Data());
  Int_t id1=static_cast<AliVTrack*>(pair->GetFirstDaughterP())->GetID();
  Int_t id2=static_cast<AliVTrack*>(pair->GetSecondDaughterP())->GetID();
  //Fill Event information
  (*fStreamer) << "Pair"
    << "File.="       << &fileName
    << "EventInFile=" << eventInFile
    << "Run="         << runNumber
    << "Leg1_ID="     << id1
    << "Leg2_ID="     << id2
    << "EventTime="    << eventTime;
  
  //Fill MC information
  Bool_t hasMC=AliDielectronMC::Instance()->HasMC();
  if (hasMC){
    Int_t pdg=443;
    if (fDielectron) pdg=fDielectron->GetMotherPdg();
    Bool_t isMotherMC = AliDielectronMC::Instance()->IsMotherPdg(pair,pdg);
    (*fStreamer) << "Pair"
      << "mcTruth=" << isMotherMC;
  }
  
  Int_t var=0;
  Double_t values[AliDielectronVarManager::kNMaxValues];
  Double_t valuesLeg1[AliDielectronVarManager::kNMaxValues];
  Double_t valuesLeg2[AliDielectronVarManager::kNMaxValues];
// fill pair values
  if (fNVars>0){
    AliDielectronVarManager::Fill(pair,values);

    for (Int_t i=0; i<fNVars; ++i){
      var=fVariables[i];
      (*fStreamer) << "Pair"
                   << Form("%s=",AliDielectronVarManager::GetValueName(var))
                   << values[var];
    }
  }

  if (fNVarsLeg>0){
    //leg1
    AliDielectronVarManager::Fill(pair->GetFirstDaughterP(),valuesLeg1);
    //leg2
    AliDielectronVarManager::Fill(pair->GetSecondDaughterP(),valuesLeg2);
    
    for (Int_t i=0; i<fNVarsLeg; ++i){
      var=fVariablesLeg[i];
      (*fStreamer) << "Pair"
                   << Form("Leg1_%s=",AliDielectronVarManager::GetValueName(var))
                   << valuesLeg1[var]
                   << Form("Leg2_%s=",AliDielectronVarManager::GetValueName(var))
                   << valuesLeg2[var];
    }
    
  }
  
  (*fStreamer) << "Pair" << "\n";
    
  
}

//______________________________________________
void AliDielectronDebugTree::DeleteStreamer()
{
  //
  // delete the streamer
  //
  if (!fStreamer) return;
  delete fStreamer;
  fStreamer=0x0;

}

//______________________________________________
void AliDielectronDebugTree::WriteTree()
{
  //
  // Write file
  //
  if (!fStreamer) return;
  fStreamer->GetFile()->Write();
}
 AliDielectronDebugTree.cxx:1
 AliDielectronDebugTree.cxx:2
 AliDielectronDebugTree.cxx:3
 AliDielectronDebugTree.cxx:4
 AliDielectronDebugTree.cxx:5
 AliDielectronDebugTree.cxx:6
 AliDielectronDebugTree.cxx:7
 AliDielectronDebugTree.cxx:8
 AliDielectronDebugTree.cxx:9
 AliDielectronDebugTree.cxx:10
 AliDielectronDebugTree.cxx:11
 AliDielectronDebugTree.cxx:12
 AliDielectronDebugTree.cxx:13
 AliDielectronDebugTree.cxx:14
 AliDielectronDebugTree.cxx:15
 AliDielectronDebugTree.cxx:16
 AliDielectronDebugTree.cxx:17
 AliDielectronDebugTree.cxx:18
 AliDielectronDebugTree.cxx:19
 AliDielectronDebugTree.cxx:20
 AliDielectronDebugTree.cxx:21
 AliDielectronDebugTree.cxx:22
 AliDielectronDebugTree.cxx:23
 AliDielectronDebugTree.cxx:24
 AliDielectronDebugTree.cxx:25
 AliDielectronDebugTree.cxx:26
 AliDielectronDebugTree.cxx:27
 AliDielectronDebugTree.cxx:28
 AliDielectronDebugTree.cxx:29
 AliDielectronDebugTree.cxx:30
 AliDielectronDebugTree.cxx:31
 AliDielectronDebugTree.cxx:32
 AliDielectronDebugTree.cxx:33
 AliDielectronDebugTree.cxx:34
 AliDielectronDebugTree.cxx:35
 AliDielectronDebugTree.cxx:36
 AliDielectronDebugTree.cxx:37
 AliDielectronDebugTree.cxx:38
 AliDielectronDebugTree.cxx:39
 AliDielectronDebugTree.cxx:40
 AliDielectronDebugTree.cxx:41
 AliDielectronDebugTree.cxx:42
 AliDielectronDebugTree.cxx:43
 AliDielectronDebugTree.cxx:44
 AliDielectronDebugTree.cxx:45
 AliDielectronDebugTree.cxx:46
 AliDielectronDebugTree.cxx:47
 AliDielectronDebugTree.cxx:48
 AliDielectronDebugTree.cxx:49
 AliDielectronDebugTree.cxx:50
 AliDielectronDebugTree.cxx:51
 AliDielectronDebugTree.cxx:52
 AliDielectronDebugTree.cxx:53
 AliDielectronDebugTree.cxx:54
 AliDielectronDebugTree.cxx:55
 AliDielectronDebugTree.cxx:56
 AliDielectronDebugTree.cxx:57
 AliDielectronDebugTree.cxx:58
 AliDielectronDebugTree.cxx:59
 AliDielectronDebugTree.cxx:60
 AliDielectronDebugTree.cxx:61
 AliDielectronDebugTree.cxx:62
 AliDielectronDebugTree.cxx:63
 AliDielectronDebugTree.cxx:64
 AliDielectronDebugTree.cxx:65
 AliDielectronDebugTree.cxx:66
 AliDielectronDebugTree.cxx:67
 AliDielectronDebugTree.cxx:68
 AliDielectronDebugTree.cxx:69
 AliDielectronDebugTree.cxx:70
 AliDielectronDebugTree.cxx:71
 AliDielectronDebugTree.cxx:72
 AliDielectronDebugTree.cxx:73
 AliDielectronDebugTree.cxx:74
 AliDielectronDebugTree.cxx:75
 AliDielectronDebugTree.cxx:76
 AliDielectronDebugTree.cxx:77
 AliDielectronDebugTree.cxx:78
 AliDielectronDebugTree.cxx:79
 AliDielectronDebugTree.cxx:80
 AliDielectronDebugTree.cxx:81
 AliDielectronDebugTree.cxx:82
 AliDielectronDebugTree.cxx:83
 AliDielectronDebugTree.cxx:84
 AliDielectronDebugTree.cxx:85
 AliDielectronDebugTree.cxx:86
 AliDielectronDebugTree.cxx:87
 AliDielectronDebugTree.cxx:88
 AliDielectronDebugTree.cxx:89
 AliDielectronDebugTree.cxx:90
 AliDielectronDebugTree.cxx:91
 AliDielectronDebugTree.cxx:92
 AliDielectronDebugTree.cxx:93
 AliDielectronDebugTree.cxx:94
 AliDielectronDebugTree.cxx:95
 AliDielectronDebugTree.cxx:96
 AliDielectronDebugTree.cxx:97
 AliDielectronDebugTree.cxx:98
 AliDielectronDebugTree.cxx:99
 AliDielectronDebugTree.cxx:100
 AliDielectronDebugTree.cxx:101
 AliDielectronDebugTree.cxx:102
 AliDielectronDebugTree.cxx:103
 AliDielectronDebugTree.cxx:104
 AliDielectronDebugTree.cxx:105
 AliDielectronDebugTree.cxx:106
 AliDielectronDebugTree.cxx:107
 AliDielectronDebugTree.cxx:108
 AliDielectronDebugTree.cxx:109
 AliDielectronDebugTree.cxx:110
 AliDielectronDebugTree.cxx:111
 AliDielectronDebugTree.cxx:112
 AliDielectronDebugTree.cxx:113
 AliDielectronDebugTree.cxx:114
 AliDielectronDebugTree.cxx:115
 AliDielectronDebugTree.cxx:116
 AliDielectronDebugTree.cxx:117
 AliDielectronDebugTree.cxx:118
 AliDielectronDebugTree.cxx:119
 AliDielectronDebugTree.cxx:120
 AliDielectronDebugTree.cxx:121
 AliDielectronDebugTree.cxx:122
 AliDielectronDebugTree.cxx:123
 AliDielectronDebugTree.cxx:124
 AliDielectronDebugTree.cxx:125
 AliDielectronDebugTree.cxx:126
 AliDielectronDebugTree.cxx:127
 AliDielectronDebugTree.cxx:128
 AliDielectronDebugTree.cxx:129
 AliDielectronDebugTree.cxx:130
 AliDielectronDebugTree.cxx:131
 AliDielectronDebugTree.cxx:132
 AliDielectronDebugTree.cxx:133
 AliDielectronDebugTree.cxx:134
 AliDielectronDebugTree.cxx:135
 AliDielectronDebugTree.cxx:136
 AliDielectronDebugTree.cxx:137
 AliDielectronDebugTree.cxx:138
 AliDielectronDebugTree.cxx:139
 AliDielectronDebugTree.cxx:140
 AliDielectronDebugTree.cxx:141
 AliDielectronDebugTree.cxx:142
 AliDielectronDebugTree.cxx:143
 AliDielectronDebugTree.cxx:144
 AliDielectronDebugTree.cxx:145
 AliDielectronDebugTree.cxx:146
 AliDielectronDebugTree.cxx:147
 AliDielectronDebugTree.cxx:148
 AliDielectronDebugTree.cxx:149
 AliDielectronDebugTree.cxx:150
 AliDielectronDebugTree.cxx:151
 AliDielectronDebugTree.cxx:152
 AliDielectronDebugTree.cxx:153
 AliDielectronDebugTree.cxx:154
 AliDielectronDebugTree.cxx:155
 AliDielectronDebugTree.cxx:156
 AliDielectronDebugTree.cxx:157
 AliDielectronDebugTree.cxx:158
 AliDielectronDebugTree.cxx:159
 AliDielectronDebugTree.cxx:160
 AliDielectronDebugTree.cxx:161
 AliDielectronDebugTree.cxx:162
 AliDielectronDebugTree.cxx:163
 AliDielectronDebugTree.cxx:164
 AliDielectronDebugTree.cxx:165
 AliDielectronDebugTree.cxx:166
 AliDielectronDebugTree.cxx:167
 AliDielectronDebugTree.cxx:168
 AliDielectronDebugTree.cxx:169
 AliDielectronDebugTree.cxx:170
 AliDielectronDebugTree.cxx:171
 AliDielectronDebugTree.cxx:172
 AliDielectronDebugTree.cxx:173
 AliDielectronDebugTree.cxx:174
 AliDielectronDebugTree.cxx:175
 AliDielectronDebugTree.cxx:176
 AliDielectronDebugTree.cxx:177
 AliDielectronDebugTree.cxx:178
 AliDielectronDebugTree.cxx:179
 AliDielectronDebugTree.cxx:180
 AliDielectronDebugTree.cxx:181
 AliDielectronDebugTree.cxx:182
 AliDielectronDebugTree.cxx:183
 AliDielectronDebugTree.cxx:184
 AliDielectronDebugTree.cxx:185
 AliDielectronDebugTree.cxx:186
 AliDielectronDebugTree.cxx:187
 AliDielectronDebugTree.cxx:188
 AliDielectronDebugTree.cxx:189
 AliDielectronDebugTree.cxx:190
 AliDielectronDebugTree.cxx:191
 AliDielectronDebugTree.cxx:192
 AliDielectronDebugTree.cxx:193
 AliDielectronDebugTree.cxx:194
 AliDielectronDebugTree.cxx:195
 AliDielectronDebugTree.cxx:196
 AliDielectronDebugTree.cxx:197
 AliDielectronDebugTree.cxx:198
 AliDielectronDebugTree.cxx:199
 AliDielectronDebugTree.cxx:200
 AliDielectronDebugTree.cxx:201
 AliDielectronDebugTree.cxx:202
 AliDielectronDebugTree.cxx:203
 AliDielectronDebugTree.cxx:204
 AliDielectronDebugTree.cxx:205
 AliDielectronDebugTree.cxx:206
 AliDielectronDebugTree.cxx:207
 AliDielectronDebugTree.cxx:208
 AliDielectronDebugTree.cxx:209
 AliDielectronDebugTree.cxx:210
 AliDielectronDebugTree.cxx:211