]>
Commit | Line | Data |
---|---|---|
360938ba | 1 | #include "AliRun.h" |
2 | #include "AliRunLoader.h" | |
3 | ||
4 | #include "AliVZEROTrigger.h" | |
5 | ||
6 | //______________________________________________________________________ | |
7 | ClassImp(AliVZEROTrigger) | |
8 | //////////////////////////////////////////////////////////////////////// | |
9 | // | |
10 | // Version 1 | |
11 | // | |
12 | // AliVZEROTrigger: | |
13 | // | |
14 | //////////////////////////////////////////////////////////////////////// | |
15 | ||
16 | //______________________________________________________________________ | |
17 | AliVZEROTrigger::AliVZEROTrigger() | |
0b2bea8b | 18 | :AliTriggerDetector(), |
19 | fAdcThresHold(0.0), | |
20 | fTimeWindowWidth(50.0) | |
21 | ||
360938ba | 22 | { |
23 | SetName("VZERO"); | |
24 | CreateInputs(); | |
25 | ||
26 | SetAdcThreshold(); | |
0b2bea8b | 27 | SetTimeWindowWidth(); |
360938ba | 28 | } |
29 | ||
30 | //______________________________________________________________________ | |
31 | void AliVZEROTrigger::CreateInputs() | |
32 | { | |
33 | // inputs | |
34 | ||
35 | // Do not create inputs again!! | |
36 | if( fInputs.GetEntriesFast() > 0 ) return; | |
37 | ||
38 | fInputs.AddLast( new AliTriggerInput( "VZERO_LEFT", "At least one hit in the left VZERO", 0x01 ) ); | |
39 | fInputs.AddLast( new AliTriggerInput( "VZERO_RIGHT","At least one hit in the right VZERO", 0x02 ) ); | |
b9d46458 | 40 | fInputs.AddLast( new AliTriggerInput( "VZERO_AND", "At least one hit in the each (left and right) VZERO", 0x04 ) ); |
41 | fInputs.AddLast( new AliTriggerInput( "VZERO_OR", "At least one hit in the one (left one right) VZERO", 0x08 ) ); | |
360938ba | 42 | |
b9d46458 | 43 | fInputs.AddLast( new AliTriggerInput( "VZERO_BEAMGAS", "Beam gas VZERO trigger ", 0x010 ) ); |
360938ba | 44 | } |
45 | ||
46 | //______________________________________________________________________ | |
47 | void AliVZEROTrigger::Trigger() | |
48 | { | |
49 | ||
50 | // ********** Get run loader for the current event ********** | |
51 | AliRunLoader* runLoader = gAlice->GetRunLoader(); | |
52 | ||
53 | AliVZEROLoader* loader = (AliVZEROLoader* )runLoader->GetLoader( "VZEROLoader" ); | |
54 | ||
55 | loader->LoadDigits("READ"); | |
56 | TTree* vzeroDigitsTree = loader->TreeD(); | |
698b2e52 | 57 | if (!vzeroDigitsTree) return; |
360938ba | 58 | |
59 | TClonesArray* vzeroDigits = new TClonesArray("AliVZEROdigit",1000); | |
60 | TBranch* digitBranch = vzeroDigitsTree->GetBranch("VZERODigit"); | |
61 | digitBranch->SetAddress(&vzeroDigits); | |
62 | ||
63 | // number of hits in left/right | |
64 | Int_t nLeftDig = 0; | |
65 | Int_t nRightDig = 0; | |
66 | ||
67 | // first time | |
0b2bea8b | 68 | Float_t firstTimeLeft = 9999.0; |
69 | Float_t firstTimeRight = 9999.0; | |
70 | Float_t TimeHalfWidth = fTimeWindowWidth/2.0; | |
2ff50a8f | 71 | |
360938ba | 72 | // loop over vzero entries |
73 | Int_t nEntries = (Int_t)vzeroDigitsTree->GetEntries(); | |
74 | for (Int_t e=0; e<nEntries; e++) { | |
75 | vzeroDigitsTree->GetEvent(e); | |
76 | ||
77 | Int_t nDigits = vzeroDigits->GetEntriesFast(); | |
78 | ||
79 | for (Int_t d=0; d<nDigits; d++) { | |
dcace375 | 80 | // vzeroDigitsTree->GetEvent(d); |
360938ba | 81 | AliVZEROdigit* digit = (AliVZEROdigit*)vzeroDigits->At(d); |
82 | ||
20277079 | 83 | Int_t PMNumber = digit->PMNumber(); |
360938ba | 84 | Float_t adc = digit->ADC(); |
85 | Float_t tdc = digit->Time(); // in 100 of picoseconds | |
86 | ||
20277079 | 87 | if (PMNumber<=31 && adc>fAdcThresHold) { |
c299dbe4 | 88 | if (tdc>(29.0-TimeHalfWidth) && tdc<(29.0+TimeHalfWidth)) nRightDig++; |
0b2bea8b | 89 | if (tdc<firstTimeRight) firstTimeRight = tdc; |
90 | } | |
91 | if (PMNumber>=32 && adc>fAdcThresHold) { | |
c299dbe4 | 92 | if (tdc>(112.0-TimeHalfWidth) && tdc<(112.0+TimeHalfWidth)) nLeftDig++; |
360938ba | 93 | if (tdc<firstTimeLeft) firstTimeLeft = tdc; |
94 | } | |
0b2bea8b | 95 | |
360938ba | 96 | } // end of loop over digits |
97 | } // end of loop over events in digits tree | |
98 | ||
99 | // Beam gas trigger set from the time difference. The time it takes | |
100 | // to travel between the two counters is ~14.3 ns = 143 * 100 ps. | |
101 | // NB: this should be defined | |
102 | // from time windows relative to the time of the bunch crossing! | |
103 | // beam gas comming from the left ... | |
104 | ||
105 | if (TMath::Abs(TMath::Abs(firstTimeLeft - firstTimeRight)-143) < 20) // time window of 2 ns | |
106 | SetInput( "VZERO_BEAMGAS" ); | |
107 | ||
108 | if (nLeftDig > 0) | |
0b2bea8b | 109 | SetInput( "VZERO_LEFT" ); |
360938ba | 110 | |
111 | if (nRightDig > 0) | |
0b2bea8b | 112 | SetInput( "VZERO_RIGHT" ); |
360938ba | 113 | |
114 | if (nLeftDig>0 || nRightDig>0) { | |
0b2bea8b | 115 | SetInput( "VZERO_OR" ); |
360938ba | 116 | |
117 | if (nLeftDig>0 && nRightDig>0) { | |
0b2bea8b | 118 | SetInput( "VZERO_AND" ); |
360938ba | 119 | } |
120 | } | |
121 | ||
2ff50a8f | 122 | AliDebug(1,Form("VZERO PMs fired: %d (left) %d (right)", nLeftDig, nRightDig)); |
123 | ||
360938ba | 124 | return; |
125 | } | |
126 | ||
127 |