@@ -79,44 +79,61 @@ class TRDDPLDigitizerTask : public o2::base::BaseDPLDigitizer
7979 std::vector<o2::trd::Digit> digits; // digits which get filled
8080 o2::dataformats::MCTruthContainer<o2::trd::MCLabel> labels; // labels which get filled
8181
82+ o2::InteractionTimeRecord currentTime; // the current time
83+ o2::InteractionTimeRecord triggerTime; // the time at which the TRD start reading out a signal
84+ bool firstEvent = true ; // Flag for the first event processed
85+
8286 TStopwatch timer;
8387 timer.Start ();
84-
8588 // loop over all composite collisions given from context
8689 // (aka loop over all the interaction records)
8790 for (int collID = 0 ; collID < irecords.size (); ++collID) {
88- mDigitizer .setEventTime (irecords[collID].getTimeNS ());
91+ currentTime = irecords[collID];
92+ // Trigger logic implemented here
93+ if (firstEvent) {
94+ triggerTime = currentTime;
95+ firstEvent = false ;
96+ } else {
97+ double dT = currentTime.getTimeNS () - triggerTime.getTimeNS ();
98+ if (dT < o2::trd::Digitizer::BUSY_TIME) {
99+ // BUSY_TIME = READOUT_TIME + DEAD_TIME, if less than that, pile up the signals and update the last time
100+ mDigitizer .pileup ();
101+ } else {
102+ // A new signal can be received, and the detector read it out:
103+ // flush previous stored digits, labels and keep a trigger record
104+ // then update the trigger time to the new one
105+ mDigitizer .flush (digits, labels);
106+ assert (digits.size () == labels.getIndexedSize ());
107+ // Add trigger record, and send digits to the accumulator
108+ triggers.emplace_back (triggerTime, digitsAccum.size (), digits.size ());
109+ std::copy (digits.begin (), digits.end (), std::back_inserter (digitsAccum));
110+ if (mctruth) {
111+ labelsAccum.mergeAtBack (labels);
112+ }
113+ triggerTime = currentTime;
114+ digits.clear ();
115+ labels.clear ();
116+ }
117+ }
118+
119+ mDigitizer .setEventTime (triggerTime.getTimeNS ()); // do we need this?
89120
90121 // for each collision, loop over the constituents event and source IDs
91122 // (background signal merging is basically taking place here)
92123 for (auto & part : eventParts[collID]) {
93124 mDigitizer .setEventID (part.entryID );
94125 mDigitizer .setSrcID (part.sourceID );
95-
96- // get the hits for this event and this source
126+ // get the hits for this event and this source and process them
97127 std::vector<o2::trd::HitType> hits;
98128 context->retrieveHits (mSimChains , " TRDHit" , part.sourceID , part.entryID , &hits);
99- LOG (INFO) << " For collision " << collID << " eventID " << part.entryID << " found TRD " << hits.size () << " hits " ;
100-
101129 mDigitizer .process (hits, digits, labels);
102- assert (digits.size () == labels.getIndexedSize ());
103-
104- // Add trigger record
105- triggers.emplace_back (irecords[collID], digitsAccum.size (), digits.size ());
106-
107- std::copy (digits.begin (), digits.end (), std::back_inserter (digitsAccum));
108- if (mctruth) {
109- labelsAccum.mergeAtBack (labels);
110- }
111- digits.clear ();
112- labels.clear ();
113130 }
114131 }
132+
115133 // Force flush of the digits that remain in the digitizer cache
116134 mDigitizer .flush (digits, labels);
117135 assert (digits.size () == labels.getIndexedSize ());
118-
119- triggers.emplace_back (irecords[irecords.size () - 1 ], digitsAccum.size (), digits.size ());
136+ triggers.emplace_back (triggerTime, digitsAccum.size (), digits.size ());
120137 std::copy (digits.begin (), digits.end (), std::back_inserter (digitsAccum));
121138 if (mctruth) {
122139 labelsAccum.mergeAtBack (labels);
@@ -146,7 +163,7 @@ class TRDDPLDigitizerTask : public o2::base::BaseDPLDigitizer
146163 std::vector<TChain*> mSimChains ;
147164 // RS: at the moment using hardcoded flag for continuos readout
148165 o2::parameters::GRPObject::ROMode mROMode = o2::parameters::GRPObject::PRESENT; // readout mode
149- };
166+ }; // namespace trd
150167
151168o2::framework::DataProcessorSpec getTRDDigitizerSpec (int channel, bool mctruth)
152169{
@@ -173,5 +190,5 @@ o2::framework::DataProcessorSpec getTRDDigitizerSpec(int channel, bool mctruth)
173190 Options{}};
174191}
175192
176- } // end namespace trd
193+ } // namespace trd
177194} // end namespace o2
0 commit comments