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

// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// MC bad chunk identifier 
// --- david.dobrigkeit.chinellato@cern.ch
//
// Loops over all chunks and fills a TTree object with a TString locating 
// chunk name for each event and a "number of global tracks" variable. 
//
// TTree is filled event-by-event but has only very few data members, 
// so memory consumption should still be reasonable. 
//
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

class TTree;
class TParticle;

#include <Riostream.h>
#include "TList.h"
#include "TH1.h"
#include "TFile.h"
#include "TString.h"
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliInputEventHandler.h"
#include "AliAnalysisManager.h"
//#include "AliMCEventHandler.h"
//#include "AliMCEvent.h"
//#include "AliStack.h"
#include "AliAnalysisTaskBadChunkID.h"

using std::cout;
using std::endl;

ClassImp(AliAnalysisTaskBadChunkID)

AliAnalysisTaskBadChunkID::AliAnalysisTaskBadChunkID() 
: AliAnalysisTaskSE(), fList(0), fTree(0),
  fHistNEvents(0),
  fRunNumber(0),
  fFileName(0),
  fNGlobalTracks(0),
  fNTracks(0)
{
  // Dummy Constructor

}

AliAnalysisTaskBadChunkID::AliAnalysisTaskBadChunkID(const char *name) 
  : AliAnalysisTaskSE(name), fList(0), fTree(0),
    fHistNEvents(0),
    fRunNumber(0),
    fFileName(0),
    fNGlobalTracks(0),
    fNTracks(0)
{
  // Constructor
  // Output slot #0 writes into a TList container (Cascade)
  DefineOutput(1, TList::Class());
  DefineOutput(2, TTree::Class());
}


AliAnalysisTaskBadChunkID::~AliAnalysisTaskBadChunkID()
{
//------------------------------------------------
// DESTRUCTOR
//------------------------------------------------

   if (fList){
      delete fList;
      fList = 0x0;
   }
   /*
   if (fTree){
      delete fTree;
      fTree = 0x0;
   }
   */
}

//________________________________________________________________________
void AliAnalysisTaskBadChunkID::UserCreateOutputObjects()
{

   
   // Create histograms
   OpenFile(1);
   fList = new TList();
   fList->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner

   if(! fHistNEvents) {
      fHistNEvents = new TH1F("fHistNEvents", 
         "NumberOfEvents", 
         1, 0, 1); 		
      fList->Add(fHistNEvents);
   }

   OpenFile(2);	
   // Called once

//------------------------------------------------

   fTree = new TTree("fTree","V0Candidates");

//------------------------------------------------
// fTree Branch definitions - V0 Tree
//------------------------------------------------

//-----------BASIC-INFO---------------------------
   /*1*/ fTree->Branch("fNGlobalTracks",&fNGlobalTracks,"fNGlobalTracks/I");	
   /*2*/ fTree->Branch("fNTracks",&fNTracks,"fNTracks/I");	
   /*3*/ fTree->Branch("fRunNumber",&fRunNumber,"fRunNumber/I");	
   /*4*/ fTree->Branch("fFileName",&fFileName,16000,0);	

   //List of Histograms: Normal
   PostData(1, fList);

   //TTree Object: Saved to base directory. Should cache to disk while saving. 
   //(Important to avoid excessive memory usage, particularly when merging)
   PostData(2, fTree);

}// end UserCreateOutputObjects


//________________________________________________________________________
void AliAnalysisTaskBadChunkID::UserExec(Option_t *) 
{
  // Main loop
  // Called for each event

   AliESDEvent *lESDevent = 0x0;
   //AliMCEvent  *lMCevent  = 0x0;
   //AliStack    *lMCstack  = 0x0;

  // Connect to the InputEvent   
  // After these lines, we should have an ESD/AOD event

   // Appropriate for ESD analysis! 
      
   lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
   if (!lESDevent) {
      AliWarning("ERROR: lESDevent not available \n");
      return;
   }

/* Anyhow not needed for cross-check
 
   lMCevent = MCEvent();
   if (!lMCevent) {
      Printf("ERROR: Could not retrieve MC event \n");
      cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;   
      return;
   }

   lMCstack = lMCevent->Stack();
   if (!lMCstack) {
      Printf("ERROR: Could not retrieve MC stack \n");
      cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
      return;
   }
 
*/
//------------------------------------------------
// Track Multiplicity Information Acquistion
//------------------------------------------------

   Int_t lNTracks = -1; 
   Int_t lNGlobalTracks = 0;

   lNTracks = lESDevent->GetNumberOfTracks();

//----- Loop on Tracks --------------------------------------------------------------
   for (Int_t iCurrentTrack = 0; iCurrentTrack < lNTracks; iCurrentTrack++) 
   {// This is the begining of the loop on tracks
      AliESDtrack *lThisTrack=((AliESDEvent*)lESDevent)->GetTrack(iCurrentTrack);

      // kITSrefit refit condition: Global Track
      if( !(lThisTrack->GetStatus() & AliESDtrack::kITSrefit)) continue; 
      lNGlobalTracks++;
   }
//----- End Loop on Tracks ----------------------------------------------------------

  fHistNEvents->Fill(0.5); // valid event
  fNGlobalTracks  = lNGlobalTracks;
  fNTracks        = lNTracks;
  fRunNumber      = lESDevent->GetRunNumber();

  //Gymnastics to get the chunk number...
  TString lFileName = CurrentFileName();
  //  TObjArray *lLocationArray = lFileName.Tokenize("/");
  fFileName = fInputHandler->GetTree()->GetCurrentFile()->GetName();
  //  delete lLocationArray;
  fTree->Fill();

  //Printf("%i in run %i, Nglob = %i, Ntrack = %i \n",fChunkNumber,fRunNumber,fNGlobalTracks,fNTracks);

   // Post output data.
  PostData(1, fList);
  PostData(2, fTree);
}

//________________________________________________________________________
void AliAnalysisTaskBadChunkID::Terminate(Option_t *)
{
   // Draw result to the screen
   // Called once at the end of the query

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