ROOT logo
#ifndef ALIPHOSLOADER_H
#define ALIPHOSLOADER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

/* History of cvs commits:
 *
 * $Log$
 * Revision 1.12  2006/08/25 16:00:53  kharlov
 * Compliance with Effective C++AliPHOSHit.cxx
 *
 * Revision 1.11  2006/08/01 12:15:03  cvetan
 * Adding a constructor from TFolder. Needed by AliReconstruction plugin scheme
 *
 * Revision 1.10  2005/05/28 14:19:04  schutz
 * Compilation warnings fixed by T.P.
 *
 */

//_________________________________________________________________________
//  A singleton that returns various objects 
//  Should be used on the analysis stage to avoid confusing between different
//  branches of reconstruction tree: e.g. reading RecPoints and TS made from 
//  another set of RecPoints.
// 
//  The objects are retrived from folders.  
//-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
//    


// --- ROOT system ---
class TString ;
class TParticle ;
#include <TClonesArray.h>
#include <TTree.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliRun.h"
#include "AliLoader.h"
#include "AliRunLoader.h"
#include "AliPHOSClusterizer.h"
#include "AliPHOSTrackSegmentMaker.h"
#include "AliPHOSPID.h"
class AliPHOS ; 
class AliPHOSHit ; 
class AliPHOSDigit ; 
class AliPHOSEmcRecPoint ; 
class AliPHOSCpvRecPoint ; 
class AliPHOSTrackSegment ;
class AliPHOSRecParticle ;  
class AliPHOSSDigitizer ; 
class AliPHOSDigitizer ;
  
class AliPHOSLoader : public AliLoader {
  
public:

  AliPHOSLoader();
  AliPHOSLoader(const Char_t *detname,const Char_t *eventfoldername); 
  AliPHOSLoader(const Char_t *detname,TFolder *topfolder);
  
  virtual ~AliPHOSLoader() ; 

  Int_t   GetEvent();//extends the method on PHOS RecPart posting
  Int_t   SetEvent();//extends the method on PHOS RecPart posting
  
  Bool_t  BranchExists(const TString& recName);
  Int_t   LoadHits(Option_t* opt=""); //reads  from disk and sends them to folder; array as well as tree
  Int_t   LoadSDigits(Option_t* opt="");
  Int_t   LoadDigits(Option_t* opt=""); //reads Digits from disk and sends them to folder; array as well as tree
  Int_t   LoadRecPoints(Option_t* opt=""); //reads RecPoints from disk and sends them to folder; array as well as tree
  Int_t   LoadTracks(Option_t* opt="");  //reads Tracks from disk and sends them to folder; array as well as tree
  Int_t   LoadRecParticles(Option_t* opt="");
   
  Int_t   PostHits()const;  //Posts the 
  Int_t   PostSDigits()const;
  Int_t   PostDigits()const;
  Int_t   PostRecPoints()const;
  Int_t   PostTracks()const;
  Int_t   PostRecParticles()const;
  
  void    CleanFolders();//cleans all the stuff loaded by this detector + calls AliLoader::Clean

  void    CleanHits()const;
  void    CleanSDigits()const;
  void    CleanDigits()const;
  void    CleanRecPoints()const;
  void    CleanTracks()const;
  void    CleanRecParticles();

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

  TObject** HitsRef(){return GetDetectorDataRef(Hits());}
  TObject** SDigitsRef(){return GetDetectorDataRef(SDigits());}
  TObject** DigitsRef(){return GetDetectorDataRef(Digits());}
  TObject** EmcRecPointsRef(){return GetDetectorDataRef(EmcRecPoints());}
  TObject** CpvRecPointsRef(){return GetDetectorDataRef(CpvRecPoints());}
  TObject** TracksRef(){return GetDetectorDataRef(TrackSegments());}
  TObject** RecParticlesRef(){return GetDetectorDataRef(RecParticles());}
  TObject** AlarmsRef(){return GetDetectorDataRef(Alarms());}
  void   Track(Int_t itrack) ;

  static AliPHOSLoader* GetPHOSLoader(const  char* eventfoldername);

  //Method to be used when digitizing under AliDigitizationInput, who opens all files etc.
  Int_t  EventNumber()       { return (Int_t) GetRunLoader()->GetEventNumber();}
  Int_t  MaxEvent()          { return (Int_t) GetRunLoader()->TreeE()->GetEntries();}

/*   const AliPHOS *         PHOS(); */
  // Alarms
  // TFolder * Alarms() const { return (TFolder*)(ReturnO("Alarms", 0)); }
  TObjArray *  Alarms() {return 0x0;}  

  /*********************************************/
  /************    TClonesArrays     ***********/
  /*********************************************/
  /****   H i t s  ****/
  TClonesArray*  Hits(void);
  const AliPHOSHit*    Hit(Int_t index);
  void MakeHitsArray();
  /****   S D i g i t s  ****/ 
  TClonesArray*  SDigits();
  const AliPHOSDigit*  SDigit(Int_t index);
  void MakeSDigitsArray();
  /****  D i g i t s  ****/
  TClonesArray*   Digits();
  const AliPHOSDigit *  Digit(Int_t index);
  void MakeDigitsArray();
  /****  R e c P o i n t s  ****/
  TObjArray * EmcRecPoints();
  TObjArray * CpvRecPoints();
  const AliPHOSEmcRecPoint * EmcRecPoint(Int_t index) ;
  const AliPHOSCpvRecPoint * CpvRecPoint(Int_t index) ;
  void MakeRecPointsArray();
  /****   T r a c k S e g m e n t s ****/
  TClonesArray * TrackSegments();
  const AliPHOSTrackSegment * TrackSegment(Int_t index);
  void MakeTrackSegmentsArray();
  /****  R e c P a r t ic l e s   ****/
  TClonesArray * RecParticles() ;
  const AliPHOSRecParticle * RecParticle(Int_t index);
  void MakeRecParticlesArray();
  
  void   SetDebug(Int_t level) {fDebug = level;} // Set debug level
  void   SetBranchTitle(const TString& btitle);

  Int_t   GetDebug()                     const {return fDebug;      }
  TString GetBranchTitle()               const {return fBranchTitle;}
  
protected:
  TString fBranchTitle;            //Title of the branch

private:

  // assignement operator requested by coding convention, but not needed
  AliPHOSLoader(const AliPHOSLoader &);                //Not implemented
  AliPHOSLoader & operator = (const AliPHOSLoader & ); //Not implemented

  Int_t ReadHits();
  Int_t ReadDigits();
  Int_t ReadSDigits();
  Int_t ReadRecPoints();
  Int_t ReadTracks();
  Int_t ReadRecParticles();
  
  Int_t  fDebug ;             // Debug level
  TClonesArray *fTmpHits;     //! Temporary array of hits per track

  static const TString fgkHitsName;//Name for TClonesArray with hits from one event
  static const TString fgkSDigitsName;//Name for TClonesArray 
  static const TString fgkDigitsName;//Name for TClonesArray 
  static const TString fgkEmcRecPointsName;//Name for TClonesArray 
  static const TString fgkCpvRecPointsName;//Name for TClonesArray 
  static const TString fgkTracksName;//Name for TClonesArray 
  static const TString fgkRecParticlesName;//Name for TClonesArray

  static const TString fgkEmcRecPointsBranchName;//Name for branch
  static const TString fgkCpvRecPointsBranchName;//Name for branch
  static const TString fgkTrackSegmentsBranchName;//Name for branch
  static const TString fgkRecParticlesBranchName;//Name for branch
  
 
  ClassDef(AliPHOSLoader,4)  // Algorithm class that provides methods to retrieve objects from a list knowing the index 

};

/******************************************************************************/
/****************    I N L I N E S     ****************************************/
/******************************************************************************/

inline TClonesArray* AliPHOSLoader::Hits()  
{
 return (TClonesArray*)GetDetectorData(fgkHitsName);
}
/******************************************************************************/

inline const AliPHOSHit* AliPHOSLoader::Hit(Int_t index)  
{
  const TClonesArray* tcarr = Hits();
  if (tcarr)
    return (const AliPHOSHit*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TClonesArray* AliPHOSLoader::SDigits()
{
   return dynamic_cast<TClonesArray*>(GetDetectorData(fgkSDigitsName));
}
/******************************************************************************/

inline const AliPHOSDigit*  AliPHOSLoader::SDigit(Int_t index)
{
  const TClonesArray* tcarr = SDigits();
  if (tcarr)
    return (const AliPHOSDigit*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TClonesArray* AliPHOSLoader::Digits()
{
 return dynamic_cast<TClonesArray*>(GetDetectorData(fgkDigitsName));
}
/******************************************************************************/

inline const AliPHOSDigit*  AliPHOSLoader::Digit(Int_t index)
{
  const TClonesArray* tcarr = Digits();
  if (tcarr)
    return (const AliPHOSDigit*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TObjArray * AliPHOSLoader::EmcRecPoints()
{
 return dynamic_cast<TObjArray*>(GetDetectorData(fgkEmcRecPointsName));
}
/******************************************************************************/

inline const AliPHOSEmcRecPoint * AliPHOSLoader::EmcRecPoint(Int_t index)
{
  TObjArray* tcarr = EmcRecPoints();
  if (tcarr)
    return (const AliPHOSEmcRecPoint*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TObjArray * AliPHOSLoader::CpvRecPoints()
{
 return dynamic_cast<TObjArray*>(GetDetectorData(fgkCpvRecPointsName));
}
/******************************************************************************/

inline const AliPHOSCpvRecPoint * AliPHOSLoader::CpvRecPoint(Int_t index)
{
  TObjArray* tcarr = CpvRecPoints();
  if (tcarr)
    return (const AliPHOSCpvRecPoint*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TClonesArray * AliPHOSLoader::TrackSegments()
{
 return dynamic_cast<TClonesArray*>(GetDetectorData(fgkTracksName));
}
/******************************************************************************/

inline const AliPHOSTrackSegment * AliPHOSLoader::TrackSegment(Int_t index)
{
  const TClonesArray* tcarr = TrackSegments();
  if (tcarr)
    return (const AliPHOSTrackSegment*) tcarr->At(index);
  return 0x0; 
}
/******************************************************************************/

inline TClonesArray * AliPHOSLoader::RecParticles() 
{
 return dynamic_cast<TClonesArray*>(GetDetectorData(fgkRecParticlesName)); 
}
/******************************************************************************/

inline const AliPHOSRecParticle* AliPHOSLoader::RecParticle(Int_t index)
{
  TClonesArray* tcarr = RecParticles();
  if (tcarr)
    return (const AliPHOSRecParticle*) tcarr->At(index);
  return 0x0;  
}

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