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 "ITS/AliITSDigitizer.h"
#include "ITS/AliITS.h"
#include "ITS/AliITSDetType.h"
#include "ITS/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="");

#endif

//#define DEBUG

Int_t AliITSsd2d(TString df="galice.root",TString sf1="galice.root",
		 TString sf2="",TString opt=""){
    // Produce ITS Digits from SDigits, with psible merging.

    // 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 *sfp1 = 0, *sfp2 = 0, *dfp = 0;
    if(!GaliceITSok()){
	// gAlice not define. Must open a file and read it in.
	if(df.CompareTo(sf1) == 0 || df.CompareTo("") == 0) {
	    // Input file = output file
	    sfp1 = AccessFile(sf1,"U");  // input file open for update.
	}else{ // Input file different from output file.
	    sfp1 = AccessFile(sf1,"R"); // input file open as read only
	    // open output file and create TreeR on it
	    dfp = gAlice->InitTreeFile("S",df);
	} // end if
    } // end if !GALICEITSOK()
    AliITS *ITS = (AliITS*)gAlice->GetDetector("ITS"); 

    ChangeITSDefaults(sfp1,ITS,opt);
    // write the AliRun object to the output file if different from input file.
    if(dfp) {
	writeAR(sfp1,dfp);
	dfp->Close(); // Manager will open in update mode.
    } // end if

    AliRunDigitizer *manager;
    if(sf2.CompareTo("")==0) { // do not merge.
	manager = new AliRunDigitizer(1,1);
	manager->SetInputStream(0,sf1);
    }else{
	manager = new AliRunDigitizer(2,1);
	manager->SetInputStream(0,sf1.Data());
	manager->SetInputStream(1,sf2.Data());
    } // end if
    if (df.CompareTo(sf1) !=0) {
	manager->SetOutputFile(df);
    } // end if
    AliITSDigitizer *dITS = new AliITSDigitizer(manager);
    if(opt.Contains("ROI")==0) dITS->SetByRegionOfInterestFlag(1);

    TStopwatch timer;
    timer.Start();
    manager->Exec("all");
    timer.Stop(); 
    timer.Print();
    delete manager;

    if(dfp!=0){
	cout << df << " size =" << df->GetSize() << endl;
    }else if(sfp1!=0){
	cout << sf1 << " size =" << sf1->GetSize() << endl;
    } // end if sf1!=0
    return 0;
}
 AliITSsd2d.C:1
 AliITSsd2d.C:2
 AliITSsd2d.C:3
 AliITSsd2d.C:4
 AliITSsd2d.C:5
 AliITSsd2d.C:6
 AliITSsd2d.C:7
 AliITSsd2d.C:8
 AliITSsd2d.C:9
 AliITSsd2d.C:10
 AliITSsd2d.C:11
 AliITSsd2d.C:12
 AliITSsd2d.C:13
 AliITSsd2d.C:14
 AliITSsd2d.C:15
 AliITSsd2d.C:16
 AliITSsd2d.C:17
 AliITSsd2d.C:18
 AliITSsd2d.C:19
 AliITSsd2d.C:20
 AliITSsd2d.C:21
 AliITSsd2d.C:22
 AliITSsd2d.C:23
 AliITSsd2d.C:24
 AliITSsd2d.C:25
 AliITSsd2d.C:26
 AliITSsd2d.C:27
 AliITSsd2d.C:28
 AliITSsd2d.C:29
 AliITSsd2d.C:30
 AliITSsd2d.C:31
 AliITSsd2d.C:32
 AliITSsd2d.C:33
 AliITSsd2d.C:34
 AliITSsd2d.C:35
 AliITSsd2d.C:36
 AliITSsd2d.C:37
 AliITSsd2d.C:38
 AliITSsd2d.C:39
 AliITSsd2d.C:40
 AliITSsd2d.C:41
 AliITSsd2d.C:42
 AliITSsd2d.C:43
 AliITSsd2d.C:44
 AliITSsd2d.C:45
 AliITSsd2d.C:46
 AliITSsd2d.C:47
 AliITSsd2d.C:48
 AliITSsd2d.C:49
 AliITSsd2d.C:50
 AliITSsd2d.C:51
 AliITSsd2d.C:52
 AliITSsd2d.C:53
 AliITSsd2d.C:54
 AliITSsd2d.C:55
 AliITSsd2d.C:56
 AliITSsd2d.C:57
 AliITSsd2d.C:58
 AliITSsd2d.C:59
 AliITSsd2d.C:60
 AliITSsd2d.C:61
 AliITSsd2d.C:62
 AliITSsd2d.C:63
 AliITSsd2d.C:64
 AliITSsd2d.C:65
 AliITSsd2d.C:66
 AliITSsd2d.C:67
 AliITSsd2d.C:68
 AliITSsd2d.C:69
 AliITSsd2d.C:70
 AliITSsd2d.C:71
 AliITSsd2d.C:72
 AliITSsd2d.C:73
 AliITSsd2d.C:74
 AliITSsd2d.C:75
 AliITSsd2d.C:76
 AliITSsd2d.C:77
 AliITSsd2d.C:78
 AliITSsd2d.C:79
 AliITSsd2d.C:80
 AliITSsd2d.C:81
 AliITSsd2d.C:82
 AliITSsd2d.C:83
 AliITSsd2d.C:84
 AliITSsd2d.C:85