]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZEROTrigger.cxx
fix codding violation in AliTRDseedV1 class
[u/mrichter/AliRoot.git] / VZERO / AliVZEROTrigger.cxx
index 75087d5cbeff4c3f5fce4c1d4bfbc07a7a735aa7..8f6041b7055c3c646e906bd81f5eec681f00a79d 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
 /* $Id$ */
+// ---------------------
+// Class AliVZEROTrigger
+// ---------------------
+// Top class to simulate the VZERO trigger response
+// This class is only used for interface with AliTriggerDetector
+// Its create and Set  Inputs of the CTP
+// The Calculation of the trigger response is done into AliVZEROTriggerSimulator
+//
+
 
 #include <TClonesArray.h>
 
 #include "AliRun.h"
 #include "AliRunLoader.h"
+#include "AliTriggerInput.h"
 
+#include "AliVZEROdigit.h"
+#include "AliVZEROTriggerSimulator.h"
 #include "AliVZEROTrigger.h"
 
 //______________________________________________________________________
 ClassImp(AliVZEROTrigger)
-////////////////////////////////////////////////////////////////////////
-//
-// Version 1
-//
-// AliVZEROTrigger: 
-//
-////////////////////////////////////////////////////////////////////////
 
 //______________________________________________________________________
-AliVZEROTrigger::AliVZEROTrigger()
-  :AliTriggerDetector(),
-   fAdcThresHold(0.0),
-   fTimeWindowWidth(50.0)
-   
+
+AliVZEROTrigger::AliVZEROTrigger():AliTriggerDetector()
 {
    SetName("VZERO");
    CreateInputs();
-
-   SetAdcThreshold();
-   SetTimeWindowWidth();
 }
-
 //______________________________________________________________________
 void AliVZEROTrigger::CreateInputs()
 {
-   // inputs
-
-   // Do not create inputs again!!
-   if( fInputs.GetEntriesFast() > 0 ) return;
-
-   fInputs.AddLast( new AliTriggerInput( "VZERO_LEFT", "At least one hit in the left VZERO", 0x01 ) );
-   fInputs.AddLast( new AliTriggerInput( "VZERO_RIGHT","At least one hit in the right VZERO", 0x02 ) );
-   fInputs.AddLast( new AliTriggerInput( "VZERO_AND",  "At least one hit in the each (left and right) VZERO", 0x04 ) );
-   fInputs.AddLast( new AliTriggerInput( "VZERO_OR",   "At least one hit in the one (left one right) VZERO", 0x08 ) );
-
-   fInputs.AddLast( new AliTriggerInput( "VZERO_BEAMGAS", "Beam gas VZERO trigger ", 0x010 ) );
+       // Do not create inputs again!!
+       if( fInputs.GetEntriesFast() > 0 ) return;
+
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BBA_AND_BBC", "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BBA_OR_BBC","VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BGA_AND_BBC",  "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "0VGA",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BGC_AND_BBA", "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "0VGC",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_CTA1_AND_CTC1",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_CTA1_OR_CTC1",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_CTA2_AND_CTC2",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_CTA2_OR_CTC2",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_MTA_AND_MTC",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_MTA_OR_MTC",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "0VBA",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "0VBC",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BGA_OR_BGC",   "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_BEAMGAS",   "VZERO", 0 ) );
+
+       // The following are kept for compatibility with the CTP configuration file. Will have to be removed at some point
+       fInputs.AddLast( new AliTriggerInput( "VZERO_AND", "VZERO", 0 ) );
+       fInputs.AddLast( new AliTriggerInput( "VZERO_OR","VZERO", 0 ) );
 }
 
 //______________________________________________________________________
 void AliVZEROTrigger::Trigger()
 {
-  
   //  ********** Get run loader for the current event **********
-  AliRunLoader* runLoader = gAlice->GetRunLoader();
-
-  AliVZEROLoader* loader = (AliVZEROLoader* )runLoader->GetLoader( "VZEROLoader" );
-
-  loader->LoadDigits("READ");
-  TTree* vzeroDigitsTree = loader->TreeD();
-  if (!vzeroDigitsTree) return;
-
-  TClonesArray* vzeroDigits = new TClonesArray("AliVZEROdigit",1000);
-  TBranch* digitBranch = vzeroDigitsTree->GetBranch("VZERODigit");
-  digitBranch->SetAddress(&vzeroDigits);
-
-  // number of hits in left/right
-  Int_t nLeftDig  = 0;
-  Int_t nRightDig = 0;
-  
-  // first time 
-  Float_t firstTimeLeft  = 9999.0;
-  Float_t firstTimeRight = 9999.0;
-  Float_t TimeHalfWidth  = fTimeWindowWidth/2.0;
-  // loop over vzero entries
-  Int_t nEntries = (Int_t)vzeroDigitsTree->GetEntries();
-  for (Int_t e=0; e<nEntries; e++) {
-    vzeroDigitsTree->GetEvent(e);
-
-    Int_t nDigits = vzeroDigits->GetEntriesFast();
-    
-    for (Int_t d=0; d<nDigits; d++) {
-      //      vzeroDigitsTree->GetEvent(d);
-      AliVZEROdigit* digit = (AliVZEROdigit*)vzeroDigits->At(d);
-      
-      Int_t   PMNumber   = digit->PMNumber();
-      Float_t adc        = digit->ADC();
-      Float_t tdc        = digit->Time(); // in 100 of picoseconds
-      
-      if (PMNumber<=31 && adc>fAdcThresHold) {
-       if (tdc>(29.0-TimeHalfWidth) && tdc<(29.0+TimeHalfWidth)) nRightDig++;
-       if (tdc<firstTimeRight) firstTimeRight = tdc;
-      }      
-      if (PMNumber>=32 && adc>fAdcThresHold) {
-       if (tdc>(112.0-TimeHalfWidth) && tdc<(112.0+TimeHalfWidth)) nLeftDig++;
-       if (tdc<firstTimeLeft) firstTimeLeft = tdc;
-      }        
-      
-    } // end of loop over digits
-  } // end of loop over events in digits tree
-  
-  // Beam gas trigger set from the time difference. The time it takes
-  // to travel between the two counters is ~14.3 ns = 143 * 100 ps.
-  //  NB: this should be defined
-  // from time windows relative to the time of the bunch crossing!
-  // beam gas comming from the left ...
-
-  if (TMath::Abs(TMath::Abs(firstTimeLeft - firstTimeRight)-143) < 20) // time window of 2 ns
-    SetInput( "VZERO_BEAMGAS" );
-
-  if (nLeftDig > 0)
-      SetInput( "VZERO_LEFT" );
-
-  if (nRightDig > 0)
-      SetInput( "VZERO_RIGHT" );
-  
-  if (nLeftDig>0 || nRightDig>0) {
-      SetInput( "VZERO_OR" );
-
-    if (nLeftDig>0 && nRightDig>0) {
-        SetInput( "VZERO_AND" );   
-    }
-  }
-  
-  AliDebug(1,Form("VZERO PMs fired: %d (left) %d (right)", nLeftDig, nRightDig));
+       AliRunLoader* runLoader = AliRunLoader::Instance();
+
+       AliLoader* loader = runLoader->GetLoader( "VZEROLoader" );
+
+       if(!loader) {
+               AliError("Can not get VZERO loader");
+               return;
+       }
+       loader->LoadDigits("update");
+       TTree* vzeroDigitsTree = loader->TreeD();
+
+       if (!vzeroDigitsTree) {
+               AliError("Can not get the VZERO digit tree");
+               return;
+       }
+       TClonesArray* vzeroDigits = NULL;
+       TBranch* digitBranch = vzeroDigitsTree->GetBranch("VZERODigit");
+       digitBranch->SetAddress(&vzeroDigits);
+
+       AliVZEROTriggerSimulator * triggerSimulator = new AliVZEROTriggerSimulator(vzeroDigitsTree,vzeroDigits);
+       
+
+       triggerSimulator->Run();
+       
+       loader->WriteDigits("OVERWRITE");  
+       loader->UnloadDigits();     
+
+       if(triggerSimulator->GetBBAandBBC())    SetInput( "VZERO_BBA_AND_BBC" );
+       if(triggerSimulator->GetBBAorBBC())             SetInput( "VZERO_BBA_OR_BBC" );
+       if(triggerSimulator->GetBGAandBBC())    SetInput( "VZERO_BGA_AND_BBC" );
+       if(triggerSimulator->GetBGA())                  SetInput( "0VGA" );
+       if(triggerSimulator->GetBGCandBBA())    SetInput( "VZERO_BGC_AND_BBA" );
+       if(triggerSimulator->GetBGC())                  SetInput( "0VGC" );
+       if(triggerSimulator->GetCTA1andCTC1())  SetInput( "VZERO_CTA1_AND_CTC1" );
+       if(triggerSimulator->GetCTA1orCTC1())   SetInput( "VZERO_CTA1_OR_CTC1" );
+       if(triggerSimulator->GetCTA2andCTC2())  SetInput( "VZERO_CTA2_AND_CTC2" );
+       if(triggerSimulator->GetCTA1orCTC1())   SetInput( "VZERO_CTA1_OR_CTC1" );
+       if(triggerSimulator->GetMTAandMTC())    SetInput( "VZERO_MTA_AND_MTC" );
+       if(triggerSimulator->GetMTAorMTC())             SetInput( "VZERO_MTA_OR_MTC" );
+       if(triggerSimulator->GetBBA())                  SetInput( "0VBA" );
+       if(triggerSimulator->GetBBC())                  SetInput( "0VBC" );
+       if(triggerSimulator->GetBGAorBGC())             SetInput( "VZERO_BGA_OR_BGC" );
+       if(triggerSimulator->GetBeamGas())              SetInput( "VZERO_BEAMGAS" );
+
+       // The following are kept for compatibility with the CTP configuration file. Will have to be removed at some point
+       if(triggerSimulator->GetBBAandBBC())    SetInput( "VZERO_AND" );
+       if(triggerSimulator->GetBBAorBBC())             SetInput( "VZERO_OR" );
+
   return;
 }
 
 
+