- if (rawStream.Next()) {
- Int_t ADC_max[64], adc[64], time[64];
- for(Int_t i=0; i<64; i++) {
- // Search for the maximun charge in the train of 21 LHC clocks
- // regardless of the integrator which has been operated:
- ADC_max[i] = 0;
- for(Int_t iClock=0; iClock<21; iClock++){
- if((Int_t)rawStream.GetPedestal(i,iClock) > ADC_max[i])
- {ADC_max[i]=(Int_t)rawStream.GetPedestal(i,iClock);}
- }
- // Convert i (FEE channel numbering) to j (aliroot channel numbering)
- Int_t j = rawStream.GetOfflineChannel(i);
- adc[j] = ADC_max[i];
- time[j] = rawStream.GetTime(i);
- }
- // Channels(aliroot numbering) will be ordered in the tree
- for(Int_t iChannel = 0; iChannel < 64; iChannel++) {
- new ((*digitsArray)[digitsArray->GetEntriesFast()])
- AliVZEROdigit(iChannel,adc[iChannel],time[iChannel]);
- }
- }
-
- digitsTree->Fill();
-}
+ if (rawStream.Next()) {
+
+ Int_t aBBflagsV0A = 0;
+ Int_t aBBflagsV0C = 0;
+ Int_t aBGflagsV0A = 0;
+ Int_t aBGflagsV0C = 0;
+
+ for(Int_t iChannel=0; iChannel < 64; ++iChannel) {
+ Int_t offlineCh = rawStream.GetOfflineChannel(iChannel);
+ // ADC charge samples
+ Short_t chargeADC[AliVZEROdigit::kNClocks];
+ for(Int_t iClock=0; iClock < AliVZEROdigit::kNClocks; ++iClock) {
+ chargeADC[iClock] = rawStream.GetPedestal(iChannel,iClock);
+ }
+ // Integrator flag
+ Bool_t integrator = rawStream.GetIntegratorFlag(iChannel,AliVZEROdigit::kNClocks/2);
+ // Beam-beam and beam-gas flags
+ if(offlineCh<32) {
+ if (rawStream.GetBBFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBBflagsV0C |= (1 << offlineCh);
+ if (rawStream.GetBGFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBGflagsV0C |= (1 << offlineCh);
+ } else {
+ if (rawStream.GetBBFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBBflagsV0A |= (1 << (offlineCh-32));
+ if (rawStream.GetBGFlag(iChannel,AliVZEROdigit::kNClocks/2)) aBGflagsV0A |= (1 << (offlineCh-32));
+ }
+ // HPTDC data (leading time and width)
+ Int_t board = AliVZEROCalibData::GetBoardNumber(offlineCh);
+ Float_t time = rawStream.GetTime(iChannel)*fCalibData->GetTimeResolution(board);
+ Float_t width = rawStream.GetWidth(iChannel)*fCalibData->GetWidthResolution(board);
+ // Add a digit
+ if(!fCalibData->IsChannelDead(iChannel)){
+ new ((*fDigitsArray)[fDigitsArray->GetEntriesFast()])
+ AliVZEROdigit(offlineCh, time,
+ width,integrator,
+ chargeADC);
+ }
+
+ // Filling the part of esd friend object that is available only for raw data
+ fESDVZEROfriend->SetBBScalers(offlineCh,rawStream.GetBBScalers(iChannel));
+ fESDVZEROfriend->SetBGScalers(offlineCh,rawStream.GetBGScalers(iChannel));
+ for (Int_t iBunch = 0; iBunch < AliESDVZEROfriend::kNBunches; iBunch++) {
+ fESDVZEROfriend->SetChargeMB(offlineCh,iBunch,rawStream.GetChargeMB(iChannel,iBunch));
+ fESDVZEROfriend->SetIntMBFlag(offlineCh,iBunch,rawStream.GetIntMBFlag(iChannel,iBunch));
+ fESDVZEROfriend->SetBBMBFlag(offlineCh,iBunch,rawStream.GetBBMBFlag(iChannel,iBunch));
+ fESDVZEROfriend->SetBGMBFlag(offlineCh,iBunch,rawStream.GetBGMBFlag(iChannel,iBunch));
+ }
+ for (Int_t iEv = 0; iEv < AliESDVZEROfriend::kNEvOfInt; iEv++) {
+ fESDVZEROfriend->SetBBFlag(offlineCh,iEv,rawStream.GetBBFlag(iChannel,iEv));
+ fESDVZEROfriend->SetBGFlag(offlineCh,iEv,rawStream.GetBGFlag(iChannel,iEv));
+ }
+ }
+
+ // Filling the global part of esd friend object that is available only for raw data
+ fESDVZEROfriend->SetTriggerInputs(rawStream.GetTriggerInputs());
+ fESDVZEROfriend->SetTriggerInputsMask(rawStream.GetTriggerInputsMask());
+
+ for(Int_t iScaler = 0; iScaler < AliESDVZEROfriend::kNScalers; iScaler++)
+ fESDVZEROfriend->SetTriggerScalers(iScaler,rawStream.GetTriggerScalers(iScaler));
+
+ for(Int_t iBunch = 0; iBunch < AliESDVZEROfriend::kNBunches; iBunch++)
+ fESDVZEROfriend->SetBunchNumbersMB(iBunch,rawStream.GetBunchNumbersMB(iBunch));
+
+ // Store the BB and BG flags in the digits tree (user info)
+ digitsTree->GetUserInfo()->Add(new TParameter<int>("BBflagsV0A",aBBflagsV0A));
+ digitsTree->GetUserInfo()->Add(new TParameter<int>("BBflagsV0C",aBBflagsV0C));
+ digitsTree->GetUserInfo()->Add(new TParameter<int>("BGflagsV0A",aBGflagsV0A));
+ digitsTree->GetUserInfo()->Add(new TParameter<int>("BGflagsV0C",aBGflagsV0C));
+
+ digitsTree->Fill();
+ }
+
+ fDigitsArray->Clear();
+}