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);
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));
DE_Time.push_back(m_PreTreatedData->GetPISTA_DE_StripTime(i));
back_DE_Time.push_back(m_PreTreatedData->GetPISTA_DE_BackTime(i));
E_Time.push_back(m_PreTreatedData->GetPISTA_E_StripTime(j));
back_E_Time.push_back(m_PreTreatedData->GetPISTA_E_BackTime(j));
/*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();
unsigned int sizeDE_back = m_EventData->GetPISTADEBackMult();
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 StripT = m_EventData->GetPISTA_DE_StripTime(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);
for(UShort_t j = 0; j< sizeDE_back; j++){
double BackDE = m_EventData->GetPISTA_DE_BackEnergy(j);
double BackT = m_EventData->GetPISTA_DE_BackTime(j);
int BackDet = m_EventData->GetPISTA_DE_BackDetector(j);
double CalBackDE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_BACK_DE",BackDE);
if (CalStripE > m_E_Threshold && DetNbr==BackDet) {
m_PreTreatedData->SetPISTA_DE(DetNbr, StripNbr, CalStripE, CalBackDE, StripT, BackT);
}
// E
unsigned int sizeE = m_EventData->GetPISTAEMult();
unsigned int sizeE_back = m_EventData->GetPISTAEBackMult();
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 StripT = m_EventData->GetPISTA_E_StripTime(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);
for(UShort_t j = 0; j< sizeE_back; j++){
double BackE = m_EventData->GetPISTA_E_BackEnergy(j);
double BackT = m_EventData->GetPISTA_E_BackTime(j);
int BackDet = m_EventData->GetPISTA_E_BackDetector(j);
double CalBackE = Cal->ApplyCalibration("PISTA/T"+NPL::itoa(DetNbr)+"_BACK_E",BackE);
if (CalStripE > m_E_Threshold && DetNbr==BackDet) {
m_PreTreatedData->SetPISTA_E(DetNbr, StripNbr, CalStripE, CalBackE, StripT, BackT);
}
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
467
468
469
470
471
472
473
474
475
476
477
478
479
}
}
///////////////////////////////////////////////////////////////////////////
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,3,"_DE") == 0 ){
*(m_DEChannelStatus[telescope -1].begin() + channel -1) = false;
else if(DataBuffer.compare(6,2,"_E") == 0 ){
*(m_EChannelStatus[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();
DE_Time.clear();
back_DE_Time.clear();
E_Time.clear();
back_E_Time.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();
}
///////////////////////////////////////////////////////////////////////////
void TPISTAPhysics::InitializeStandardParameter() {
// Enable all channel
vector<bool> ChannelStatusDE;
vector<bool> ChannelStatusE;
m_DEChannelStatus.clear();
m_EChannelStatus.clear();
ChannelStatusDE.resize(91,true);
ChannelStatusE.resize(57,true);
m_DEChannelStatus[i] = ChannelStatusDE;
m_EChannelStatus[i] = ChannelStatusE;
///////////////////////////////////////////////////////////////////////////
bool TPISTAPhysics::IsValidChannel(const int& DetectorType, const int& telescope, const int& channel){
if(DetectorType==0){
return *(m_DEChannelStatus[telescope - 1].begin() + channel -1);
return *(m_EChannelStatus[telescope - 1].begin() + channel -1);
}
else
return false;
}
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
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
///////////////////////////////////////////////////////////////////////////
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");
}
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
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
}
}
///////////////////////////////////////////////////////////////////////////
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);
}
};