fHitTree->Branch("frame" , &fFrameInfo.frame , "frame/i" , 32000);
fHitTree->Branch("hits" , &fFrameInfo.hits , "hits/i" , 32000);
fHitTree->Branch("pixel" , &fFrameInfo.pixel[0] , "pixel[hits]/i" , 32000);
+ fHitTree->Branch("pixelRaw" , &fFrameInfo.pixelRaw[0] , "pixelRaw[hits]/i" , 32000);
fHitTree->Branch("pixelthreshold", &fFrameInfo.pixelthreshold[0],"pixelthreshold[hits]/i", 32000);
for(int i=0; i<25; i++) {
fHitTree->Branch( Form("p%i",i+1) , &fFrameInfo.p[i][0] , Form("p%i [hits]/F",i+1) , 32000);
fColumns = run->sensorinfocur.columns;
fPixels = fRows*fColumns;
fMatrix = run->labbook.matrix;
+ fOrderCode = run->labbook.chipGen;
fSystem = run->labbook.system;
fConfigFile = fInDir+Form("/RUN_%i_i.rz",fRunNumber);
fRootFile = fOutDir+Form("/RUN_%i_i.root",fRunNumber);
// - fF1matrix
// Use 'fOrderCode' to choose the respective order!
// -----------------
- if (fOrderCode == "") { }
-// else if (fOrderCode == "Mi26") { reorderMi26(); }
- else if (fOrderCode == "Mi29a") {
- reorderMi29a();
- }
+
+ if (fOrderCode == "") { }
+ else if (fOrderCode == "Mi34") { }
+ else if (fOrderCode == "Pegasus"){ }
+ else if (fOrderCode == "FSBB") { reorderFSBB(); }
+ else if (fOrderCode == "Mi29a") { reorderMi29a(); }
// else if (fOrderCode == "Mi29b") { reorderMi29b(); }
//==========================================================================
delete[] HDRDATA;
Bool_t bordercluster=false;
Float_t noisesumincluster=0;
Float_t chargesumincluster=0;
-
+
+ Float_t cdsMatrixSum=0;
+ Float_t cdsmatrixCorrPed[fPixels];
+ for(Int_t i=0; i<fPixels; i++)
+ {
+ cdsMatrixSum+=fCdsmatrix[i];
+ // cout<<fCdsmatrix[i]<<",";
+ }
+
+ // cout<<fFrameNumber<<":________:"<<cdsMatrixSum<<endl;
+ // debugStream<>(fCdsmatrix, fPixels, fColumns, 2, 20);
+ // cout<<"Pedestals"<<endl;
+ // debugStream<>(fPedestals, fPixels, fColumns, 2, 20);
for(Int_t i=0; i<fPixels; i++)
{
+ cdsmatrixCorrPed[i]=(float)(1.*fCdsmatrix[i]-fPedestals[i]);
fHittedPixel[i] = 0;
-
+ // if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) > (50.) )
if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) > (5.*fNoise[i]) )
{
HITNR++;
for(Int_t i=0; i<HITNR; i++)
{
Hitlist[i]=HITS.At(i);
+ fFrameInfo.pixelRaw[i] = Hitlist[i];
}
// Begin loop over all negative CDS pixel
}
}
}
-
+
//Check seeds (whether lowest entry in cluster):
for(Int_t i=6; i<19; i++)
{
}
}
}
- // cout<<"Hitted pixel discriminator matrix:"<<endl;
- // debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
+ // cout<<"Hitted pixel discriminator matrix:"<<endl;
+ // debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
fHittedPixel[rechargePixellist[rechargingpixeli]] = -4;
}
}
+
//Begin: loop over all potential seed pixels:
//Determine 'hit-vicinity':
}
}
}
- noisesumincluster=TMath::Sqrt(noisesumincluster);
-// cout << coloryellow << "Noise für Cluster: " << noisesumincluster << endlr;
-// cout << coloryellow << "ChargeSum für Cluster: " << chargesumincluster << endlr;
-// debug
-// for(Int_t row=0; row<5; row++)
-// {
-// for(Int_t column=0; column<5; column++)
-// {
-// std::cout.width(10);
-// std::cout << std::fixed;
-// std::cout << std::left << std::setprecision(2) << pixelchargeincluster[row*5+column];
-// }
-// cout << endl;
-// }
-// cout << endl;
+ int index[25];
+ TMath::Sort(25,pixelchargeincluster,index,1);
+ // for(int i=0;i<25;i++)
+ // cout<<pixelchargeincluster[i]<<",";
+ // cout<<endl;
+ // for(int i=0;i<25;i++)
+ // cout<<index[i]<<",";
+ // cout<<endl;
+ // cout<<"ChargeSorted"<<endl;
+ // for(int i=0;i<25;i++)
+ // cout<<pixelchargeincluster[index[i]]<<",";
+ // cout<<endl;
+ // cout<<"NoiseSorted"<<endl;
+ // for(int i=0;i<25;i++)
+ // cout<<noiseincluster[index[i]]<<",";
+ // cout<<endl;
+ Float_t chargesumincluster4=0;
+ Float_t noisesumincluster4=0;
+ Float_t noisesumincluster4Square=0;
+ for(Int_t iClusterLauf=0;iClusterLauf<4;iClusterLauf++)
+ {
+ chargesumincluster4+=pixelchargeincluster[index[iClusterLauf]];
+ //noisesumincluster4+=noiseincluster[index[iClusterLauf]];
+ noisesumincluster4Square+=TMath::Power(noiseincluster[index[iClusterLauf]],2);
+ }
+ noisesumincluster=TMath::Sqrt(noisesumincluster);
+ noisesumincluster4=TMath::Sqrt(noisesumincluster4Square);
+ // cout<<"Chargesumme"<<chargesumincluster4<<","<<noisesumincluster4<<","<<noisesumincluster4Square<<endl;
+ // Float_t cdsMatrixMinusPedestal[fPixels];
+ // Float_t cdsMatrixSum=0;
+ // for(Int_t i=0; i<fPixels; i++)
+ // {
+ // cdsMatrixMinusPedestal[i]=fCdsmatrix[i]-fPedestals[i];
+ // cdsMatrixSum+=cdsMatrixMinusPedestal[i];
+ // }
+ // debugStream<>(cdsMatrixMinusPedestal, fPixels, fColumns, 0, 20);
+ // cout << colorred << "Noise für Cluster: " << noisesumincluster << endlr;
+ // cout << colorred << "ChargeSum für Cluster: " << chargesumincluster <<"WholeMatrix:"<<cdsMatrixSum<< endlr;
+
+ // for(Int_t row=0; row<5; row++)
+ // {
+ // for(Int_t column=0; column<5; column++)
+ // {
+ // std::cout.width(10);
+ // std::cout << std::fixed;
+ // std::cout << std::left << std::setprecision(2) << pixelchargeincluster[row*5+column];
+ // }
+ // cout << endl;
+ // }
+ // cout << endl;
//Check seeds (whether highest entry in cluster):
for(Int_t i=6; i<19; i++) // why not over full cluster? (I=0 i<25 TODO
//Begin: loop evaluate true seeds:
if(CHANCE==100)
{
+ if(fOrderCode=="FSBB")
+ {
+ if (B < 2 || B > fColumns-3 || A < 1 || A > fRows-2)
+ bordercluster = true;
+ else
+ bordercluster = false;
+ }
+ else //if not FSBB
+ {
if (B < 2 || B > fColumns-3 || A < 2 || A > fRows-3)
bordercluster = true;
else
bordercluster = false;
+ }
for(Int_t row=0; row<5; row++)
{
for(Int_t column=0; column<5; column++)
}
}
}
-// cout<<"Hitted pixel discriminator matrix:"<<endl;
-// debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
+ // cout<<"Hitted pixel discriminator matrix:"<<endl;
+ // debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
if (bordercluster)
fHittedPixel[Hitlist[hit]] = -2;
else
{
fFrameInfo.p [clupos][fHits] = pixelchargeincluster[clupos];
}
-
+ // for(Int_t row=0; row<5; row++)
+ // {
+ // for(Int_t column=0; column<5; column++)
+ // {
+ // std::cout.width(10);
+ // std::cout << std::fixed;
+ // std::cout << std::left << std::setprecision(2) << pixelchargeincluster[row*5+column];
+ // }
+ // cout << endl;
+ // }
+ // cout << endl;
// if cluster charge > clusternoise * const
- if (1.0*chargesumincluster > noisesumincluster*2.0)
- fFrameInfo.pixelthreshold[fHits] = Hitlist[hit];
- else
- fFrameInfo.pixelthreshold[fHits] = 0;
-
+ if(fOrderCode=="FSBB")
+ {
+ if (1.0*chargesumincluster4 > noisesumincluster4*6.0)
+ fFrameInfo.pixelthreshold[fHits] = Hitlist[hit];
+ else
+ fFrameInfo.pixelthreshold[fHits] = 0;
+ }
+ else
+ {
+ if (1.0*chargesumincluster > noisesumincluster*2.0)
+ fFrameInfo.pixelthreshold[fHits] = Hitlist[hit];
+ else
+ fFrameInfo.pixelthreshold[fHits] = 0;
+ }
if(fSave) {
hint1->Fill( Hitlist[hit]%fColumns, (int)(Hitlist[hit]/fColumns) );
}
- fHits++;
-
+ // if(fFrameInfo.pixelthreshold[fHits]!=0)
+ // {
+
+ // debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
+ // for(Int_t row=0; row<5; row++)
+ // {
+ // for(Int_t column=0; column<5; column++)
+ // {
+ // std::cout.width(10);
+ // std::cout << std::fixed;
+ // std::cout << std::left << std::setprecision(2) << pixelchargeincluster[row*5+column];
+ // }
+ // cout << endl;
+ // }
+ // cout << endl;
+ // debugStream<>(cdsmatrixCorrPed, fPixels, fColumns, 1, 10);
+ // }
+ fHits++;
}
}
}
//End: loop evaluate true seeds:
//End: loop over all potential seed pixels:
-
+
if(fSave)
{
for(Int_t i=0; i<fPixels; i++)
{
fdiscriminatedhitmatrix->SetBinContent(i%fColumns, (int)(i/fColumns), fHittedPixel[i]);
fADCHitmatrix->SetBinContent(i%fColumns, (int)(i/fColumns), fCdsmatrix[i]);
+ // cout<<"HITHERE"<<i<<":"<<fHittedPixel[i]<<";"<<fCdsmatrix[i]<<endl;
}
}
}
}
-
//####################################################################
void MAPS::filterCommonMode() {
else
minus++;
- if(TMath::Abs(CommonModeInRow)>20) // TODO better warning criteria
+ if(TMath::Abs(CommonModeInRow)>1000) // TODO better warning criteria
{
warning = true;
}
cout <<endl <<endl << colorwhite << "---------------- FRAME " << fFrameNumber << " ----------------" << colorreset << endl << endl;
cout<<"CDS matrix:"<<endl;
debugStream<>(fCdsmatrix, fPixels, fColumns, 0, 39);
-
+ debugStream<>(fCdsmatrix, fPixels, 512, 0, 39);
+ cout<<fCdsmatrix[0]<<","<<fCdsmatrix[1]<<","<<fCdsmatrix[2]<<","<<fCdsmatrix[3]<<","<<fCdsmatrix[4]<<","<<fCdsmatrix[5]<<","<<fCdsmatrix[6]<<endl;
cout<<"Hitted pixel discriminator matrix:"<<endl;
debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
}
}
+//####################################################################
+void MAPS::reorderFSBB() {
+
+ Float_t CDSMATRIX2 [4*208];
+ Float_t CDSMATRIX [fPixels];
+ Int_t F0MATRIX [fPixels];
+ Int_t F1MATRIX [fPixels];
+ for(Int_t i=0; i<fPixels; i++)
+ {
+ CDSMATRIX [i] = fCdsmatrix[i];
+ F0MATRIX [i] = fF0matrix [i];
+ F1MATRIX [i] = fF1matrix [i];
+ }
+ fRows = 4;
+ fColumns = 208;
+ fPixels = fRows*fColumns;
+ // debugStream(CDSMATRIX, fPixels, 208, 0, 39);
+ Int_t a0[4][208];
+ Int_t a1[4][208];
+ Int_t aMerge[4][2*208];
+ Int_t subMatrix0[4][208];
+ Int_t subMatrix1[4][208];
+ //Divide CDSMATRIX in the channels. First 208 pixels are from A0-0, then A0-1, then A0-2, then A0-3, then A1-0, then A1-1, then A1-2, then A1-3
+ for(Int_t iOutChannel=0; iOutChannel<4; iOutChannel++)
+ {
+ for(Int_t iPixelInZeile=0; iPixelInZeile<208; iPixelInZeile++)
+ {
+ a0[iOutChannel][iPixelInZeile]=CDSMATRIX [iOutChannel*208+iPixelInZeile];
+ a1[iOutChannel][iPixelInZeile]=CDSMATRIX [(4+iOutChannel)*208+iPixelInZeile];//4+iOutChannel, because this is A1, which is shifted by four channels of A0
+ }
+ }
+ // for(Int_t i=0; i<208; i++)
+ // {
+ // cout<< a0[3][i]<<",";
+ // }
+ // cout<<endl;
+ // for(Int_t i=0; i<208; i++)
+ // {
+ // cout<< a1[3][i]<<",";
+ // }
+ // cout<<endl;
+
+ for(Int_t iOutChannel=0; iOutChannel<4; iOutChannel++)
+ {
+ for(Int_t iMerge2channels=0; iMerge2channels<208;iMerge2channels++)
+ {
+ //Merge A0-0[0],A1-0[0],A0-0[1],A1-0[1],A0-0[2],A1-0[2],... output is an array of 4 geometrically columns
+ aMerge[iOutChannel][iMerge2channels*2]=a0[iOutChannel][iMerge2channels];//A0-iOutChannel[iMerge2channels]
+ aMerge[iOutChannel][iMerge2channels*2+1]=a1[iOutChannel][iMerge2channels];//A1-iOutChannel[iMerge2channels]
+ }
+ }
+ // for(Int_t ichannel=0; ichannel<4; ichannel++)
+ // {
+ // Int_t precision=0;
+ // Float_t highlightabove=30;
+ // for(Int_t i=0; i<2*208; i++)
+ // {
+ // if (abs(aMerge[ichannel][i]) > highlightabove)
+ // std::cout << colorred;
+ // std::cout.width(precision+5);
+ // std::cout << std::fixed;
+ // std::cout << std::left << std::setprecision(precision);
+ // std::cout << aMerge[ichannel][i] << colorreset;
+
+ // }
+ // cout<<endl;
+ // cout<<endl;
+ // }
+ for(Int_t iOutChannel=0; iOutChannel<4; iOutChannel++)
+ {
+ for(Int_t iDivideMatrix=0; iDivideMatrix<208;iDivideMatrix++)
+ {
+ //Divide in 2 submatrices
+ subMatrix0[iOutChannel][iDivideMatrix]=aMerge[iOutChannel][iDivideMatrix];
+ subMatrix1[iOutChannel][iDivideMatrix]=aMerge[iOutChannel][208+iDivideMatrix];
+ }
+ }
+ // for(Int_t i=0; i<208; i++)
+ // {
+ // cout<< subMatrix1[2][i]<<",";
+ // }
+ // cout<<endl;
+ // cout<<endl;
+ // for(Int_t i=0; i<208; i++)
+ // {
+ // cout<< subMatrix1[3][i]<<",";
+ // }
+ // cout<<endl;
+ // cout<<endl;
+ Int_t choiceSubMatrix=0;
+ if(choiceSubMatrix==0)//Choose a submatrix and combine its value in an array
+ {
+ for(Int_t iOutChannel=0; iOutChannel<4; iOutChannel++)
+ {
+ for(Int_t iPixel=0; iPixel<208;iPixel++)
+ {
+ CDSMATRIX2[iOutChannel*208+iPixel]=subMatrix0[iOutChannel][iPixel];
+ }
+ }
+ }
+ else
+ {
+ for(Int_t iOutChannel=0; iOutChannel<4; iOutChannel++)
+ {
+ for(Int_t iPixel=0; iPixel<208;iPixel++)
+ {
+ CDSMATRIX2[iOutChannel*208+iPixel]=subMatrix1[iOutChannel][iPixel];
+ }
+ }
+ }
+ // debugStream(CDSMATRIX2, 4*208, 208,0,30);
+
+ for(Int_t i=0; i<4*208; i++)
+ {
+ fCdsmatrix[i]= CDSMATRIX [i];
+ }
+
+
+ /*
+ Int_t pixel=4*416;
+ Int_t array[pixel];
+ for(int i=0;i<pixel;i++)
+ array[i]=CDSMATRIX [i];
+
+ //Divide array in two submatrices
+ Int_t submatrix=0;
+ Int_t nMatrix=2;
+ Int_t pixelInSubMatrix=pixel/nMatrix;
+ Int_t arrayDiv[pixelInSubMatrix];
+ for(int i=0;i<pixelInSubMatrix;i++)
+ arrayDiv[i]=array[i+submatrix*pixelInSubMatrix];
+ debugStream(arrayDiv, pixelInSubMatrix, 208, 0, 39);
+ for(Int_t i=0; i<pixelInSubMatrix; i++)
+ {
+ fCdsmatrix[i]= arrayDiv[i];
+ }
+ for(Int_t i=pixelInSubMatrix; i<fPixels; i++)
+ {
+ fCdsmatrix[i]= 0;
+ }
+ // exit(1);*/
+}
+
//####################################################################
#endif