- // loop through the sdigits posted to the White Board and add them to the noise
- TCollection * folderslist = ((TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS"))->GetListOfFolders() ;
- TIter next(folderslist) ;
- TFolder * folder = 0 ;
- TClonesArray * sdigits = 0 ;
- TString eventS ;
- eventS += event ;
- while ( (folder = (TFolder*)next()) ) {
- if ( (strcmp(folder->GetTitle(), eventS.Data()) == 0) || (strcmp(folder->GetTitle(), "") == 0) ) {
- Int_t numberoffiles = 0 ;
- if ( (sdigits = (TClonesArray*)folder->FindObject(GetName()) ) ) {
- cout << "INFO: AliPHOSDigitizer::Digitize -> Adding SDigits " << GetName() << " from " << folder->GetName() << endl ;
- numberoffiles++ ;
- Int_t index ;
- AliPHOSDigit * curSDigit ;
- AliPHOSDigit * digit ;
- for ( index = 0 ; index < sdigits->GetEntriesFast(); index++) {
- curSDigit = (AliPHOSDigit*)sdigits->At(index) ;
- curSDigit->ShiftPrimary(numberoffiles) ;
- digit = (AliPHOSDigit*)digits->At(curSDigit->GetId() - 1 ) ;
- *digit = *digit + *curSDigit ;
+ //Put Noise contribution
+ for(absID = 1 ; absID <= nEMC ; absID++){
+ Float_t noise = gRandom->Gaus(0., fPinNoise) ;
+ new((*digits)[absID-1]) AliPHOSDigit( -1, absID, sDigitizer->Digitize(noise), TimeOfNoise() ) ;
+ //look if we have to add signal?
+ digit = dynamic_cast<AliPHOSDigit *>(digits->At(absID-1)) ;
+
+ if(absID==nextSig){
+ //Add SDigits from all inputs
+ ticks->Clear() ;
+ Int_t contrib = 0 ;
+ Float_t a = digit->GetAmp() ;
+ Float_t b = TMath::Abs( a / fTimeSignalLength) ;
+ //Mark the beginning of the signal
+ new((*ticks)[contrib++]) AliPHOSTick(digit->GetTime(),0, b);
+ //Mark the end of the ignal
+ new((*ticks)[contrib++]) AliPHOSTick(digit->GetTime()+fTimeSignalLength, -a, -b);
+
+ //loop over inputs
+ for(i = 0 ; i < fInput ; i++){
+ if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
+ curSDigit = dynamic_cast<AliPHOSDigit*>(dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;
+ else
+ curSDigit = 0 ;
+ //May be several digits will contribute from the same input
+ while(curSDigit && curSDigit->GetId() == absID){
+ //Shift primary to separate primaries belonging different inputs
+ Int_t primaryoffset ;
+ if(fManager)
+ primaryoffset = fManager->GetMask(i) ;
+ else
+ primaryoffset = 10000000*i ;
+ curSDigit->ShiftPrimary(primaryoffset) ;
+
+ a = curSDigit->GetAmp() ;
+ b = a /fTimeSignalLength ;
+ new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime(),0, b);
+ new((*ticks)[contrib++]) AliPHOSTick(curSDigit->GetTime()+fTimeSignalLength, -a, -b);
+
+ *digit = *digit + *curSDigit ; //add energies
+
+ index[i]++ ;
+ if( dynamic_cast<TClonesArray *>(sdigArray->At(i))->GetEntriesFast() > index[i] )
+ curSDigit = dynamic_cast<AliPHOSDigit*>(dynamic_cast<TClonesArray *>(sdigArray->At(i))->At(index[i])) ;
+ else
+ curSDigit = 0 ;
+ }
+ }
+
+ //calculate and set time
+ Float_t time = FrontEdgeTime(ticks) ;
+ digit->SetTime(time) ;
+
+ //Find next signal module
+ nextSig = 200000 ;
+ for(i = 0 ; i < fInput ; i++){
+ sdigits = dynamic_cast<TClonesArray *>(sdigArray->At(i)) ;
+ Int_t curNext = nextSig ;
+ if(sdigits->GetEntriesFast() > index[i] ){
+ curNext = dynamic_cast<AliPHOSDigit *>(sdigits->At(index[i]))->GetId() ;