diff --git a/TAffineConverterConditionProcessor.cc b/TAffineConverterConditionProcessor.cc index ec94c19a08a3acbc18fc6c5cf90d180b4cdca5d9..6092a087147030484c010bf6de53aaecd839ca04 100644 --- a/TAffineConverterConditionProcessor.cc +++ b/TAffineConverterConditionProcessor.cc @@ -3,7 +3,7 @@ * @brief time dependent affine converter * * @date Created : 2016-11-15 18:02:32 JST - * Last Modified : 2018-02-04 13:20:38 JST (ota) + * Last Modified : 2019-09-09 19:07:04 JST (ota) * @author Shinsuke OTA * * (C) 2016 Shinsuke OTA @@ -30,7 +30,7 @@ TAffineConverterConditionProcessor::TAffineConverterConditionProcessor() RegisterInputCollection("NameEventHeader","name of event header", fNameEventHeader,TString("eventheader"), &fEventHeader,TEventHeader::Class_Name()); - + Register(fTypeOfTimestamp("TypeOfTimestamp","type of timestamp, 0 : eventnumber, 1 : runnumber, 2: timestamp",0)); } TAffineConverterConditionProcessor::~TAffineConverterConditionProcessor() @@ -82,15 +82,34 @@ void TAffineConverterConditionProcessor::Init(TEventCollection *col) { fOutputIsTransparent = kTRUE; col->AddInfo(out,converterArray,fOutputIsTransparent); fConverterArrayList->Add(converterArray); - } + } + + if (fTypeOfTimestamp != 0 && + fTypeOfTimestamp != 1) { + SetStateError(Form("Unknown timestamp type %d",(Int_t)fTypeOfTimestamp)); + } } void TAffineConverterConditionProcessor::Process() { if (fNextTimestamp < 0) return; - if ((*fEventHeader)->GetEventNumber() < fNextTimestamp) return; + double timestamp = 0; + switch (fTypeOfTimestamp) { + case 0: { + timestamp = (*fEventHeader)->GetEventNumber() ; + break; + } + case 1: { + timestamp = (*fEventHeader)->GetRunNumber(); + break; + } + default: + break; + } + if (timestamp <= fNextTimestamp) return; if (fNextIdx >= fTimestamp[0].size()) return; - +// printf("update fNextTimestamp = %f\n",fNextTimestamp); + // condition is filled TClonesArray *converterArray = dynamic_cast(fConverterArrayList->At(0)); if (!converterArray) { @@ -98,13 +117,18 @@ void TAffineConverterConditionProcessor::Process() SetStateError("no converter array is available"); return; } - Int_t n = converterArray->GetEntriesFast(); - for (Int_t i = 0; i < n; ++i) { - TAffineConverter *conv = static_cast(converterArray->UncheckedAt(i)); - conv->Set(fA0[i][fNextIdx],fA1[i][fNextIdx]); + while (timestamp >= fNextTimestamp) { + Int_t n = converterArray->GetEntriesFast(); + for (Int_t i = 0; i < n; ++i) { + TAffineConverter *conv = static_cast(converterArray->UncheckedAt(i)); + conv->Set(fA0[i][fNextIdx],fA1[i][fNextIdx]); +// printf("i/n = %d/%d,%f %f\n",i,n,fA0[i][fNextIdx],fA1[i][fNextIdx]); + } + ++fNextIdx; + if (fTimestamp[0].size() == fNextIdx) break; + fNextTimestamp = fTimestamp[0][fNextIdx]; } - ++fNextIdx; - fNextTimestamp = fTimestamp[0][fNextIdx]; + } diff --git a/TAffineConverterConditionProcessor.h b/TAffineConverterConditionProcessor.h index af22b000d0ab01d116c40bbb7893e3e5c56c4054..ade89827a378b06727da2360f0709b20b19d6550 100644 --- a/TAffineConverterConditionProcessor.h +++ b/TAffineConverterConditionProcessor.h @@ -3,7 +3,7 @@ * @brief time dependent affine converter * * @date Created : 2016-11-15 17:53:02 JST - * Last Modified : 2018-02-04 13:20:29 JST (ota) + * Last Modified : 2019-09-09 18:03:18 JST (ota) * @author Shinsuke OTA * * (C) 2016 Shinsuke OTA @@ -42,6 +42,9 @@ private: Double_t fNextTimestamp; Int_t fNextIdx; + + Parameter fTypeOfTimestamp; + std::vector > fTimestamp; std::vector > fA0; diff --git a/TTimestampCalibrationProcessor.cc b/TTimestampCalibrationProcessor.cc new file mode 100644 index 0000000000000000000000000000000000000000..1bbbdfb9373a440fe0b82e8322798515e93a25ca --- /dev/null +++ b/TTimestampCalibrationProcessor.cc @@ -0,0 +1,47 @@ +/* @file TTimestampCalibrationProcessor.cc + * @brief timestamp calibration with TAffineConverter + * + * @date Create : 2019-09-09 18:18:09 JST + * Last Modified : 2019-09-09 19:06:56 JST (ota) + * @author: Shinsuke OTA + */ + + +#include "TTimestampCalibrationProcessor.h" +#include "TConverterBase.h" +#include "TDataObject.h" + +ClassImp(art::TTimestampCalibrationProcessor) + +using art::TTimestampCalibrationProcessor; + +TTimestampCalibrationProcessor::TTimestampCalibrationProcessor() +{ + Register(fConverter("Converter","Name of converter","converter")); + Register(fInput("Input","name of input collection","input")); + fConverter.SetDoAuto(true); + fInput.SetDoAuto(true); +} + +TTimestampCalibrationProcessor::~TTimestampCalibrationProcessor() +{ +} + + +void TTimestampCalibrationProcessor::Process() { + const int n = fInput->GetEntriesFast(); + if (n == 0) return; + + for (int i = 0; i < n; ++i) { + TDataObject *data = static_cast(fInput->UncheckedAt(i)); + const int id = data->GetID(); + TConverterBase *converter; + if (fConverter->GetEntriesFast() < id || + (converter = static_cast(fConverter->At(id))) == NULL) { + if (fVerboseLevel > 0) Warning("Process","Converter is not set to id = %d",id); + continue; + } + data->SetTimestamp(converter->Convert(data->GetTimestamp())); + } +} + diff --git a/TTimestampCalibrationProcessor.h b/TTimestampCalibrationProcessor.h new file mode 100644 index 0000000000000000000000000000000000000000..2ec707a9745b1350adc8e638d6a25b7751d6dfc9 --- /dev/null +++ b/TTimestampCalibrationProcessor.h @@ -0,0 +1,37 @@ +/* @file TTimestampCalibrationProcessor.h + * @brief timestamp calibration using TAffineConverter + * + * @date Create : 2019-09-09 18:16:19 JST + * Last Modified : 2019-09-09 18:30:07 JST (ota) + * @author: Shinsuke OTA + */ + +#ifndef INCLUDE_GUARD_UUID_E93CA473_624F_4073_931D_FB7A4D8829F7 +#define INCLUDE_GUARD_UUID_E93CA473_624F_4073_931D_FB7A4D8829F7 + +#include "TProcessor.h" + +namespace art { + class TTimestampCalibrationProcessor; + class TConverterBase; + class TDataObject; +} + + +class art::TTimestampCalibrationProcessor : public TProcessor { +public: + TTimestampCalibrationProcessor(); + virtual ~TTimestampCalibrationProcessor(); + + + void Process(); + +protected: + InputInfo fConverter; + InputData fInput; + + + ClassDef(TTimestampCalibrationProcessor,1) +}; // end of TTimestampCalibrationProcessor + +#endif // #ifndef INCLUDE_GUARD_UUID_E93CA473_624F_4073_931D_FB7A4D8829F7} diff --git a/linkdef_user.h b/linkdef_user.h index b3e9838b73db805a0676eff1c9494ea006a96806..3863f1f72f866fdc59b64b81ee9644e6b8c52150 100644 --- a/linkdef_user.h +++ b/linkdef_user.h @@ -100,7 +100,8 @@ #pragma link C++ class art::ribf113::TCatTrackFindWithSiliconProcessor; #pragma link C++ class art::TEnergyCorrectionInMaterial; #pragma link C++ class art::TDetectorGeometryUpdateProcessor; - +#pragma link C++ class art::TChargeRiseTimeCompensateProcessor; +#pragma link C++ class art::TTimestampCalibrationProcessor; #endif // __CINT__ #endif // LINKDEF_USER_H diff --git a/makefile b/makefile index 9901cb2814a1bc200deb21e944805e43230f1c34..50b71289c9376626f579f31b288f502ed4b63729 100644 --- a/makefile +++ b/makefile @@ -89,6 +89,8 @@ OBJ += TDetectorGeometryUpdateProcessor.o # ribf113 OBJ += TCatGlastPositionConditionProcessor.o OBJ += TCatTrackFindWithSiliconProcessor.o +OBJ += TChargeRiseTimeCompensateProcessor.o +OBJ += TTimestampCalibrationProcessor.o CXX=$(shell artemis-config --cxx) UNAME = $(shell uname)