ROOT logo
////////////////////////////////////////////////////////////////////////
//
// name: MergeV1
// date: 11.4.2002
// last update: 11.4.2002
// author: Jiri Chudoba
// version: 1.0
//
// description: 
//       creates digits from sdigits for several detectors
//       stores sdigits in separate file (or in the source file
//       with sdigits). Stores gAlice object and copies TE to the
//       file with digits
//       ITS region of Interest is set
//       test
//
// input:
//       TString fileNameSDigits ... input file with sdigits
//       TString fileNameDigits ... output file with digits
//       Int_t nEvents  ... how many events to process
//       Int_t ITS, TPC, ...   many flags for diff. detectors
//
// History:
//
// 04.04.02 - first version
// 
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "iostream.h"
#include "TDatetime.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 "TPC/AliTPCDigitizer.h"
#include "TRD/AliTRDdigitizer.h"
#include "PHOS/AliPHOSDigitizer.h"
#include "MUON/AliMUONDigitizer.h"
#include "RICH/AliRICHDigitizer.h"
#include "TStopwatch.h"
#endif

// #include "AliHits2SDigits.C"

// void AliCopyN(TString inputFile, TString outputFile);

Int_t MergeV1(TString fileNameDigits="digits.root", 
	    TString fileNameSDigitsSig="sig.sdigits.root", 
	    TString fileNameSDigitsBgr="bgr.sdigits.root", 
	    Int_t nEvents = 1, Int_t iITS = 2, Int_t iTPC = 0,
	    Int_t iTRD = 0,  Int_t iPHOS = 0, Int_t iMUON = 0,
	    Int_t iRICH = 0, Int_t iCopy = 1)
{
// delete the current gAlice object, the one from input file
//  will be used

  if(gAlice){
    delete gAlice;
    gAlice = 0;
  } // end if gAlice

  // Connect the Root Galice file containing Geometry, Kine and Hits
  TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(fileNameSDigitsSig.Data());
  if(!file) file = new TFile(fileNameSDigitsSig.Data());
  TDatime *ct0 = new TDatime(2002,04,26,00,00,00), ct = file->GetCreationDate();
  
 
  // Get AliRun object from file or create it if not on file
  if(!gAlice) {
      gAlice = (AliRun*)file->Get("gAlice");
      if(gAlice) printf("AliRun object found on file\n");
      if(!gAlice) gAlice = new AliRun("gAlice","Alice test program");
  } // end if !gAlice

  AliRunDigitizer * manager = new AliRunDigitizer(2,1);
  manager->SetInputStream(0,fileNameSDigitsSig.Data());
  manager->SetInputStream(1,fileNameSDigitsBgr.Data());
  if (fileNameDigits != "") {
//    if (iCopy) {
//      AliCopyN(fileNameSDigitsSig,fileNameDigits);
//    }
    manager->SetOutputFile(fileNameDigits);
  }
  manager->SetNrOfEventsToWrite(nEvents);
  
  if (iITS) {
    AliITSDigitizer *dITS  = new AliITSDigitizer(manager);
    if (iITS == 2) dITS->SetByRegionOfInterestFlag(1);
    if(ct0->GetDate()>ct.GetDate()){
	// For old files, must change SDD noise.
	AliITS *ITS = (AliITS*) gAlice->GetDetector("ITS");
	AliITSresponseSDD *resp1 = ITS->DetType(1)->GetResponseModel();
	resp1->SetNoiseParam();
	resp1->SetNoiseAfterElectronics();
	Float_t n,b;
	Int_t cPar[8];
	resp1->GetNoiseParam(n,b);
	n = resp1->GetNoiseAfterElectronics();
	cPar[0]=0;
	cPar[1]=0;
	cPar[2]=(Int_t)(b + 2.*n + 0.5);
	cPar[3]=(Int_t)(b + 2.*n + 0.5);
	cPar[4]=0;
	cPar[5]=0;
	cPar[6]=0;
	cPar[7]=0;
	resp1->SetCompressParam(cPar);
    } // end if
  }
  if (iTPC) AliTPCDigitizer *dTPC  = new AliTPCDigitizer(manager);
  if (iTRD) AliTRDdigitizer *dTRD  = new AliTRDdigitizer(manager);
  if (iPHOS) AliPHOSDigitizer *dPHOS  = new AliPHOSDigitizer(manager);
  if (iMUON) AliMUONDigitizer *dMUON  = new AliMUONDigitizer(manager);
  if (iRICH) AliRICHDigitizer *dRICH  = new AliRICHDigitizer(manager);
  TStopwatch timer;
  timer.Start();
  manager->Exec("deb all");
  timer.Stop(); 
  timer.Print();
//  delete gAlice;  
//  gAlice = 0;
  delete manager;
}


/*
////////////////////////////////////////////////////////////////////////
void AliCopyN(TString inputFileName, TString outputFileName) {
// copy some objects

  TFile *inputFile = OpenFile(inputFileName);
  if (!inputFile) return;

  TFile *outputFile = TFile::Open(outputFileName.Data(),"update");
  if (!outputFile->IsOpen()) {
    cerr<<"Can't open "<<outputFileName.Data()<<" !\n";
    return;
  }
  if (!ImportgAlice(inputFile)) return;
  AliCopy(inputFile, outputFile);
  delete gAlice;
  gAlice=0;
  inputFile->Close();
  delete inputFile;
  outputFile->Close();
  delete outputFile;
}
////////////////////////////////////////////////////////////////////////
*/
 MergeV1.C:1
 MergeV1.C:2
 MergeV1.C:3
 MergeV1.C:4
 MergeV1.C:5
 MergeV1.C:6
 MergeV1.C:7
 MergeV1.C:8
 MergeV1.C:9
 MergeV1.C:10
 MergeV1.C:11
 MergeV1.C:12
 MergeV1.C:13
 MergeV1.C:14
 MergeV1.C:15
 MergeV1.C:16
 MergeV1.C:17
 MergeV1.C:18
 MergeV1.C:19
 MergeV1.C:20
 MergeV1.C:21
 MergeV1.C:22
 MergeV1.C:23
 MergeV1.C:24
 MergeV1.C:25
 MergeV1.C:26
 MergeV1.C:27
 MergeV1.C:28
 MergeV1.C:29
 MergeV1.C:30
 MergeV1.C:31
 MergeV1.C:32
 MergeV1.C:33
 MergeV1.C:34
 MergeV1.C:35
 MergeV1.C:36
 MergeV1.C:37
 MergeV1.C:38
 MergeV1.C:39
 MergeV1.C:40
 MergeV1.C:41
 MergeV1.C:42
 MergeV1.C:43
 MergeV1.C:44
 MergeV1.C:45
 MergeV1.C:46
 MergeV1.C:47
 MergeV1.C:48
 MergeV1.C:49
 MergeV1.C:50
 MergeV1.C:51
 MergeV1.C:52
 MergeV1.C:53
 MergeV1.C:54
 MergeV1.C:55
 MergeV1.C:56
 MergeV1.C:57
 MergeV1.C:58
 MergeV1.C:59
 MergeV1.C:60
 MergeV1.C:61
 MergeV1.C:62
 MergeV1.C:63
 MergeV1.C:64
 MergeV1.C:65
 MergeV1.C:66
 MergeV1.C:67
 MergeV1.C:68
 MergeV1.C:69
 MergeV1.C:70
 MergeV1.C:71
 MergeV1.C:72
 MergeV1.C:73
 MergeV1.C:74
 MergeV1.C:75
 MergeV1.C:76
 MergeV1.C:77
 MergeV1.C:78
 MergeV1.C:79
 MergeV1.C:80
 MergeV1.C:81
 MergeV1.C:82
 MergeV1.C:83
 MergeV1.C:84
 MergeV1.C:85
 MergeV1.C:86
 MergeV1.C:87
 MergeV1.C:88
 MergeV1.C:89
 MergeV1.C:90
 MergeV1.C:91
 MergeV1.C:92
 MergeV1.C:93
 MergeV1.C:94
 MergeV1.C:95
 MergeV1.C:96
 MergeV1.C:97
 MergeV1.C:98
 MergeV1.C:99
 MergeV1.C:100
 MergeV1.C:101
 MergeV1.C:102
 MergeV1.C:103
 MergeV1.C:104
 MergeV1.C:105
 MergeV1.C:106
 MergeV1.C:107
 MergeV1.C:108
 MergeV1.C:109
 MergeV1.C:110
 MergeV1.C:111
 MergeV1.C:112
 MergeV1.C:113
 MergeV1.C:114
 MergeV1.C:115
 MergeV1.C:116
 MergeV1.C:117
 MergeV1.C:118
 MergeV1.C:119
 MergeV1.C:120
 MergeV1.C:121
 MergeV1.C:122
 MergeV1.C:123
 MergeV1.C:124
 MergeV1.C:125
 MergeV1.C:126
 MergeV1.C:127
 MergeV1.C:128
 MergeV1.C:129
 MergeV1.C:130
 MergeV1.C:131
 MergeV1.C:132
 MergeV1.C:133
 MergeV1.C:134
 MergeV1.C:135
 MergeV1.C:136
 MergeV1.C:137
 MergeV1.C:138
 MergeV1.C:139
 MergeV1.C:140
 MergeV1.C:141
 MergeV1.C:142
 MergeV1.C:143
 MergeV1.C:144
 MergeV1.C:145
 MergeV1.C:146
 MergeV1.C:147
 MergeV1.C:148
 MergeV1.C:149
 MergeV1.C:150
 MergeV1.C:151
 MergeV1.C:152
 MergeV1.C:153