#include <iomanip.h>
// --- AliRoot header files ---
-
#include "AliRun.h"
#include "AliHeader.h"
#include "AliStream.h"
AliPHOSDigitizer::AliPHOSDigitizer()
{
// ctor
-
InitParameters() ;
- fDefaultInit = kTRUE ;
-}
+ fDefaultInit = kTRUE ;
+ fManager = 0 ; // We work in the standalong mode
+
+ }
//____________________________________________________________________________
-AliPHOSDigitizer::AliPHOSDigitizer(const char *headerFile,const char * name)
+AliPHOSDigitizer::AliPHOSDigitizer(const char *headerFile, const char * name, const Bool_t toSplit)
{
// ctor
fManager = 0 ; // We work in the standalong mode
fSplitFile= 0 ;
InitParameters() ;
+ fToSplit = toSplit ;
Init() ;
fDefaultInit = kFALSE ;
-
}
//____________________________________________________________________________
AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * ard):AliDigitizer(ard)
{
// ctor
- SetTitle("aliroot") ;
- SetName("Default") ;
+ SetTitle(ard->GetInputFileName(0,0)) ;
InitParameters() ;
- fDefaultInit = kTRUE ;
+ fDefaultInit = kFALSE ;
+ fSplitFile = 0 ;
+
+ if (ard->GetOutputFile()) {
+ SetName(ard->GetOutputFile().Data());
+ fToSplit = kTRUE ;
+ } else {
+ SetName("Default") ;
+ fToSplit = kFALSE ;
+ }
}
//____________________________________________________________________________
AliPHOSDigitizer::~AliPHOSDigitizer()
{
// dtor
- // fDefaultInit = kTRUE if Digitizer created by default ctor (to get just the parameters)
-
- if (!fDefaultInit) {
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
-
- // remove the task from the folder list
- gime->RemoveTask("S",GetName()) ;
- gime->RemoveTask("D",GetName()) ;
-
- // remove the Digits from the folder list
- gime->RemoveObjects("D", GetName()) ;
-
- // remove the SDigits from the folder list
- gime->RemoveSDigits() ;
-
- // Delete gAlice
- gime->CloseFile() ;
-
+
fSplitFile = 0 ;
- }
}
//____________________________________________________________________________
if ( (sdigits = (TClonesArray*)folder->FindObject(GetName()) ) ) {
TString fileName(folder->GetName()) ;
fileName.ReplaceAll("_","/") ;
- cout << "INFO: AliPHOSDigitizer::Digitize -> Adding SDigits "
- << GetName() << " from " << fileName << endl ;
+// cout << "INFO: AliPHOSDigitizer::Digitize -> Adding SDigits "
+// << GetName() << " from " << fileName << endl ;
sdigArray->AddAt(sdigits, input) ;
input++ ;
}
//remove digits below thresholds
for(i = 0; i < nEMC ; i++){
- digit = (AliPHOSDigit*) digits->At(i) ;
+ digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
if(sDigitizer->Calibrate( digit->GetAmp() ) < fEMCDigitThreshold)
digits->RemoveAt(i) ;
else
//Set indexes in list of digits and make true digitization of the energy
for (i = 0 ; i < ndigits ; i++) {
- AliPHOSDigit * digit = (AliPHOSDigit *) digits->At(i) ;
+ digit = dynamic_cast<AliPHOSDigit*>( digits->At(i) ) ;
digit->SetIndexInList(i) ;
Float_t energy = sDigitizer->Calibrate(digit->GetAmp()) ;
digit->SetAmp(DigitizeEnergy(energy,digit->GetId()) ) ;
}
}
+
//____________________________________________________________________________
Int_t AliPHOSDigitizer::DigitizeEnergy(Float_t energy, Int_t absId)
{
}
return chanel ;
}
+
//____________________________________________________________________________
void AliPHOSDigitizer::Exec(Option_t *option)
{
if(fManager){
treeD = fManager->GetTreeD() ;
nevents = 1 ; // Will process only one event
- }
- else {
- gAlice->GetEvent(0) ;
- nevents = (Int_t) gAlice->TreeE()->GetEntries() ;
- treeD=gAlice->TreeD() ;
- }
-
-
- //Check, if this branch already exits
- if (treeD) {
- TObjArray * lob = (TObjArray*)treeD->GetListOfBranches() ;
- TIter next(lob) ;
- TBranch * branch = 0 ;
- Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
- while ( (branch = (TBranch*)next()) && (!phosfound || !digitizerfound) ) {
- if ( (strcmp(branch->GetName(), "PHOS")==0) &&
- (strcmp(branch->GetTitle(), GetName())==0) )
- phosfound = kTRUE ;
+ //Check, if this branch already exits
+ if (treeD) {
+ TObjArray * lob = (TObjArray*)treeD->GetListOfBranches() ;
+ TIter next(lob) ;
+ TBranch * branch = 0 ;
+ Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
- else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) &&
- (strcmp(branch->GetTitle(), GetName())==0) )
- digitizerfound = kTRUE ;
- }
-
- if ( phosfound ) {
- cerr << "WARNING: AliPHOSDigitizer -> Digits branch with name " << GetName()
- << " already exits" << endl ;
- return ;
- }
- if ( digitizerfound ) {
- cerr << "WARNING: AliPHOSDigitizer -> Digitizer branch with name " << GetName()
- << " already exits" << endl ;
- return ;
+ while ( (branch = (TBranch*)next()) && (!phosfound || !digitizerfound) ) {
+ if ( (strcmp(branch->GetName(), "PHOS")==0) &&
+ (strcmp(branch->GetTitle(), GetName())==0) )
+ phosfound = kTRUE ;
+
+ else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) &&
+ (strcmp(branch->GetTitle(), GetName())==0) )
+ digitizerfound = kTRUE ;
+ }
+
+ if ( phosfound ) {
+ cerr << "WARNING: AliPHOSDigitizer -> Digits branch with name " << GetName()
+ << " already exits" << endl ;
+ return ;
+ }
+ if ( digitizerfound ) {
+ cerr << "WARNING: AliPHOSDigitizer -> Digitizer branch with name " << GetName()
+ << " already exits" << endl ;
+ return ;
+ }
}
}
-
+ else { //PHOS standalone
+ if(gime->BranchExists("Digits") )
+ return ;
+ nevents=gime->MaxEvent() ;
+ }
+
Int_t ievent ;
for(ievent = 0; ievent < nevents; ievent++){
//____________________________________________________________________________
Bool_t AliPHOSDigitizer::Init()
{
+ // Makes all memory allocations
+
+ if( strcmp(GetTitle(), "") == 0 )
+ SetTitle("galice.root") ;
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), GetName()) ;
+ AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), GetName(), fToSplit) ;
if ( gime == 0 ) {
cerr << "ERROR: AliPHOSDigitizer::Init -> Could not obtain the Getter object !" << endl ;
return kFALSE;
// Post Digitizer to the white board
gime->PostDigitizer(this) ;
+
+ fSplitFile = 0 ;
+ if(fToSplit){
+ // construct the name of the file as /path/PHOS.SDigits.root
+ //First - extract full path if necessary
+ TString digitsFileName(GetTitle()) ;
+ Ssiz_t islash = digitsFileName.Last('/') ;
+ if(islash<digitsFileName.Length())
+ digitsFileName.Remove(islash+1,digitsFileName.Length()) ;
+ else
+ digitsFileName="" ;
+ // Next - append the file name
+ digitsFileName+="PHOS.Digits." ;
+ if((strcmp(GetName(),"Default")!=0)&&(strcmp(GetName(),"")!=0)){
+ digitsFileName+=GetName() ;
+ digitsFileName+="." ;
+ }
+ digitsFileName+="root" ;
+ // Finally - check if the file already opened or open the file
+ fSplitFile = static_cast<TFile*>(gROOT->GetFile(digitsFileName.Data()));
+ if(!fSplitFile)
+ fSplitFile = TFile::Open(digitsFileName.Data(),"update") ;
+ }
//Mark that we will use current header file
if(!fManager){
// check if the specified SDigits do not already exist on the White Board:
// //Folders/RunMC/Event/Data/PHOS/SDigits/headerFile/sdigitsname
- TString path = "Folders/RunMC/Event/Data/PHOS/SDigits" ;
+ AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
+ TString path = gime->SDigitsFolder()->GetName() ;
+
+ // before it was ???? "Folders/RunMC/Event/Data/PHOS/SDigits" ;
path += headerFile ;
path += "/" ;
path += GetName() ;
return;
}
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
gime->PostSDigits(GetName(),headerFile) ;
// check if the requested file is already open or exist and if SDigits Branch exist
}
-//__________________________________________________________________
-void AliPHOSDigitizer::SetSplitFile(const TString splitFileName)
-{
- // Diverts the Digits in a file separate from the hits file
-
- // I guess it is not going to work if we do merging
- if (fManager) {
- cerr << "ERROR: AliPHOSDigitizer::SetSplitFile -> Not yet available in case of merging activated " << endl ;
- return ;
- }
-
- TDirectory * cwd = gDirectory ;
- if ( !(gAlice->GetTreeDFileName() == splitFileName) ) {
- if (gAlice->GetTreeDFile() )
- gAlice->GetTreeDFile()->Close() ;
- }
-
- fSplitFile = gAlice->InitTreeFile("D",splitFileName.Data());
- fSplitFile->cd() ;
- gAlice->Write(0, TObject::kOverwrite);
-
- TTree *treeE = gAlice->TreeE();
- if (!treeE) {
- cerr << "ERROR: AliPHOSDigitizer::SetSplitFile -> No TreeE found "<<endl;
- abort() ;
- }
-
- // copy TreeE
- AliHeader *header = new AliHeader();
- treeE->SetBranchAddress("Header", &header);
- treeE->SetBranchStatus("*",1);
- TTree *treeENew = treeE->CloneTree();
- treeENew->Write(0, TObject::kOverwrite);
-
- // copy AliceGeom
- TGeometry *AliceGeom = static_cast<TGeometry*>(cwd->Get("AliceGeom"));
- if (!AliceGeom) {
- cerr << "ERROR: AliPHOSDigitizer::SetSplitFile -> AliceGeom was not found in the input file "<<endl;
- abort() ;
- }
- AliceGeom->Write(0, TObject::kOverwrite);
-
- gAlice->MakeTree("D",fSplitFile);
- cwd->cd() ;
- cout << "INFO: AliPHOSDigitizer::SetSPlitMode -> Digits will be stored in " << splitFileName.Data() << endl ;
-}
-
//__________________________________________________________________
void AliPHOSDigitizer::Print(Option_t* option)const {
// Print Digitizer's parameters
if( strcmp(GetName(), "") != 0 ){
-
+
+
cout << "------------------- "<< GetName() << " -------------" << endl ;
- const AliRunDigitizer * rd = Manager() ;
- if (rd) {
- Int_t ninput = rd->GetInputStreams()->GetEntries() ;
- Int_t index = 0 ;
- const AliStream * st = 0 ;
- TString out("") ;
- for (index = 0 ; index < ninput ; index++) {
- st = static_cast<AliStream*>(rd->GetInputStreams()->At(index)) ;
- if (index == 0 )
- out = st->GetFileNames()->At(0)->GetName() ;
- cout << "Adding SDigits " << GetName() << " from " << st->GetFileNames()->At(0)->GetName() << endl ;
- }
+
+ const Int_t nStreams = GetNInputStreams() ;
+ if (nStreams) {
+ Int_t index = 0 ;
+ for (index = 0 ; index < nStreams ; index++)
+ cout << "Adding SDigits " << GetName() << " from " << fManager->GetInputFileName(index, 0) << endl ;
+
cout << endl ;
- cout << "Writing digits to " << out.Data() << endl ;
- }
- else {
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
- gime->Folder("sdigits") ;
- cout << "Digitizing sDigits from file(s): " <<endl ;
- TCollection * folderslist = gime->Folder("sdigits")->GetListOfFolders() ;
- TIter next(folderslist) ;
- TFolder * folder = 0 ;
+ cout << "Writing digits to " << fManager->GetInputFileName(0, 0) << endl ;
+ } else {
+// AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
+// gime->Folder("sdigits") ;
+// cout << "Digitizing sDigits from file(s): " <<endl ;
+// TCollection * folderslist = gime->Folder("sdigits")->GetListOfFolders() ;
+// TIter next(folderslist) ;
+// TFolder * folder = 0 ;
- while ( (folder = (TFolder*)next()) ) {
- if ( folder->FindObject(GetName()) )
- cout << "Adding SDigits " << GetName() << " from " << folder->GetName() << endl ;
- }
+// while ( (folder = (TFolder*)next()) ) {
+// if ( folder->FindObject(GetName()) )
+ // cout << "Adding SDigits " << GetName() << " from " << GetSDigitsFileName() << endl ;
+// }
cout << endl ;
cout << "Writing digits to " << GetTitle() << endl ;
}
}
-//__________________________________________________________________
-void AliPHOSDigitizer::SetSDigitsBranch(const char* title)
-{
- // we set title (comment) of the SDigits branch in the first! header file
- if( strcmp(GetName(), "") == 0 )
- Init() ;
-
- AliPHOSGetter::GetInstance()->SDigits()->SetName(title) ;
-
-}
//__________________________________________________________________
Float_t AliPHOSDigitizer::TimeOfNoise(void)
{ // Calculates the time signal generated by noise
//to be rewritten, now returns just big number
return 1. ;
-}
-//____________________________________________________________________________
-void AliPHOSDigitizer::Reset()
-{
- // sets current event number to the first simulated event
-
- if( strcmp(GetName(), "") == 0 )
- Init() ;
-
- // Int_t inputs ;
-// for(inputs = 0; inputs < fNinputs ;inputs++)
-// fIevent->AddAt(-1, inputs ) ;
-
}
//____________________________________________________________________________
AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
const TClonesArray * digits = gime->Digits(GetName()) ;
TTree * treeD ;
-
-
- if(fManager)
- treeD = fManager->GetTreeD() ;
- else {
- if (!gAlice->TreeD() )
- gAlice->MakeTree("D", fSplitFile);
- treeD = gAlice->TreeD();
- }
-
-
+
+ if(fManager)
+ treeD = fManager->GetTreeD() ;
+ else {
+ if((gAlice->TreeD() == 0) || (fSplitFile)) // we should not create TreeD if it is already here
+ gAlice->MakeTree("D", fSplitFile); // We overwrite TreeD in split file in the case of second reconstruction
+ if(fSplitFile)
+ fSplitFile->cd() ;
+ treeD = gAlice->TreeD();
+ }
+
// -- create Digits branch
Int_t bufferSize = 32000 ;
TBranch * digitsBranch = treeD->Branch("PHOS",&digits,bufferSize);
digitsBranch->SetTitle(GetName());
-
+
// -- Create Digitizer branch
Int_t splitlevel = 0 ;
- AliPHOSDigitizer * d = gime->Digitizer(GetName()) ;
+ const AliPHOSDigitizer * d = dynamic_cast<const AliPHOSDigitizer *>(gime->Digitizer()) ;
TBranch * digitizerBranch = treeD->Branch("AliPHOSDigitizer", "AliPHOSDigitizer", &d,bufferSize,splitlevel);
digitizerBranch->SetTitle(GetName());
digitsBranch->Fill() ;
digitizerBranch->Fill() ;
treeD->AutoSave() ;
-
}