Skip to content
Snippets Groups Projects
Commit cd123cd6 authored by Adrien Matta's avatar Adrien Matta :skull_crossbones:
Browse files

* Nebula now ignore calibration from XML file when analysing a

simulation
parent 83cf4f85
No related branches found
No related tags found
No related merge requests found
...@@ -66,27 +66,53 @@ void TNebulaPhysics::ReadXML(NPL::XmlParser xml){ ...@@ -66,27 +66,53 @@ void TNebulaPhysics::ReadXML(NPL::XmlParser xml){
PositionX[id] = b[i]->AsDouble("PosX"); PositionX[id] = b[i]->AsDouble("PosX");
PositionY[id] = b[i]->AsDouble("PosY"); PositionY[id] = b[i]->AsDouble("PosY");
PositionZ[id] = b[i]->AsDouble("PosZ"); PositionZ[id] = b[i]->AsDouble("PosZ");
// linear cal std::string tree_name = RootInput::getInstance()->GetChain()->GetName();
aQu[id] = b[i]->AsDouble("QUCal"); if(tree_name!="SimulatedTree"){
bQu[id] = b[i]->AsDouble("QUPed"); // linear cal
aQd[id] = b[i]->AsDouble("QDCal"); aQu[id] = b[i]->AsDouble("QUCal");
bQd[id] = b[i]->AsDouble("QDPed"); bQu[id] = b[i]->AsDouble("QUPed");
aTu[id] = b[i]->AsDouble("TUCal"); aQd[id] = b[i]->AsDouble("QDCal");
bTu[id] = b[i]->AsDouble("TUOff"); bQd[id] = b[i]->AsDouble("QDPed");
aTd[id] = b[i]->AsDouble("TDCal"); aTu[id] = b[i]->AsDouble("TUCal");
bTd[id] = b[i]->AsDouble("TDOff"); bTu[id] = b[i]->AsDouble("TUOff");
aTd[id] = b[i]->AsDouble("TDCal");
bTd[id] = b[i]->AsDouble("TDOff");
// T average offset
avgT0[id] = b[i]->AsDouble("TAveOff");
// slew correction T= tcal +slwT/sqrt(Qcal)
slwTu[id] = b[i]->AsDouble("TUSlw");
slwTd[id] = b[i]->AsDouble("TDSlw");
// DT position cal
DTa[id] = b[i]->AsDouble("DTCal");//!
DTb[id] = b[i]->AsDouble("DTOff");//!
}
else{
// linear cal
aQu[id] =1;
bQu[id] =0;
aQd[id] =1;
bQd[id] =0;
aTu[id] =1;
bTu[id] =0;
aTd[id] =1;
bTd[id] =0;
// T average offset
avgT0[id]= 0;
// T average offset // slew correction T= tcal +slwT/sqrt(Qcal)
avgT0[id] = b[i]->AsDouble("TAveOff"); slwTu[id] = 0;
slwTd[id] = 0;
// slew correction T= tcal +slwT/sqrt(Qcal) // DT position cal
slwTu[id] = b[i]->AsDouble("TUSlw"); DTa[id] = 0;//!
slwTd[id] = b[i]->AsDouble("TDSlw"); DTb[id] = 0;//!
// DT position cal
DTa[id] = b[i]->AsDouble("DTCal");//!
DTb[id] = b[i]->AsDouble("DTOff");//!
}
} }
cout << " -> " << m_NumberOfBars << " bars found" << endl;; cout << " -> " << m_NumberOfBars << " bars found" << endl;;
...@@ -157,11 +183,10 @@ void TNebulaPhysics::BuildPhysicalEvent() { ...@@ -157,11 +183,10 @@ void TNebulaPhysics::BuildPhysicalEvent() {
} }
// Got everything, do the math // Got everything, do the math
if(rawTup>0){ if(rawTup>0){
//std::cout << "Hello 2" << std::endl;
// cal Q Up and Down // cal Q Up and Down
calQup=aQu[ID]*(rawQup-bQu[ID]); calQup=aQu[ID]*(rawQup-bQu[ID]);
calQdown=aQd[ID]*(rawQdown-bQd[ID]); calQdown=aQd[ID]*(rawQdown-bQd[ID]);
// average value of Up and Down // average value of Up and Down
calQ=sqrt(calQup*calQdown); calQ=sqrt(calQup*calQdown);
...@@ -176,10 +201,7 @@ void TNebulaPhysics::BuildPhysicalEvent() { ...@@ -176,10 +201,7 @@ void TNebulaPhysics::BuildPhysicalEvent() {
calTdown -= slwTd[ID]/sqrt(rawQdown-bQd[ID]); calTdown -= slwTd[ID]/sqrt(rawQdown-bQd[ID]);
//std::cout << calQ << " " << threshold << std::endl;
if(calQ>threshold){ if(calQ>threshold){
//std::cout << "Hello 3" << std::endl;
calT= (calTdown+calTup)*0.5+avgT0[ID]+Cal->GetPedestal("NEBULA_T_ID"+NPL::itoa(ID)); calT= (calTdown+calTup)*0.5+avgT0[ID]+Cal->GetPedestal("NEBULA_T_ID"+NPL::itoa(ID));
Y=(calTdown-calTup)*DTa[ID]+DTb[ID]+Cal->GetPedestal("NEBULA_Y_ID"+NPL::itoa(ID)); Y=(calTdown-calTup)*DTa[ID]+DTb[ID]+Cal->GetPedestal("NEBULA_Y_ID"+NPL::itoa(ID));
......
...@@ -323,22 +323,19 @@ void Nebula::ReadSensitive(const G4Event* ){ ...@@ -323,22 +323,19 @@ void Nebula::ReadSensitive(const G4Event* ){
Light = RandGauss::shoot(Light_tmp, Light_tmp*Nebula_NS::ResoLight); Light = RandGauss::shoot(Light_tmp, Light_tmp*Nebula_NS::ResoLight);
if(Light>Nebula_NS::LightThreshold){ if(Light>Nebula_NS::LightThreshold){
double Time = RandGauss::shoot(PlasticScorer_Module->GetTime(i),Nebula_NS::ResoTime);
//cout << "Time is " << Time << endl;
double Position = RandGauss::shoot(PlasticScorer_Module->GetPosition(i),Nebula_NS::ResoPosition);
//cout << "Position is " << Position << endl;
int DetectorNbr = level[0]; int DetectorNbr = level[0];
//cout << "Detector ID: " << DetectorNbr << endl; double Position = RandGauss::shoot(PlasticScorer_Module->GetPosition(i),Nebula_NS::ResoPosition);
m_Event->SetChargeUp(DetectorNbr,Light*exp(-(Nebula_NS::ModuleHeight/2-Position)/Nebula_NS::Attenuation)); m_Event->SetChargeUp(DetectorNbr,Light*exp(-(Nebula_NS::ModuleHeight/2-Position)/Nebula_NS::Attenuation));
m_Event->SetChargeDown(DetectorNbr,Light*exp(-(Nebula_NS::ModuleHeight/2+Position)/Nebula_NS::Attenuation)); m_Event->SetChargeDown(DetectorNbr,Light*exp(-(Nebula_NS::ModuleHeight/2+Position)/Nebula_NS::Attenuation));
// Take TOF and Position and compute Tup and Tdown
double Time = RandGauss::shoot(PlasticScorer_Module->GetTime(i),Nebula_NS::ResoTime);
Time_up = (Nebula_NS::ModuleHeight/2-Position)/(c_light/Nebula_NS::MaterialIndex) + Time; Time_up = (Nebula_NS::ModuleHeight/2-Position)/(c_light/Nebula_NS::MaterialIndex) + Time;
//cout << "Time_up is " << Time_up << endl;
m_Event->SetTimeUp(DetectorNbr,Time_up); m_Event->SetTimeUp(DetectorNbr,Time_up);
Time_down = (Nebula_NS::ModuleHeight/2+Position)/(c_light/Nebula_NS::MaterialIndex) + Time; Time_down = (Nebula_NS::ModuleHeight/2+Position)/(c_light/Nebula_NS::MaterialIndex) + Time;
//cout << "Time_down is " << Time_down << endl;
m_Event->SetTimeDown(DetectorNbr,Time_down); m_Event->SetTimeDown(DetectorNbr,Time_down);
} }
} }
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment