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

/* $Id: AliITSULoader.cxx $ */

#include <TClonesArray.h>
#include <TClass.h>
#include <TGeoManager.h>
#include <TTree.h>

#include "AliITSdigit.h"
#include "AliITSULoader.h"
#include "AliRunLoader.h"
#include "AliObjectLoader.h"
#include "AliLog.h"

///////////////////////////////////////////////////////////////////////////
// Loader for ITS Upgrade
// it manages the I/O for:
// raw clusters, primary vertices
// V0 and cascade
// and tracks propagated to the origin
//////////////////////////////////////////////////////////////////////////
ClassImp(AliITSULoader)

/**********************************************************************/
AliITSULoader::AliITSULoader()
:AliLoader()
{
  // Default constructor
}

/*********************************************************************/
AliITSULoader::AliITSULoader(const Char_t *name,const Char_t *topfoldername)
: AliLoader(name,topfoldername)
{
  //Constructor   
  TString rawContainerName = "TreeC";
    AliDataLoader* rawClustersDataLoader = new AliDataLoader(
        fDetectorName + ".RawCl.root",rawContainerName,
        "Raw Clusters");
    fDataLoaders->Add(rawClustersDataLoader);
    rawClustersDataLoader->SetEventFolder(fEventFolder);
    rawClustersDataLoader->SetFolder(GetDetectorDataFolder());

  TString  backTracksContainerName= "TreeB";
    AliDataLoader* backTracksDataLoader =  new AliDataLoader(
        fDetectorName + ".BackTracks.root",backTracksContainerName,
        "Back Propagated Tracks");
    fDataLoaders->Add(backTracksDataLoader);
    backTracksDataLoader->SetEventFolder(fEventFolder);
    backTracksDataLoader->SetFolder(GetDetectorDataFolder());
  TString verticesContainerName="Vertex"; 
    AliDataLoader* vertexDataLoader = new AliDataLoader(
        fDetectorName + ".Vertex.root",verticesContainerName,
        "Primary Vertices","O");
    fDataLoaders->Add(vertexDataLoader);
    vertexDataLoader->SetEventFolder(fEventFolder);
    vertexDataLoader->SetFolder(GetDetectorDataFolder());
 TString v0ContainerName="V0";
    AliDataLoader* v0DataLoader = new AliDataLoader(
        fDetectorName + ".V0s.root",v0ContainerName,"V0 Vertices");
    fDataLoaders->Add(v0DataLoader);
    v0DataLoader->SetEventFolder(fEventFolder);
    v0DataLoader->SetFolder(GetDetectorDataFolder());
  TString cascadeContainerName="Cascade";
    AliDataLoader* cascadeDataLoader = new AliDataLoader(
        fDetectorName + ".Cascades.root",cascadeContainerName,
        "Cascades");
    fDataLoaders->Add(cascadeDataLoader);
    cascadeDataLoader->SetEventFolder(fEventFolder);
    cascadeDataLoader->SetFolder(GetDetectorDataFolder());
}
/**********************************************************************/
AliITSULoader::AliITSULoader(const Char_t *name,TFolder *topfolder)
: AliLoader(name,topfolder)
{
  //ctor  
   TString rawContainerName="TreeC";
    AliDataLoader*  rawClustersDataLoader = new AliDataLoader(
        fDetectorName + ".RawCl.root",rawContainerName,
        "Raw Clusters"); 
    fDataLoaders->Add(rawClustersDataLoader);
    rawClustersDataLoader->SetEventFolder(fEventFolder);
    rawClustersDataLoader->SetFolder(GetDetectorDataFolder());
   TString backTracksContainerName="TreeB";
    AliDataLoader*  backTracksDataLoader =  new AliDataLoader(
        fDetectorName + ".BackTracks.root",backTracksContainerName,
        "Back Propagated Tracks");
    fDataLoaders->Add(backTracksDataLoader);
    backTracksDataLoader->SetEventFolder(fEventFolder);
    backTracksDataLoader->SetFolder(GetDetectorDataFolder());
  TString verticesContainerName="Vertex";
    AliDataLoader* vertexDataLoader = new AliDataLoader(
        fDetectorName + ".Vertex.root",verticesContainerName,
        "Primary Vertices","O");
    fDataLoaders->Add(vertexDataLoader);
    vertexDataLoader->SetEventFolder(fEventFolder);
    vertexDataLoader->SetFolder(GetDetectorDataFolder());
  TString v0ContainerName="V0";
    AliDataLoader* v0DataLoader = new AliDataLoader(
        fDetectorName + ".V0.root",v0ContainerName,"V0 Vertices");
    fDataLoaders->Add(v0DataLoader);
    v0DataLoader->SetEventFolder(fEventFolder);
    v0DataLoader->SetFolder(GetDetectorDataFolder());
  TString cascadeContainerName="Cascade";
    AliDataLoader* cascadeDataLoader = new AliDataLoader(
        fDetectorName + ".Cascade.root",cascadeContainerName,
        "Cascades");
    fDataLoaders->Add(cascadeDataLoader);
    cascadeDataLoader->SetEventFolder(fEventFolder);
    cascadeDataLoader->SetFolder(GetDetectorDataFolder());
}


/**********************************************************************/
AliITSULoader::~AliITSULoader(){
    //destructor
    UnloadRawClusters();
    AliDataLoader *dl = GetRawClLoader();
    fDataLoaders->Remove(dl);

    UnloadBackTracks();
    dl = GetBackTracksDataLoader();
    fDataLoaders->Remove(dl);

    UnloadVertices();
    dl = GetVertexDataLoader();
    fDataLoaders->Remove(dl);

    UnloadV0s();
    dl = GetV0DataLoader();
    fDataLoaders->Remove(dl);

    UnloadCascades();
    dl = GetCascadeDataLoader();
    fDataLoaders->Remove(dl);
  
}
/*
//----------------------------------------------------------------------
AliITS* AliITSULoader::GetITS(){
    // Returns the pointer to the ITS, kept on the file. A short cut metthod
    // Inputs:
    //    none.
    // Outputs:
    //    none.
    // Returns:
    //    Returns a pointer to the ITS, if not found returns 0.
    AliITS *its;

    if(gAlice){
        its = dynamic_cast<AliITS*> (gAlice->GetDetector(
            GetDetectorName().Data()));
        if(its) return its;
    } // end if gAlice
    AliRunLoader *rl=0;
    rl = GetRunLoader();
    if(!rl) return 0;
    AliRun *ar=0;
    ar = rl->GetAliRun();
    if(!ar) return 0;
    its = dynamic_cast<AliITS*> (ar->GetDetector(GetDetectorName().Data()));
    return its;
}
//----------------------------------------------------------------------
void AliITSULoader::SetupDigits(AliITS *its){
    // Sets up to store ITS Digits in side AliITS::fDtype TObjArray
    // Inputs:
    //    AliITS *its  Pointer to the ITS
    // Outputs:
    //    none.
    // Return:
    //    none.

    its->SetTreeAddressD(TreeD());
}
*/
//----------------------------------------------------------------------
void AliITSULoader::SetupDigits(TObjArray *digPerDet,Int_t n,
				  const Char_t **digclass){
    // Sets up digPerDet to store ITS Digits.
    // Inputs:
    //    TObjArray *digPerDet   A pointer to a TObject Array size>=3.
    //    Int_t      n           The size of the TObjArray and digclass array
    //    Char_t     **digclass  Array of digit class names
    // Outputs:
    //    TObjArray *digPerDet   Setup and linked to the tree of digits
    // Return:
    //    none.
    Int_t i,m;
    TClonesArray *cl = 0;
    TTree *td = 0;
    TBranch *br = 0;
    Char_t branch[14];
    const Char_t *det[3] = {"SPD","SDD","SSD"};

    if(!digPerDet){
        Error("SetUpDigits","TObject Array digPerDet does not exist");
        return;
    } // end if
    m = digPerDet->GetSize();
    if(m<n){
        Error("SetUpDigits","TObject Array digPerDet=%p must have a size"
              " at least that of n=%d",digPerDet,n);
    } // end if
    if(m<3){
        Error("SetUpDigits","TObject Array digPerDet=%p must have a size >2",
              digPerDet);
        return;
    } // end if
    td = TreeD();
    for(i=0;i<n;i++){
        if(digPerDet->At(i)==0){ // set up TClones Array
            digPerDet->AddAt(new TClonesArray(digclass[i],1000),i);
            if(n==3) snprintf(branch,13,"ITSDigits%s",det[i]);
            else     snprintf(branch,13,"ITSDigits%d",i+1);
            br = td->GetBranch(branch);
            br->SetAddress(&((*digPerDet)[i]));
            continue; // do next one.
        } // end if
        cl =  dynamic_cast<TClonesArray*> (digPerDet->At(i));
        if(!cl && digPerDet->At(i)!=0){  // not a TClonesArray
            Error("SetUpDigits","TObject Array digPerDet-At(%d)=%p must be "
                  "zeroed or filled with TClonesArrays",i,digPerDet);
            return;
        } // end if
        if(!(cl->GetClass()->GetBaseClass(AliITSdigit::Class()))){
            Error("SetUPDigits","TClones array at digPerDet[%d}=%p must be"
                  "derived from AliITSdigit",i,digPerDet->At(i));
        } // end if
        cl->Clear();
        if(n==3) snprintf(branch,13,"ITSDigits%s",det[i]);
        else     snprintf(branch,13,"ITSDigits%d",i+1);
        br = td->GetBranch(branch);
        br->SetAddress(&((*digPerDet)[i]));
        continue;
    } // end for i
}
//---------------------------------------------------------------------
AliITSdigit * AliITSULoader::GetDigit(TObjArray *digPerDet,Int_t chip,
					Int_t digit){
    // Gets the digit for for a specific detector type and chip.
    // To be used in conjustion with Setupdigits(AliITS *its).
    // Inputs:
    //   TObjArray *digPereDet    Pointer to the Array of digits
    //   Int_t      chip        Chip number
    //   Int_t      digit         Digit number
    // Outputs:
    //   none.
    // Return:
    //   returns the pointer to the digit. if zero then last digit for that
    //   chip.

    if(digPerDet==0){
        Error("GetDigit","digPerDet=%p, chip=%d, digit=%d",
              digPerDet,chip,digit);
        return 0;
    } // end if
    return 0;
}
//----------------------------------------------------------------------
void AliITSULoader::MakeTree(Option_t *opt){
    // invokes AliLoader::MakeTree + specific ITS tree(s)
    // Valid options: H,S,D,R,T and C (C=raw clusters)
    AliLoader::MakeTree(opt);
    const char *oC = strstr(opt,"C");
    if (oC) MakeRawClustersContainer();

    const char *oB = strstr(opt,"B");
    if (oB) MakeBackTracksContainer();

    const char *oV0 = strstr(opt,"V0");
    if (oV0) MakeV0Container();

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