Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*****************************************************************************
* Copyright (C) 2009-2020 this file is part of the NPTool Project *
* *
* For the licensing terms see $NPTOOL/Licence/NPTool_Licence *
* For the list of contributors see $NPTOOL/Licence/Contributors *
*****************************************************************************/
/*****************************************************************************
* Original Author: Pierre Morfouace contact address: pierre.morfouace2@cea.fr *
* *
* Creation Date : May 2020 *
* Last update : *
*---------------------------------------------------------------------------*
* Decription: *
* This class hold PISTA Treated data *
* *
*---------------------------------------------------------------------------*
* Comment: *
* *
* *
*****************************************************************************/
#include "TPISTAPhysics.h"
// STL
#include <sstream>
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <limits>
using namespace std;
// NPL
#include "RootInput.h"
#include "RootOutput.h"
#include "NPDetectorFactory.h"
#include "NPOptionManager.h"
// ROOT
#include "TChain.h"
ClassImp(TPISTAPhysics)
///////////////////////////////////////////////////////////////////////////
TPISTAPhysics::TPISTAPhysics(){
EventMultiplicity = 0;
m_EventData = new TPISTAData;
m_PreTreatedData = new TPISTAData;
m_EventPhysics = this;
m_Spectra = NULL;
m_E_RAW_Threshold = 0; // adc channels
m_E_Threshold = 0; // MeV
m_NumberOfDetectors = 0;
m_NumberOfStripsX = 57;
m_NumberOfStripsY = 91;
m_MaximumStripMultiplicityAllowed = 10;
m_StripEnergyMatching = 0.050;
}
///////////////////////////////////////////////////////////////////////////
/// A usefull method to bundle all operation to add a detector
void TPISTAPhysics::AddDetector(TVector3 A, TVector3 B, TVector3 C, TVector3 D){
// Front Face
// A------------------------B
// *----------------------*
// *--------------------*
// *------------------*
// *----------------*
// *--------------*
// *------------*
// D----------C
double Height = 61.7; // mm
double LongBase = 78.1; // mm
double NumberOfStripsX = 57;
double NumberOfStripsY = 91;
double StripPitchY = Height/NumberOfStripsY; // mm
double StripPitchX = LongBase/NumberOfStripsX; // mm
m_NumberOfDetectors++;
m_A.push_back(A);
m_B.push_back(B);
m_C.push_back(C);
m_D.push_back(D);
// Vector u on telescope face paralelle to Y strips
TVector3 u = B - A;
u = u.Unit();
// Vector v on telescope face paralelle to X strips
TVector3 v = (C+D)*0.5 - (A+B)*0.5;
v = v.Unit();
// Vector n normal to detector surface pointing to target
TVector3 n = -0.25*(A+B+C+D);
double norm = n.Mag();
n = n.Unit();
vector<double> lineX;
vector<double> lineY;
vector<double> lineZ;
vector<vector<double>> OneDetectorStripPositionX;
vector<vector<double>> OneDetectorStripPositionY;
vector<vector<double>> OneDetectorStripPositionZ;
TVector3 Strip_1_1;
double ContractedStripPitchX = StripPitchX*norm/(norm+7);
double ContractedLongBase = NumberOfStripsX*ContractedStripPitchX;
double deltaX = LongBase/2-ContractedLongBase/2;
//Strip_1_1 = A + u*(StripPitchX / 2.) + v*(StripPitchY / 2.);
Strip_1_1 = A + u*deltaX + u*(ContractedStripPitchX / 2.) + v*(NumberOfStripsY*StripPitchY - StripPitchY / 2.);
TVector3 StripPos;
for(int i=0; i<NumberOfStripsX; i++){
lineX.clear();
lineY.clear();
lineZ.clear();
for(int j=0; j<NumberOfStripsY; j++){
//StripPos = Strip_1_1 + i*u*StripPitchX + j*v*StripPitchY;
StripPos = Strip_1_1 + i*u*ContractedStripPitchX - j*v*StripPitchY;
//lineX.push_back(StripPos.X()*norm/(norm+7*abs(sin(n.Phi()))));
//lineY.push_back(StripPos.Y()*norm/(norm+7*abs(cos(n.Phi()))));
lineZ.push_back(StripPos.Z());
}
OneDetectorStripPositionX.push_back(lineX);
OneDetectorStripPositionY.push_back(lineY);
OneDetectorStripPositionZ.push_back(lineZ);
}
m_StripPositionX.push_back(OneDetectorStripPositionX);
m_StripPositionY.push_back(OneDetectorStripPositionY);
m_StripPositionZ.push_back(OneDetectorStripPositionZ);
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::AddDetector(double R, double Theta, double Phi){
m_NumberOfDetectors++;
double NumberOfStripsX = 57;
double NumberOfStripsY = 91;
double StripPitchHeight = Height / NumberOfStripsY; // mm
double StripPitchBase = Base / NumberOfStripsX; // mm
// Vector U on detector face (parallel to Y strips) Y strips are along X axis
TVector3 U;
// Vector V on detector face (parallel to X strips)
TVector3 V;
// Vector W normal to detector face (pointing to the back)
TVector3 W;
// Vector C position of detector face center
TVector3 C;
C = TVector3(R*sin(Theta)*cos(Phi),
R*sin(Theta)*sin(Phi),
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
TVector3 P = TVector3(cos(Theta)*cos(Phi),
cos(Theta)*sin(Phi),
-sin(Theta));
W = C.Unit();
U = W.Cross(P);
V = W.Cross(U);
U = U.Unit();
V = V.Unit();
vector<double> lineX;
vector<double> lineY;
vector<double> lineZ;
vector<vector<double>> OneDetectorStripPositionX;
vector<vector<double>> OneDetectorStripPositionY;
vector<vector<double>> OneDetectorStripPositionZ;
double X, Y, Z;
// Moving C to the 1.1 Corner;
TVector3 Strip_1_1;
Strip_1_1 = C - (0.5*Base*U + 0.5*Height*V) + U*(StripPitchBase / 2.) + V*(StripPitchHeight / 2.);
TVector3 StripPos;
for(int i=0; i<NumberOfStripsX; i++){
lineX.clear();
lineY.clear();
lineZ.clear();
for(int j=0; j<NumberOfStripsY; j++){
StripPos = Strip_1_1 + i*U*StripPitchBase + j*V*StripPitchHeight;
lineX.push_back(StripPos.X());
lineY.push_back(StripPos.Y());
lineZ.push_back(StripPos.Z());
}
OneDetectorStripPositionX.push_back(lineX);
OneDetectorStripPositionY.push_back(lineY);
OneDetectorStripPositionZ.push_back(lineZ);
}
m_StripPositionX.push_back(OneDetectorStripPositionX);
m_StripPositionY.push_back(OneDetectorStripPositionY);
m_StripPositionZ.push_back(OneDetectorStripPositionZ);
///////////////////////////////////////////////////////////////////////////
TVector3 TPISTAPhysics::GetPositionOfInteraction(const int i){
TVector3 Position = TVector3(GetStripPositionX(DetectorNumber[i], E_StripNbr[i], DE_StripNbr[i]),
GetStripPositionY(DetectorNumber[i], E_StripNbr[i], DE_StripNbr[i]),
GetStripPositionZ(DetectorNumber[i], E_StripNbr[i], DE_StripNbr[i]));
/*TVector3 Position = TVector3(GetStripPositionX(DetectorNumber[i], DE_StripX[i], E_StripY[i]),
GetStripPositionY(DetectorNumber[i], DE_StripX[i], E_StripY[i]),
GetStripPositionZ(DetectorNumber[i], DE_StripX[i], E_StripY[i]));
*/
return Position;
}
///////////////////////////////////////////////////////////////////////////
TVector3 TPISTAPhysics::GetDetectorNormal(const int i){
int det = DetectorNumber[i];
// Vector u on telescope face paralelle to Y strips
TVector3 u = m_B[det-1] - m_A[det-1];
u = u.Unit();
// Vector v on telescope face paralelle to X strips
TVector3 v = (m_C[det-1] + m_D[det-1])*0.5 - (m_A[det-1] + m_B[det-1])*0.5;
v = v.Unit();
/*TVector3 U = TVector3(GetStripPositionX(DetectorNumber[i],57,1),
GetStripPositionY(DetectorNumber[i],57,1),
GetStripPositionZ(DetectorNumber[i],57,1))
-TVector3(GetStripPositionX(DetectorNumber[i],57,1),
GetStripPositionY(DetectorNumber[i],57,1),
GetStripPositionZ(DetectorNumber[i],57,1));
TVector3 V = TVector3(GetStripPositionX(DetectorNumber[i],57,91),
GetStripPositionY(DetectorNumber[i],57,91),
GetStripPositionZ(DetectorNumber[i],57,91))
-TVector3(GetStripPositionX(DetectorNumber[i],57,1),
GetStripPositionY(DetectorNumber[i],57,1),
GetStripPositionZ(DetectorNumber[i],57,1));*/
TVector3 Normal = u.Cross(v);
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::BuildSimplePhysicalEvent() {
BuildPhysicalEvent();
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::BuildPhysicalEvent() {
// apply thresholds and calibration
PreTreat();
//vector<TVector2> couple = Match_X_Y();
//EventMultiplicity = couple.size();
DEMult = m_PreTreatedData->GetPISTADEMult();
EMult = m_PreTreatedData->GetPISTAEMult();
StripNbr_DE = m_PreTreatedData->GetPISTA_DE_StripNbr(i);
if(EMult==0){
DetectorNumber.push_back(DE_DetNbr);
DE_StripNbr.push_back(StripNbr_DE);
DE.push_back(m_PreTreatedData->GetPISTA_DE_StripEnergy(i));
back_DE.push_back(m_PreTreatedData->GetPISTA_DE_BackEnergy(i));
}
for(unsigned int j=0; j<EMult; j++){
E_DetNbr = m_PreTreatedData->GetPISTA_E_DetectorNbr(j);
StripNbr_E = m_PreTreatedData->GetPISTA_E_StripNbr(j);
if(DE_DetNbr==E_DetNbr){
// Taking Strip energy for DE
double DE_Energy = m_PreTreatedData->GetPISTA_DE_StripEnergy(i);
// Taking BAck Energy for E
double E_Energy = m_PreTreatedData->GetPISTA_E_StripEnergy(j);
//double E_Time = m_PreTreatedData->GetPISTA_E_BackTime(j);
DetectorNumber.push_back(DE_DetNbr);
DE_StripNbr.push_back(StripNbr_DE);
E_StripNbr.push_back(StripNbr_E);
DE.push_back(DE_Energy);
E.push_back(E_Energy);
back_DE.push_back(m_PreTreatedData->GetPISTA_DE_BackEnergy(i));
back_E.push_back(m_PreTreatedData->GetPISTA_E_BackEnergy(j));
//Time.push_back(E_Time);
/*PosX.push_back(GetPositionOfInteraction(i).x());
PosY.push_back(GetPositionOfInteraction(i).y());
PosZ.push_back(GetPositionOfInteraction(i).z());*/
}
}
}
if(EMult==0)
EventMultiplicity=0;
else
EventMultiplicity = DetectorNumber.size();
}
///////////////////////////////////////////////////////////////////////////
vector<TVector2> TPISTAPhysics::Match_X_Y(){
vector<TVector2> ArrayOfGoodCouple;
static unsigned int m_DEMult, m_EMult;
m_DEMult = m_PreTreatedData->GetPISTADEMult();
m_EMult = m_PreTreatedData->GetPISTAEMult();
if(m_DEMult>m_MaximumStripMultiplicityAllowed || m_EMult>m_MaximumStripMultiplicityAllowed){
return ArrayOfGoodCouple;
}
return ArrayOfGoodCouple;
}
///////////////////////////////////////////////////////////////////////////
int TPISTAPhysics::CheckEvent(){
// Check the size of the different elements
if(m_PreTreatedData->GetPISTADEMult() == m_PreTreatedData->GetPISTAEMult() )
return 1;
else
return -1;
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::PreTreat() {
// This method typically applies thresholds and calibrations
// Might test for disabled channels for more complex detector
// clear pre-treated object
ClearPreTreatedData();
// instantiate CalibrationManager
static CalibrationManager* Cal = CalibrationManager::getInstance();
// DE
unsigned int sizeDE = m_EventData->GetPISTADEMult();
for (UShort_t i = 0; i < sizeDE ; ++i) {
if (IsValidChannel(0,m_EventData->GetPISTA_DE_DetectorNbr(i),m_EventData->GetPISTA_DE_StripNbr(i))) {
int DetNbr = m_EventData->GetPISTA_DE_DetectorNbr(i);
int StripNbr = m_EventData->GetPISTA_DE_StripNbr(i);
double StripE = m_EventData->GetPISTA_DE_StripEnergy(i);
double BackDE = m_EventData->GetPISTA_DE_BackEnergy(i);
double StripT = m_EventData->GetPISTA_DE_StripTime(i);
double BackT = 0;//m_EventData->GetPISTA_DE_BackTime(i);
double ped = Cal->GetValue("PISTA/T"+NPL::itoa(DetNbr)+"_STRIP"+NPL::itoa(StripNbr)+"_DE_PEDESTAL",0);
double CalStripE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_STRIP"+NPL::itoa(StripNbr)+"_DE_ENERGY",StripE-ped);
double CalBackDE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_BACK_DE",BackDE);
if (CalStripE > m_E_Threshold) {
m_PreTreatedData->SetPISTA_DE(DetNbr, StripNbr, CalStripE, CalBackDE, StripT, BackT);
// E
unsigned int sizeE = m_EventData->GetPISTAEMult();
for (UShort_t i = 0; i < sizeE ; ++i) {
if (IsValidChannel(1,m_EventData->GetPISTA_E_DetectorNbr(i),m_EventData->GetPISTA_E_StripNbr(i))) {
int DetNbr = m_EventData->GetPISTA_E_DetectorNbr(i);
int StripNbr = m_EventData->GetPISTA_E_StripNbr(i);
double StripE = m_EventData->GetPISTA_E_StripEnergy(i);
double BackE = m_EventData->GetPISTA_E_BackEnergy(i);
double StripT = m_EventData->GetPISTA_E_StripTime(i);
double BackT = 0;//m_EventData->GetPISTA_E_BackTime(i);
double ped = Cal->GetValue("PISTA/T"+NPL::itoa(DetNbr)+"_STRIP"+NPL::itoa(StripNbr)+"_E_PEDESTAL",0);
double CalStripE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_STRIP"+NPL::itoa(StripNbr)+"_E_ENERGY",StripE-ped);
double CalBackE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_BACK_E",BackE);
if (CalStripE > m_E_Threshold) {
m_PreTreatedData->SetPISTA_E(DetNbr, StripNbr, CalStripE, CalBackE, StripT, BackT);
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::ReadAnalysisConfig() {
bool ReadingStatus = false;
// path to file
string FileName = "./configs/ConfigPISTA.dat";
// open analysis config file
ifstream AnalysisConfigFile;
AnalysisConfigFile.open(FileName.c_str());
if (!AnalysisConfigFile.is_open()) {
cout << " No ConfigPISTA.dat found: Default parameter loaded for Analayis " << FileName << endl;
return;
}
cout << " Loading user parameter for Analysis from ConfigPISTA.dat " << endl;
// Save it in a TAsciiFile
TAsciiFile* asciiConfig = RootOutput::getInstance()->GetAsciiFileAnalysisConfig();
asciiConfig->AppendLine("%%% ConfigPISTA.dat %%%");
asciiConfig->Append(FileName.c_str());
asciiConfig->AppendLine("");
// read analysis config file
string LineBuffer,DataBuffer,whatToDo;
while (!AnalysisConfigFile.eof()) {
// Pick-up next line
getline(AnalysisConfigFile, LineBuffer);
// search for "header"
string name = "ConfigPISTA";
if (LineBuffer.compare(0, name.length(), name) == 0)
ReadingStatus = true;
// loop on tokens and data
while (ReadingStatus ) {
whatToDo="";
AnalysisConfigFile >> whatToDo;
// Search for comment symbol (%)
if (whatToDo.compare(0, 1, "%") == 0) {
AnalysisConfigFile.ignore(numeric_limits<streamsize>::max(), '\n' );
}
else if (whatToDo=="E_RAW_THRESHOLD") {
AnalysisConfigFile >> DataBuffer;
m_E_RAW_Threshold = atof(DataBuffer.c_str());
cout << whatToDo << " " << m_E_RAW_Threshold << endl;
}
else if (whatToDo=="E_THRESHOLD") {
AnalysisConfigFile >> DataBuffer;
m_E_Threshold = atof(DataBuffer.c_str());
cout << whatToDo << " " << m_E_Threshold << endl;
}
else if(whatToDo=="DISABLE_CHANNEL"){
AnalysisConfigFile >> DataBuffer;
cout << whatToDo << " " << DataBuffer << endl;
int telescope = atoi(DataBuffer.substr(5,1).c_str());
int channel = -1;
if(DataBuffer.compare(6,4,"STRX") == 0 ){
channel = atoi(DataBuffer.substr(10).c_str());
*(m_XChannelStatus[telescope -1].begin() + channel -1) = false;
}
else if(DataBuffer.compare(6,4,"STRY") == 0 ){
channel = atoi(DataBuffer.substr(10).c_str());
*(m_YChannelStatus[telescope -1].begin() + channel -1) = false;
}
}
else {
ReadingStatus = false;
}
}
}
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::Clear() {
EventMultiplicity = 0;
// Position Information
PosX.clear();
PosY.clear();
PosZ.clear();
DetectorNumber.clear();
back_DE.clear();
back_E.clear();
DE_StripNbr.clear();
E_StripNbr.clear();
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::ReadConfiguration(NPL::InputParser parser) {
vector<NPL::InputBlock*> blocks = parser.GetAllBlocksWithToken("PISTA");
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << "//// " << blocks.size() << " detectors found " << endl;
vector<string> cart = {"POS_A","POS_B","POS_C","POS_D"};
for(unsigned int i = 0 ; i < blocks.size() ; i++){
if(blocks[i]->HasTokenList(cart)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// PISTA " << i+1 << endl;
TVector3 A = blocks[i]->GetTVector3("POS_A","mm");
TVector3 B = blocks[i]->GetTVector3("POS_B","mm");
TVector3 C = blocks[i]->GetTVector3("POS_C","mm");
TVector3 D = blocks[i]->GetTVector3("POS_D","mm");
}
else if(blocks[i]->HasTokenList(sphe)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// PISTA " << i+1 << endl;
double R = blocks[i]->GetDouble("R","mm");
double Theta = blocks[i]->GetDouble("Theta","deg");
double Phi = blocks[i]->GetDouble("Phi","deg");
}
else{
cout << "ERROR: check your input file formatting " << endl;
exit(1);
}
}
InitializeStandardParameter();
ReadAnalysisConfig();
}
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitializeStandardParameter() {
// Enable all channel
vector<bool> ChannelStatusX;
vector<bool> ChannelStatusY;
m_XChannelStatus.clear();
m_YChannelStatus.clear();
ChannelStatusX.resize(91,true);
ChannelStatusY.resize(57,true);
for(int i=0; i<91; i++){
m_XChannelStatus[i] = ChannelStatusX;
}
for(int i=0; i<57; i++){
m_YChannelStatus[i] = ChannelStatusY;
}
}
///////////////////////////////////////////////////////////////////////////
bool TPISTAPhysics::IsValidChannel(const int& DetectorType, const int& telescope, const int& channel){
if(DetectorType==0){
return *(m_XChannelStatus[telescope - 1].begin() + channel -1);
}
else if(DetectorType==1){
return *(m_YChannelStatus[telescope - 1].begin() + channel -1);
}
else
return false;
}
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitSpectra() {
m_Spectra = new TPISTASpectra(m_NumberOfDetectors);
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::FillSpectra() {
m_Spectra -> FillRawSpectra(m_EventData);
m_Spectra -> FillPreTreatedSpectra(m_PreTreatedData);
m_Spectra -> FillPhysicsSpectra(m_EventPhysics);
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::CheckSpectra() {
m_Spectra->CheckSpectra();
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::ClearSpectra() {
// To be done
}
///////////////////////////////////////////////////////////////////////////
map< string , TH1*> TPISTAPhysics::GetSpectra() {
if(m_Spectra)
return m_Spectra->GetMapHisto();
else{
map< string , TH1*> empty;
return empty;
}
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::WriteSpectra() {
m_Spectra->WriteSpectra();
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::AddParameterToCalibrationManager() {
CalibrationManager* Cal = CalibrationManager::getInstance();
for(int i=0; i<m_NumberOfDetectors; ++i) {
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_BACK_DE","PISTA_T"+ NPL::itoa(i+1)+"_BACK_DE");
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_BACK_E","PISTA_T"+ NPL::itoa(i+1)+"_BACK_E");
for(int j=0; j<m_NumberOfStripsY; j++){
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_DE_ENERGY","PISTA_T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_DE_ENERGY");
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_DE_PEDESTAL","PISTA_T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_DE_PEDESTAL");
}
for(int j=0; j<m_NumberOfStripsX; j++){
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_E_ENERGY","PISTA_T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_E_ENERGY");
Cal->AddParameter("PISTA", "T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_E_PEDESTAL","PISTA_T"+ NPL::itoa(i+1)+"_STRIP"+NPL::itoa(j+1)+"_E_PEDESTAL");
}
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
}
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitializeRootInputRaw() {
TChain* inputChain = RootInput::getInstance()->GetChain();
inputChain->SetBranchStatus("PISTA", true );
inputChain->SetBranchAddress("PISTA", &m_EventData );
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitializeRootInputPhysics() {
TChain* inputChain = RootInput::getInstance()->GetChain();
inputChain->SetBranchAddress("PISTA", &m_EventPhysics);
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitializeRootOutput() {
TTree* outputTree = RootOutput::getInstance()->GetTree();
outputTree->Branch("PISTA", "TPISTAPhysics", &m_EventPhysics);
}
////////////////////////////////////////////////////////////////////////////////
// Construct Method to be pass to the DetectorFactory //
////////////////////////////////////////////////////////////////////////////////
NPL::VDetector* TPISTAPhysics::Construct() {
return (NPL::VDetector*) new TPISTAPhysics();
}
////////////////////////////////////////////////////////////////////////////////
// Registering the construct method to the factory //
////////////////////////////////////////////////////////////////////////////////
extern "C"{
class proxy_PISTA{
public:
proxy_PISTA(){
NPL::DetectorFactory::getInstance()->AddToken("PISTA","PISTA");
NPL::DetectorFactory::getInstance()->AddDetector("PISTA",TPISTAPhysics::Construct);
}
};