]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Bug fixed
authorcheynis <cheynis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 27 Jun 2009 11:52:32 +0000 (11:52 +0000)
committercheynis <cheynis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 27 Jun 2009 11:52:32 +0000 (11:52 +0000)
VZERO/AliVZEROLogicalSignal.h
VZERO/AliVZEROTriggerData.cxx
VZERO/AliVZEROTriggerData.h
VZERO/AliVZEROTriggerSimulator.cxx
VZERO/AliVZEROTriggerSimulator.h

index 3180a12a99bcb1bd1e30c9af96981931b4877304..cb085d11d6c39efc3e080fc49718564d88260df1 100644 (file)
@@ -1,43 +1,44 @@
-#ifndef ALIVZEROLOGICALSIGNAL_H
-#define ALIVZEROLOGICALSIGNAL_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved. 
- *
- * See cxx source for full Copyright notice                               
- */
-
-#include <TObject.h>
-
-class AliVZEROLogicalSignal  : public TObject {
-public:
-       AliVZEROLogicalSignal();
-       AliVZEROLogicalSignal(Float_t start, Float_t stop);
-       AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay);
-       ~AliVZEROLogicalSignal();
-       AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal);
-       AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal);
-       AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const;
-       AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const;
-       // Print method
-       virtual void Print(Option_t* opt="") const { AliInfo(Form("\t -> Start %f Stop %f\n ",fStart,fStop));}
-       
-       Float_t GetStartTime() const {return fStart;};
-       Float_t GetStopTime() const {return fStop;};
-       Float_t GetWidth() const {return (fStop - fStart);};
-       
-       void SetStartTime(Float_t time);
-       void SetStopTime(Float_t time);
-       
-       Bool_t IsInCoincidence(Float_t time);
-       
-private:
-       
-       Float_t fStart; // Start Time of the signal with respect to the LHC Clock
-       Float_t fStop;  // Stop Time of the signal with respect to the LHC Clock
-       
-       
-       ClassDef( AliVZEROLogicalSignal, 1 )  
-       
-};
-
-#endif // ALIVZEROLOGICALSIGNAL_H
+#ifndef ALIVZEROLOGICALSIGNAL_H\r
+#define ALIVZEROLOGICALSIGNAL_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice                               \r
+ */\r
+\r
+#include <TObject.h>\r
+\r
+class AliVZEROLogicalSignal  : public TObject {\r
+public:\r
+       AliVZEROLogicalSignal();\r
+       AliVZEROLogicalSignal(Float_t start, Float_t stop);\r
+       AliVZEROLogicalSignal(UShort_t profilClock, UInt_t delay);\r
+       ~AliVZEROLogicalSignal();\r
+       AliVZEROLogicalSignal(const AliVZEROLogicalSignal &signal);\r
+       AliVZEROLogicalSignal& operator= (const AliVZEROLogicalSignal &signal);\r
+       AliVZEROLogicalSignal operator& (const AliVZEROLogicalSignal &signal) const;\r
+       AliVZEROLogicalSignal operator| (const AliVZEROLogicalSignal &signal) const;\r
+       // Print method\r
+       virtual void Print(Option_t* opt="") const { AliInfo(Form("\t%s -> Start %f Stop %f\n ",opt,fStart,fStop));}\r
+       \r
+       Float_t GetStartTime() const {return fStart;};\r
+       Float_t GetStopTime() const {return fStop;};\r
+       Float_t GetWidth() const {return (fStop - fStart);};\r
+       \r
+       void SetStartTime(Float_t time){fStart = time;};\r
+       void SetStopTime(Float_t time){fStop = time;};\r
+       \r
+       Bool_t IsInCoincidence(Float_t time);\r
+       \r
+private:\r
+       \r
+       Float_t fStart; // Start Time of the signal with respect to the LHC Clock\r
+       Float_t fStop;  // Stop Time of the signal with respect to the LHC Clock\r
+       \r
+       \r
+       ClassDef( AliVZEROLogicalSignal, 1 )  \r
+       \r
+};\r
+\r
+#endif // ALIVZEROLOGICALSIGNAL_H\r
+\r
index ba837c4b0bae48187f9c882783f313a7a67402ca..2e34597aabb3aaf0996e4554834c8f8385804843 100644 (file)
-
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-
-//  
-// 
-// 
-#include <TObjString.h>
-
-#include "AliLog.h"
-#include "AliDCSValue.h"
-#include "AliVZEROTriggerData.h"
-
-ClassImp(AliVZEROTriggerData)
-//________________________________________________________________
-
-AliVZEROTriggerData::AliVZEROTriggerData() :
-       TNamed(),
-       fBBAThreshold(0),
-       fBBCThreshold(0) ,  
-       fBGAThreshold(0) ,  
-       fBGCThreshold(0) ,  
-       fBBAForBGThreshold(0) ,  
-       fBBCForBGThreshold(0) ,  
-       fCentralityVOAThrLow(0) ,  
-       fCentralityVOAThrHigh(0) , 
-       fCentralityVOCThrLow(0) ,  
-       fCentralityVOCThrHigh(0) , 
-       fMultV0AThrLow(0) ,  
-       fMultV0AThrHigh(0) , 
-       fMultV0CThrLow(0) ,  
-       fMultV0CThrHigh(0),
-       fRun(0),
-       fStartTime(0),
-       fEndTime(0),
-       fIsProcessed(kFALSE)    
-
-{
-       for(int i=0; i<kNCIUBoards ;i++) {
-               fClk1Win1[i] = fClk1Win2[i] = 0;
-               fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;
-               fClk2Win1[i] = fClk2Win2[i] = 0;
-               fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;
-               fLatchWin1[i] = fLatchWin2[i] = 0;
-               fResetWin1[i] = fResetWin2[i] = 0;
-               fPedestalSubtraction[i] = kFALSE;
-       }
-}
-//________________________________________________________________
-AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :
-       TNamed(),
-       fBBAThreshold(0),
-       fBBCThreshold(0) ,  
-       fBGAThreshold(0) ,  
-       fBGCThreshold(0) ,  
-       fBBAForBGThreshold(0) ,  
-       fBBCForBGThreshold(0) ,  
-       fCentralityVOAThrLow(0) ,  
-       fCentralityVOAThrHigh(0) , 
-       fCentralityVOCThrLow(0) ,  
-       fCentralityVOCThrHigh(0) , 
-       fMultV0AThrLow(0) ,  
-       fMultV0AThrHigh(0) , 
-       fMultV0CThrLow(0) ,  
-       fMultV0CThrHigh(0),
-       fRun(nRun),
-       fStartTime(startTime),
-       fEndTime(endTime),
-       fIsProcessed(kFALSE)
-{
-       for(int i=0; i<kNCIUBoards ;i++) {
-               fClk1Win1[i] = fClk1Win2[i] = 0;
-               fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;
-               fClk2Win1[i] = fClk2Win2[i] = 0;
-               fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;
-               fLatchWin1[i] = fLatchWin2[i] = 0;
-               fResetWin1[i] = fResetWin2[i] = 0;
-               fPedestalSubtraction[i] = kFALSE;
-       }
-       TString namst = "Trigger_FEE";
-       SetName(namst.Data());
-       SetTitle(namst.Data());
-       
-}
-
-//________________________________________________________________
-AliVZEROTriggerData::~AliVZEROTriggerData(){
-}
-//_____________________________________________________________________________
-void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){
-       TMap * params = data->GetParameters();
-       TIter iter(params);     
-       TObjString* aliasName;
-       
-       while ((  aliasName = (TObjString*) iter.Next() ))  {
-               AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);
-               Float_t val = aValue->GetFloat();
-               //AliInfo(Form("%s : %f",aliasName->String().Data(), val));
-               SetParameter(aliasName->String(),val);
-       
-       }       
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerData::SetParameter(TString name, Float_t val){
-       Int_t iBoard = -1;
-       Int_t iChannel = -1;
-
-       TSeqCollection* nameSplit = name.Tokenize("/");
-       TObjString * boardName = (TObjString *)nameSplit->At(2);
-       if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);
-       
-       TString paramName = ((TObjString *)nameSplit->At(3))->String();
-       Char_t channel[2] ; channel[1] = '\0';
-       channel[0] = paramName[paramName.Sizeof()-2];
-       sscanf(channel,"%d",&iChannel);
-       
-       if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);
-       else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);
-       else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);
-       else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);
-       else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);
-       else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);
-       else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);
-       else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);
-       else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);
-       else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);
-       else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);
-       else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);
-       else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);
-       else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);
-       else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);
-       else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);
-       else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);
-       else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);
-       else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);
-       else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);
-       else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);
-       else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);
-       else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);
-       else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);
-       else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);
-       else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);
-       else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);
-       else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);
-       else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);
-       else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);
-       else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);
-       else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);
-       else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);
-       else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);
-       else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);
-       else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);
-       else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) {
-               if(integrator) fPedestalCutOdd[board][channel] = val;
-               else fPedestalCutEven[board][channel] = val;
-       } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) {
-               if(integrator) return(fPedestalCutOdd[board][channel]);
-               else return(fPedestalCutEven[board][channel]);
-       }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) {
-               if(integrator) fPedestalOdd[board][channel] = val;
-               else fPedestalEven[board][channel] = val;
-       } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) {
-               if(integrator) return(fPedestalOdd[board][channel]);
-               else return(fPedestalEven[board][channel]);
-       } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;
-       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);
-       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;
-       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);
-       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return 0;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;
-       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);
-       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return kFALSE;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;
-       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));
-}
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)
-{
-       if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);
-       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));
-       return kFALSE;
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)
-{
-       if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;
-       else AliError(Form("Trigger output number %d not valid",output));
-}
-
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)
-{
-       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);
-       else AliFatal("Profil Clock1 Win1 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)
-{
-       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);
-       else AliFatal("Profil Clock2 Win1 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)
-{
-       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;
-       else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)
-{
-       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;
-       else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)
-{
-       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);
-       else AliFatal("Profil Clock1 Win2 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)
-{
-       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);
-       else AliFatal("Profil Clock2 Win2 Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)
-{
-       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;
-       else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)
-{
-       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;
-       else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)
-{
-       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);
-       else AliFatal("Profil Clock1 Win1 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)
-{
-       if(delay>1023){
-               AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
-               delay = delay & 0x3FF;
-       }
-       if(board<kNCIUBoards)   fDelayClk1Win1[board] = delay;
-       else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)
-{
-       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);
-       else AliFatal("Profil Clock2 Win1 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)
-{
-       if(delay>1023){
-               AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
-               delay = delay & 0x3FF;
-       }
-       if(board<kNCIUBoards)   fDelayClk2Win1[board] = delay;
-       else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)
-{
-       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);
-       else AliFatal("Profil Clock1 Win2 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)
-{
-       if(delay>1023){
-               AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
-               delay = delay & 0x3FF;
-       }
-       if(board<kNCIUBoards)   fDelayClk1Win2[board] = delay;
-       else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)
-{
-       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);
-       else AliFatal("Profil Clock2 Win2 Delays Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)
-{
-       if(delay>1023){
-               AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));
-               delay = delay & 0x3FF;
-       }
-       if(board<kNCIUBoards)   fDelayClk2Win2[board] = delay;
-       else AliError("Trying to write out of the array");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){
-       if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);
-       else AliFatal("Latch Win1 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)
-{
-       if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;
-       else AliError(Form("Latch Win1 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){
-       if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);
-       else AliFatal("Latch Win2 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)
-{
-       if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;
-       else AliError(Form("Latch Win2 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){
-       if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);
-       else AliFatal("Reset Win1 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)
-{
-       if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;
-       else AliError(Form("Reset Win1 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){
-       if(resets)  for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);
-       else AliFatal("Reset Win2 profil Not defined.");
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)
-{
-       if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;
-       else AliError(Form("Reset Win2 profil of board %d is not valid",board));
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){
-       if(peds)  for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);
-       else AliFatal("Pedestal Subtraction Not defined.");
-       
-}
-//________________________________________________________________
-void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)
-{
-       if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;
-       else AliError(Form("Board %d is not valid",board));
-}
-
-//________________________________________________________________
-Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock){
-       Bool_t word[5];
-       Bool_t isValid = kTRUE;
-       Short_t RisingEdge = 0;
-       Short_t FallingEdge = 0;
-       for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;
-       
-       if(word[0] != word[4]){
-               if(word[4]) FallingEdge++;
-               else RisingEdge++;
-       }       
-       for(int i=1 ; i<5 ; i++){
-               if(word[i] != word[i-1]) {
-                       if(word[i-1]) FallingEdge++;
-                       else RisingEdge++;
-               }
-       }
-       if((FallingEdge>1)||(RisingEdge>1)) isValid = kFALSE;
-       if(((RisingEdge==0)&&(FallingEdge==0)) &&(!word[0]))  isValid = kFALSE;
-       return isValid;
-}
+\r
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ *                                                                        *\r
+ * Author: The ALICE Off-line Project.                                    *\r
+ * Contributors are mentioned in the code where appropriate.              *\r
+ *                                                                        *\r
+ * Permission to use, copy, modify and distribute this software and its   *\r
+ * documentation strictly for non-commercial purposes is hereby granted   *\r
+ * without fee, provided that the above copyright notice appears in all   *\r
+ * copies and that both the copyright notice and this permission notice   *\r
+ * appear in the supporting documentation. The authors make no claims     *\r
+ * about the suitability of this software for any purpose. It is          *\r
+ * provided "as is" without express or implied warranty.                  *\r
+ **************************************************************************/\r
+\r
+\r
+//  \r
+// \r
+// \r
+#include <TObjString.h>\r
+\r
+#include "AliLog.h"\r
+#include "AliDCSValue.h"\r
+#include "AliVZEROTriggerData.h"\r
+\r
+ClassImp(AliVZEROTriggerData)\r
+//________________________________________________________________\r
+\r
+AliVZEROTriggerData::AliVZEROTriggerData() :\r
+       TNamed(),\r
+       fBBAThreshold(0),\r
+       fBBCThreshold(0) ,  \r
+       fBGAThreshold(0) ,  \r
+       fBGCThreshold(0) ,  \r
+       fBBAForBGThreshold(0) ,  \r
+       fBBCForBGThreshold(0) ,  \r
+       fCentralityVOAThrLow(0) ,  \r
+       fCentralityVOAThrHigh(0) , \r
+       fCentralityVOCThrLow(0) ,  \r
+       fCentralityVOCThrHigh(0) , \r
+       fMultV0AThrLow(0) ,  \r
+       fMultV0AThrHigh(0) , \r
+       fMultV0CThrLow(0) ,  \r
+       fMultV0CThrHigh(0),\r
+       fRun(0),\r
+       fStartTime(0),\r
+       fEndTime(0),\r
+       fIsProcessed(kFALSE)    \r
+\r
+{\r
+       for(int i=0; i<kNCIUBoards ;i++) {\r
+               fClk1Win1[i] = fClk1Win2[i] = 0;\r
+               fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
+               fClk2Win1[i] = fClk2Win2[i] = 0;\r
+               fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
+               fLatchWin1[i] = fLatchWin2[i] = 0;\r
+               fResetWin1[i] = fResetWin2[i] = 0;\r
+               fPedestalSubtraction[i] = kFALSE;\r
+       }\r
+}\r
+//________________________________________________________________\r
+AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :\r
+       TNamed(),\r
+       fBBAThreshold(0),\r
+       fBBCThreshold(0) ,  \r
+       fBGAThreshold(0) ,  \r
+       fBGCThreshold(0) ,  \r
+       fBBAForBGThreshold(0) ,  \r
+       fBBCForBGThreshold(0) ,  \r
+       fCentralityVOAThrLow(0) ,  \r
+       fCentralityVOAThrHigh(0) , \r
+       fCentralityVOCThrLow(0) ,  \r
+       fCentralityVOCThrHigh(0) , \r
+       fMultV0AThrLow(0) ,  \r
+       fMultV0AThrHigh(0) , \r
+       fMultV0CThrLow(0) ,  \r
+       fMultV0CThrHigh(0),\r
+       fRun(nRun),\r
+       fStartTime(startTime),\r
+       fEndTime(endTime),\r
+       fIsProcessed(kFALSE)\r
+{\r
+       for(int i=0; i<kNCIUBoards ;i++) {\r
+               fClk1Win1[i] = fClk1Win2[i] = 0;\r
+               fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
+               fClk2Win1[i] = fClk2Win2[i] = 0;\r
+               fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
+               fLatchWin1[i] = fLatchWin2[i] = 0;\r
+               fResetWin1[i] = fResetWin2[i] = 0;\r
+               fPedestalSubtraction[i] = kFALSE;\r
+       }\r
+       TString namst = "Trigger_FEE";\r
+       SetName(namst.Data());\r
+       SetTitle(namst.Data());\r
+       \r
+}\r
+//________________________________________________________________\r
+AliVZEROTriggerData::AliVZEROTriggerData(const AliVZEROTriggerData& triggerdata) :\r
+TNamed(),\r
+fBBAThreshold(0),\r
+fBBCThreshold(0) ,  \r
+fBGAThreshold(0) ,  \r
+fBGCThreshold(0) ,  \r
+fBBAForBGThreshold(0) ,  \r
+fBBCForBGThreshold(0) ,  \r
+fCentralityVOAThrLow(0) ,  \r
+fCentralityVOAThrHigh(0) , \r
+fCentralityVOCThrLow(0) ,  \r
+fCentralityVOCThrHigh(0) , \r
+fMultV0AThrLow(0) ,  \r
+fMultV0AThrHigh(0) , \r
+fMultV0CThrLow(0) ,  \r
+fMultV0CThrHigh(0),\r
+fRun(0),\r
+fStartTime(0),\r
+fEndTime(0),\r
+fIsProcessed(kFALSE)   \r
+{\r
+       // copy constructor\r
+       \r
+       AliInfo("Not implemented");\r
+}\r
+\r
+//________________________________________________________________\r
+AliVZEROTriggerData::~AliVZEROTriggerData(){\r
+}\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
+       TMap * params = data->GetParameters();\r
+       TIter iter(params);     \r
+       TObjString* aliasName;\r
+       \r
+       while ((  aliasName = (TObjString*) iter.Next() ))  {\r
+               AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);\r
+               Float_t val = aValue->GetFloat();\r
+               //AliInfo(Form("%s : %f",aliasName->String().Data(), val));\r
+               SetParameter(aliasName->String(),val);\r
+       \r
+       }       \r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
+       Int_t iBoard = -1;\r
+       Int_t iChannel = -1;\r
+\r
+       TSeqCollection* nameSplit = name.Tokenize("/");\r
+       TObjString * boardName = (TObjString *)nameSplit->At(2);\r
+       if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);\r
+       \r
+       TString paramName = ((TObjString *)nameSplit->At(3))->String();\r
+       Char_t channel[2] ; channel[1] = '\0';\r
+       channel[0] = paramName[paramName.Sizeof()-2];\r
+       sscanf(channel,"%d",&iChannel);\r
+       \r
+       if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);\r
+       else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);\r
+       else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);\r
+       else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);\r
+       else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);\r
+       else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);\r
+       else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);\r
+       else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);\r
+       else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);\r
+       else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);\r
+       else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);\r
+       else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);\r
+       else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);\r
+       else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);\r
+       else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);\r
+       else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);\r
+       else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);\r
+       else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);\r
+       else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);\r
+       else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);\r
+       else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);\r
+       else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);\r
+       else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);\r
+       else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);\r
+       else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);\r
+       else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) {\r
+               if(integrator) fPedestalCutOdd[board][channel] = val;\r
+               else fPedestalCutEven[board][channel] = val;\r
+       } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) {\r
+               if(integrator) return(fPedestalCutOdd[board][channel]);\r
+               else return(fPedestalCutEven[board][channel]);\r
+       }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) {\r
+               if(integrator) fPedestalOdd[board][channel] = val;\r
+               else fPedestalEven[board][channel] = val;\r
+       } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) {\r
+               if(integrator) return(fPedestalOdd[board][channel]);\r
+               else return(fPedestalEven[board][channel]);\r
+       } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;\r
+       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);\r
+       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;\r
+       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);\r
+       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return 0;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;\r
+       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);\r
+       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return kFALSE;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;\r
+       else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
+}\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
+{\r
+       if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);\r
+       else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
+       return kFALSE;\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
+{\r
+       if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;\r
+       else AliError(Form("Trigger output number %d not valid",output));\r
+}\r
+\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
+{\r
+       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);\r
+       else AliFatal("Profil Clock1 Win1 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
+{\r
+       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);\r
+       else AliFatal("Profil Clock2 Win1 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
+{\r
+       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;\r
+       else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
+{\r
+       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;\r
+       else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
+{\r
+       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);\r
+       else AliFatal("Profil Clock1 Win2 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
+{\r
+       if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);\r
+       else AliFatal("Profil Clock2 Win2 Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
+{\r
+       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;\r
+       else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
+{\r
+       if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;\r
+       else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
+{\r
+       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);\r
+       else AliFatal("Profil Clock1 Win1 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
+{\r
+       if(delay>1023){\r
+               AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+               delay = delay & 0x3FF;\r
+       }\r
+       if(board<kNCIUBoards)   fDelayClk1Win1[board] = delay;\r
+       else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
+{\r
+       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);\r
+       else AliFatal("Profil Clock2 Win1 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
+{\r
+       if(delay>1023){\r
+               AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+               delay = delay & 0x3FF;\r
+       }\r
+       if(board<kNCIUBoards)   fDelayClk2Win1[board] = delay;\r
+       else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
+{\r
+       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);\r
+       else AliFatal("Profil Clock1 Win2 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
+{\r
+       if(delay>1023){\r
+               AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+               delay = delay & 0x3FF;\r
+       }\r
+       if(board<kNCIUBoards)   fDelayClk1Win2[board] = delay;\r
+       else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
+{\r
+       if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);\r
+       else AliFatal("Profil Clock2 Win2 Delays Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
+{\r
+       if(delay>1023){\r
+               AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
+               delay = delay & 0x3FF;\r
+       }\r
+       if(board<kNCIUBoards)   fDelayClk2Win2[board] = delay;\r
+       else AliError("Trying to write out of the array");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
+       if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);\r
+       else AliFatal("Latch Win1 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
+{\r
+       if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;\r
+       else AliError(Form("Latch Win1 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
+       if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);\r
+       else AliFatal("Latch Win2 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
+{\r
+       if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;\r
+       else AliError(Form("Latch Win2 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
+       if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);\r
+       else AliFatal("Reset Win1 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
+{\r
+       if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;\r
+       else AliError(Form("Reset Win1 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
+       if(resets)  for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);\r
+       else AliFatal("Reset Win2 profil Not defined.");\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
+{\r
+       if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;\r
+       else AliError(Form("Reset Win2 profil of board %d is not valid",board));\r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
+       if(peds)  for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);\r
+       else AliFatal("Pedestal Subtraction Not defined.");\r
+       \r
+}\r
+//________________________________________________________________\r
+void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
+{\r
+       if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;\r
+       else AliError(Form("Board %d is not valid",board));\r
+}\r
+\r
+//________________________________________________________________\r
+Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock){\r
+       Bool_t word[5];\r
+       Bool_t isValid = kTRUE;\r
+       Short_t RisingEdge = 0;\r
+       Short_t FallingEdge = 0;\r
+       for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
+       \r
+       if(word[0] != word[4]){\r
+               if(word[4]) FallingEdge++;\r
+               else RisingEdge++;\r
+       }       \r
+       for(int i=1 ; i<5 ; i++){\r
+               if(word[i] != word[i-1]) {\r
+                       if(word[i-1]) FallingEdge++;\r
+                       else RisingEdge++;\r
+               }\r
+       }\r
+       if((FallingEdge>1)||(RisingEdge>1)) isValid = kFALSE;\r
+       if(((RisingEdge==0)&&(FallingEdge==0)) &&(!word[0]))  isValid = kFALSE;\r
+       return isValid;\r
+}\r
+\r
index dee679d7b7d2e62842891e198d0ae97e3f6028f9..4b137925886dfc986b781347be92e38cdabdc194 100644 (file)
-#ifndef ALIVZEROTRIGGERDATA_H
-#define ALIVZEROTRIGGERDATA_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved. 
- *
- * See cxx source for full Copyright notice                               
- */
-#include "AliVZERODataFEE.h"
-
-#include <TNamed.h>
-
-class AliVZEROTriggerData : public TNamed {
-public:
-       AliVZEROTriggerData();
-       AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime);
-       ~AliVZEROTriggerData();
-       AliVZEROTriggerData(const AliVZEROTriggerData &triggerData);
-       AliVZEROTriggerData& operator= (const AliVZEROTriggerData &triggerData);
-       
-       void FillData(AliVZERODataFEE * data);
-
-       // ----- Setters -----
-
-       void SetClk1Win1(UShort_t* clks);
-       void SetClk1Win1(UShort_t clk, Int_t board);
-       void SetClk2Win1(UShort_t* clks);
-       void SetClk2Win1(UShort_t clk, Int_t board);
-       
-       void SetClk1Win2(UShort_t* clks);
-       void SetClk1Win2(UShort_t clk, Int_t board);
-       void SetClk2Win2(UShort_t* clks);
-       void SetClk2Win2(UShort_t clk, Int_t board);
-       
-       void SetDelayClk1Win1(UShort_t* delays);
-       void SetDelayClk1Win1(UShort_t delay, Int_t board);
-       void SetDelayClk2Win1(UShort_t* delays);
-       void SetDelayClk2Win1(UShort_t delay, Int_t board);
-       
-       void SetDelayClk1Win2(UShort_t* delays);
-       void SetDelayClk1Win2(UShort_t delay, Int_t board);
-       void SetDelayClk2Win2(UShort_t* delays);
-       void SetDelayClk2Win2(UShort_t delay, Int_t board);
-       
-       void SetLatchWin1(UShort_t *latchs);
-       void SetLatchWin1(UShort_t latch, Int_t board);
-       void SetLatchWin2(UShort_t *latchs);
-       void SetLatchWin2(UShort_t latch, Int_t board);
-       
-       void SetResetWin1(UShort_t *resets);
-       void SetResetWin1(UShort_t reset, Int_t board);
-       void SetResetWin2(UShort_t *resets);
-       void SetResetWin2(UShort_t reset, Int_t board);
-       
-       void SetPedestalSubtraction(Bool_t *peds);
-       void SetPedestalSubtraction(Bool_t ped, Int_t board);
-       
-       void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;};
-       void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;};
-
-       void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;};
-       void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;};
-
-       void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;};
-       void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;};
-       
-       void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;};
-       void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;};
-       
-       void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;};
-       void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;};
-       
-       void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;};
-       void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;};
-       
-       void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;};
-       void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;};
-       
-       void SetTriggerSelected(UShort_t trigger, Int_t output);
-       
-       void SetEnableCharge(Bool_t val, Int_t board, Int_t channel);
-       void SetEnableTiming(Bool_t val, Int_t board, Int_t channel);
-       void SetDiscriThr(UShort_t val, Int_t board, Int_t channel);
-       void SetDelayHit(UShort_t val, Int_t board, Int_t channel);
-       void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel);
-       void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel);
-
-       
-       // ----- Getters -----
-       
-       UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;};
-       UShort_t GetClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fClk1Win1[board]:0);};
-       UShort_t * GetClk2Win1() const {return (UShort_t*)fClk2Win1;};
-       UShort_t GetClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fClk2Win1[board]:0);};
-
-       UShort_t * GetClk1Win2() const {return (UShort_t*)fClk1Win2;};
-       UShort_t GetClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fClk1Win2[board]:0);};
-       UShort_t * GetClk2Win2() const {return (UShort_t*)fClk2Win2;};
-       UShort_t GetClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fClk2Win2[board]:0);};
-
-       UShort_t * GetDelayClk1Win1() const {return (UShort_t*)fDelayClk1Win1;};
-       UShort_t GetDelayClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win1[board]:0);};
-       UShort_t * GetDelayClk2Win1() const {return (UShort_t*)fDelayClk2Win1;};
-       UShort_t GetDelayClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win1[board]:0);};
-       
-       UShort_t * GetDelayClk1Win2() const {return (UShort_t*)fDelayClk1Win2;};
-       UShort_t GetDelayClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win2[board]:0);};
-       UShort_t * GetDelayClk2Win2() const {return (UShort_t*)fDelayClk2Win2;};
-       UShort_t GetDelayClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win2[board]:0);};
-       
-       UShort_t * GetLatchWin1() const {return (UShort_t*)fLatchWin1;};
-       UShort_t GetLatchWin1(Int_t board ) const  {return (board<kNCIUBoards?fLatchWin1[board]:0);};
-       UShort_t * GetLatchWin2() const {return (UShort_t*)fLatchWin2;};
-       UShort_t GetLatchWin2(Int_t board ) const  {return (board<kNCIUBoards?fLatchWin2[board]:0);};
-       
-       UShort_t * GetResetWin1() const {return (UShort_t*)fResetWin1;};
-       UShort_t GetResetWin1(Int_t board ) const  {return (board<kNCIUBoards?fResetWin1[board]:0);};
-       UShort_t * GetResetWin2() const {return (UShort_t*)fResetWin2;};
-       UShort_t GetResetWin2(Int_t board ) const  {return (board<kNCIUBoards?fResetWin2[board]:0);};
-       
-       Bool_t * GetPedestalSubtraction() const {return (Bool_t*) fPedestalSubtraction;};
-       Bool_t GetPedestalSubtraction(Int_t board ) const  {return (board<kNCIUBoards?fPedestalSubtraction[board]:0);};
-
-       UShort_t GetBBAThreshold() const {return fBBAThreshold;};
-       UShort_t GetBBCThreshold() const {return fBBCThreshold;};
-
-       UShort_t GetBGAThreshold() const {return fBGAThreshold;};
-       UShort_t GetBGCThreshold() const {return fBGCThreshold;};
-
-       UShort_t GetBBAForBGThreshold() const {return fBBAForBGThreshold;};
-       UShort_t GetBBCForBGThreshold() const {return fBBCForBGThreshold;};
-       
-       UShort_t GetCentralityV0AThrLow() const {return fCentralityVOAThrLow;};
-       UShort_t GetCentralityV0AThrHigh() const {return fCentralityVOAThrHigh;};
-       
-       UShort_t GetCentralityV0CThrLow() const {return fCentralityVOCThrLow;};
-       UShort_t GetCentralityV0CThrHigh() const {return fCentralityVOCThrHigh;};
-
-       UShort_t GetMultV0AThrLow() const {return fMultV0AThrLow;};
-       UShort_t GetMultV0AThrHigh() const {return fMultV0AThrHigh;};
-
-       UShort_t GetMultV0CThrLow() const {return fMultV0CThrLow;};
-       UShort_t GetMultV0CThrHigh() const {return fMultV0CThrHigh;};
-
-       UShort_t GetTriggerSelected(Int_t output) const {return (output<kNTriggerOutputs?fTriggerSelected[output]:0);};
-       
-       Bool_t GetEnableCharge(Int_t board, Int_t channel);
-       Bool_t GetEnableTiming(Int_t board, Int_t channel);
-       UShort_t GetDiscriThr(Int_t board, Int_t channel);
-       UShort_t GetDelayHit(Int_t board, Int_t channel);
-       UShort_t GetPedestal(Int_t integrator, Int_t board, Int_t channel);
-       UShort_t GetPedestalCut(Int_t integrator, Int_t board, Int_t channel);
-
-       enum {
-               kNCIUBoards = AliVZERODataFEE::kNCIUBoards,
-               kNAliases = AliVZERODataFEE::kNAliases,
-               kNTriggerOutputs = 5,
-               kNChannels = 8
-       };
-       
-private:
-       
-       UShort_t fClk1Win1[kNCIUBoards]; //Profil of the Clock 1  of the Window 1 (BB window)
-       UShort_t fClk2Win1[kNCIUBoards]; //Profil of the Clock 2  of the Window 1 (BB window)
-       UShort_t fClk1Win2[kNCIUBoards]; //Profil of the Clock 1  of the Window 2 (BG window)
-       UShort_t fClk2Win2[kNCIUBoards]; //Profil of the Clock 2  of the Window 2 (BG window)
-       UShort_t fDelayClk1Win1[kNCIUBoards]; // Delays of the Clock 1  of the Window 1 (BB window)
-       UShort_t fDelayClk2Win1[kNCIUBoards]; // Delays of the Clock 2 of the Window 1 (BB window)
-       UShort_t fDelayClk1Win2[kNCIUBoards]; // Delays of the Clock 1  of the Window 2 (BG window)
-       UShort_t fDelayClk2Win2[kNCIUBoards]; // Delays of the Clock 2 of the Window 2 (BG window)
-       UShort_t fLatchWin1[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 1 (BB window)
-       UShort_t fLatchWin2[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 2 (BG window)
-       UShort_t fResetWin1[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 1 (BB window)
-       UShort_t fResetWin2[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 2 (BG window)
-       Bool_t   fPedestalSubtraction[kNCIUBoards]; // Flag to en(dis)able pedestal subtraction before centrality trigger calculation
-       UShort_t fBBAThreshold;  // Minimum bias Threshold in number of channel hit for V0A
-       UShort_t fBBCThreshold;  // Minimum bias Threshold in number of channel hit for V0C
-       UShort_t fBGAThreshold;  // Beam Gas Threshold in number of channel hit for V0A
-       UShort_t fBGCThreshold;  // Beam Gas Threshold in number of channel hit for V0C
-       UShort_t fBBAForBGThreshold;  // BBA threshold for Beam Gas triggers (i.e. BBA and BGC)
-       UShort_t fBBCForBGThreshold;  // BBC threshold for Beam Gas triggers (i.e. BBC and BGA)
-       UShort_t fCentralityVOAThrLow;  // Threshold used for centrality triggers (i.e. CTA1 and CTC1)
-       UShort_t fCentralityVOAThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)
-       UShort_t fCentralityVOCThrLow;  // Threshold used for centrality triggers (i.e. CTA1 and CTC1)
-       UShort_t fCentralityVOCThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)
-       UShort_t fMultV0AThrLow;  // Threshold used for multiplicity triggers (i.e. MTA and MTC)
-       UShort_t fMultV0AThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
-       UShort_t fMultV0CThrLow;  // Threshold used for multiplicity triggers (i.e. MTA and MTC)
-       UShort_t fMultV0CThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)
-       UShort_t fTriggerSelected[kNTriggerOutputs]; // Triggers selected on the 5 outputs to CTP
-       Bool_t   fEnableCharge[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Charge triggers
-       Bool_t   fEnableTiming[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Timing triggers
-       UShort_t fDiscriThr[kNCIUBoards][kNChannels]; // Threshold of each discriminator
-       UShort_t fDelayHit[kNCIUBoards][kNChannels]; // Individual delays of each channel 
-       UShort_t fPedestalOdd[kNCIUBoards][kNChannels]; // Pedestals for the Odd integrators
-       UShort_t fPedestalEven[kNCIUBoards][kNChannels]; // Pedestals for the Even integrators
-       UShort_t fPedestalCutOdd[kNCIUBoards][kNChannels]; // Pedestals Cut for the Odd integrators
-       UShort_t fPedestalCutEven[kNCIUBoards][kNChannels]; // Pedestals Cut for the Even integrators
-
-       Int_t fRun;       // Run number
-       Int_t fStartTime; // Start time
-       Int_t fEndTime;   // End time
-       TString fAliasNames[kNAliases]; // aliases for DCS data
-       Bool_t fIsProcessed; // bool to know processing status
-       
-       Bool_t  IsClkValid(UShort_t clock);
-       void SetParameter(TString name, Float_t val);
-       
-       
-       ClassDef( AliVZEROTriggerData, 1 )  
-
-};
-
-
-#endif // ALIVZEROTRIGGERDATA_H
+#ifndef ALIVZEROTRIGGERDATA_H\r
+#define ALIVZEROTRIGGERDATA_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice                               \r
+ */\r
+#include "AliVZERODataFEE.h"\r
+\r
+#include <TNamed.h>\r
+\r
+class AliVZEROTriggerData : public TNamed {\r
+public:\r
+       AliVZEROTriggerData();\r
+       AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime);\r
+       ~AliVZEROTriggerData();\r
+       AliVZEROTriggerData(const AliVZEROTriggerData &triggerData);\r
+       AliVZEROTriggerData& operator= (const AliVZEROTriggerData &/*triggerData*/){AliInfo("Not implemented");return *this;};\r
+       \r
+       void FillData(AliVZERODataFEE * data);\r
+\r
+       // ----- Setters -----\r
+\r
+       void SetClk1Win1(UShort_t* clks);\r
+       void SetClk1Win1(UShort_t clk, Int_t board);\r
+       void SetClk2Win1(UShort_t* clks);\r
+       void SetClk2Win1(UShort_t clk, Int_t board);\r
+       \r
+       void SetClk1Win2(UShort_t* clks);\r
+       void SetClk1Win2(UShort_t clk, Int_t board);\r
+       void SetClk2Win2(UShort_t* clks);\r
+       void SetClk2Win2(UShort_t clk, Int_t board);\r
+       \r
+       void SetDelayClk1Win1(UShort_t* delays);\r
+       void SetDelayClk1Win1(UShort_t delay, Int_t board);\r
+       void SetDelayClk2Win1(UShort_t* delays);\r
+       void SetDelayClk2Win1(UShort_t delay, Int_t board);\r
+       \r
+       void SetDelayClk1Win2(UShort_t* delays);\r
+       void SetDelayClk1Win2(UShort_t delay, Int_t board);\r
+       void SetDelayClk2Win2(UShort_t* delays);\r
+       void SetDelayClk2Win2(UShort_t delay, Int_t board);\r
+       \r
+       void SetLatchWin1(UShort_t *latchs);\r
+       void SetLatchWin1(UShort_t latch, Int_t board);\r
+       void SetLatchWin2(UShort_t *latchs);\r
+       void SetLatchWin2(UShort_t latch, Int_t board);\r
+       \r
+       void SetResetWin1(UShort_t *resets);\r
+       void SetResetWin1(UShort_t reset, Int_t board);\r
+       void SetResetWin2(UShort_t *resets);\r
+       void SetResetWin2(UShort_t reset, Int_t board);\r
+       \r
+       void SetPedestalSubtraction(Bool_t *peds);\r
+       void SetPedestalSubtraction(Bool_t ped, Int_t board);\r
+       \r
+       void SetBBAThreshold(UShort_t th) {fBBAThreshold = th;};\r
+       void SetBBCThreshold(UShort_t th) {fBBCThreshold = th;};\r
+\r
+       void SetBGAThreshold(UShort_t th) {fBGAThreshold = th;};\r
+       void SetBGCThreshold(UShort_t th) {fBGCThreshold = th;};\r
+\r
+       void SetBBAForBGThreshold(UShort_t th) {fBBAForBGThreshold = th;};\r
+       void SetBBCForBGThreshold(UShort_t th) {fBBCForBGThreshold = th;};\r
+       \r
+       void SetCentralityV0AThrLow(UShort_t th) {fCentralityVOAThrLow = th;};\r
+       void SetCentralityV0AThrHigh(UShort_t th) {fCentralityVOAThrHigh = th;};\r
+       \r
+       void SetCentralityV0CThrLow(UShort_t th) {fCentralityVOCThrLow = th;};\r
+       void SetCentralityV0CThrHigh(UShort_t th) {fCentralityVOCThrHigh = th;};\r
+       \r
+       void SetMultV0AThrLow(UShort_t th) {fMultV0AThrLow = th;};\r
+       void SetMultV0AThrHigh(UShort_t th) {fMultV0AThrHigh = th;};\r
+       \r
+       void SetMultV0CThrLow(UShort_t th) {fMultV0CThrLow = th;};\r
+       void SetMultV0CThrHigh(UShort_t th) {fMultV0CThrHigh = th;};\r
+       \r
+       void SetTriggerSelected(UShort_t trigger, Int_t output);\r
+       \r
+       void SetEnableCharge(Bool_t val, Int_t board, Int_t channel);\r
+       void SetEnableTiming(Bool_t val, Int_t board, Int_t channel);\r
+       void SetDiscriThr(UShort_t val, Int_t board, Int_t channel);\r
+       void SetDelayHit(UShort_t val, Int_t board, Int_t channel);\r
+       void SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel);\r
+       void SetPedestalCut(UShort_t val, Int_t integrator, Int_t board, Int_t channel);\r
+\r
+       \r
+       // ----- Getters -----\r
+       \r
+       UShort_t * GetClk1Win1() const {return (UShort_t*)fClk1Win1;};\r
+       UShort_t GetClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fClk1Win1[board]:0);};\r
+       UShort_t * GetClk2Win1() const {return (UShort_t*)fClk2Win1;};\r
+       UShort_t GetClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fClk2Win1[board]:0);};\r
+\r
+       UShort_t * GetClk1Win2() const {return (UShort_t*)fClk1Win2;};\r
+       UShort_t GetClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fClk1Win2[board]:0);};\r
+       UShort_t * GetClk2Win2() const {return (UShort_t*)fClk2Win2;};\r
+       UShort_t GetClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fClk2Win2[board]:0);};\r
+\r
+       UShort_t * GetDelayClk1Win1() const {return (UShort_t*)fDelayClk1Win1;};\r
+       UShort_t GetDelayClk1Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win1[board]:0);};\r
+       UShort_t * GetDelayClk2Win1() const {return (UShort_t*)fDelayClk2Win1;};\r
+       UShort_t GetDelayClk2Win1(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win1[board]:0);};\r
+       \r
+       UShort_t * GetDelayClk1Win2() const {return (UShort_t*)fDelayClk1Win2;};\r
+       UShort_t GetDelayClk1Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk1Win2[board]:0);};\r
+       UShort_t * GetDelayClk2Win2() const {return (UShort_t*)fDelayClk2Win2;};\r
+       UShort_t GetDelayClk2Win2(Int_t board ) const {return (board<kNCIUBoards?fDelayClk2Win2[board]:0);};\r
+       \r
+       UShort_t * GetLatchWin1() const {return (UShort_t*)fLatchWin1;};\r
+       UShort_t GetLatchWin1(Int_t board ) const  {return (board<kNCIUBoards?fLatchWin1[board]:0);};\r
+       UShort_t * GetLatchWin2() const {return (UShort_t*)fLatchWin2;};\r
+       UShort_t GetLatchWin2(Int_t board ) const  {return (board<kNCIUBoards?fLatchWin2[board]:0);};\r
+       \r
+       UShort_t * GetResetWin1() const {return (UShort_t*)fResetWin1;};\r
+       UShort_t GetResetWin1(Int_t board ) const  {return (board<kNCIUBoards?fResetWin1[board]:0);};\r
+       UShort_t * GetResetWin2() const {return (UShort_t*)fResetWin2;};\r
+       UShort_t GetResetWin2(Int_t board ) const  {return (board<kNCIUBoards?fResetWin2[board]:0);};\r
+       \r
+       Bool_t * GetPedestalSubtraction() const {return (Bool_t*) fPedestalSubtraction;};\r
+       Bool_t GetPedestalSubtraction(Int_t board ) const  {return (board<kNCIUBoards?fPedestalSubtraction[board]:0);};\r
+\r
+       UShort_t GetBBAThreshold() const {return fBBAThreshold;};\r
+       UShort_t GetBBCThreshold() const {return fBBCThreshold;};\r
+\r
+       UShort_t GetBGAThreshold() const {return fBGAThreshold;};\r
+       UShort_t GetBGCThreshold() const {return fBGCThreshold;};\r
+\r
+       UShort_t GetBBAForBGThreshold() const {return fBBAForBGThreshold;};\r
+       UShort_t GetBBCForBGThreshold() const {return fBBCForBGThreshold;};\r
+       \r
+       UShort_t GetCentralityV0AThrLow() const {return fCentralityVOAThrLow;};\r
+       UShort_t GetCentralityV0AThrHigh() const {return fCentralityVOAThrHigh;};\r
+       \r
+       UShort_t GetCentralityV0CThrLow() const {return fCentralityVOCThrLow;};\r
+       UShort_t GetCentralityV0CThrHigh() const {return fCentralityVOCThrHigh;};\r
+\r
+       UShort_t GetMultV0AThrLow() const {return fMultV0AThrLow;};\r
+       UShort_t GetMultV0AThrHigh() const {return fMultV0AThrHigh;};\r
+\r
+       UShort_t GetMultV0CThrLow() const {return fMultV0CThrLow;};\r
+       UShort_t GetMultV0CThrHigh() const {return fMultV0CThrHigh;};\r
+\r
+       UShort_t GetTriggerSelected(Int_t output) const {return (output<kNTriggerOutputs?fTriggerSelected[output]:0);};\r
+       \r
+       Bool_t GetEnableCharge(Int_t board, Int_t channel);\r
+       Bool_t GetEnableTiming(Int_t board, Int_t channel);\r
+       UShort_t GetDiscriThr(Int_t board, Int_t channel);\r
+       UShort_t GetDelayHit(Int_t board, Int_t channel);\r
+       UShort_t GetPedestal(Int_t integrator, Int_t board, Int_t channel);\r
+       UShort_t GetPedestalCut(Int_t integrator, Int_t board, Int_t channel);\r
+\r
+       enum {\r
+               kNCIUBoards = AliVZERODataFEE::kNCIUBoards,\r
+               kNAliases = AliVZERODataFEE::kNAliases,\r
+               kNTriggerOutputs = 5,\r
+               kNChannels = 8\r
+       };\r
+       \r
+private:\r
+       \r
+       UShort_t fClk1Win1[kNCIUBoards]; //Profil of the Clock 1  of the Window 1 (BB window)\r
+       UShort_t fClk2Win1[kNCIUBoards]; //Profil of the Clock 2  of the Window 1 (BB window)\r
+       UShort_t fClk1Win2[kNCIUBoards]; //Profil of the Clock 1  of the Window 2 (BG window)\r
+       UShort_t fClk2Win2[kNCIUBoards]; //Profil of the Clock 2  of the Window 2 (BG window)\r
+       UShort_t fDelayClk1Win1[kNCIUBoards]; // Delays of the Clock 1  of the Window 1 (BB window)\r
+       UShort_t fDelayClk2Win1[kNCIUBoards]; // Delays of the Clock 2 of the Window 1 (BB window)\r
+       UShort_t fDelayClk1Win2[kNCIUBoards]; // Delays of the Clock 1  of the Window 2 (BG window)\r
+       UShort_t fDelayClk2Win2[kNCIUBoards]; // Delays of the Clock 2 of the Window 2 (BG window)\r
+       UShort_t fLatchWin1[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 1 (BB window)\r
+       UShort_t fLatchWin2[kNCIUBoards]; //Profil of the Clock of the Latch signal of Window 2 (BG window)\r
+       UShort_t fResetWin1[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 1 (BB window)\r
+       UShort_t fResetWin2[kNCIUBoards]; //Profil of the Clock of the Reset signal of Window 2 (BG window)\r
+       Bool_t   fPedestalSubtraction[kNCIUBoards]; // Flag to en(dis)able pedestal subtraction before centrality trigger calculation\r
+       UShort_t fBBAThreshold;  // Minimum bias Threshold in number of channel hit for V0A\r
+       UShort_t fBBCThreshold;  // Minimum bias Threshold in number of channel hit for V0C\r
+       UShort_t fBGAThreshold;  // Beam Gas Threshold in number of channel hit for V0A\r
+       UShort_t fBGCThreshold;  // Beam Gas Threshold in number of channel hit for V0C\r
+       UShort_t fBBAForBGThreshold;  // BBA threshold for Beam Gas triggers (i.e. BBA and BGC)\r
+       UShort_t fBBCForBGThreshold;  // BBC threshold for Beam Gas triggers (i.e. BBC and BGA)\r
+       UShort_t fCentralityVOAThrLow;  // Threshold used for centrality triggers (i.e. CTA1 and CTC1)\r
+       UShort_t fCentralityVOAThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)\r
+       UShort_t fCentralityVOCThrLow;  // Threshold used for centrality triggers (i.e. CTA1 and CTC1)\r
+       UShort_t fCentralityVOCThrHigh; // Threshold used for centrality triggers (i.e. CTA2 and CTC2)\r
+       UShort_t fMultV0AThrLow;  // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+       UShort_t fMultV0AThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+       UShort_t fMultV0CThrLow;  // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+       UShort_t fMultV0CThrHigh; // Threshold used for multiplicity triggers (i.e. MTA and MTC)\r
+       UShort_t fTriggerSelected[kNTriggerOutputs]; // Triggers selected on the 5 outputs to CTP\r
+       Bool_t   fEnableCharge[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Charge triggers\r
+       Bool_t   fEnableTiming[kNCIUBoards][kNChannels]; // Flag to know is a channel is participating to the Timing triggers\r
+       UShort_t fDiscriThr[kNCIUBoards][kNChannels]; // Threshold of each discriminator\r
+       UShort_t fDelayHit[kNCIUBoards][kNChannels]; // Individual delays of each channel \r
+       UShort_t fPedestalOdd[kNCIUBoards][kNChannels]; // Pedestals for the Odd integrators\r
+       UShort_t fPedestalEven[kNCIUBoards][kNChannels]; // Pedestals for the Even integrators\r
+       UShort_t fPedestalCutOdd[kNCIUBoards][kNChannels]; // Pedestals Cut for the Odd integrators\r
+       UShort_t fPedestalCutEven[kNCIUBoards][kNChannels]; // Pedestals Cut for the Even integrators\r
+\r
+       Int_t fRun;       // Run number\r
+       Int_t fStartTime; // Start time\r
+       Int_t fEndTime;   // End time\r
+       TString fAliasNames[kNAliases]; // aliases for DCS data\r
+       Bool_t fIsProcessed; // bool to know processing status\r
+       \r
+       Bool_t  IsClkValid(UShort_t clock);\r
+       void SetParameter(TString name, Float_t val);\r
+       \r
+       \r
+       ClassDef( AliVZEROTriggerData, 1 )  \r
+\r
+};\r
+\r
+#endif // ALIVZEROTRIGGERDATA_H\r
index 788cc818b8f126236349a0ac5f46787f04f41fd1..0885d1c3b1a176bde8a2112ea1a047b235e8098f 100644 (file)
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-
-//  Simulate the VZERO Trigger response
-// Use FEE parameters stored in Database
-// Can work on real data or in simulation
-#include "TTree.h"
-#include "TClonesArray.h"
-
-#include "AliLog.h"
-#include "AliCDBManager.h"
-#include "AliCDBEntry.h"
-#include "AliCDBStorage.h"
-#include "AliCDBId.h"
-#include "AliVZEROTriggerData.h"
-#include "AliVZEROLogicalSignal.h"
-#include "AliVZEROTriggerSimulator.h"
-#include "AliVZEROdigit.h"
-
-ClassImp(AliVZEROTriggerSimulator)
-
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) : 
-TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0)
-{
-       for(int i=0;i<64;i++) {
-               fBBFlags[i] = fBGFlags[i] = kFALSE;
-               fCharges[i] = 0;
-       }
-       GenerateBBWindows();
-       GenerateBGWindows();
-       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
-               fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); 
-               fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); 
-               fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);
-               fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);               
-       }
-       fBBGate[0]->Print();
-       fBBGate[4]->Print();
-}
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() : 
-TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)
-{
-       for(int i=0;i<64;i++) {
-               fBBFlags[i] = fBGFlags[i] = kFALSE;
-               fCharges[i] = 0;
-       }
-       GenerateBBWindows();
-       GenerateBGWindows();
-       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
-               fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); 
-               fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); 
-               fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);
-               fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);               
-       }
-       fBBGate[0]->Print();
-       fBBGate[4]->Print();
-}
-
-//_____________________________________________________________________________
-AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){
-       if(fBBGate) delete [] fBBGate;
-       if(fBGGate) delete [] fBGGate;
-       if(fBBLatch) delete [] fBBLatch;
-       if(fBBReset) delete [] fBBReset;
-       if(fBGLatch) delete [] fBGLatch;
-       if(fBGReset) delete [] fBGReset;
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::GenerateBBWindows() 
-{
-       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
-               AliVZEROLogicalSignal Clk1BB(fTriggerData->GetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i));
-               AliVZEROLogicalSignal Clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i));
-               fBBGate[i] = new AliVZEROLogicalSignal(Clk1BB & Clk2BB);
-       }
-}
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::GenerateBGWindows() 
-{
-       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {
-               AliVZEROLogicalSignal Clk1BG(fTriggerData->GetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i));
-               AliVZEROLogicalSignal Clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i));
-               fBGGate[i] = new AliVZEROLogicalSignal(Clk1BG & Clk2BG);
-       }
-}
-
-//_____________________________________________________________________________
-AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const 
-{
-       // Gets Trigger object for VZERO set
-       AliInfo("Loading Trigger parameters");
-       AliCDBManager *man = AliCDBManager::Instance();
-       
-       
-       AliCDBEntry *entry=0;
-       
-       entry = man->Get("VZERO/Trigger/Data");
-       if(!entry){
-               AliWarning("Load of calibration data from default storage failed!");
-               AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");
-               
-               man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
-               entry = man->Get("VZERO/Trigger/Data",0);
-       }
-       
-       // Retrieval of data in directory VZERO/Calib/Trigger:
-       
-       AliVZEROTriggerData *triggerData = NULL;
-       
-       if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject();
-       if (!triggerData)  AliError("No Trigger data from database !");
-       
-       return triggerData;
-}
-
-//_____________________________________________________________________________
-void AliVZEROTriggerSimulator::Run() {
-       //AliInfo("Generating VZERO Triggers");
-       
-       // Loop over VZERO entries
-       Int_t nEntries = (Int_t)fDigitsTree->GetEntries();
-       for (Int_t ievt=0; ievt<nEntries; ievt++) {
-               fDigitsTree->GetEvent(ievt);
-               
-               Int_t nDigits = fDigits->GetEntriesFast();
-               
-               for (Int_t iDigit=0; iDigit<nDigits; iDigit++) {
-                       AliVZEROdigit* digit = (AliVZEROdigit*)fDigits->At(iDigit);
-                       
-                       Int_t integrator = digit->Integrator();
-                       Int_t pmNumber   = digit->PMNumber();
-                       Int_t board   = pmNumber / 8;
-                       Int_t channel = pmNumber % 8;
-                       
-                       if(fTriggerData->GetEnableCharge(board,channel)) {
-                               fCharges[pmNumber] = digit->ADC();
-                               if(fTriggerData->GetPedestalSubtraction(board)) 
-                                       if(fCharges[pmNumber]>=fTriggerData->GetPedestalCut(integrator,board,channel)){ 
-                                               fCharges[pmNumber] -= fTriggerData->GetPedestal(integrator,board,channel);
-                                       } else {
-                                               fCharges[pmNumber] = 0;
-                                       }
-                       } else {
-                               fCharges[pmNumber] = 0;
-                       }
-                       
-                       Float_t time = (Float_t)digit->Time() / 10.; // digit->Time() in bin of 100 picoseconds. Divide by 10 to have it in nanoseconds
-                       time += fTriggerData->GetDelayHit(board,channel);
-                       
-                       AliInfo(Form(" PM nb : %d ; ADC= %d ; TDC= %f  Enable Time %d charge %d",pmNumber,digit->ADC(),time,fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel)));
-                       fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time);
-                       fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time);
-                       
-               } // end of loop over digits
-       } // end of loop over events in digits tree
-       
-       Int_t nBBflagsV0A = 0;
-       Int_t nBBflagsV0C = 0;
-       Int_t nBGflagsV0A = 0;
-       Int_t nBGflagsV0C = 0;
-       Int_t chargeV0A   = 0;
-       Int_t chargeV0C   = 0;
-
-       for(int i=0;i<64;i++) {
-               if(i<32) {
-                       nBBflagsV0C += fBBFlags[i]; 
-                       nBGflagsV0C += fBGFlags[i];
-                       chargeV0C += fCharges[i];
-               } else {
-                       nBBflagsV0A += fBBFlags[i]; 
-                       nBGflagsV0A += fBGFlags[i];
-                       chargeV0A += fCharges[i];
-               }
-               //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] )); 
-       }
-       
-       // BBA
-       if(nBBflagsV0A>=fTriggerData->GetBBAThreshold())  SetBBA();
-       
-       // BBC
-       if(nBBflagsV0C>=fTriggerData->GetBBCThreshold())  SetBBC();
-
-       // BBA_AND_BBC
-       if(GetBBA() && GetBBC())  SetBBAandBBC();
-       
-       // BBA_OR_BBC
-       if(GetBBA() || GetBBC()) SetBBAorBBC();
-
-       // BGA
-       if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA();
-
-       // BGC
-       if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC();
-       
-       // BGA_AND_BBC (Beam Gas from RB24 side)
-       if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC();
-       
-       // BGC_AND_BBA (Beam Gas from RB26 side)
-       if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA();
-
-       // CTA1_AND_CTC1 (Centrality trigger 1)
-       if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1();
-
-       // CTA1_OR_CTC1 (Centrality trigger 1)
-       if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1();
-       
-       // CTA2_AND_CTC2 (Centrality trigger 2)
-       if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2();
-       
-       // CTA2_OR_CTC2 (Centrality trigger 2)
-       if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2();
-       
-       // MTA_AND_MTC (Multiplicity Trigger)
-       if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())
-          && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) 
-               SetMTAandMTC();
-       
-       // MTA_OR_MTC (Multiplicity Trigger)
-       if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())
-          || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) 
-               SetMTAorMTC();
-       
-       // BGA_OR_BGC
-       if(GetBGA() || GetBGC()) SetBGAorBGC();
-       
-       // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides)
-       if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas();
-
-       AliInfo(Form("BB Flags : V0A = %d  V0C = %d ",nBBflagsV0A, nBBflagsV0C )); 
-       AliInfo(Form("BG Flags : V0A = %d  V0C = %d ",nBGflagsV0A, nBGflagsV0C )); 
-       AliInfo(Form("Charges  : V0A = %d  V0C = %d ",chargeV0A, chargeV0C )); 
-       
-}
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ *                                                                        *\r
+ * Author: The ALICE Off-line Project.                                    *\r
+ * Contributors are mentioned in the code where appropriate.              *\r
+ *                                                                        *\r
+ * Permission to use, copy, modify and distribute this software and its   *\r
+ * documentation strictly for non-commercial purposes is hereby granted   *\r
+ * without fee, provided that the above copyright notice appears in all   *\r
+ * copies and that both the copyright notice and this permission notice   *\r
+ * appear in the supporting documentation. The authors make no claims     *\r
+ * about the suitability of this software for any purpose. It is          *\r
+ * provided "as is" without express or implied warranty.                  *\r
+ **************************************************************************/\r
+\r
+\r
+//  Simulate the VZERO Trigger response\r
+// Use FEE parameters stored in Database\r
+// Can work on real data or in simulation\r
+#include "TTree.h"\r
+#include "TClonesArray.h"\r
+\r
+#include "AliLog.h"\r
+#include "AliCDBManager.h"\r
+#include "AliCDBEntry.h"\r
+#include "AliCDBStorage.h"\r
+#include "AliCDBId.h"\r
+#include "AliVZEROTriggerData.h"\r
+#include "AliVZEROLogicalSignal.h"\r
+#include "AliVZEROTriggerSimulator.h"\r
+#include "AliVZEROdigit.h"\r
+\r
+ClassImp(AliVZEROTriggerSimulator)\r
+\r
+//________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator& triggersim) : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)\r
+\r
+{\r
+       // copy constructor\r
+       \r
+       AliInfo("Not implemented");\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits) : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(digitsTree),fDigits(digits),fTriggerWord(0)\r
+{\r
+       for(int i=0;i<64;i++) {\r
+               fBBFlags[i] = fBGFlags[i] = kFALSE;\r
+               fCharges[i] = 0;\r
+       }\r
+       GenerateBBWindows();\r
+       GenerateBGWindows();\r
+       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+               fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); \r
+               fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); \r
+               fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);\r
+               fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);               \r
+       }\r
+}\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::AliVZEROTriggerSimulator() : \r
+TObject(),fTriggerData(LoadTriggerData()),fDigitsTree(NULL),fDigits(NULL),fTriggerWord(0)\r
+{\r
+       for(int i=0;i<64;i++) {\r
+               fBBFlags[i] = fBGFlags[i] = kFALSE;\r
+               fCharges[i] = 0;\r
+       }\r
+       GenerateBBWindows();\r
+       GenerateBGWindows();\r
+       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+               fBBLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin1(i),0); \r
+               fBGLatch[i] = new AliVZEROLogicalSignal(fTriggerData->GetLatchWin2(i),0); \r
+               fBBReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin1(i),0);\r
+               fBGReset[i] = new AliVZEROLogicalSignal(fTriggerData->GetResetWin2(i),0);               \r
+       }\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerSimulator::~AliVZEROTriggerSimulator(){\r
+       if(fBBGate) delete [] fBBGate;\r
+       if(fBGGate) delete [] fBGGate;\r
+       if(fBBLatch) delete [] fBBLatch;\r
+       if(fBBReset) delete [] fBBReset;\r
+       if(fBGLatch) delete [] fBGLatch;\r
+       if(fBGReset) delete [] fBGReset;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::GenerateBBWindows() \r
+{\r
+       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+               AliVZEROLogicalSignal Clk1BB(fTriggerData->GetClk1Win1(i),fTriggerData->GetDelayClk1Win1(i));\r
+               AliVZEROLogicalSignal Clk2BB(fTriggerData->GetClk2Win1(i),fTriggerData->GetDelayClk2Win1(i));\r
+               fBBGate[i] = new AliVZEROLogicalSignal(Clk1BB & Clk2BB);\r
+       }\r
+}\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::GenerateBGWindows() \r
+{\r
+       for (int i=0; i<AliVZEROTriggerData::kNCIUBoards; i++) {\r
+               AliVZEROLogicalSignal Clk1BG(fTriggerData->GetClk1Win2(i),fTriggerData->GetDelayClk1Win2(i));\r
+               AliVZEROLogicalSignal Clk2BG(fTriggerData->GetClk2Win2(i),fTriggerData->GetDelayClk2Win2(i));\r
+               fBGGate[i] = new AliVZEROLogicalSignal(Clk1BG & Clk2BG);\r
+       }\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliVZEROTriggerData * AliVZEROTriggerSimulator::LoadTriggerData() const \r
+{\r
+       // Gets Trigger object for VZERO set\r
+       AliInfo("Loading Trigger parameters");\r
+       AliCDBManager *man = AliCDBManager::Instance();\r
+       \r
+       \r
+       AliCDBEntry *entry=0;\r
+       \r
+       entry = man->Get("VZERO/Trigger/Data");\r
+       if(!entry){\r
+               AliWarning("Load of calibration data from default storage failed!");\r
+               AliWarning("Calibration data will be loaded from local storage ($ALICE_ROOT)");\r
+               \r
+               man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");\r
+               entry = man->Get("VZERO/Trigger/Data",0);\r
+       }\r
+       \r
+       // Retrieval of data in directory VZERO/Calib/Trigger:\r
+       \r
+       AliVZEROTriggerData *triggerData = NULL;\r
+       \r
+       if (entry) triggerData = (AliVZEROTriggerData*) entry->GetObject();\r
+       if (!triggerData)  AliError("No Trigger data from database !");\r
+       \r
+       return triggerData;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliVZEROTriggerSimulator::Run() {\r
+       //AliInfo("Generating VZERO Triggers");\r
+       \r
+       // Loop over VZERO entries\r
+       Int_t nEntries = (Int_t)fDigitsTree->GetEntries();\r
+       for (Int_t ievt=0; ievt<nEntries; ievt++) {\r
+               fDigitsTree->GetEvent(ievt);\r
+               \r
+               Int_t nDigits = fDigits->GetEntriesFast();\r
+               \r
+               for (Int_t iDigit=0; iDigit<nDigits; iDigit++) {\r
+                       AliVZEROdigit* digit = (AliVZEROdigit*)fDigits->At(iDigit);\r
+                       \r
+                       Int_t integrator = digit->Integrator();\r
+                       Int_t pmNumber   = digit->PMNumber();\r
+                       Int_t board   = pmNumber / 8;\r
+                       Int_t channel = pmNumber % 8;\r
+                       \r
+                       if(fTriggerData->GetEnableCharge(board,channel)) {\r
+                               fCharges[pmNumber] = digit->ADC();\r
+                               if(fTriggerData->GetPedestalSubtraction(board)) \r
+                                       if(fCharges[pmNumber]>=fTriggerData->GetPedestalCut(integrator,board,channel)){ \r
+                                               fCharges[pmNumber] -= fTriggerData->GetPedestal(integrator,board,channel);\r
+                                       } else {\r
+                                               fCharges[pmNumber] = 0;\r
+                                       }\r
+                       } else {\r
+                               fCharges[pmNumber] = 0;\r
+                       }\r
+                       \r
+                       Float_t time = (Float_t)digit->Time() / 10.; // digit->Time() in bin of 100 picoseconds. Divide by 10 to have it in nanoseconds\r
+                       time += fTriggerData->GetDelayHit(board,channel);\r
+                       \r
+                       AliInfo(Form(" PM nb : %d ; ADC= %d ; TDC= %f  Enable Time %d charge %d",pmNumber,digit->ADC(),time,fTriggerData->GetEnableTiming(board,channel),fTriggerData->GetEnableCharge(board,channel)));\r
+                       fBBFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBBGate[board]->IsInCoincidence(time);\r
+                       fBGFlags[pmNumber] = fTriggerData->GetEnableTiming(board,channel) && fBGGate[board]->IsInCoincidence(time);\r
+                       \r
+               } // end of loop over digits\r
+       } // end of loop over events in digits tree\r
+       \r
+       Int_t nBBflagsV0A = 0;\r
+       Int_t nBBflagsV0C = 0;\r
+       Int_t nBGflagsV0A = 0;\r
+       Int_t nBGflagsV0C = 0;\r
+       Int_t chargeV0A   = 0;\r
+       Int_t chargeV0C   = 0;\r
+\r
+       for(int i=0;i<64;i++) {\r
+               if(i<32) {\r
+                       nBBflagsV0C += fBBFlags[i]; \r
+                       nBGflagsV0C += fBGFlags[i];\r
+                       chargeV0C += fCharges[i];\r
+               } else {\r
+                       nBBflagsV0A += fBBFlags[i]; \r
+                       nBGflagsV0A += fBGFlags[i];\r
+                       chargeV0A += fCharges[i];\r
+               }\r
+               //AliInfo(Form("Ch %d BB=%d BG=%d",i,fBBFlags[i],fBGFlags[i] )); \r
+       }\r
+       \r
+       // BBA\r
+       if(nBBflagsV0A>=fTriggerData->GetBBAThreshold())  SetBBA();\r
+       \r
+       // BBC\r
+       if(nBBflagsV0C>=fTriggerData->GetBBCThreshold())  SetBBC();\r
+\r
+       // BBA_AND_BBC\r
+       if(GetBBA() && GetBBC())  SetBBAandBBC();\r
+       \r
+       // BBA_OR_BBC\r
+       if(GetBBA() || GetBBC()) SetBBAorBBC();\r
+\r
+       // BGA\r
+       if(nBGflagsV0A>=fTriggerData->GetBGAThreshold()) SetBGA();\r
+\r
+       // BGC\r
+       if(nBGflagsV0C>=fTriggerData->GetBGCThreshold()) SetBGC();\r
+       \r
+       // BGA_AND_BBC (Beam Gas from RB24 side)\r
+       if(nBBflagsV0C>=fTriggerData->GetBBCForBGThreshold() && GetBGA()) SetBGAandBBC();\r
+       \r
+       // BGC_AND_BBA (Beam Gas from RB26 side)\r
+       if(nBBflagsV0A>=fTriggerData->GetBBAForBGThreshold() && GetBGC()) SetBGCandBBA();\r
+\r
+       // CTA1_AND_CTC1 (Centrality trigger 1)\r
+       if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() && chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1andCTC1();\r
+\r
+       // CTA1_OR_CTC1 (Centrality trigger 1)\r
+       if(chargeV0A>=fTriggerData->GetCentralityV0AThrLow() || chargeV0C>=fTriggerData->GetCentralityV0CThrLow()) SetCTA1orCTC1();\r
+       \r
+       // CTA2_AND_CTC2 (Centrality trigger 2)\r
+       if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() && chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2andCTC2();\r
+       \r
+       // CTA2_OR_CTC2 (Centrality trigger 2)\r
+       if(chargeV0A>=fTriggerData->GetCentralityV0AThrHigh() || chargeV0C>=fTriggerData->GetCentralityV0CThrHigh()) SetCTA2orCTC2();\r
+       \r
+       // MTA_AND_MTC (Multiplicity Trigger)\r
+       if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())\r
+          && (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) \r
+               SetMTAandMTC();\r
+       \r
+       // MTA_OR_MTC (Multiplicity Trigger)\r
+       if((nBBflagsV0A<=fTriggerData->GetMultV0AThrHigh() && nBBflagsV0A>=fTriggerData->GetMultV0AThrLow())\r
+          || (nBBflagsV0C<=fTriggerData->GetMultV0CThrHigh() && nBBflagsV0C>=fTriggerData->GetMultV0CThrLow()) ) \r
+               SetMTAorMTC();\r
+       \r
+       // BGA_OR_BGC\r
+       if(GetBGA() || GetBGC()) SetBGAorBGC();\r
+       \r
+       // (BGA and BBC) or (BGC and BBA) (Beam Gas from one of the two sides)\r
+       if(GetBGAandBBC() || GetBGCandBBA()) SetBeamGas();\r
+\r
+       AliInfo(Form("BB Flags : V0A = %d  V0C = %d ",nBBflagsV0A, nBBflagsV0C )); \r
+       AliInfo(Form("BG Flags : V0A = %d  V0C = %d ",nBGflagsV0A, nBGflagsV0C )); \r
+       AliInfo(Form("Charges  : V0A = %d  V0C = %d ",chargeV0A, chargeV0C )); \r
+       \r
+}\r
+\r
index 3d3ea921a7130959a00d92802096322324c1f85b..25bf034bfaabca4458d6f056b72d6dd78938b58b 100644 (file)
@@ -1,94 +1,94 @@
-#ifndef ALIVZEROTRIGGERSIMULATOR_H
-#define ALIVZEROTRIGGERSIMULATOR_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
- * reserved. 
- *
- * See cxx source for full Copyright notice                               
- */
-
-#include <TObject.h>
-
-#include "AliVZEROTriggerData.h"
-
-class AliVZEROLogicalSignal;
-class TTree;
-class TClonesArray;
-
-class AliVZEROTriggerSimulator : public TObject {
-public:
-       AliVZEROTriggerSimulator();
-       AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits);
-       ~AliVZEROTriggerSimulator();
-       AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &triggerSim);
-       AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator &triggerSim);
-       
-       AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;};
-       
-       Bool_t GetBBAandBBC() const             {return (fTriggerWord & 0x1);};
-       Bool_t GetBBAorBBC() const              {return (fTriggerWord>>1 & 0x1);};
-       Bool_t GetBGAandBBC() const             {return (fTriggerWord>>2 & 0x1);};
-       Bool_t GetBGA() const                   {return (fTriggerWord>>3 & 0x1);};
-       Bool_t GetBGCandBBA() const             {return (fTriggerWord>>4 & 0x1);};
-       Bool_t GetBGC() const                   {return (fTriggerWord>>5 & 0x1);};
-       Bool_t GetCTA1andCTC1() const   {return (fTriggerWord>>6 & 0x1);};
-       Bool_t GetCTA1orCTC1() const    {return (fTriggerWord>>7 & 0x1);};
-       Bool_t GetCTA2andCTC2() const   {return (fTriggerWord>>8 & 0x1);};
-       Bool_t GetCTA2orCTC2() const    {return (fTriggerWord>>9 & 0x1);};
-       Bool_t GetMTAandMTC() const             {return (fTriggerWord>>10 & 0x1);};
-       Bool_t GetMTAorMTC() const              {return (fTriggerWord>>11 & 0x1);};
-       Bool_t GetBBA() const                   {return (fTriggerWord>>12 & 0x1);};
-       Bool_t GetBBC() const                   {return (fTriggerWord>>13 & 0x1);};
-       Bool_t GetBGAorBGC() const              {return (fTriggerWord>>14 & 0x1);};
-       Bool_t GetBeamGas() const               {return (fTriggerWord>>15 & 0x1);};
-       
-       void SetBBAandBBC()             { (fTriggerWord += 0x1);};
-       void SetBBAorBBC()              { (fTriggerWord += 0x1<<1);};
-       void SetBGAandBBC()             { (fTriggerWord += 0x1<<2);};
-       void SetBGA()                   { (fTriggerWord += 0x1<<3);};
-       void SetBGCandBBA()             { (fTriggerWord += 0x1<<4);};
-       void SetBGC()                   { (fTriggerWord += 0x1<<5);};
-       void SetCTA1andCTC1()   { (fTriggerWord += 0x1<<6);};
-       void SetCTA1orCTC1()    { (fTriggerWord += 0x1<<7);};
-       void SetCTA2andCTC2()   { (fTriggerWord += 0x1<<8);};
-       void SetCTA2orCTC2()    { (fTriggerWord += 0x1<<9);};
-       void SetMTAandMTC()             { (fTriggerWord += 0x1<<10);};
-       void SetMTAorMTC()              { (fTriggerWord += 0x1<<11);};  
-       void SetBBA()                   { (fTriggerWord += 0x1<<12);};
-       void SetBBC()                   { (fTriggerWord += 0x1<<13);};
-       void SetBGAorBGC()              { (fTriggerWord += 0x1<<14);};
-       void SetBeamGas()               { (fTriggerWord += 0x1<<15);};
-       
-       void Run();
-       
-private:
-       // Private methods
-       AliVZEROTriggerData * LoadTriggerData() const ;
-       void GenerateBBWindows();
-       void GenerateBGWindows();
-       
-       // Members
-       AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards];
-       AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards];
-       AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards];
-       
-       AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards];
-       AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards];
-       AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards];
-
-       AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters
-       
-       TTree* fDigitsTree;
-       TClonesArray* fDigits;
-       
-       Bool_t fBBFlags[64];
-       Bool_t fBGFlags[64];
-       Int_t  fCharges[64];
-       
-       UShort_t fTriggerWord;
-               
-       ClassDef( AliVZEROTriggerSimulator, 1 )  
-
-};
-
-
-#endif // ALIVZEROTRIGGERSIMULATOR_H
+#ifndef ALIVZEROTRIGGERSIMULATOR_H\r
+#define ALIVZEROTRIGGERSIMULATOR_H\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights\r
+ * reserved. \r
+ *\r
+ * See cxx source for full Copyright notice                               \r
+ */\r
+\r
+#include <TObject.h>\r
+\r
+#include "AliVZEROTriggerData.h"\r
+\r
+class AliVZEROLogicalSignal;\r
+class TTree;\r
+class TClonesArray;\r
+\r
+class AliVZEROTriggerSimulator : public TObject {\r
+public:\r
+       AliVZEROTriggerSimulator();\r
+       AliVZEROTriggerSimulator(TTree * digitsTree, TClonesArray* digits);\r
+       ~AliVZEROTriggerSimulator();\r
+       AliVZEROTriggerSimulator(const AliVZEROTriggerSimulator &triggerSim);\r
+       AliVZEROTriggerSimulator& operator= (const AliVZEROTriggerSimulator & /*triggerSim*/){AliInfo("Not implemented");return *this;};\r
+       \r
+       AliVZEROTriggerData * GetTriggerData() const {return fTriggerData;};\r
+       \r
+       Bool_t GetBBAandBBC() const             {return (fTriggerWord & 0x1);};\r
+       Bool_t GetBBAorBBC() const              {return (fTriggerWord>>1 & 0x1);};\r
+       Bool_t GetBGAandBBC() const             {return (fTriggerWord>>2 & 0x1);};\r
+       Bool_t GetBGA() const                   {return (fTriggerWord>>3 & 0x1);};\r
+       Bool_t GetBGCandBBA() const             {return (fTriggerWord>>4 & 0x1);};\r
+       Bool_t GetBGC() const                   {return (fTriggerWord>>5 & 0x1);};\r
+       Bool_t GetCTA1andCTC1() const   {return (fTriggerWord>>6 & 0x1);};\r
+       Bool_t GetCTA1orCTC1() const    {return (fTriggerWord>>7 & 0x1);};\r
+       Bool_t GetCTA2andCTC2() const   {return (fTriggerWord>>8 & 0x1);};\r
+       Bool_t GetCTA2orCTC2() const    {return (fTriggerWord>>9 & 0x1);};\r
+       Bool_t GetMTAandMTC() const             {return (fTriggerWord>>10 & 0x1);};\r
+       Bool_t GetMTAorMTC() const              {return (fTriggerWord>>11 & 0x1);};\r
+       Bool_t GetBBA() const                   {return (fTriggerWord>>12 & 0x1);};\r
+       Bool_t GetBBC() const                   {return (fTriggerWord>>13 & 0x1);};\r
+       Bool_t GetBGAorBGC() const              {return (fTriggerWord>>14 & 0x1);};\r
+       Bool_t GetBeamGas() const               {return (fTriggerWord>>15 & 0x1);};\r
+       \r
+       void SetBBAandBBC()             { (fTriggerWord += 0x1);};\r
+       void SetBBAorBBC()              { (fTriggerWord += 0x1<<1);};\r
+       void SetBGAandBBC()             { (fTriggerWord += 0x1<<2);};\r
+       void SetBGA()                   { (fTriggerWord += 0x1<<3);};\r
+       void SetBGCandBBA()             { (fTriggerWord += 0x1<<4);};\r
+       void SetBGC()                   { (fTriggerWord += 0x1<<5);};\r
+       void SetCTA1andCTC1()   { (fTriggerWord += 0x1<<6);};\r
+       void SetCTA1orCTC1()    { (fTriggerWord += 0x1<<7);};\r
+       void SetCTA2andCTC2()   { (fTriggerWord += 0x1<<8);};\r
+       void SetCTA2orCTC2()    { (fTriggerWord += 0x1<<9);};\r
+       void SetMTAandMTC()             { (fTriggerWord += 0x1<<10);};\r
+       void SetMTAorMTC()              { (fTriggerWord += 0x1<<11);};  \r
+       void SetBBA()                   { (fTriggerWord += 0x1<<12);};\r
+       void SetBBC()                   { (fTriggerWord += 0x1<<13);};\r
+       void SetBGAorBGC()              { (fTriggerWord += 0x1<<14);};\r
+       void SetBeamGas()               { (fTriggerWord += 0x1<<15);};\r
+       \r
+       void Run();\r
+       \r
+private:\r
+       // Private methods\r
+       AliVZEROTriggerData * LoadTriggerData() const ;\r
+       void GenerateBBWindows();\r
+       void GenerateBGWindows();\r
+       \r
+       // Members\r
+       AliVZEROLogicalSignal * fBBGate[AliVZEROTriggerData::kNCIUBoards];\r
+       AliVZEROLogicalSignal * fBBLatch[AliVZEROTriggerData::kNCIUBoards];\r
+       AliVZEROLogicalSignal * fBBReset[AliVZEROTriggerData::kNCIUBoards];\r
+       \r
+       AliVZEROLogicalSignal * fBGGate[AliVZEROTriggerData::kNCIUBoards];\r
+       AliVZEROLogicalSignal * fBGLatch[AliVZEROTriggerData::kNCIUBoards];\r
+       AliVZEROLogicalSignal * fBGReset[AliVZEROTriggerData::kNCIUBoards];\r
+\r
+       AliVZEROTriggerData *fTriggerData; // Object holding the trigger configuration parameters\r
+       \r
+       TTree* fDigitsTree;\r
+       TClonesArray* fDigits;\r
+       \r
+       Bool_t fBBFlags[64];\r
+       Bool_t fBGFlags[64];\r
+       Int_t  fCharges[64];\r
+       \r
+       UShort_t fTriggerWord;\r
+               \r
+       ClassDef( AliVZEROTriggerSimulator, 1 )  \r
+\r
+};\r
+\r
+\r
+#endif // ALIVZEROTRIGGERSIMULATOR_H\r