Commit ef22b299 authored by Pavel Sharov's avatar Pavel Sharov

* add writing of multiplicity and etc. for left 1mm detector to TNeEvent

parent 283f92c7
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#pragma link C++ class TNeProc+; #pragma link C++ class TNeProc+;
#pragma link C++ class TNeMParms+; #pragma link C++ class TNeMParms+;
#pragma link C++ class TNeSel+; #pragma link C++ class TNeSel+;
#pragma link C++ class TDSSD16+;
#endif #endif
......
...@@ -2,6 +2,15 @@ ...@@ -2,6 +2,15 @@
## 24e01 ## 24e01
### Naming conventions ### Naming conventions
- prefix T[number]x is for telescope - prefix L is for left shoulder R for right
- By default channel 1--16 for X-strips 16--32 for Y. - By default channel 1--16 for X-strips 16--32 for Y.
### TDSSD16
`TDSSD16` is container for double-side 1mm telescope.
Members:
- multx,multy --- multiplicity on each side
- sx,sy --- strip number
- depx,depy --- Edep in MeV
- posx,posy --- local position in mm
now only left 1mm detector added to `TNeEvent` (it named as `L1`).
...@@ -34,6 +34,7 @@ void TNeEvent::Clear(Option_t *t) ...@@ -34,6 +34,7 @@ void TNeEvent::Clear(Option_t *t)
//== memset(fRawData,0, sizeof(fRawData)); //== memset(fRawData,0, sizeof(fRawData));
//================================================================== //==================================================================
// Si // Si
L1.Clear();
memset(Lxa, 0, sizeof(Lxa)); memset(Lxa, 0, sizeof(Lxa));
memset(Lxt, 0, sizeof(Lxt)); memset(Lxt, 0, sizeof(Lxt));
memset(Lya, 0, sizeof(Lya)); memset(Lya, 0, sizeof(Lya));
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#define TNeEVENT_H #define TNeEVENT_H
#include "TGo4EventElement.h" #include "TGo4EventElement.h"
#include "TDSSD16.h"
class TNeEvent : public TGo4EventElement class TNeEvent : public TGo4EventElement
{ {
...@@ -20,6 +21,7 @@ public: ...@@ -20,6 +21,7 @@ public:
void Clear(Option_t *t=""); void Clear(Option_t *t="");
//-----Si----- //-----Si-----
TDSSD16 L1;
unsigned short Lxa[16]; unsigned short Lxa[16];
unsigned short Lxt[16]; unsigned short Lxt[16];
unsigned short Lxc[16]; unsigned short Lxc[16];
......
/* -*- mode:c++ c-file-style:"linux" -*- */
//=================================================================== //===================================================================
//== EXPERIMENT A-2 //== EXPERIMENT A-2
//== VERSION: 30.10.2018 //== VERSION: 30.10.2018
...@@ -49,20 +50,16 @@ TNeProc::TNeProc() : TGo4EventProcessor() ...@@ -49,20 +50,16 @@ TNeProc::TNeProc() : TGo4EventProcessor()
fTrigger = NULL; fTrigger = NULL;
fSubEvents = NULL; fSubEvents = NULL;
fEventsSizes = NULL; fEventsSizes = NULL;
for(i = 0; i < 4; ++i) {
for(i = 0; i < 4; ++i)
{
d1F3[i] = NULL; d1F3[i] = NULL;
d1tF3[i] = NULL; d1tF3[i] = NULL;
d1F5[i] = NULL; d1F5[i] = NULL;
d1tF5[i] = NULL; d1tF5[i] = NULL;
d1tMWPC[i] = NULL; d1tMWPC[i] = NULL;
} }
for(i = 0; i < 16; ++i) for(i = 0; i < 16; ++i) {
{
//-----Si----- //-----Si-----
d1Lxa[i] = NULL; d1Lxa[i] = NULL;
d1Lxt[i] = NULL; d1Lxt[i] = NULL;
...@@ -291,7 +288,7 @@ Bool_t TNeProc::BuildEvent(TGo4EventElement* target) ...@@ -291,7 +288,7 @@ Bool_t TNeProc::BuildEvent(TGo4EventElement* target)
TGo4Analysis *go4 = TGo4Analysis::Instance(); TGo4Analysis *go4 = TGo4Analysis::Instance();
TNeEvent* NeEvent = (TNeEvent*) target; TNeEvent* NeEvent = (TNeEvent*) target;
target->Clear(); NeEvent->Clear();
TGo4MbsSubEvent* psubevt; TGo4MbsSubEvent* psubevt;
TGo4MbsEvent* fInput = (TGo4MbsEvent* ) GetInputEvent(); TGo4MbsEvent* fInput = (TGo4MbsEvent* ) GetInputEvent();
...@@ -316,503 +313,483 @@ Bool_t TNeProc::BuildEvent(TGo4EventElement* target) ...@@ -316,503 +313,483 @@ Bool_t TNeProc::BuildEvent(TGo4EventElement* target)
double af3=0., af5=0., tf3=0., tf5=0., ToF=0.; double af3=0., af5=0., tf3=0., tf5=0., ToF=0.;
fInput->ResetIterator(); fInput->ResetIterator();
while((psubevt = fInput->NextSubEvent()) != 0) while((psubevt = fInput->NextSubEvent()) != 0) {
{
num++; num++;
sz += psubevt->GetIntLen(); sz += psubevt->GetIntLen();
idata = (uint32_t*) psubevt->GetDataField(); idata = (uint32_t*) psubevt->GetDataField();
n = -1; n = -1;
while(++n < psubevt->GetIntLen()) while(++n < psubevt->GetIntLen()) {
{
header = idata[n] >> 24; header = idata[n] >> 24;
caen_header = header & 0x7; caen_header = header & 0x7;
if (dooutput) if (dooutput)
printf("Raw data = %x\n", idata[n]); printf("Raw data = %x\n", idata[n]);
switch (psubevt->GetProcid()) switch (psubevt->GetProcid()) {
{ case 100: //VME_0, see setup.usf
case 100: //VME_0, see setup.usf if (header==0x40)
m_bool=true; //MESYTEC header flag
else if (caen_header == 2)
if (header==0x40) c_bool=true; //CAEN header flag
m_bool=true; //MESYTEC header flag else if ((idata[n]==0xaffeaffe) || (idata[n]== 0x06000000) || (idata[n]== 0x05000000)) {
else if (caen_header == 2) c_bool=false;
c_bool=true; //CAEN header flag m_bool=false;
else if ((idata[n]==0xaffeaffe) || (idata[n]== 0x06000000) || (idata[n]== 0x05000000)) }
{
c_bool=false; if (m_bool) {//in case of MESYTEC data
m_bool=false; typ=idata[n] >> 30;
}
switch(typ) {
case 1: //MESYTEC header
if (m_bool) {//in case of MESYTEC data module_id = (idata[n] >> 16) & 0xff;
typ=idata[n] >> 30; if (dooutput)
printf("Mesytec Module ID %d\n", module_id);
switch(typ) { break;
case 1: //MESYTEC header
module_id = (idata[n] >> 16) & 0xff;
if (dooutput) case 0: //MESYTEC data
printf("Mesytec Module ID %d\n", module_id); if(idata[n] >> 24!=0x04)
break;
switch (module_id) {
case 0: //mTDC: ToF
if ((idata[n] >> 16) & 0x20) break; //T bit analysis
chnl= (idata[n] >> 16) & 0x1f;
adc = idata[n] & 0xffff; //only 16 bits
if(chnl<4) NeEvent->tF3[chnl] = adc;
else if (chnl<8) NeEvent->tF5[chnl-4] = adc;
else if (chnl<12);
else if (chnl<16) NeEvent->tMWPC[chnl-12] = adc;
break;
case 1: //mQDC:
chnl= (idata[n] >> 16) & 0x1f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<4) NeEvent->F3[chnl] = adc;
else if(chnl<8) NeEvent->F5[chnl-4] = adc;
break;
case 6: //scaler v560
for(i = 0; i < 16; ++i)
NeEvent->scaler[i]=idata[n++] & 0x07ffffff;
break; break;
case 8: // mTDC: time Lx & Ly
case 0: //MESYTEC data chnl= (idata[n] >> 16)&0x3f;
if(idata[n] >> 24!=0x04) break; adc = idata[n] & 0xfff; //only 12 bits
switch (module_id) { if(chnl<16) {
case 0: //mTDC: ToF NeEvent->Lxt[chnl] = adc;
if ((idata[n] >> 16) & 0x20) break; //T bit analysis } else if (chnl<32) {
chnl= (idata[n] >> 16) & 0x1f; NeEvent->Lyt[chnl-16] = adc;
adc = idata[n] & 0xffff; //only 16 bits }
if(chnl<4) NeEvent->tF3[chnl] = adc; break;
else if(chnl<8) NeEvent->tF5[chnl-4] = adc;
else if(chnl<12); case 9: // mADC: amp Lx & Ly
else if(chnl<16) NeEvent->tMWPC[chnl-12] = adc; chnl= (idata[n] >> 16)&0x1f;
break; adc = idata[n] & 0x1fff; //only 12 bits
case 1: //mQDC: if(chnl<16) {
chnl= (idata[n] >> 16) & 0x1f; NeEvent->Lxa[chnl] = adc;
adc = idata[n] & 0xfff; //only 12 bits } else {
if(chnl<4) NeEvent->F3[chnl] = adc; NeEvent->Lya[chnl-16] = adc;
else if(chnl<8) NeEvent->F5[chnl-4] = adc; }
break;
break;
case 10: // mTDC: time Rx & Ry
case 6: //scaler v560 chnl= (idata[n] >> 16)&0x3f;
for(i = 0; i < 16; ++i) adc = idata[n] & 0xfff; //only 12 bits
NeEvent->scaler[i]=idata[n++] & 0x07ffffff; if(chnl<16) {
break; NeEvent->Rxt[chnl] = adc;
} else if(chnl<32) {
case 8: // mTDC: time Lx & Ly NeEvent->Ryt[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x3f; }
adc = idata[n] & 0xfff; //only 12 bits break;
if(chnl<16) {
NeEvent->Lxt[chnl] = adc; case 11: // mADC: amp Rx & Ry
} else if(chnl<32) { chnl= (idata[n] >> 16)&0x1f;
NeEvent->Lyt[chnl-16] = adc; adc = idata[n] & 0x1fff; //only 12 bits
} if(chnl<16) {
break; NeEvent->Rxa[chnl] = adc;
} else {
case 9: // mADC: amp Lx & Ly NeEvent->Rya[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x1f; }
adc = idata[n] & 0x1fff; //only 12 bits break;
if(chnl<16) {
NeEvent->Lxa[chnl] = adc; case 12: // mTDC: time An S & R
} else { chnl= (idata[n] >> 16)&0x3f;
NeEvent->Lya[chnl-16] = adc; adc = idata[n] & 0xfff; //only 12 bits
} if(chnl<16) {
break; NeEvent->AnSt[chnl] = adc;
} else if(chnl<32) {
case 10: // mTDC: time Rx & Ry NeEvent->AnRt[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x3f; }
adc = idata[n] & 0xfff; //only 12 bits break;
if(chnl<16) {
NeEvent->Rxt[chnl] = adc; case 13: // mADC: amp An S & R
} else if(chnl<32) { chnl= (idata[n] >> 16)&0x1f;
NeEvent->Ryt[chnl-16] = adc; adc = idata[n] & 0x1fff; //only 12 bits
} if(chnl<16) {
break; NeEvent->AnSa[chnl] = adc;
} else {
case 11: // mADC: amp Rx & Ry NeEvent->AnRa[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x1f; }
adc = idata[n] & 0x1fff; //only 12 bits break;
if(chnl<16) {
NeEvent->Rxa[chnl] = adc; case 14: // mTDC: time R20 & AnV
} else { chnl= (idata[n] >> 16)&0x3f;
NeEvent->Rya[chnl-16] = adc; adc = idata[n] & 0xfff; //only 12 bits
} if(chnl<16) {
break; NeEvent->AnVt[chnl] = adc;
} else if(chnl<32) {
case 12: // mTDC: time An S & R NeEvent->R20t[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x3f; }
adc = idata[n] & 0xfff; //only 12 bits break;
if(chnl<16) {
NeEvent->AnSt[chnl] = adc; case 15: // mADC: amp R20 & AnV
} else if(chnl<32) { chnl= (idata[n] >> 16)&0x1f;
NeEvent->AnRt[chnl-16] = adc; adc = idata[n] & 0x1fff; //only 12 bits
} if(chnl<16) {
break; NeEvent->AnVa[chnl] = adc;
} else {
case 13: // mADC: amp An S & R NeEvent->R20a[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x1f; }
adc = idata[n] & 0x1fff; //only 12 bits break;
if(chnl<16) {
NeEvent->AnSa[chnl] = adc; case 2: // mTDC: time Rcs & Lcs
} else { chnl= (idata[n] >> 16)&0x3f;
NeEvent->AnRa[chnl-16] = adc; adc = idata[n] & 0xfff; //only 12 bits
} if(chnl<16) {
break; NeEvent->Lcst[chnl] = adc;
} else if(chnl<32) {
case 14: // mTDC: time R20 & AnV NeEvent->Rcst[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x3f; }
adc = idata[n] & 0xfff; //only 12 bits break;
if(chnl<16) {
NeEvent->AnVt[chnl] = adc; case 3: // mADC: amp Rcs & Lcs
} else if(chnl<32) { chnl= (idata[n] >> 16)&0x1f;
NeEvent->R20t[chnl-16] = adc; adc = idata[n] & 0x1fff; //only 12 bits
} if(chnl<16) {
break; NeEvent->Lcsa[chnl] = adc;
} else {
case 15: // mADC: amp R20 & AnV NeEvent->Rcsa[chnl-16] = adc;
chnl= (idata[n] >> 16)&0x1f; }
adc = idata[n] & 0x1fff; //only 12 bits break;
if(chnl<16) {
NeEvent->AnVa[chnl] = adc; case 4: // mTDC: time Rvt
} else { chnl= (idata[n] >> 16)&0x3f;
NeEvent->R20a[chnl-16] = adc; adc = idata[n] & 0xfff; //only 12 bits
}
break;
case 2: // mTDC: time Rcs & Lcs
chnl= (idata[n] >> 16)&0x3f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) {
NeEvent->Lcst[chnl] = adc;
} else if(chnl<32) {
NeEvent->Rcst[chnl-16] = adc;
}
break;
case 3: // mADC: amp Rcs & Lcs
chnl= (idata[n] >> 16)&0x1f;
adc = idata[n] & 0x1fff; //only 12 bits
if(chnl<16) {
NeEvent->Lcsa[chnl] = adc;
} else {
NeEvent->Rcsa[chnl-16] = adc;
}
break;
case 4: // mTDC: time Rvt
chnl= (idata[n] >> 16)&0x3f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) NeEvent->Rvt[chnl] = adc; if(chnl<16) NeEvent->Rvt[chnl] = adc;
break; break;
case 5: // mADC: amp Ra case 5: // mADC: amp Ra
chnl= (idata[n] >> 16)&0x1f; chnl= (idata[n] >> 16)&0x1f;
adc = idata[n] & 0x1fff; //only 12 bits adc = idata[n] & 0x1fff; //only 12 bits
if(chnl<16) NeEvent->Rva[chnl] = adc; if(chnl<16) NeEvent->Rva[chnl] = adc;
break; break;
}
break;
case 3: //-----MESYTEC footer-----
m_bool=false;
break;
default:
printf("ERROR !!!!!! Unknown MESYTEC typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
} }
} break;
else if (c_bool) //in case of CAEN data
{
typ = (idata[n] >> 24) & 0x7;
geo = idata[n] >> 27;
if (dooutput)
printf("CAEN geo %d\n", geo);
switch(typ)
{
case 2: //CAEN header
crate = (idata[n] >> 16) & 0xff;
cnt = (idata[n] >> 8) & 0x1f;
if (geo==30)
NeEvent->mtime=idata[++n];//machine time
if (dooutput)
printf("Header: geo:%d crate:%d cnt = %d\n", geo, crate, cnt);
break;
case 0: //CAEN data
adc = idata[n] & 0xfff;
chnl = (idata[n] >> 16) & 0x1f;
//printf("DATA: geo:%d Channel = %d\n", geo, chnl);
switch(geo)
{
}
// printf(" Data: geo:%d chnl:%d adc:%d\n", geo, chnl, adc);
break;
case 4: //CAEN footer
c_bool = false;
evnt = idata[n] & 0xffffff;
if (dooutput)
printf(" Event: geo:%d number:%d\n", geo, evnt);
break;
case 6: //CAEN no valid data
c_bool = false;
if (dooutput)
printf("!!!No valid data from CAEN!!!");
break;
default: case 3: //-----MESYTEC footer-----
printf("ERROR !!!!!! Uncknown CAEN typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
}
}
break; //end of VME_0
case 101: // CAMAC through VME_0, see setup.usf
geo = idata[n] >> 27;
switch(geo)
{
case 1:
NeEvent->nx1 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC X1= %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x1[NeEvent->nx1++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB = (MSB << 16) | LSB;
//printf("Second word from MWPC X1= %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x1[NeEvent->nx1++] = i+16;
adc = idata[++n];//pass throug footer
//printf("Third word from MWPC X1= %x\n", adc);
NeEvent->rx1=MSBLSB;
break;
case 2:
NeEvent->ny1 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC Y1 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y1[NeEvent->ny1++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC Y1 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y1[NeEvent->ny1++] = i+16;
adc = idata[++n];//pass through footer
//printf("Third word from MWPC Y1 = %x\n", adc);
NeEvent->ry1=MSBLSB;
break;
case 3:
NeEvent->nx2 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC X2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x2[NeEvent->nx2++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC X2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x2[NeEvent->nx2++] = i+16;
adc = idata[++n];//pass through footer
//printf("Third word from MWPC X2 = %x\n", adc);
NeEvent->rx2=MSBLSB;
break;
case 4:
NeEvent->ny2 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC Y2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y2[NeEvent->ny2++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC Y2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y2[NeEvent->ny2++] = i+16;
adc = idata[++n];//pass throug footer
//printf("Third word from MWPC Y2 = %x\n", adc);
NeEvent->ry2=MSBLSB;
break;
}
break; // end of CAMAC
case 200: //VME_1, see setup.usf
if (header==0x40)
m_bool=true; //MESYTEC header flag
else if (caen_header == 2)
c_bool=true; //CAEN header flag
else if ((idata[n]==0xaffeaffe) || (idata[n]== 0x06000000) || (idata[n]== 0x05000000))
{
c_bool=false;
m_bool=false; m_bool=false;
break;
default:
printf("ERROR !!!!!! Unknown MESYTEC typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
} }
}
else if (c_bool) { //in case of CAEN data
typ = (idata[n] >> 24) & 0x7;
geo = idata[n] >> 27;
if (dooutput)
printf("CAEN geo %d\n", geo);
switch(typ) {
case 2: //CAEN header
crate = (idata[n] >> 16) & 0xff;
cnt = (idata[n] >> 8) & 0x1f;
if (geo==30)
NeEvent->mtime=idata[++n];//machine time
if (dooutput)
printf("Header: geo:%d crate:%d cnt = %d\n", geo, crate, cnt);
break;
case 0: //CAEN data
adc = idata[n] & 0xfff;
chnl = (idata[n] >> 16) & 0x1f;
//printf("DATA: geo:%d Channel = %d\n", geo, chnl);
/*switch(geo)
{
}*/
// printf(" Data: geo:%d chnl:%d adc:%d\n", geo, chnl, adc);
break;
case 4: //CAEN footer
c_bool = false;
evnt = idata[n] & 0xffffff;
if (dooutput)
printf(" Event: geo:%d number:%d\n", geo, evnt);
break;
case 6: //CAEN no valid data
c_bool = false;
if (dooutput)
printf("!!!No valid data from CAEN!!!");
break;
default:
printf("ERROR !!!!!! Uncknown CAEN typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
}
}
break; //end of VME_0
case 101: // CAMAC through VME_0, see setup.usf
geo = idata[n] >> 27;
switch(geo) {
case 1:
NeEvent->nx1 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC X1= %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x1[NeEvent->nx1++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB = (MSB << 16) | LSB;
//printf("Second word from MWPC X1= %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x1[NeEvent->nx1++] = i+16;
adc = idata[++n];//pass throug footer
//printf("Third word from MWPC X1= %x\n", adc);
NeEvent->rx1=MSBLSB;
break;
case 2:
NeEvent->ny1 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC Y1 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y1[NeEvent->ny1++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC Y1 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y1[NeEvent->ny1++] = i+16;
adc = idata[++n];//pass through footer
//printf("Third word from MWPC Y1 = %x\n", adc);
NeEvent->ry1=MSBLSB;
break;
case 3:
NeEvent->nx2 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC X2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x2[NeEvent->nx2++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC X2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->x2[NeEvent->nx2++] = i+16;
adc = idata[++n];//pass through footer
//printf("Third word from MWPC X2 = %x\n", adc);
NeEvent->rx2=MSBLSB;
break;
case 4:
NeEvent->ny2 = 0;
adc = idata[++n];
LSB=adc;
//printf("First word from MWPC Y2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y2[NeEvent->ny2++] = i;
adc = idata[++n];
MSB = adc;
MSBLSB= (MSB << 16) | LSB;
//printf("Second word from MWPC Y2 = %x\n", adc);
for(i = 0; i < 16; ++i)
if((adc & bit[i]) > 0) NeEvent->y2[NeEvent->ny2++] = i+16;
adc = idata[++n];//pass throug footer
//printf("Third word from MWPC Y2 = %x\n", adc);
NeEvent->ry2=MSBLSB;
break;
}
if (m_bool) //in case of MESYTEC data break; // end of CAMAC
{
typ=idata[n] >> 30;
switch(typ)
{
case 1: //MESYTEC header
module_id = (idata[n] >> 16) & 0xff;
if (dooutput)
printf("Mesytec Module ID %d\n", module_id);
break;
case 0: //MESYTEC data
if(idata[n] >> 24!=0x04) break;
switch (module_id)
{
case 3: // mTDC: time sect & rings p1
chnl= (idata[n] >> 16)&0x3f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) {
NeEvent->Lxt[chnl] = adc;
} else if(chnl<32) {
NeEvent->Lyt[chnl-16] = adc;
}
break;
case 4: // mADC: amp sect & rings p1
chnl= (idata[n] >> 16)&0x1f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) {
NeEvent->Lxa[chnl] = adc;
} else {
NeEvent->Lya[chnl-16] = adc;
}
break;
}
break;
case 3: //-----MESYTEC footer----- case 200: //VME_1, see setup.usf
m_bool=false;
break;
default: if (header==0x40)
printf("ERROR !!!!!! Unknown MESYTEC typ %d\n", typ); m_bool=true; //MESYTEC header flag
printf("Data = %x\n", idata[n]); else if (caen_header == 2)
c_bool=true; //CAEN header flag
else if ((idata[n]==0xaffeaffe) || (idata[n]== 0x06000000) || (idata[n]== 0x05000000)) {
c_bool=false;
m_bool=false;
}
if (m_bool) //in case of MESYTEC data
{
typ=idata[n] >> 30;
switch(typ) {
case 1: //MESYTEC header
module_id = (idata[n] >> 16) & 0xff;
if (dooutput)
printf("Mesytec Module ID %d\n", module_id);
break;
case 0: //MESYTEC data
if(idata[n] >> 24!=0x04) break;
switch (module_id) {
case 3: // mTDC: time sect & rings p1
chnl= (idata[n] >> 16)&0x3f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) {
NeEvent->Lxt[chnl] = adc;
} else if(chnl<32) {
NeEvent->Lyt[chnl-16] = adc;
}
break;
case 4: // mADC: amp sect & rings p1
chnl= (idata[n] >> 16)&0x1f;
adc = idata[n] & 0xfff; //only 12 bits
if(chnl<16) {
NeEvent->Lxa[chnl] = adc;
} else {
NeEvent->Lya[chnl-16] = adc;
}
break; break;
} }
break;
case 3: //-----MESYTEC footer-----
m_bool=false;
break;
default:
printf("ERROR !!!!!! Unknown MESYTEC typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
} }
else if (c_bool) //in case of CAEN data }
{ else if (c_bool) {//in case of CAEN data
typ = (idata[n] >> 24) & 0x7;
geo = idata[n] >> 27; typ = (idata[n] >> 24) & 0x7;
geo = idata[n] >> 27;
if (dooutput)
printf("CAEN geo %d\n", geo);
switch(typ) {
case 2: //CAEN header
crate = (idata[n] >> 16) & 0xff;
cnt = (idata[n] >> 8) & 0x1f;
if (geo==30)
NeEvent->mtime=idata[++n];//machine time
if (dooutput) if (dooutput)
printf("CAEN geo %d\n", geo); printf("Header: geo:%d crate:%d cnt = %d\n", geo, crate, cnt);
break;
switch(typ)
{ case 0: //CAEN data
case 2: //CAEN header adc = idata[n] & 0xfff;
crate = (idata[n] >> 16) & 0xff; chnl = (idata[n] >> 16) & 0x1f;
cnt = (idata[n] >> 8) & 0x1f; //printf("DATA: geo:%d Channel = %d\n", geo, chnl);
if (geo==30) switch(geo) {
NeEvent->mtime=idata[++n];//machine time case 6: //scaler v560
for(i = 0; i < 16; ++i)
if (dooutput) NeEvent->scaler[i]=idata[n++] & 0x07ffffff;
printf("Header: geo:%d crate:%d cnt = %d\n", geo, crate, cnt);
break;
case 0: //CAEN data
adc = idata[n] & 0xfff;
chnl = (idata[n] >> 16) & 0x1f;
//printf("DATA: geo:%d Channel = %d\n", geo, chnl);
switch(geo)
{
case 6: //scaler v560
for(i = 0; i < 16; ++i)
NeEvent->scaler[i]=idata[n++] & 0x07ffffff;
break;
}
// printf(" Data: geo:%d chnl:%d adc:%d\n", geo, chnl, adc);
break;
case 4: //CAEN footer
c_bool = false;
evnt = idata[n] & 0xffffff;
if (dooutput)
printf(" Event: geo:%d number:%d\n", geo, evnt);
break;
case 6: //CAEN no valid data
c_bool = false;
if (dooutput)
printf("!!!No valid data from CAEN!!!");
break;
default:
printf("ERROR !!!!!! Uncknown CAEN typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break; break;
} }
// printf(" Data: geo:%d chnl:%d adc:%d\n", geo, chnl, adc);
break;
case 4: //CAEN footer
c_bool = false;
evnt = idata[n] & 0xffffff;
if (dooutput)
printf(" Event: geo:%d number:%d\n", geo, evnt);
break;
case 6: //CAEN no valid data
c_bool = false;
if (dooutput)
printf("!!!No valid data from CAEN!!!");
break;
default:
printf("ERROR !!!!!! Uncknown CAEN typ %d\n", typ);
printf("Data = %x\n", idata[n]);
break;
} }
break; //end of VME_1 }
break; //end of VME_1
} //end of GetProcID } //end of GetProcID
} //end of GetIntLen } //end of GetIntLen
} //end of NextSubEvent } //end of NextSubEvent
NeEvent->nevent = fInput->GetCount(); NeEvent->nevent = fInput->GetCount();
NeEvent->trigger = fInput->GetTrigger(); NeEvent->trigger = fInput->GetTrigger();
NeEvent->subevents = num; NeEvent->subevents = num;
NeEvent->evsize = sz; NeEvent->evsize = sz;
fTrigger->Fill(NeEvent->trigger); fTrigger->Fill(NeEvent->trigger);
fSubEvents->Fill(num); fSubEvents->Fill(num);
fEventsSizes->Fill(sz); fEventsSizes->Fill(sz);
// //
for (n=0; n<4; ++n) for (n=0; n<4; ++n){
// if(NeEvent->trigger == 2) // if(NeEvent->trigger == 2)
{
if(NeEvent->F3[n] > 0 ) d1F3[n]->Fill(NeEvent->F3[n]); if(NeEvent->F3[n] > 0 ) d1F3[n]->Fill(NeEvent->F3[n]);
if(NeEvent->F5[n] > 0) d1F5[n]->Fill(NeEvent->F5[n]); if(NeEvent->F5[n] > 0) d1F5[n]->Fill(NeEvent->F5[n]);
if(NeEvent->tF3[n] > 0) d1tF3[n]->Fill(NeEvent->tF3[n]); if(NeEvent->tF3[n] > 0) d1tF3[n]->Fill(NeEvent->tF3[n]);
if(NeEvent->tF5[n] > 0) d1tF5[n]->Fill(NeEvent->tF5[n]); if(NeEvent->tF5[n] > 0) d1tF5[n]->Fill(NeEvent->tF5[n]);
if(NeEvent->tMWPC[n] > 0) d1tMWPC[n]->Fill(NeEvent->tMWPC[n]); if(NeEvent->tMWPC[n] > 0) d1tMWPC[n]->Fill(NeEvent->tMWPC[n]);
} }
// //
if(NeEvent->F3[0]>0&&NeEvent->F3[1]>0&&NeEvent->F3[2]>0&&NeEvent->F3[3]>0) if(NeEvent->F3[0]>0&&NeEvent->F3[1]>0&&NeEvent->F3[2]>0&&NeEvent->F3[3]>0)
af3 = (NeEvent->F3[0]+NeEvent->F3[1]+NeEvent->F3[2]+NeEvent->F3[3]+4.*gRandom->Uniform())/4.; af3 = (NeEvent->F3[0]+NeEvent->F3[1]+NeEvent->F3[2]+NeEvent->F3[3]+4.*gRandom->Uniform())/4.;
if(NeEvent->F5[0]>0&&NeEvent->F5[1]>0&&NeEvent->F5[2]>0&&NeEvent->F5[3]>0) if(NeEvent->F5[0]>0&&NeEvent->F5[1]>0&&NeEvent->F5[2]>0&&NeEvent->F5[3]>0)
af5 = (NeEvent->F5[0]+NeEvent->F5[1]+NeEvent->F5[2]+NeEvent->F5[3]+4.*gRandom->Uniform())/4.; af5 = (NeEvent->F5[0]+NeEvent->F5[1]+NeEvent->F5[2]+NeEvent->F5[3]+4.*gRandom->Uniform())/4.;
if(NeEvent->tF3[0]>0&&NeEvent->tF3[1]>0&&NeEvent->tF3[2]>0&&NeEvent->tF3[3]>0) if(NeEvent->tF3[0]>0&&NeEvent->tF3[1]>0&&NeEvent->tF3[2]>0&&NeEvent->tF3[3]>0)
tf3 = (NeEvent->tF3[0]+NeEvent->tF3[1]+NeEvent->tF3[2]+NeEvent->tF3[3]+4.*gRandom->Uniform())/4.; tf3 = (NeEvent->tF3[0]+NeEvent->tF3[1]+NeEvent->tF3[2]+NeEvent->tF3[3]+4.*gRandom->Uniform())/4.;
if(NeEvent->tF5[0]>0&&NeEvent->tF5[1]>0&&NeEvent->tF5[2]>0&&NeEvent->tF5[3]>0) if(NeEvent->tF5[0]>0&&NeEvent->tF5[1]>0&&NeEvent->tF5[2]>0&&NeEvent->tF5[3]>0)
tf5 = (NeEvent->tF5[0]+NeEvent->tF5[1]+NeEvent->tF5[2]+NeEvent->tF5[3]+4.*gRandom->Uniform())/4.; tf5 = (NeEvent->tF5[0]+NeEvent->tF5[1]+NeEvent->tF5[2]+NeEvent->tF5[3]+4.*gRandom->Uniform())/4.;
// //
// ToF = (tf5 - tf3)*0.125+89.165; // ToF = (tf5 - tf3)*0.125+89.165;
// ToF = (tf5 - tf3)*0.0625; // ToF = (tf5 - tf3)*0.0625;
// ToF = (tf5 - tf3)*0.0625 + 68.55; // ToF = (tf5 - tf3)*0.0625 + 68.55;
// ToF = (tf5 - tf3)*0.0625 + 68.475; // ToF = (tf5 - tf3)*0.0625 + 68.475;
ToF = (tf5 - tf3)*0.015625 + 68.475; ToF = (tf5 - tf3)*0.015625 + 68.475;
if(af3*af5*tf3*tf5!=0) if(af3*af5*tf3*tf5!=0) {
{
// if(NeEvent->trigger == 1) // if(NeEvent->trigger == 1)
{
d1ToF->Fill(ToF); d1ToF->Fill(ToF);
d1aF3->Fill(af3); d1aF3->Fill(af3);
d2ToFaF3->Fill(ToF,af3); d2ToFaF3->Fill(ToF,af3);
d1aF5->Fill(af5); d1aF5->Fill(af5);
d2ToFaF5->Fill(ToF,af5); d2ToFaF5->Fill(ToF,af5);
}
} }
for (int n=0; n<16; ++n) { for (int n=0; n<16; ++n) {
// if(NeEvent->Lxt[n]>0) // if(NeEvent->Lxt[n]>0)
...@@ -894,22 +871,31 @@ ToF = (tf5 - tf3)*0.015625 + 68.475; ...@@ -894,22 +871,31 @@ ToF = (tf5 - tf3)*0.015625 + 68.475;
*/ */
//______ calibrated spectra __________________________ //______ calibrated spectra __________________________
for (n=0; n<16; ++n) for (int n=0; n<16; ++n) {
{
if(NeEvent->Lxt[n]>0){ if(NeEvent->Lxt[n]>0){
value1 = (double)NeEvent->Lxa[n] + gRandom->Uniform(); value1 = (double)NeEvent->Lxa[n] + gRandom->Uniform();
value2 = ((TNeAnalysis*)go4)->p_Lxa->Energy(value1, n); value2 = ((TNeAnalysis*)go4)->p_Lxa->Energy(value1, n);
d1Lxc[n]->Fill(value2); d1Lxc[n]->Fill(value2);
mLxa++; mLxa++;
eLxa = value2; eLxa = value2;
// fill TNeEvent
NeEvent->L1.sx[NeEvent->L1.multx]=n;
NeEvent->L1.posx[NeEvent->L1.multx]=NeEvent->L1.str2pos(n);
NeEvent->L1.depx[NeEvent->L1.multx]=value2;
NeEvent->L1.multx++;
} }
if(NeEvent->Lyt[n]>0){ if(NeEvent->Lyt[n]>0){
value1 = (double)NeEvent->Lya[n] + gRandom->Uniform(); value1 = (double)NeEvent->Lya[n] + gRandom->Uniform();
value2 = ((TNeAnalysis*)go4)->p_Lya->Energy(value1, n); value2 = ((TNeAnalysis*)go4)->p_Lya->Energy(value1, n);
d1Lyc[n]->Fill(value2); d1Lyc[n]->Fill(value2);
mLya++; mLya++;
eLya = value2; eLya = value2;
NeEvent->L1.sy[NeEvent->L1.multy]=n;
NeEvent->L1.posy[NeEvent->L1.multy]=NeEvent->L1.str2pos(n);
NeEvent->L1.depy[NeEvent->L1.multy]=value2;
NeEvent->L1.multy++;
} }
if(NeEvent->Rxt[n]>0){ if(NeEvent->Rxt[n]>0){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment