diff --git a/NPLib/Detectors/BigRIPS/BigRIPSPPACVariables.h b/NPLib/Detectors/BigRIPS/BigRIPSPPACVariables.h index 9b2cefe1476c36ca89845e9dcba8ce25674e533b..b1ca9621f9927d32b68061a48eaae7c6f20b3ccb 100644 --- a/NPLib/Detectors/BigRIPS/BigRIPSPPACVariables.h +++ b/NPLib/Detectors/BigRIPS/BigRIPSPPACVariables.h @@ -29,7 +29,7 @@ using namespace std; class BigRIPSPPACVariables{ public: - BigRIPSPPACVariables(){}; + BigRIPSPPACVariables(){Clear();}; ~BigRIPSPPACVariables(){}; public: @@ -38,6 +38,7 @@ class BigRIPSPPACVariables{ std::vector<double> FTY1; std::vector<double> FTY2; std::vector<double> FTA; + int FmultiHit[5]; void Clear(){ FTX1.clear(); @@ -45,7 +46,9 @@ class BigRIPSPPACVariables{ FTY1.clear(); FTY2.clear(); FTA.clear(); - } + for(int i=0; i<5; i++) FmultiHit[i]=0; + }; + void Print(){ //cout << "XXXXXXXXXXXXXXXXXXXXXXXX PPAC Event XXXXXXXXXXXXXXXXX" << endl; cout << "FTX1_Mult = " << FTX1.size(); @@ -58,6 +61,8 @@ class BigRIPSPPACVariables{ for (UShort_t i = 0; i < FTY2.size(); i++){cout << "\tFTY2: " << FTY2[i] << endl;} cout << "FTA_Mult = " << FTA.size(); for (UShort_t i = 0; i < FTA.size(); i++){cout << "\tFTA: " << FTA[i] << endl;} + cout << "MultHit = " <<endl; + for (UShort_t i = 0; i <5; i++){cout << FmultiHit[i] << endl;} } bool HasTXs(){ diff --git a/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.cxx b/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.cxx index 5aa87730cc90cbcb5f8532ebe09bbb05689a4029..501c5526dfaaac726da27a85666738e2f7f4bb67 100644 --- a/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.cxx +++ b/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.cxx @@ -62,170 +62,154 @@ void TBigRIPSPPACPhysics::PreTreat(){ ClearPreTreatedData(); - //static map<std::pair<int,int>, std::vector<int> > data ; + //Intermediate map associating a PPAC ID with its variables stored in an object + // Condition for filling: Raw TDC value within [LowerLimit,UpperLimit] + // Only first TDC hit for each variable is stored static map<int, BigRIPSPPACVariables > Fdata ; - //static map<std::pair<int,int>, bool > multiHit ; + static map<int, BigRIPSPPACVariables >::iterator found; + Fdata.clear() ; //pair of detector ID and variable type (TX1,TX2,TY1,TY2,TA)=(0,1,2,3,4) std::pair<unsigned int, double> pair_id_type; int id, TimeRaw; - //pair_id_type.second = 0; //TX1 + + //TX1 unsigned int sizeTX1 = m_EventData->GetTX1Mult(); for(unsigned int i = 0 ; i < sizeTX1 ; i++){ id = m_EventData->GetTX1ID(i); TimeRaw = m_EventData->GetTX1(i); if(TimeRaw>RawLowerLimit[id] && TimeRaw<RawUpperLimit[id]){ -/* - pair_id_type.first = id; - if(data[pair_id_type].size()==0){ - data[pair_id_type].push_back(TimeRaw); - }else { - multiHit[pair_id_type]=true; //multiple value for same TDC ch. - } -*/ if(Fdata[id].FTX1.size()==0){ Fdata[id].FTX1.push_back(TimeRaw*ch2ns_TX1[id]); }else { - // multiHit[pair_id_type]=true; //multiple value for same TDC ch. + Fdata[id].FmultiHit[0]=1; //multiple value for same TDC ch. } } } -// pair_id_type.second = 1; //TX2 + //TX2 unsigned int sizeTX2 = m_EventData->GetTX2Mult(); for(unsigned int i = 0 ; i < sizeTX2 ; i++){ id = m_EventData->GetTX2ID(i); TimeRaw = m_EventData->GetTX2(i); if(TimeRaw>RawLowerLimit[id] && TimeRaw<RawUpperLimit[id]){ -/* - pair_id_type.first = id; - if(data[pair_id_type].size()==0){ - data[pair_id_type].push_back(TimeRaw); - }else { - multiHit[pair_id_type]=true; //multiple value for same TDC ch. - } -*/ if(Fdata[id].FTX2.size()==0){ Fdata[id].FTX2.push_back(TimeRaw*ch2ns_TX2[id]); }else { - // multiHit[pair_id_type]=true; //multiple value for same TDC ch. + Fdata[id].FmultiHit[1]=1; //multiple value for same TDC ch. } } } -// pair_id_type.second = 2; //TY1 + //TY1 unsigned int sizeTY1 = m_EventData->GetTY1Mult(); for(unsigned int i = 0 ; i < sizeTY1 ; i++){ id = m_EventData->GetTY1ID(i); TimeRaw = m_EventData->GetTY1(i); if(TimeRaw>RawLowerLimit[id] && TimeRaw<RawUpperLimit[id]){ -/* - pair_id_type.first = id; - if(data[pair_id_type].size()==0){ - data[pair_id_type].push_back(TimeRaw); - }else { - multiHit[pair_id_type]=true; //multiple value for same TDC ch. - } -*/ if(Fdata[id].FTY1.size()==0){ Fdata[id].FTY1.push_back(TimeRaw*ch2ns_TY1[id]); }else { - // multiHit[pair_id_type]=true; //multiple value for same TDC ch. + Fdata[id].FmultiHit[2]=1; //multiple value for same TDC ch. } } } -// pair_id_type.second = 3; //TY2 + //TY2 unsigned int sizeTY2 = m_EventData->GetTY2Mult(); for(unsigned int i = 0 ; i < sizeTY2 ; i++){ id = m_EventData->GetTY2ID(i); TimeRaw = m_EventData->GetTY2(i); if(TimeRaw>RawLowerLimit[id] && TimeRaw<RawUpperLimit[id]){ -/* - pair_id_type.first = id; - if(data[pair_id_type].size()==0){ - data[pair_id_type].push_back(TimeRaw); - }else { - multiHit[pair_id_type]=true; //multiple value for same TDC ch. - } -*/ if(Fdata[id].FTY2.size()==0){ Fdata[id].FTY2.push_back(TimeRaw*ch2ns_TY2[id]); }else { - // multiHit[pair_id_type]=true; //multiple value for same TDC ch. + Fdata[id].FmultiHit[3]=1; //multiple value for same TDC ch. } } } -// pair_id_type.second = 4; //TA + //TA unsigned int sizeTA = m_EventData->GetTAMult(); for(unsigned int i = 0 ; i < sizeTA ; i++){ id = m_EventData->GetTAID(i); TimeRaw = m_EventData->GetTA(i); if(TimeRaw>RawLowerLimit[id] && TimeRaw<RawUpperLimit[id]){ -/* - pair_id_type.first = id; - if(data[pair_id_type].size()==0){ - data[pair_id_type].push_back(TimeRaw); - }else { - multiHit[pair_id_type]=true; //multiple value for same TDC ch. - } -*/ if(Fdata[id].FTA.size()==0){ Fdata[id].FTA.push_back(TimeRaw*ch2ns_TA[id]); }else { - // multiHit[pair_id_type]=true; //multiple value for same TDC ch. + Fdata[id].FmultiHit[4]=1; //multiple value for same TDC ch. } } } -/* - for(auto it = data.begin();it!=data.end();++it){ - pair_id_type = it->first; - cout<< "ID:"<<pair_id_type.first<<"\tType:"<<pair_id_type.second<<" \tT:"<<data[pair_id_type][0]<<endl; - } -*/ - int j=0; - BigRIPSPPACVariables toto; + int Nmulti; + BigRIPSPPACVariables tmp; + for(auto it = Fdata.begin();it!=Fdata.end();++it){ id = it->first; ID.push_back(id); - FP.push_back(FPL[id]); - toto.Clear(); - toto = it->second; - //cout<< "ID:"<<id<<endl; - //cout<< "ch2nsX1:"<<ch2ns_TX1[id]<<endl; - //cout<< "ch2nsX2:"<<ch2ns_TX2[id]<<endl; - //cout<< "ch2nsY1:"<<ch2ns_TY1[id]<<endl; - //cout<< "ch2nsY2:"<<ch2ns_TY2[id]<<endl; - //cout<< "ch2nsA:"<<ch2ns_TA[id]<<endl; - //toto.Print(); - for (int i=0; i<toto.FTX1.size(); i++) TX1.push_back(toto.FTX1[i]); - for (int i=0; i<toto.FTX2.size(); i++) TX2.push_back(toto.FTX2[i]); - for (int i=0; i<toto.FTY1.size(); i++) TY1.push_back(toto.FTY1[i]); - for (int i=0; i<toto.FTY2.size(); i++) TY2.push_back(toto.FTY2[i]); - for (int i=0; i<toto.FTA.size(); i++) TA.push_back(toto.FTA[i]); - //TX1=toto.FTX1; - //TX2=toto.FTX2; - //TY1=toto.FTY1; - //TY2=toto.FTY2; - //TA=toto.FTA; - - //if(toto.HasTXs()) {TDiffX.push_back(TX1[j]-TX2[j]);} - if(toto.HasTXs()) {TDiffX.push_back(toto.FTX1[0]-toto.FTX2[0]);} - else {TDiffX.push_back(-99999);} - //if(toto.HasTXs() && toto.HasTA()) {TSumX.push_back(TX1[j]+TX2[j]-2*TA[j]);} - if(toto.HasTXs() && toto.HasTA()) {TSumX.push_back(toto.FTX1[0]+toto.FTX2[0]-2*toto.FTA[0]);} + FP.push_back(IDtoFP[id]); + tmp.Clear(); + tmp = it->second; + //tmp.Print(); + TX1=tmp.FTX1; + TX2=tmp.FTX2; + TY1=tmp.FTY1; + TY2=tmp.FTY2; + TA=tmp.FTA; + + //Calculate how many TDC variables got a multi hit + Nmulti=0; + for (int i=0; i<5; i++) if(tmp.FmultiHit[i]==1) Nmulti++; + multiHit.push_back(Nmulti); + + //Calculate TSum, TDiff and X/Y + double TDiffX_tmp, TDiffY_tmp; + double X_tmp, Y_tmp; + + if(tmp.HasTXs() && tmp.HasTA()){TSumX.push_back(TX1[0]+TX2[0]-2*TA[0]);} else {TSumX.push_back(-99999);} - //if(toto.HasTYs()) {TDiffY.push_back(TY1[j]-TY2[j]);} - if(toto.HasTYs()) {TDiffY.push_back(toto.FTY1[0]-toto.FTY2[0]);} - else {TDiffY.push_back(-99999);} - //if(toto.HasTYs() && toto.HasTA()) {TSumY.push_back(TY1[j]+TY2[j]-2*TA[j]);} - if(toto.HasTYs() && toto.HasTA()) {TSumY.push_back(toto.FTY1[0]+toto.FTY2[0]-2*toto.FTA[0]);} + + if(tmp.HasTXs()){ + TDiffX_tmp = (TX1[0] - TX2[0] - xns_off[id]); + TDiffX.push_back(TDiffX_tmp); + X_tmp = -1*((TDiffX_tmp * x_ns2mm[id])/2. - x_offset[id] - xpos_offset[id]); + X.push_back(X_tmp); + }else{ + TDiffX.push_back(-99999); + X.push_back(-99999); + } + + if(tmp.HasTYs() && tmp.HasTA()) {TSumY.push_back(TY1[0]+TY2[0]-2*TA[0]);} else {TSumY.push_back(-99999);} - j++; + + if(tmp.HasTYs()) { + TDiffY_tmp = (TY1[0] - TY2[0] - yns_off[id]); + TDiffY.push_back(TDiffY_tmp); + Y_tmp = ((TDiffY_tmp * y_ns2mm[id])/2. - y_offset[id] - ypos_offset[id]); + Y.push_back(Y_tmp); +/* + if(id==19){ + std::cout << "_____________"<< std::endl; + std::cout << "TY1:\t\t" << TY1[0] << std::endl; + std::cout << "TY2:\t\t" << TY2[0] << std::endl; + std::cout << "yns_off:\t" << yns_off[id]<< std::endl; + std::cout << "TDiffY:\t\t" << TDiffY_tmp << std::endl; + std::cout << "y_ns2mm:\t" << y_ns2mm[id]<< std::endl; + std::cout << "y_off:\t\t" << y_offset[id]<< std::endl; + std::cout << "ypos_off:\t" << ypos_offset[id]<< std::endl; + std::cout << "Y:\t\t" << Y_tmp<< std::endl; + } +*/ + }else { + TDiffY.push_back(-99999); + Y.push_back(-99999); + } + + } //Print(); Fdata.clear(); @@ -241,10 +225,13 @@ void TBigRIPSPPACPhysics::Clear(){ TA.clear(); TSumX.clear(); TDiffX.clear(); + X.clear(); TSumY.clear(); TDiffY.clear(); + Y.clear(); ID.clear(); FP.clear(); + multiHit.clear(); //Data.clear(); } /////////////////////////////////////////////////////////////////////////// @@ -301,12 +288,20 @@ void TBigRIPSPPACPhysics::AddPPACs(string name, NPL::XmlParser& xml){ //string sDir = b[i]->AsString("anodedir"); RawLowerLimit[ID] = b[i]->AsInt("tdc_underflow"); RawUpperLimit[ID] = b[i]->AsInt("tdc_overflow"); - FPL[ID] = b[i]->AsInt("FPL"); + IDtoFP[ID] = b[i]->AsInt("FPL"); ch2ns_TX1[ID] = b[i]->AsDouble("x1_ch2ns"); ch2ns_TX2[ID] = b[i]->AsDouble("x2_ch2ns"); ch2ns_TY1[ID] = b[i]->AsDouble("y1_ch2ns"); ch2ns_TY2[ID] = b[i]->AsDouble("y2_ch2ns"); ch2ns_TA[ID] = b[i]->AsDouble("a_ch2ns"); + xns_off[ID] = b[i]->AsDouble("xns_off"); + yns_off[ID] = b[i]->AsDouble("yns_off"); + x_ns2mm[ID] = b[i]->AsDouble("xfactor"); //prop. speed along delay line + y_ns2mm[ID] = b[i]->AsDouble("yfactor"); //prop. speed along delay line + x_offset[ID] = b[i]->AsDouble("xoffset"); + y_offset[ID] = b[i]->AsDouble("yoffset"); + xpos_offset[ID] = b[i]->AsDouble("xpos_off"); + ypos_offset[ID] = b[i]->AsDouble("ypos_off"); } } } diff --git a/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.h b/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.h index 1396f8947552da55679f5facfd25486c4fa38030..021cdecfaaf491ae49e496e706f2fe491f2f394f 100644 --- a/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.h +++ b/NPLib/Detectors/BigRIPS/TBigRIPSPPACPhysics.h @@ -54,6 +54,8 @@ class TBigRIPSPPACPhysics : public TObject, public NPL::VDetector{ void Print(); public: + std::vector<int> ID; + std::vector<int> FP; std::vector<double> TX1; std::vector<double> TX2; std::vector<double> TY1; @@ -61,10 +63,11 @@ class TBigRIPSPPACPhysics : public TObject, public NPL::VDetector{ std::vector<double> TA; std::vector<double> TSumX; std::vector<double> TDiffX; + std::vector<double> X; std::vector<double> TSumY; std::vector<double> TDiffY; - std::vector<int> ID; - std::vector<int> FP; + std::vector<double> Y; + std::vector<int> multiHit; //map<int,vector<double>> Data ; int PileUp; @@ -77,12 +80,20 @@ class TBigRIPSPPACPhysics : public TObject, public NPL::VDetector{ void AddPPACs(string name, NPL::XmlParser&);//! take the XML file and fill in parameters of each PPAC map<int,double> RawUpperLimit;//! Upper Value of TDC range considered for a PPAC map<int,double> RawLowerLimit;//! Lower Value of TDC range considered for a PPAC - map<int,double> FPL;//! Focal plane where the PPAC is located + map<int,int> IDtoFP;//! Focal plane where the PPAC is located map<int,double> ch2ns_TX1; map<int,double> ch2ns_TX2; map<int,double> ch2ns_TY1; map<int,double> ch2ns_TY2; map<int,double> ch2ns_TA; + map<int,double> xns_off; + map<int,double> yns_off; + map<int,double> x_offset; + map<int,double> xpos_offset; + map<int,double> x_ns2mm; + map<int,double> y_offset; + map<int,double> ypos_offset; + map<int,double> y_ns2mm; public: // Innherited from VDetector Class