ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)

#include "iostream.h"
#include "TDatime.h"
#include "TFile.h"
#include "TString.h"
#include "../STEER/AliRun.h"
#include "../STEER/AliRunDigitizer.h"
//#include "AliITSDigitizer.h"
#include "AliITS.h"
#include "AliITSDetType.h"
#include "AliITSresponseSDD.h"
#include "TStopwatch.h"

Bool_t GaliceITSok();
TFile* AccessFile(TString inFile="galice.root", TString acctype="R");
void writeAR(TFile * fin, TFile *fou);
Int_t ChangeITSDefaults(TFile *hitfile,AliITS *ITS,TString opt="");
void loadlibs();

#endif


//#define DEBUG

Int_t AliITSh2sd(TString hf="galice.root",TString sf="",TString opt=""){
    // Produce ITS SDigits from Hits.

    // Dynamically link some shared libs
    if (gClassTable->GetID("AliRun") < 0) {
	gROOT->LoadMacro("loadlibs.C");
	loadlibs();
    } // end if
    gROOT->LoadMacro("$(ALICE_ROOT)/ITS/AliITSstandard.C");

    TFile *hfp = 0, *sfp = 0;
    if(!GaliceITSok()){
	// gAlice not define. Must open a file and read it in.
	if(hf.CompareTo(sf) == 0 || sf.CompareTo("") == 0) {
	    // Input file = output file
	    hfp = AccessFile(hf,"U");  // input file open for update.
	}else{ // Input file different from output file.
	    hfp = AccessFile(hf,"R"); // input file open as read only
	    // open output file and create TreeR on it
	    sfp = gAlice->InitTreeFile("S",sf);
	} // end if
    } // end if !GALICEITSOK()
    AliITS *ITS = (AliITS*) (gAlice->GetDetector("ITS"));

    ChangeITSDefaults(hfp,ITS,opt);
    // write the AliRun object to the output file if different from input file.
    if(sfp) writeAR(hfp,sfp);

    TStopwatch timer;
    Int_t evNumber1 = 0;
    Int_t evNumber2 = gAlice->GetEventsPerRun();
    timer.Start();
    for(Int_t event = evNumber1; event < evNumber2; event++){
	gAlice->GetEvent(event);
	if(!gAlice->TreeS() && sfp == 0){ 
	    cout << "Having to create the SDigits Tree." << endl;
	    gAlice->MakeTree("S");
	} // end if !gAlice->TreeS()
	if(sfp) gAlice->MakeTree("S",sfp);
	//    make branch
	ITS->MakeBranch("S");
	ITS->SetTreeAddress();
#ifdef DEBUG
	cout<<"Making ITS SDigits for event "<<event<<endl;
#endif
	ITS->Hits2SDigits();
    } // end for event
    timer.Stop();
    timer.Print();
    if(sfp!=0){
	cout << sf << " size =" << sfp->GetSize() << endl;
    }else if(hfp!=0){
	cout << hfp << " size =" << hfp->GetSize() << endl;
    } // end if sfp!=0
    return 0;
}
 AliITSh2sd.C:1
 AliITSh2sd.C:2
 AliITSh2sd.C:3
 AliITSh2sd.C:4
 AliITSh2sd.C:5
 AliITSh2sd.C:6
 AliITSh2sd.C:7
 AliITSh2sd.C:8
 AliITSh2sd.C:9
 AliITSh2sd.C:10
 AliITSh2sd.C:11
 AliITSh2sd.C:12
 AliITSh2sd.C:13
 AliITSh2sd.C:14
 AliITSh2sd.C:15
 AliITSh2sd.C:16
 AliITSh2sd.C:17
 AliITSh2sd.C:18
 AliITSh2sd.C:19
 AliITSh2sd.C:20
 AliITSh2sd.C:21
 AliITSh2sd.C:22
 AliITSh2sd.C:23
 AliITSh2sd.C:24
 AliITSh2sd.C:25
 AliITSh2sd.C:26
 AliITSh2sd.C:27
 AliITSh2sd.C:28
 AliITSh2sd.C:29
 AliITSh2sd.C:30
 AliITSh2sd.C:31
 AliITSh2sd.C:32
 AliITSh2sd.C:33
 AliITSh2sd.C:34
 AliITSh2sd.C:35
 AliITSh2sd.C:36
 AliITSh2sd.C:37
 AliITSh2sd.C:38
 AliITSh2sd.C:39
 AliITSh2sd.C:40
 AliITSh2sd.C:41
 AliITSh2sd.C:42
 AliITSh2sd.C:43
 AliITSh2sd.C:44
 AliITSh2sd.C:45
 AliITSh2sd.C:46
 AliITSh2sd.C:47
 AliITSh2sd.C:48
 AliITSh2sd.C:49
 AliITSh2sd.C:50
 AliITSh2sd.C:51
 AliITSh2sd.C:52
 AliITSh2sd.C:53
 AliITSh2sd.C:54
 AliITSh2sd.C:55
 AliITSh2sd.C:56
 AliITSh2sd.C:57
 AliITSh2sd.C:58
 AliITSh2sd.C:59
 AliITSh2sd.C:60
 AliITSh2sd.C:61
 AliITSh2sd.C:62
 AliITSh2sd.C:63
 AliITSh2sd.C:64
 AliITSh2sd.C:65
 AliITSh2sd.C:66
 AliITSh2sd.C:67
 AliITSh2sd.C:68
 AliITSh2sd.C:69
 AliITSh2sd.C:70
 AliITSh2sd.C:71
 AliITSh2sd.C:72
 AliITSh2sd.C:73
 AliITSh2sd.C:74
 AliITSh2sd.C:75
 AliITSh2sd.C:76
 AliITSh2sd.C:77
 AliITSh2sd.C:78
 AliITSh2sd.C:79
 AliITSh2sd.C:80
 AliITSh2sd.C:81
 AliITSh2sd.C:82