From a2eb55146a8a4f42795b26c475a51069f303d06d Mon Sep 17 00:00:00 2001
From: Malte Schokolowski <baw8441@uni-hamburg.de>
Date: Sat, 11 Dec 2021 14:32:52 +0100
Subject: [PATCH] Dateien und Funktionen ausgelagert

---
 verarbeitung/Processing.py                    | 290 ------------------
 verarbeitung/__init__.py                      |   0
 .../__pycache__/Processing.cpython-36.pyc     | Bin 7171 -> 0 bytes
 .../__pycache__/Processing.cpython-38.pyc     | Bin 4087 -> 0 bytes
 .../__pycache__/Processing.cpython-39.pyc     | Bin 7262 -> 0 bytes
 .../Processing_pub_objs_only.cpython-39.pyc   | Bin 4137 -> 0 bytes
 .../__pycache__/input_fj.cpython-36.pyc       | Bin 4299 -> 0 bytes
 .../__pycache__/input_fj.cpython-38.pyc       | Bin 4329 -> 0 bytes
 .../__pycache__/input_fj.cpython-39.pyc       | Bin 4337 -> 0 bytes
 .../__pycache__/input_test.cpython-36.pyc     | Bin 3949 -> 0 bytes
 .../__pycache__/input_test.cpython-38.pyc     | Bin 3865 -> 0 bytes
 .../__pycache__/input_test.cpython-39.pyc     | Bin 7228 -> 0 bytes
 .../__pycache__/json_demo.cpython-36.pyc      | Bin 1128 -> 0 bytes
 .../__pycache__/json_demo.cpython-38.pyc      | Bin 1153 -> 0 bytes
 .../__pycache__/json_demo.cpython-39.pyc      | Bin 1256 -> 0 bytes
 .../__pycache__/unittest.cpython-36.pyc       | Bin 646 -> 0 bytes
 .../construct_new_graph/Processing.py         | 151 +++++++++
 verarbeitung/construct_new_graph/__init__.py  |   0
 .../construct_new_graph/add_citations_rec.py  | 151 +++++++++
 .../construct_new_graph/add_references_rec.py | 151 +++++++++
 .../export_to_json.py}                        |   0
 verarbeitung/dev_files/__init__.py            |   0
 .../{ => dev_files}/print_graph_test.py       |   6 +-
 verarbeitung/get_pub_from_input.py            |   2 +-
 verarbeitung/json_text.json                   |   1 -
 verarbeitung/process_main.py                  |   0
 .../{ => test}/Processing_unittest.py         | 240 ++++++++-------
 verarbeitung/test/__init__.py                 |   0
 verarbeitung/{ => test}/input_test.py         | 232 +++++++-------
 verarbeitung/test_output.json                 |   2 +-
 .../{ => update_graph}/Kanten_Vergleich.py    |   0
 .../{ => update_graph}/Knoten_Vergleich.py    |   0
 verarbeitung/update_graph/__init__.py         |   0
 .../{ => update_graph}/connect_new_input.py   | 136 ++++----
 .../{ => update_graph}/import_from_json.py    |   2 +-
 .../{ => update_graph}/update_graph.py        |   8 +-
 .../{ => update_graph}/update_graph_del.py    |   5 +-
 37 files changed, 772 insertions(+), 605 deletions(-)
 delete mode 100644 verarbeitung/Processing.py
 create mode 100644 verarbeitung/__init__.py
 delete mode 100644 verarbeitung/__pycache__/Processing.cpython-36.pyc
 delete mode 100644 verarbeitung/__pycache__/Processing.cpython-38.pyc
 delete mode 100644 verarbeitung/__pycache__/Processing.cpython-39.pyc
 delete mode 100644 verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc
 delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-36.pyc
 delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-38.pyc
 delete mode 100644 verarbeitung/__pycache__/input_fj.cpython-39.pyc
 delete mode 100644 verarbeitung/__pycache__/input_test.cpython-36.pyc
 delete mode 100644 verarbeitung/__pycache__/input_test.cpython-38.pyc
 delete mode 100644 verarbeitung/__pycache__/input_test.cpython-39.pyc
 delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-36.pyc
 delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-38.pyc
 delete mode 100644 verarbeitung/__pycache__/json_demo.cpython-39.pyc
 delete mode 100644 verarbeitung/__pycache__/unittest.cpython-36.pyc
 create mode 100644 verarbeitung/construct_new_graph/Processing.py
 create mode 100644 verarbeitung/construct_new_graph/__init__.py
 create mode 100644 verarbeitung/construct_new_graph/add_citations_rec.py
 create mode 100644 verarbeitung/construct_new_graph/add_references_rec.py
 rename verarbeitung/{json_demo.py => construct_new_graph/export_to_json.py} (100%)
 create mode 100644 verarbeitung/dev_files/__init__.py
 rename verarbeitung/{ => dev_files}/print_graph_test.py (94%)
 delete mode 100644 verarbeitung/json_text.json
 create mode 100644 verarbeitung/process_main.py
 rename verarbeitung/{ => test}/Processing_unittest.py (94%)
 create mode 100644 verarbeitung/test/__init__.py
 rename verarbeitung/{ => test}/input_test.py (98%)
 rename verarbeitung/{ => update_graph}/Kanten_Vergleich.py (100%)
 rename verarbeitung/{ => update_graph}/Knoten_Vergleich.py (100%)
 create mode 100644 verarbeitung/update_graph/__init__.py
 rename verarbeitung/{ => update_graph}/connect_new_input.py (79%)
 rename verarbeitung/{ => update_graph}/import_from_json.py (99%)
 rename verarbeitung/{ => update_graph}/update_graph.py (95%)
 rename verarbeitung/{ => update_graph}/update_graph_del.py (97%)

diff --git a/verarbeitung/Processing.py b/verarbeitung/Processing.py
deleted file mode 100644
index 4beb8e8..0000000
--- a/verarbeitung/Processing.py
+++ /dev/null
@@ -1,290 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Functions to generate a graph representing citations between multiple ACS/Nature journals
-
-"""
-
-__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
-__email__ = "cis-project2021@zbh.uni-hamburg.de"
-__status__ = "Production"
-#__copyright__ = ""
-#__credits__ = ["", "", "", ""]
-#__license__ = ""
-#__version__ = ""
-#__maintainer__ = ""
-
-
-import sys  
-from pathlib import Path
-from os import error
-sys.path.append("../")
-
-from input.publication import Publication
-from get_pub_from_input import get_pub
-from json_demo import output_to_json
-
-
-def initialize_nodes_list(doi_input_list, search_depth_max, search_height_max, test_var):
-    '''
-        :param doi_input_list:      input list of doi from UI
-        :type doi_input_list:       List[String]
-
-        :param search_depth_max:    maximum depth to search for references
-        :type search_depth_max:     int
-
-        :param search_height_max:   maximum height to search for citations
-        :type search_height_max:    int
-
-        :param test_var:            variable to differenciate between test and url call
-        :type test_var:             boolean
-
-        adds input dois to nodes and retrieves citations and references for input publications
-    '''
-
-    # saves found citations and references in lists
-    references_pub_obj_list = []
-    citations_pub_obj_list = []
-
-    for pub_doi in doi_input_list: #iterates over every incoming doi
-        pub = get_pub(pub_doi, test_var)
-        if (type(pub) != Publication):
-            print(pub)
-            continue       
-
-        # checks if publication already exists in nodes
-        not_in_nodes = True #boolean value to check if a node already exists in the set of nodes
-        for node in nodes: #iterates over every node in the set of nodes
-            if (pub.doi_url == node.doi_url): #determines that a node with this doi already is in the set
-                not_in_nodes = False #false --> node will not be created
-                break
-        if (not_in_nodes): #there is no node with this doi in the set
-            nodes.append(pub) #appends Publication Object
-            pub.group = "input"
-        else:
-            doi_input_list.remove(pub_doi) #deletes the doi-dublicate from input list
-
-        # inserts references as publication objects into list and 
-        # inserts first depth references into nodes/edges if maximum search depth > 0
-        for reference in create_graph_structure_references(pub, 0, search_depth_max, test_var):
-            references_pub_obj_list.append(reference)
-
-        # inserts citations as publication objects into list and 
-        # inserts first height citations into nodes if maximum search height > 0
-        for citation in create_graph_structure_citations(pub, 0, search_height_max, test_var):
-            citations_pub_obj_list.append(citation)
-
-    return(references_pub_obj_list, citations_pub_obj_list)
-        
-
-
-def complete_inner_edges(test_var):
-    '''
-        :param test_var:    variable to differenciate between test and url call
-        :type test_var:     boolean
-
-        completes inner edges between nodes of group height and depth
-    '''
-
-    for node in nodes:
-        if (node.group == "depth"):
-            for citation in node.citations:
-                for cit in nodes:
-                    if (citation == cit.doi_url and [citation, node.doi_url] not in edges):
-                        edges.append([citation, node.doi_url])
-        if (node.group == "height"):
-            for reference in node.references:
-                for ref in nodes:
-                    if (reference == ref.doi_url and [node.doi_url, reference] not in edges):
-                        edges.append([node.doi_url,reference])
-
-
-   
-def create_graph_structure_references(pub, search_depth, search_depth_max, test_var):
-    '''
-        :param pub:                 publication which references will be added
-        :type pub:                  Publication
-
-        :param search_depth:        current depth to search for references
-        :type search_depth:         int
-
-        :param search_depth_max:    maximum depth to search for references
-        :type search_depth_max:     int
-
-        :param test_var:            variable to differenciate between test and url call
-        :type test_var:             boolean
-
-        adds a node for every referenced publication unknown
-        adds edges to added references
-    '''
-
-    references_pub_obj_list = []
-    for reference in pub.references: #iterates over the references of the considered paper
-        not_in_nodes = True #boolean Value to ensure that there will be no dublicates in the set of nodes
-        for node in nodes: #iterates over all nodes in set of nodes #
-            if (reference == node.doi_url): #determines that the node already exists
-                not_in_nodes = False #boolean false --> node will not be created
-                break
-        if (not_in_nodes): #checks that there is no node with this doi 
-            if (search_depth < search_depth_max): #checks that the recursion step is smaller than the limit
-                reference_pub_obj = get_pub(reference, test_var)
-                if (type(reference_pub_obj) != Publication):
-                    print(pub)
-                    continue 
-
-                reference_pub_obj.group = "depth"
-                nodes.append(reference_pub_obj) # appends the object to the set of nodes
-                edges.append([pub.doi_url,reference_pub_obj.doi_url]) #appends the edge to the set of edges
-                references_pub_obj_list.append(reference_pub_obj) #appends the node to the set of references
-
-        # adds edge only if citation already exists           
-        elif [pub.doi_url,reference] not in edges:
-            edges.append([pub.doi_url,reference])  
-    return references_pub_obj_list 
-
-
-def process_references_rec(references_pub_obj_list, search_depth, search_depth_max, test_var):  
-    '''
-        :param references_pub_obj_list: list of publications which references will be added
-        :type references_pub_obj_list:  List[Publication]
-
-        :param search_depth:            current depth to search for references
-        :type search_depth:             int
-
-        :param search_depth_max:        maximum depth to search for references
-        :type search_depth_max:         int
-
-        :param test_var:                variable to differenciate between test and url call
-        :type test_var:                 boolean
-
-        recursive function to implement height-first-search on references
-    '''
-
-    # adds next level to nodes/edges
-    for pub in references_pub_obj_list:
-        new_reference_pub_obj_list = create_graph_structure_references(pub, search_depth, search_depth_max, test_var)    
-
-        # If the maximum height has not yet been reached, calls function recursivly with increased height     
-        if (search_depth < search_depth_max):
-            process_references_rec(new_reference_pub_obj_list, search_depth+1, search_depth_max, test_var)
-
-    
-  
-def create_graph_structure_citations(pub, search_height, search_height_max, test_var):
-    '''
-        :param pub:                 publication which citations will be added
-        :type pub:                  Publication
-
-        :param search_height:       current height to search for citations
-        :type search_height_max:    int
-
-        :param search_height_max:   maximum height to search for citations
-        :type search_height_max:    int
-
-        :param test_var:            variable to differenciate between test and url call
-        :type test_var:             boolean
-
-        adds a node for every citing publication unknown
-        adds edges to added citations
-    '''
-
-    citations_pub_obj_list = []
-    for citation in pub.citations:
-        not_in_nodes = True
-        for node in nodes: # checks every citation for duplication 
-            if (citation == node.doi_url):
-                not_in_nodes = False
-                break
-        if (not_in_nodes):
-            if (search_height < search_height_max): #checks if its a test and chooses input function accordingly
-                citation_pub_obj = get_pub(citation, test_var)
-                if (type(citation_pub_obj) != Publication):
-                    print(pub)
-                    continue 
-
-                citation_pub_obj.group = "height"
-                nodes.append(citation_pub_obj)
-                edges.append([citation_pub_obj.doi_url,pub.doi_url])
-                citations_pub_obj_list.append(citation_pub_obj)
-
-        # adds only edge if citation already exists         
-        elif [citation,pub.doi_url] not in edges:
-            edges.append([citation,pub.doi_url])   
-    return citations_pub_obj_list
-
-
-def process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var):  
-    '''
-        :param citations_pub_obj_list:  list of publications which citations will be added
-        :type citations_pub_obj_list:   List[Publication]
-
-        :param search_height:       current height to search for citations
-        :type search_height_max:    int
-
-        :param search_height_max:   maximum height to search for citations
-        :type search_height_max:    int
-
-        :param test_var:            variable to differenciate between test and url call
-        :type test_var:             boolean
-
-        recursive function to implement depth-first-search on citations
-    '''
-
-    # adds next level to nodes/edges
-    for pub in citations_pub_obj_list:
-        new_citation_pub_obj_list = create_graph_structure_citations(pub, search_height, search_height_max, test_var)   
-
-        # If the maximum height has not yet been reached, calls function recursivly with increased height 
-        if (search_height < search_height_max):
-            process_citations_rec(new_citation_pub_obj_list, search_height+1, search_height_max, test_var)
-
-
-
-def process_main(doi_input_list, search_height, search_depth, test_var = False):
-    '''
-        :param doi_input_list:  input list of doi from UI
-        :type doi_input_list:   list of strings
-
-        :param search_height:   maximum height to search for citations
-        :type search_height:    int
-
-        :param search_depth:    maximum depth to search for references
-        :type search_depth:     int
-
-        :param test_var:        variable to differenciate between test and url call
-        :type test_var:         boolean
-
-        main function to start graph generation
-    '''
-
-    # ERROR-Handling doi_array = NULL
-    if (len(doi_input_list) == 0):
-        print("Error, no input data")
-
-    # ERROR- if a negative number is entered for height
-    if (search_height < 0):
-        print("Error, search_height of search must be positive")
-
-    # ERROR- if a negative number is entered for depth
-    if (search_depth < 0):
-        print("Error, search_depth of search must be positive")       
-
-    
-    # creates empty lists to save nodes and edges
-    global nodes, edges
-    nodes = [] 
-    edges = [] 
-
-    # initializes nodes/edges from input and gets a list with publication objects for citations and references returned
-    references_obj_list, citations_obj_list = initialize_nodes_list(doi_input_list,search_depth, search_height, test_var)
-
-    # function calls to begin recursive processing up to max depth/height
-    process_citations_rec(citations_obj_list, 1, search_height, test_var)
-    process_references_rec(references_obj_list, 1, search_depth, test_var)
-
-    # adds edges between reference group and citation group of known publications
-    complete_inner_edges(test_var)
-
-    # calls a skript to save nodes and edges of graph in .json file
-    output_to_json(nodes,edges, test_var)
-
-    return(nodes,edges)
diff --git a/verarbeitung/__init__.py b/verarbeitung/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/__pycache__/Processing.cpython-36.pyc b/verarbeitung/__pycache__/Processing.cpython-36.pyc
deleted file mode 100644
index 203d7b80e86c1714067062b8efd787fd591d82e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7171
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
E0mQ(Kj{pDw

diff --git a/verarbeitung/__pycache__/Processing.cpython-38.pyc b/verarbeitung/__pycache__/Processing.cpython-38.pyc
deleted file mode 100644
index 1906483bf8be5183bfad874433aca0cd4a75a8fa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4087
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

diff --git a/verarbeitung/__pycache__/Processing.cpython-39.pyc b/verarbeitung/__pycache__/Processing.cpython-39.pyc
deleted file mode 100644
index a86e804167e4c2fdf2e9a1f4b354ef6506381740..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7262
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

diff --git a/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc b/verarbeitung/__pycache__/Processing_pub_objs_only.cpython-39.pyc
deleted file mode 100644
index 9ce1023e6ea54e1b04b37ad5a1fd08115d5f52a4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4137
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
I-*Mc31K1MBoB#j-

diff --git a/verarbeitung/__pycache__/input_fj.cpython-36.pyc b/verarbeitung/__pycache__/input_fj.cpython-36.pyc
deleted file mode 100644
index 04312c91f0a7675651e99a2a6c10a2c9da146758..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4299
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
angN(Hnv`b&T3WByYg*T=7JgT({r>^(Ul4@=

diff --git a/verarbeitung/__pycache__/input_fj.cpython-38.pyc b/verarbeitung/__pycache__/input_fj.cpython-38.pyc
deleted file mode 100644
index 515ab99c01a5ce78bb5bb6de554a4dae3ffe4b4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4329
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

diff --git a/verarbeitung/__pycache__/input_fj.cpython-39.pyc b/verarbeitung/__pycache__/input_fj.cpython-39.pyc
deleted file mode 100644
index 175f9ebbfdf5f3313196b4f10aa01dc2e8e20509..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4337
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

diff --git a/verarbeitung/__pycache__/input_test.cpython-36.pyc b/verarbeitung/__pycache__/input_test.cpython-36.pyc
deleted file mode 100644
index 956c497bc38c9471bc9e7cb52a870cd1174cceee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3949
zcmd5;S$Eq+6dp-lWG8X<G=UUo%Vr=+Ewh%gHDzgmkTyU-P=w<<an!iBJCZqVj`NiM
z8Td(h<tfj+@x*sWvLd^uoC8m_&)m7o+&lMvv#CBcRsQSBAB}frg!ofreskbIMho6B
zh4@^MAmb6*iRrRrk_E|vWI)PM9#S5XNd+oC60SuymC)y?OcUtyG)YrbX&E$4Gc=2S
z4sE_=y9Ju11zLo(MCV$9CKG*;=4hE#AU#9RvKBTTZ__HBr|0PTmPs$r1-gh4+}Kv4
zi*$)zq?cfOnO>n)=((}2Os`UvUZdAxdxO?!9r}&LHbLujnQG*~R;M>H)2pzV+HaCJ
z=q-Ai-huosy$8#B%S>{aqAT=1T}6}+=);ysv=#b@KBiBgy+)hRT~B72rt9=6eFo`s
z`U3hJiGGG|&`tUh(pU5~^jnF3mbT~{+J<zCZl}@bXotR~@1Xsjc2n&<{XjpG3++$z
zGu=tiTA(}h3whB0N)6ge^^3GeO(N(e?Nck&FHwsQ$cO$e9j4LG$$~6OTb5*5PRL0)
zB`b1T&d6CgC+FpYT$D@lTx-r<ruL4g-fL#Ik-+YW_t63vDO`gDc8Niz-X#{s=c0-2
z{$AT}HbTGKX_gXi?%8=0E%+H^U<`yO1}3O6ut3d04%8atL34uwi9=hhw*;horyLdr
zg%kG34~p6X$RQPBu?IzMDGqFCN+ghku~jWcMe6!qU$vur=!b0?O*XroQ2BfPu&aWo
zc(>bEoklyF>7AwPQ6rR5S;>8=WTz>E$O0dgntrIufebdvw^X;^tCpf%Alv(j>rxhz
z9Fshg0+S*Wu3Sxk{4UfKy1#F29CYu=jYiwY^nR!RU}MwYS=(0KyYevHX!>ixS}zvX
zev_)9_M{*7JFSfo!SD3?p%=;^T<<-MY|ryMe&~6eO0Wzfj6(Xi4cjamF+Ezytj_w-
zZ41kW7@fvF>3LDv^X_%2-)4T&^X~T>?bxEG5m*<IAr;mcJR@4b3D|~~|MSMNHxrnf
zj2{2EPj}5l2>-rohHIaH;*wMgY7$|dXdkbO3+AmJltIogJ(?Y+nuSo|))i`&3E#I*
zMr$5cZbP(~|IcWZZVz|q(*@Tm7d8ghT$=0u!i!hn*$iGRH+j49j}IOnuT8Yz2apH1
zLvdZ)xp|EHVqlQ5A`VSe2#uHrHCI?~X`0hCuW3QkqNetWII)k-fw?2@7k2Sr;#Mhb
zog%zA<(W@;Tb}aVr+ny7`Ou&8c0J`oUp1pj+YdsoyYDrWYCH_|iKtpp5x0$piz&)$
zePlr%+jP<N+2Qu~`<><`L=0>YVU&$Y<84D-0G|TD^E2KW02fS492*a|2Mod&$L51;
z8jdT+7A{*Wfn#A{+%>{PhL$0*G$a-=Bo+aZll+Nci2Dn>;(mD-kO6|imRiINYKh4?
zCVbhb6_Bc>&ZCP8jb2Z7Nb#oTYenOLirpNp&LBQ{&$AO>hB47s2$%30TEGWX7&+9+
z)jEb^%Trpd;!7zhRq;BxIXoEuQY9~=gZ6lpY{3^+*RQz+{b1GH?2A=%?c~L(;rk2E
zR80?dG_6M>adJkSoYcvQot$J?ePmcY9afKrao6>aYHm?ya#TB-&ODw+we`moj$2C7
zgI9s`L$8B4!ywLR5NAAyvz`fpM0F5&BNNX@xh0(ovq!U;Y*>L%kEtAYBFRX5+Z;}F
zNx(F6{VcLG9)^<~i_B?eA_L+ivg4Lxv@lD3+^hb0p!#SaEJ6~f9@l(uIjx!5><W0S
zNRwb8_GM0&cW@b4#&|J1=9?*itwUeN99SP9TH;!BD_NvrDGxCPU)1@6iQNz=adXDp
zfK2Mfu=7eB3}-{#iCcZlt)6jXOtf194x!SdKxRh@WJL-N3vq$WX>jNa9A?LSGvKgw
z=$oWVDLCLpz=51r2|i92j0T5NaKMeaWx#<gaU0H-f<t5AKt7vo2oBY^sw?`X(N~h<
zcT&F<`U+M0hAH85GU)lT4g7{I_R5e&sH2C6?S6m?Vg`8losLwVq!vzLMi{XmKjpU$
zLhnFw2dqbB$DPXBYop?rwLY|x?1j9k6W>_G9T$hvBCg4dG-|8sCn@vN=r@O-o5;Qz
of8&0rKU*(DRhg^U727V_wq1J0ST>f;Rb!PK=n~8LFJ-uY0L&iLtpET3

diff --git a/verarbeitung/__pycache__/input_test.cpython-38.pyc b/verarbeitung/__pycache__/input_test.cpython-38.pyc
deleted file mode 100644
index 35b42ad4c56ad3a65838c0ccc2716b9aea899b5b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3865
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
Oukrw0Vj2IX4EHxT)6pOR

diff --git a/verarbeitung/__pycache__/input_test.cpython-39.pyc b/verarbeitung/__pycache__/input_test.cpython-39.pyc
deleted file mode 100644
index 550ce300289531fa2018d232b0f3bbf9986d3cd0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7228
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

diff --git a/verarbeitung/__pycache__/json_demo.cpython-36.pyc b/verarbeitung/__pycache__/json_demo.cpython-36.pyc
deleted file mode 100644
index 5c3a9cbc487bf90532dafb33e6c3ae84f57f6758..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1128
zcmZuw&2AGh5Vm){KTXpR6%JHfkbpxZ(n!FuLX`?9P*kWyQ6yMx*G{_WX1&;6+M>-V
z+<6Xeh_~PseC5<v;KYp6U&Kb9`DW~$_00F>>DpTB*Uum6tB{c2<l5r_-iD<gg5iYI
zf{Y0Fxc`-mC}%tX@9~gF;C)W_NH0EvlVq4tbnvkAwF6!&ForD1oSuvu@`8N$IQI;N
z*l)b4*Fc3W0>}sCIm7_@4h4XiLm{BRp$Jg8MNACutSl%*5#;H#)%Xia$*1-{M0ls6
zWo0@OqcE+_p;VTgid5NXDr;4y1>9WbHkc?`S9T@KO=@yk>fWklMXrryJkN{`Ol}Hc
z+nFql$`5KImA2igJ}C0cy^!$K2!;LH2nr^(DpY`xUx-q{WQh&asuCsdF-zasbu6C9
zaZ*Yy68wgSYXTm{r8stp??kP`dw+HZhjJzcX_3Qq^Rhk}?Bsj>T_vaD$PBW)ulv<9
z=zkU}RR<zBbvYT_2&P(=2^TZDS)JPUSgKiS+_&{Ad_&&_Lug1_ZneNKe;wMP>JIGv
zpVDpEIj8iQqxA6=rJQaMAjMJ1eTR`kid5eqC>Sc#iw!j}l8LirU{W;^rst~&_Ee0f
z0|uw}@@jg5PcEm2c+|R>Uh>3EZ)t90{fn;goW2JcjRh~dZqqjQiunwMj}Ow;g5~7<
z8i4B+MB9)Bo%_aXD0q-*<2ms%@X)UT*>bk<zOBy#!=^#wHNnE8WFP)SZ^&En9y|y$
z7}@|C*ERrJkMx(0Bgu#pvx&&k<6gMz92sy|vrK}9EOYye*Ru+a+`?UCaI}g-LRF<j
zp}Lsf0AnLrn{i%<e<#v`d{vvo$OH>Mg0q)1iRtp!rs@IYdraL2=d|E%;<DEYqEwZe
WbG$W^ye`CZ9HYh=#w&3*Zv6#e!4Oyg

diff --git a/verarbeitung/__pycache__/json_demo.cpython-38.pyc b/verarbeitung/__pycache__/json_demo.cpython-38.pyc
deleted file mode 100644
index 4daf8e7b50fdad59d6cac52e92a9ab3bd02a395f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1153
zcmZ`(&2AGh5Vm){n@yTVr4oMv2@W6;iS&TP1w{y{ATAI=s{*P5tL@qin{L*N?WMHZ
zN=V_(E3`*WybDKPIaRy?CuST%0}_rr^Uc^h_RKfV*79<T!1(d)Yw|H9<U1OR!vo_1
zOnn0cC!FSFn{bc&pU5`lj0d1S9`XigpVLj!jZR@F8Ke}|@4-OhT!*O(5Qa?25v|EX
z^7_q@XDC>H?Tx(}V)O|hACTt|1LQjt0Adb>fC7gafWkg85q#5}Qm`7}r^l_@KcSSo
zYt`;f1IvnJB5asc=B-qg9f(BP##mOWNOJ3Qnb}~ZWK|w^(##|#lg0H^R)y&<S(azo
zSjMx|*uZ2a7q*?s!l-PgGE!-~QdT>8mb$NEo*1D5$k8?+YFw#YHPG^NQP}1@xQ45g
zr6_opS^C1R;t{djjSI;|j3;ThF<=`NV&6Hw5Op5n{M=Z-H{8-f>EY8PH)8lWGsE?4
zv-eENvDh=iH0$YJIWv0ig-X<p$V^p?hJP7jEsL0oiCilWY<pL#Nn+gTdI?U^mp~92
z(g<d2;n$&UsxHFX|M~61>H@#F&-mr^G69AhuiSSS`J~6d`vP0RKw<OPPy;=wIGq_L
zQ6pixzKUQ?HBqd9!1_HptDoSbKlMXwTl4zGcU=8u;sVB>XN~*x74YZ|h<Vm+$P{wD
z2A&jO!F<3gA$Yp$<tG4KuF%6ZnbITQcr^tLU0Zvuml<ft*gzL^HuXNQ9tDOS2enrR
zCmtm)$zAfCY>-#*y5RK$0~;Xk+6H-6?CHafBg%*mW(|?0``vJsJ+k1gXPJafvdpbB
zUQJ5aat>E9DZ7O2guRvIxmrc{RdhFGWp=Y%{9Ba{_{++~M#dQMChT3PO9UMeVO?&4
nzsnT<Ex3MgH*wyDfY`9g)jH}=B(HLDA4{pRhEX$GiCVt^o+248

diff --git a/verarbeitung/__pycache__/json_demo.cpython-39.pyc b/verarbeitung/__pycache__/json_demo.cpython-39.pyc
deleted file mode 100644
index 3a90cf68398464b1132fc65f1a598bac313a51a3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1256
zcmah}O>fgM7`789&AJcDK;lzKNN}jMO~8Qznh?@JoTv~JLqvrri@lO9O^WSoY-+`!
zoZ*TPhwaFfpW`d1{RK`ub{P~Tgd@Lx{QC2KpT|k(=bHrO?WeD4t3k*&+nFvNI`>f3
zH5g7fEl5nb$NhICrkwErt;a*&K<jh5PTJ8iW|B@uZS%7*w6?CHsuD(%F&WVzxldla
z9C@0e=MTMYZ-_ls36KxuImCc`hXNqxPzV$_)Bp-siH@*lW=zp*z)ugGL;r|U^13;6
zck1ABRc=_B_C*|~wSHB}nC**Hn#Oij%Q7uY(34d?Ff&=MQ=M0(YR?*0<VqXH^Gurt
zc1UW8i8|MXFmqW|YMF1=x{}JY2K8o<XKrP}Q!S*AIHir+_=PBCU{RP32BPF`X6S}l
zw3{c@R#H}6B=!u28v@5sDfXP>3z4U>?)#JMPWP!2Qgt7tg%;h1x$dsz>&uU2wJmmZ
zH_MmR@?g?g-W4*Hn<CeB+3Wt%*;ZAVaM7<;2K#1itCIaxyVKPyPEqG!2n}h3+MN0p
z=p2=2F!pa!S1~$8>e6pgIlVwYizAc!4qFoGA;_MhDCkJ57!xYck%{9;N2jtUblaC9
z#v}wv<UEYc--F-z6TJ5;e-_8hll&#OT>d6z(e8f|wVkIf!J`&nPNJSeq=@w*JelS1
zq}Y=qR43ri04`QvL&9S^V%i&0w87Ad)e6{3)kQ2fHRQ|L*!ysK6l!*ekzsh`QSuDW
ziQyajkm<*pL~Yz4)P2uk%iCBN{BK>^!n*g<>o~y^3_B*UI#O{^<mHY!XlY@UR_j5n
zSF8vO-8)!tYS7}%#MKTb`L#T|1Q=F9tA@GxjMx1^yCH3|<T)4<xjlDN8P8hjS{<iF
zAy3%}R!DIJ=WXSM_?v-+$vqNXC3frUn5)jhOgM<3zKAlgu;hV>tMIp(yn@Cl(A~^=
dr?$0EL^^h()qch6Lfp0gEoDU$%|xxJ`2$NjC*%MC

diff --git a/verarbeitung/__pycache__/unittest.cpython-36.pyc b/verarbeitung/__pycache__/unittest.cpython-36.pyc
deleted file mode 100644
index 245eb7f9be9221daa930d9fa83c77368ba463af7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 646
zcmY*Wy-ve05I#Fj32k9OOuRvbO8Ai&5JHtI#8!}C%3_7u4QZ1U>;yr@*1ic7FTsO&
zW#Sc>xJyA4NB8;8&VBdY`DkOKdHntw?=pZ7SXl!79-2KtP@q@_5$!x<IgdDl3s9aC
z3s6GC*qeKi(7y5~+#F-vm;=L{Yv?pSF&_pU=GymWI@H$6JWh)to&GM4P7lp)BWQ@2
zf`}`o_yQtNdB`H%=G8JgEs`5;%OUEm7wrwSKAPP}c!4pLOtA#>@$=>anM6W-gcv0}
z;UhlB9uy$AKXAU9rn7@j;<{M|haK)(v9;Qi=MPn!8PbSN2&=Qv8<=$rzb?bOX|BUK
zOAE5<DeR}$T@*UjlQJBpUE9T;Dd;|G6PsI|mQ|62|AMMW%Mv@<yMJ~qa(){1v4W+l
zz-BxDo8MdcZGf{0q%7iGOX-?Y=2KN=<hP|H<;xq>LZVvr3N-1=L!ig5YXz*1iIHAO
z%Fdb#eigdrpNx7QE}*CA$2cWoF>M4VC~>6-P0COu7o0A&oza|afDo`Y-x2})20ucc
A$^ZZW

diff --git a/verarbeitung/construct_new_graph/Processing.py b/verarbeitung/construct_new_graph/Processing.py
new file mode 100644
index 0000000..a9a85f9
--- /dev/null
+++ b/verarbeitung/construct_new_graph/Processing.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+"""
+Functions to generate a graph representing citations between multiple ACS/Nature journals
+
+"""
+
+__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
+__email__ = "cis-project2021@zbh.uni-hamburg.de"
+__status__ = "Production"
+#__copyright__ = ""
+#__credits__ = ["", "", "", ""]
+#__license__ = ""
+#__version__ = ""
+#__maintainer__ = ""
+
+
+import sys  
+from pathlib import Path
+from os import error
+sys.path.append("../")
+
+from input.publication import Publication
+from verarbeitung.get_pub_from_input import get_pub
+from .export_to_json import output_to_json
+from .add_citations_rec import add_citations, create_global_lists_cit
+from .add_references_rec import add_references, create_global_lists_ref
+
+
+def initialize_nodes_list(doi_input_list, search_depth_max, search_height_max, test_var):
+    '''
+        :param doi_input_list:      input list of doi from UI
+        :type doi_input_list:       List[String]
+
+        :param search_depth_max:    maximum depth to search for references
+        :type search_depth_max:     int
+
+        :param search_height_max:   maximum height to search for citations
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        adds input dois to nodes and retrieves citations and references for input publications
+    '''
+
+    # saves found citations and references in lists
+    references_pub_obj_list = []
+    citations_pub_obj_list = []
+
+    for pub_doi in doi_input_list: #iterates over every incoming doi
+        pub = get_pub(pub_doi, test_var)
+        if (type(pub) != Publication):
+            print(pub)
+            continue       
+
+        # checks if publication already exists in nodes
+        not_in_nodes = True #boolean value to check if a node already exists in the set of nodes
+        for node in nodes: #iterates over every node in the set of nodes
+            if (pub.doi_url == node.doi_url): #determines that a node with this doi already is in the set
+                not_in_nodes = False #false --> node will not be created
+                break
+        if (not_in_nodes): #there is no node with this doi in the set
+            nodes.append(pub) #appends Publication Object
+            pub.group = "input"
+        else:
+            doi_input_list.remove(pub_doi) #deletes the doi-dublicate from input list
+
+        # inserts references as publication objects into list and 
+        # inserts first depth references into nodes/edges if maximum search depth > 0
+        for reference in create_global_lists_ref(nodes, edges, pub, 0, search_depth_max, test_var):
+            references_pub_obj_list.append(reference)
+
+        # inserts citations as publication objects into list and 
+        # inserts first height citations into nodes if maximum search height > 0
+        for citation in create_global_lists_cit(nodes, edges, pub, 0, search_height_max, test_var):
+            citations_pub_obj_list.append(citation)
+
+    return(references_pub_obj_list, citations_pub_obj_list)
+        
+
+
+def complete_inner_edges(test_var):
+    '''
+        :param test_var:    variable to differenciate between test and url call
+        :type test_var:     boolean
+
+        completes inner edges between nodes of group height and depth
+    '''
+
+    for node in nodes:
+        if (node.group == "depth"):
+            for citation in node.citations:
+                for cit in nodes:
+                    if (citation == cit.doi_url and [citation, node.doi_url] not in edges):
+                        edges.append([citation, node.doi_url])
+        if (node.group == "height"):
+            for reference in node.references:
+                for ref in nodes:
+                    if (reference == ref.doi_url and [node.doi_url, reference] not in edges):
+                        edges.append([node.doi_url,reference])
+
+
+def process_main(doi_input_list, search_height, search_depth, test_var = False):
+    '''
+        :param doi_input_list:  input list of doi from UI
+        :type doi_input_list:   list of strings
+
+        :param search_height:   maximum height to search for citations
+        :type search_height:    int
+
+        :param search_depth:    maximum depth to search for references
+        :type search_depth:     int
+
+        :param test_var:        variable to differenciate between test and url call
+        :type test_var:         boolean
+
+        main function to start graph generation
+    '''
+
+    # ERROR-Handling doi_array = NULL
+    if (len(doi_input_list) == 0):
+        print("Error, no input data")
+
+    # ERROR- if a negative number is entered for height
+    if (search_height < 0):
+        print("Error, search_height of search must be positive")
+
+    # ERROR- if a negative number is entered for depth
+    if (search_depth < 0):
+        print("Error, search_depth of search must be positive")       
+
+    
+    # creates empty lists to save nodes and edges
+    global nodes, edges
+    nodes = [] 
+    edges = [] 
+
+    # initializes nodes/edges from input and gets a list with publication objects for citations and references returned
+    references_obj_list, citations_obj_list = initialize_nodes_list(doi_input_list,search_depth, search_height, test_var)
+
+    # function calls to begin recursive processing up to max depth/height
+    add_citations(nodes, edges, citations_obj_list, 1, search_height, test_var)
+    add_references(nodes, edges, references_obj_list, 1, search_depth, test_var)
+
+    # adds edges between reference group and citation group of known publications
+    complete_inner_edges(test_var)
+
+    # calls a skript to save nodes and edges of graph in .json file
+    output_to_json(nodes,edges, test_var)
+
+    return(nodes,edges)
diff --git a/verarbeitung/construct_new_graph/__init__.py b/verarbeitung/construct_new_graph/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/construct_new_graph/add_citations_rec.py b/verarbeitung/construct_new_graph/add_citations_rec.py
new file mode 100644
index 0000000..6dd815f
--- /dev/null
+++ b/verarbeitung/construct_new_graph/add_citations_rec.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+"""
+Functions to add citations recursivly for multiple ACS/Nature journals
+
+"""
+
+__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
+__email__ = "cis-project2021@zbh.uni-hamburg.de"
+__status__ = "Production"
+#__copyright__ = ""
+#__credits__ = ["", "", "", ""]
+#__license__ = ""
+#__version__ = ""
+#__maintainer__ = ""
+
+
+import sys  
+from pathlib import Path
+from os import error
+sys.path.append("../../")
+
+from input.publication import Publication
+from verarbeitung.get_pub_from_input import get_pub
+
+def create_global_lists_cit(input_nodes, input_edges, pub, search_height, search_height_max, test_var):
+    '''
+        :param input_nodes:         list of nodes from Processing
+        :type input_nodes:          List[Publication]
+
+        :param input_edges:         list of edges from Processing
+        :type input_edges:          List[String, String]
+
+        :param pub:                 Publication which citations will be added
+        :type pub:                  Publication
+
+        :param search_height:       current height to search for citations
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for citations
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        function to create nodes and edges and call create_graph_structure_citations
+    '''
+
+    global nodes, edges
+    nodes = input_nodes
+    edges = input_edges
+
+    return create_graph_structure_citations(pub, search_height, search_height_max, test_var)
+
+
+def create_graph_structure_citations(pub, search_height, search_height_max, test_var):
+    '''
+        :param pub:                 publication which citations will be added
+        :type pub:                  Publication
+
+        :param search_height:       current height to search for citations
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for citations
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        adds a node for every citing publication unknown
+        adds edges to added citations
+    '''
+
+    citations_pub_obj_list = []
+    for citation in pub.citations:
+        not_in_nodes = True
+        for node in nodes: # checks every citation for duplication 
+            if (citation == node.doi_url):
+                not_in_nodes = False
+                break
+        if (not_in_nodes):
+            if (search_height < search_height_max): #checks if its a test and chooses input function accordingly
+                citation_pub_obj = get_pub(citation, test_var)
+                if (type(citation_pub_obj) != Publication):
+                    print(pub)
+                    continue 
+
+                citation_pub_obj.group = "height"
+                nodes.append(citation_pub_obj)
+                edges.append([citation_pub_obj.doi_url,pub.doi_url])
+                citations_pub_obj_list.append(citation_pub_obj)
+
+        # adds only edge if citation already exists         
+        elif [citation,pub.doi_url] not in edges:
+            edges.append([citation,pub.doi_url])   
+    return citations_pub_obj_list
+
+
+def process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var):  
+    '''
+        :param citations_pub_obj_list:  list of publications which citations will be added
+        :type citations_pub_obj_list:   List[Publication]
+
+        :param search_height:       current height to search for citations
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for citations
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        recursive function to implement depth-first-search on citations
+    '''
+
+    # adds next level to nodes/edges
+    for pub in citations_pub_obj_list:
+        new_citation_pub_obj_list = create_graph_structure_citations(pub, search_height, search_height_max, test_var)   
+
+        # If the maximum height has not yet been reached, calls function recursivly with increased height 
+        if (search_height < search_height_max):
+            process_citations_rec(new_citation_pub_obj_list, search_height+1, search_height_max, test_var)
+
+
+def add_citations(input_nodes, input_edges, citations_pub_obj_list, search_height, search_height_max, test_var):
+    '''
+        :param input_nodes:             list of nodes from Processing
+        :type input_nodes:              List[Publication]
+
+        :param input_edges:             list of edges from Processing
+        :type input_edges:              List[String, String]
+
+        :param citations_pub_obj_list:  list of publications which citations will be added
+        :type citations_pub_obj_list:   List[Publication]
+
+        :param search_height:       current height to search for citations
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for citations
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        function to call recursive depth-first-search of citations
+    '''
+    global nodes, edges
+    nodes = input_nodes
+    edges = input_edges
+
+    process_citations_rec(citations_pub_obj_list, search_height, search_height_max, test_var)
+    return(nodes, edges)
\ No newline at end of file
diff --git a/verarbeitung/construct_new_graph/add_references_rec.py b/verarbeitung/construct_new_graph/add_references_rec.py
new file mode 100644
index 0000000..320bc21
--- /dev/null
+++ b/verarbeitung/construct_new_graph/add_references_rec.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+"""
+Functions to add references recursivly for multiple ACS/Nature journals
+
+"""
+
+__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
+__email__ = "cis-project2021@zbh.uni-hamburg.de"
+__status__ = "Production"
+#__copyright__ = ""
+#__credits__ = ["", "", "", ""]
+#__license__ = ""
+#__version__ = ""
+#__maintainer__ = ""
+
+
+import sys  
+from pathlib import Path
+from os import error
+sys.path.append("../../")
+
+from input.publication import Publication
+from verarbeitung.get_pub_from_input import get_pub
+
+def create_global_lists_ref(input_nodes, input_edges, pub, search_depth, search_depth_max, test_var):
+    '''
+        :param input_nodes:         list of nodes from Processing
+        :type input_nodes:          List[Publication]
+
+        :param input_edges:         list of edges from Processing
+        :type input_edges:          List[String, String]
+
+        :param pub:                 Publication which references will be added
+        :type pub:                  Publication
+
+        :param search_height:       current height to search for references
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for references
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        function to create nodes and edges and call create_graph_structure_references 
+    '''
+
+    global nodes, edges
+    nodes = input_nodes
+    edges = input_edges
+
+    return create_graph_structure_references(pub, search_depth, search_depth_max, test_var)
+
+
+def create_graph_structure_references(pub, search_depth, search_depth_max, test_var):
+    '''
+        :param pub:                 publication which references will be added
+        :type pub:                  Publication
+
+        :param search_depth:        current depth to search for references
+        :type search_depth:         int
+
+        :param search_depth_max:    maximum depth to search for references
+        :type search_depth_max:     int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        adds a node for every referenced publication unknown
+        adds edges to added references
+    '''
+
+    references_pub_obj_list = []
+    for reference in pub.references: #iterates over the references of the considered paper
+        not_in_nodes = True #boolean Value to ensure that there will be no dublicates in the set of nodes
+        for node in nodes: #iterates over all nodes in set of nodes #
+            if (reference == node.doi_url): #determines that the node already exists
+                not_in_nodes = False #boolean false --> node will not be created
+                break
+        if (not_in_nodes): #checks that there is no node with this doi 
+            if (search_depth < search_depth_max): #checks that the recursion step is smaller than the limit
+                reference_pub_obj = get_pub(reference, test_var)
+                if (type(reference_pub_obj) != Publication):
+                    print(pub)
+                    continue 
+
+                reference_pub_obj.group = "depth"
+                nodes.append(reference_pub_obj) # appends the object to the set of nodes
+                edges.append([pub.doi_url,reference_pub_obj.doi_url]) #appends the edge to the set of edges
+                references_pub_obj_list.append(reference_pub_obj) #appends the node to the set of references
+
+        # adds edge only if citation already exists           
+        elif [pub.doi_url,reference] not in edges:
+            edges.append([pub.doi_url,reference])  
+    return references_pub_obj_list 
+
+
+def process_references_rec(references_pub_obj_list, search_depth, search_depth_max, test_var):  
+    '''
+        :param references_pub_obj_list: list of publications which references will be added
+        :type references_pub_obj_list:  List[Publication]
+
+        :param search_depth:            current depth to search for references
+        :type search_depth:             int
+
+        :param search_depth_max:        maximum depth to search for references
+        :type search_depth_max:         int
+
+        :param test_var:                variable to differenciate between test and url call
+        :type test_var:                 boolean
+
+        recursive function to implement height-first-search on references
+    '''
+
+    # adds next level to nodes/edges
+    for pub in references_pub_obj_list:
+        new_reference_pub_obj_list = create_graph_structure_references(pub, search_depth, search_depth_max, test_var)    
+
+        # If the maximum height has not yet been reached, calls function recursivly with increased height     
+        if (search_depth < search_depth_max):
+            process_references_rec(new_reference_pub_obj_list, search_depth+1, search_depth_max, test_var)
+
+
+def add_references(input_nodes, input_edges, references_pub_obj_list, search_height, search_height_max, test_var):
+    '''
+        :param input_nodes:             list of nodes from Processing
+        :type input_nodes:              List[Publication]
+
+        :param input_edges:             list of edges from Processing
+        :type input_edges:              List[String, String]
+
+        :param references_pub_obj_list:  list of publications which references will be added
+        :type references_pub_obj_list:   List[Publication]
+
+        :param search_height:       current height to search for references
+        :type search_height_max:    int
+
+        :param search_height_max:   maximum height to search for references
+        :type search_height_max:    int
+
+        :param test_var:            variable to differenciate between test and url call
+        :type test_var:             boolean
+
+        function to call recursive depth-first-search of references
+    '''
+    global nodes, edges
+    nodes = input_nodes
+    edges = input_edges
+
+    process_references_rec(references_pub_obj_list, search_height, search_height_max, test_var)
+    return(nodes, edges)
\ No newline at end of file
diff --git a/verarbeitung/json_demo.py b/verarbeitung/construct_new_graph/export_to_json.py
similarity index 100%
rename from verarbeitung/json_demo.py
rename to verarbeitung/construct_new_graph/export_to_json.py
diff --git a/verarbeitung/dev_files/__init__.py b/verarbeitung/dev_files/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/print_graph_test.py b/verarbeitung/dev_files/print_graph_test.py
similarity index 94%
rename from verarbeitung/print_graph_test.py
rename to verarbeitung/dev_files/print_graph_test.py
index efb62ec..f5e3a03 100644
--- a/verarbeitung/print_graph_test.py
+++ b/verarbeitung/dev_files/print_graph_test.py
@@ -19,9 +19,9 @@ import sys
 #sys.path.insert(1, 'C:\Users\Malte\Git\CiS-Projekt\ci-s-projekt-verarbeitung\input')
 sys.path.append("../")
 from input.interface import InputInterface as Input
-from Processing import process_main
-from import_from_json import input_from_json
-from update_graph import check_graph_updates
+from verarbeitung.construct_new_graph.Processing import process_main
+from verarbeitung.update_graph.import_from_json import input_from_json
+from update_graph.update_graph import check_graph_updates
 
 # a function to print nodes and edges from a graph
 def print_graph(nodes, edges):
diff --git a/verarbeitung/get_pub_from_input.py b/verarbeitung/get_pub_from_input.py
index a8636a4..9cf4b9c 100644
--- a/verarbeitung/get_pub_from_input.py
+++ b/verarbeitung/get_pub_from_input.py
@@ -19,7 +19,7 @@ from pathlib import Path
 sys.path.append("../")
 
 from input.interface import InputInterface as Input
-from input_test import input_test_func
+from verarbeitung.test.input_test import input_test_func
 
 
 def get_pub(pub_doi, test_var):
diff --git a/verarbeitung/json_text.json b/verarbeitung/json_text.json
deleted file mode 100644
index de3ddf5..0000000
--- a/verarbeitung/json_text.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"doi": "https://doi.org/10.1021/acs.jcim.9b00249", "name": "Comparing Molecular Patterns Using the Example of SMARTS: Applications and Filter Collection Analysis", "author": ["Emanuel S. R. Ehmki", "Robert Schmidt", "Farina Ohm", "Matthias Rarey"], "year": "May 24, 2019", "journal": "Journal of Chemical Information and Modeling", "group": "input", "citations": 5}], "links": []}
\ No newline at end of file
diff --git a/verarbeitung/process_main.py b/verarbeitung/process_main.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/Processing_unittest.py b/verarbeitung/test/Processing_unittest.py
similarity index 94%
rename from verarbeitung/Processing_unittest.py
rename to verarbeitung/test/Processing_unittest.py
index def1442..47dd268 100644
--- a/verarbeitung/Processing_unittest.py
+++ b/verarbeitung/test/Processing_unittest.py
@@ -1,119 +1,123 @@
-import unittest
-
-from Processing import process_main
-from import_from_json import input_from_json
-from update_graph import check_graph_updates
-
-class ProcessingTest(unittest.TestCase):
-     maxDiff = None
-
-
-     def testCycle(self):
-         nodes, edges = process_main(['doiz1'],1,1,True)
-         doi_nodes = keep_only_dois(nodes)
-         self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2'])
-         self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']])
-
-         nodes, edges = process_main(['doiz1'],2,2,True)
-         doi_nodes = keep_only_dois(nodes)
-         self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2'])
-         self.assertCountEqual(edges, [['doiz2', 'doiz1'], ['doiz1', 'doiz2']])
-
-    #def testBigCycle(self):
-
-    #def testEmptyHeight(self):
-
-    #def testEmptyDepth(self):
-
-     def testEmptyDepthHeight(self):
-         nodes, edges = process_main(['doi1'],0,0,True)
-         doi_nodes = keep_only_dois(nodes)
-         self.assertCountEqual(doi_nodes,['doi1'])
-         self.assertCountEqual(edges, [])
-
-         nodes, edges = process_main(['doi1', 'doi2'],0,0,True)
-         doi_nodes = keep_only_dois(nodes)
-         self.assertCountEqual(doi_nodes, ['doi1','doi2'])
-         self.assertCountEqual(edges, [['doi1', 'doi2']])
-
-         nodes, edges = process_main(['doi1', 'doi2', 'doi3'],0,0,True)
-         doi_nodes = keep_only_dois(nodes)
-         self.assertCountEqual(doi_nodes, ['doi1','doi2', 'doi3'])
-         self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']])
-
-
-     def testInnerEdges(self):
-        nodes, edges = process_main(['doi_ie1'],1,1,True)
-        doi_nodes = keep_only_dois(nodes)
-        self.assertCountEqual(doi_nodes,['doi_ie1','doi_ie2','doi_ie3'])
-        self.assertCountEqual(edges,[['doi_ie1','doi_ie2'],['doi_ie3','doi_ie1'],['doi_ie3','doi_ie2']])
-     
-     def testRightHeight(self):
-          nodes, edges = process_main(['doi_h01'],1,0,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_h01'])
-          self.assertCountEqual(edges, [])
-
-          nodes, edges = process_main(['doi_h02'],1,0,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_h02','doi_h1'])
-          self.assertCountEqual(edges, [['doi_h1','doi_h02']])
-
-          nodes, edges = process_main(['doi_h02'],2,0,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_h02','doi_h1','doi_h2'])
-          self.assertCountEqual(edges, [['doi_h1','doi_h02'], ['doi_h2','doi_h1']])
-
-     def testRightDepth(self):
-          nodes, edges = process_main(['doi_d01'],0,1,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_d01'])
-          self.assertCountEqual(edges, [])
-
-          nodes, edges = process_main(['doi_d02'],0,1,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_d02','doi_d1'])
-          self.assertCountEqual(edges, [['doi_d02','doi_d1']])
-
-          nodes, edges = process_main(['doi_d02'],0,2,True)
-          doi_nodes = keep_only_dois(nodes)
-          self.assertCountEqual(doi_nodes,['doi_d02','doi_d1','doi_d2'])
-          self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']])
-
-     def test_import_from_json(self):
-          nodes_old, edges_old = process_main(['doi_lg_1_i'],2,2,True)
-          nodes_new, edges_new = input_from_json('test_output.json')
-          self.assertCountEqual(nodes_old,nodes_new)
-          self.assertCountEqual(edges_old, edges_new)
-
-     def test_deleted_input_dois(self):
-          nodes_old_single, edges_old_single = process_main(['doi_lg_1_i'],2,2,True)
-          nodes_old_both, edges_old_both = process_main(['doi_lg_1_i','doi_lg_2_i'],2,2,True)
-          nodes_new_both, edges_new_both = input_from_json('test_output.json')
-          nodes_new_single, edges_new_single = check_graph_updates(['doi_lg_1_i'], nodes_old_both, edges_old_both, True)
-          self.assertCountEqual(nodes_old_single,nodes_new_single)
-          self.assertCountEqual(edges_old_single, edges_new_single)
-
-          nodes_old_single, edges_old_single = process_main(['doi_cg_i'],3,3,True)
-          nodes_old_two, edges_old_two = process_main(['doi_lg_1_i','doi_cg_i'],3,3,True)
-          nodes_old_three, edges_old_three = process_main(['doi_lg_1_i','doi_lg_2_i','doi_cg_i'],3,3,True)
-
-
-
-
-
-def keep_only_dois(nodes):
-     '''
-          :param nodes:  input list of nodes of type Publication
-          :type nodes:   List[Publication]
-
-          gets nodes of type pub and return only their doi
-    '''
-     doi_list = []
-     for node in nodes:
-          doi_list.append(node.doi_url)
-     return doi_list
-
-
-if __name__ == "__main__":
+import unittest
+
+import sys  
+from pathlib import Path
+sys.path.append("../")
+
+from verarbeitung.construct_new_graph.Processing import process_main
+from verarbeitung.update_graph.import_from_json import input_from_json
+from verarbeitung.update_graph.update_graph import check_graph_updates
+
+class ProcessingTest(unittest.TestCase):
+     maxDiff = None
+
+
+     def testCycle(self):
+         nodes, edges = process_main(['doiz1'],1,1,True)
+         doi_nodes = keep_only_dois(nodes)
+         self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2'])
+         self.assertCountEqual(edges, [['doiz1', 'doiz2'], ['doiz2', 'doiz1']])
+
+         nodes, edges = process_main(['doiz1'],2,2,True)
+         doi_nodes = keep_only_dois(nodes)
+         self.assertCountEqual(doi_nodes, ['doiz1', 'doiz2'])
+         self.assertCountEqual(edges, [['doiz2', 'doiz1'], ['doiz1', 'doiz2']])
+
+    #def testBigCycle(self):
+
+    #def testEmptyHeight(self):
+
+    #def testEmptyDepth(self):
+
+     def testEmptyDepthHeight(self):
+         nodes, edges = process_main(['doi1'],0,0,True)
+         doi_nodes = keep_only_dois(nodes)
+         self.assertCountEqual(doi_nodes,['doi1'])
+         self.assertCountEqual(edges, [])
+
+         nodes, edges = process_main(['doi1', 'doi2'],0,0,True)
+         doi_nodes = keep_only_dois(nodes)
+         self.assertCountEqual(doi_nodes, ['doi1','doi2'])
+         self.assertCountEqual(edges, [['doi1', 'doi2']])
+
+         nodes, edges = process_main(['doi1', 'doi2', 'doi3'],0,0,True)
+         doi_nodes = keep_only_dois(nodes)
+         self.assertCountEqual(doi_nodes, ['doi1','doi2', 'doi3'])
+         self.assertCountEqual(edges, [['doi3', 'doi1'], ['doi1', 'doi2']])
+
+
+     def testInnerEdges(self):
+        nodes, edges = process_main(['doi_ie1'],1,1,True)
+        doi_nodes = keep_only_dois(nodes)
+        self.assertCountEqual(doi_nodes,['doi_ie1','doi_ie2','doi_ie3'])
+        self.assertCountEqual(edges,[['doi_ie1','doi_ie2'],['doi_ie3','doi_ie1'],['doi_ie3','doi_ie2']])
+     
+     def testRightHeight(self):
+          nodes, edges = process_main(['doi_h01'],1,0,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_h01'])
+          self.assertCountEqual(edges, [])
+
+          nodes, edges = process_main(['doi_h02'],1,0,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_h02','doi_h1'])
+          self.assertCountEqual(edges, [['doi_h1','doi_h02']])
+
+          nodes, edges = process_main(['doi_h02'],2,0,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_h02','doi_h1','doi_h2'])
+          self.assertCountEqual(edges, [['doi_h1','doi_h02'], ['doi_h2','doi_h1']])
+
+     def testRightDepth(self):
+          nodes, edges = process_main(['doi_d01'],0,1,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_d01'])
+          self.assertCountEqual(edges, [])
+
+          nodes, edges = process_main(['doi_d02'],0,1,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_d02','doi_d1'])
+          self.assertCountEqual(edges, [['doi_d02','doi_d1']])
+
+          nodes, edges = process_main(['doi_d02'],0,2,True)
+          doi_nodes = keep_only_dois(nodes)
+          self.assertCountEqual(doi_nodes,['doi_d02','doi_d1','doi_d2'])
+          self.assertCountEqual(edges, [['doi_d02','doi_d1'], ['doi_d1','doi_d2']])
+
+     def test_import_from_json(self):
+          nodes_old, edges_old = process_main(['doi_lg_1_i'],2,2,True)
+          nodes_new, edges_new = input_from_json('test_output.json')
+          self.assertCountEqual(nodes_old,nodes_new)
+          self.assertCountEqual(edges_old, edges_new)
+
+     def test_deleted_input_dois(self):
+          nodes_old_single, edges_old_single = process_main(['doi_lg_1_i'],2,2,True)
+          nodes_old_both, edges_old_both = process_main(['doi_lg_1_i','doi_lg_2_i'],2,2,True)
+          nodes_new_both, edges_new_both = input_from_json('test_output.json')
+          nodes_new_single, edges_new_single = check_graph_updates(['doi_lg_1_i'], nodes_old_both, edges_old_both, True)
+          self.assertCountEqual(nodes_old_single,nodes_new_single)
+          self.assertCountEqual(edges_old_single, edges_new_single)
+
+          nodes_old_single, edges_old_single = process_main(['doi_cg_i'],3,3,True)
+          nodes_old_two, edges_old_two = process_main(['doi_lg_1_i','doi_cg_i'],3,3,True)
+          nodes_old_three, edges_old_three = process_main(['doi_lg_1_i','doi_lg_2_i','doi_cg_i'],3,3,True)
+
+
+
+
+
+def keep_only_dois(nodes):
+     '''
+          :param nodes:  input list of nodes of type Publication
+          :type nodes:   List[Publication]
+
+          gets nodes of type pub and return only their doi
+    '''
+     doi_list = []
+     for node in nodes:
+          doi_list.append(node.doi_url)
+     return doi_list
+
+
+if __name__ == "__main__":
     unittest.main()
\ No newline at end of file
diff --git a/verarbeitung/test/__init__.py b/verarbeitung/test/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/input_test.py b/verarbeitung/test/input_test.py
similarity index 98%
rename from verarbeitung/input_test.py
rename to verarbeitung/test/input_test.py
index 4c9bf31..928c8b4 100644
--- a/verarbeitung/input_test.py
+++ b/verarbeitung/test/input_test.py
@@ -1,116 +1,116 @@
-import sys
-sys.path.append("../")
-
-from input.publication import Publication, Citation
-
-
-def input_test_func(pub_doi):
-    '''
-        :param pub_doi: pub doi to find publication in list_of_arrays
-        :type pub_doi:  String
-
-        returns the publication class for given doi
-    '''
-
-    for array in list_of_arrays:
-        if pub_doi == array[0]:
-            pub = Publication(array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7])
-            return pub
-
-
-def cit(list_doi):
-    '''
-        :param list_doi list of citation dois to get their Citation Class 
-        :type list_doi: List[String]
-
-        returns a list of citations objects for given doi list
-    '''
-
-    cits = []
-    for doi_url in list_doi:
-        for array in list_of_arrays:
-            if doi_url == array[0]:
-                cits.append(Citation(array[0], array[1], array[2], array[3], array[4]))
-    return cits
-
-def ref(list_doi):
-    '''
-        :param list_doi list of reference dois to get their Reference Class 
-        :type list_doi: List[String]
-
-        returns a list of reference objects for given doi list
-    '''
-
-    refs = []
-    for doi_url in list_doi:
-        for array in list_of_arrays:
-            if doi_url == array[0]:
-                refs.append(Citation(array[0], array[1], array[2], array[3], array[4]))
-    return refs
-
-
-
-beispiel1 = ['doi1', 'title1', ['contributor1'], 'journal1', 'date1', ['subject1'], ['doi2'], ['doi3']]
-beispiel2 = ['doi2', 'title2', ['contributor2'], 'journal2', 'date2', ['subject2'], [], ['doi1']]
-beispiel3 = ['doi3', 'title3', ['contributor3'], 'journal3', 'date3', ['subject3'], ['doi1'], []]
-
-zyklus1 = ['doiz1', 'titlez1', ['contributorz1.1', 'contributorz1.2'], 'journalz1', 'datez1', ['subjectz1'], ['doiz2'], ['doiz2']]
-zyklus2 = ['doiz2', 'titlez2', ['contributorz2.1', 'contributorz2.2'], 'journalz2', 'datez2', ['subjectz1'], ['doiz1'], ['doiz1']]
-
-inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2'], 'journal_ie1', 'date_ie1', ['subject_ie1'], ['doi_ie2'], ['doi_ie3']]
-inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', ['subject_ie2'], [], ['doi_ie1','doi_ie3']]
-inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['subject_ie3'], ['doi_ie1','doi_ie2'], []]
-
-right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', ['subject_h01'], [], []]
-right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', ['subject_h02'], [], ['doi_h1']]
-right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', ['subject_h1'], [], ['doi_h2']]
-right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', ['subject_h2'], [], ['doi_h3']]
-right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', ['subject_h3'], [], []]
-
-right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', ['subject_d01'], [], []]
-right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['subject_d01'], ['doi_d1'], []]
-right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['subject_d1'], ['doi_d2'], []]
-right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['subject_d2'], ['doi_d3'], []]
-right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', ['subject_d3'], [], []]
-
-large_graph_1_h21 = ['doi_lg_1_h21', 'title_lg_1_h21', ['contributor_lg_1_h21'], 'journal_lg_1_h21', 'date_lg_1_h21', ['subject_lg_1_h21'], ['doi_lg_1_h11'], []]
-large_graph_1_h22 = ['doi_lg_1_h22', 'title_lg_1_h22', ['contributor_lg_1_h22'], 'journal_lg_1_h22', 'date_lg_1_h22', ['subject_lg_1_h22'], ['doi_lg_1_h11','doi_lg_1_h12'], []]
-large_graph_1_h23 = ['doi_lg_1_h23', 'title_lg_1_h23', ['contributor_lg_1_h23'], 'journal_lg_1_h23', 'date_lg_1_h23', ['subject_lg_1_h23'], ['doi_lg_1_h12','doi_cg_i'], []]
-large_graph_1_h11 = ['doi_lg_1_h11', 'title_lg_1_h11', ['contributor_lg_1_h11'], 'journal_lg_1_h11', 'date_lg_1_h11', ['subject_lg_1_h11'], ['doi_lg_1_h12','doi_lg_1_i'], ['doi_lg_1_h21','doi_lg_1_h22']]
-large_graph_1_h12 = ['doi_lg_1_h12', 'title_lg_1_h12', ['contributor_lg_1_h12'], 'journal_lg_1_h12', 'date_lg_1_h12', ['subject_lg_1_h12'], ['doi_lg_1_i','doi_lg_1_d12'], ['doi_lg_1_h22','doi_lg_1_h23']]
-large_graph_1_i =   ['doi_lg_1_i'  , 'title_lg_1_i'  , ['contributor_lg_1_i']  , 'journal_lg_1_i'  , 'date_lg_1_i'  , ['subject_lg_1_i']  , ['doi_lg_1_d11','doi_lg_1_d12'], ['doi_lg_1_h11','doi_lg_1_h12']]
-large_graph_1_d11 = ['doi_lg_1_d11', 'title_lg_1_d11', ['contributor_lg_1_d11'], 'journal_lg_1_d11', 'date_lg_1_d11', ['subject_lg_1_d11'], ['doi_lg_1_d21','doi_lg_1_d22'], ['doi_lg_1_i']]
-large_graph_1_d12 = ['doi_lg_1_d12', 'title_lg_1_d12', ['contributor_lg_1_d12'], 'journal_lg_1_d12', 'date_lg_1_d12', ['subject_lg_1_d12'], ['doi_lg_1_d23'], ['doi_lg_1_h12','doi_lg_1_i']]
-large_graph_1_d21 = ['doi_lg_1_d21', 'title_lg_1_d21', ['contributor_lg_1_d21'], 'journal_lg_1_d21', 'date_lg_1_d21', ['subject_lg_1_d21'], ['doi_lg_1_d22'], ['doi_lg_1_d11','doi_lg_1_d22']]
-large_graph_1_d22 = ['doi_lg_1_d22', 'title_lg_1_d22', ['contributor_lg_1_d22'], 'journal_lg_1_d22', 'date_lg_1_d22', ['subject_lg_1_d22'], ['doi_lg_1_d21'], ['doi_lg_1_d11','doi_lg_1_d21']]
-large_graph_1_d23 = ['doi_lg_1_d23', 'title_lg_1_d23', ['contributor_lg_1_d23'], 'journal_lg_1_d23', 'date_lg_1_d23', ['subject_lg_1_d23'], [], ['doi_lg_1_d12','doi_cg_d11']]
-
-large_graph_2_h21 = ['doi_lg_2_h21', 'title_lg_2_h21', ['contributor_lg_2_h21'], 'journal_lg_2_h21', 'date_lg_2_h21', ['subject_lg_2_h21'], ['doi_lg_2_h11'], []]
-large_graph_2_h22 = ['doi_lg_2_h22', 'title_lg_2_h22', ['contributor_lg_2_h22'], 'journal_lg_2_h22', 'date_lg_2_h22', ['subject_lg_2_h22'], ['doi_lg_2_h11'], []]
-large_graph_2_h23 = ['doi_lg_2_h23', 'title_lg_2_h23', ['contributor_lg_2_h23'], 'journal_lg_2_h23', 'date_lg_2_h23', ['subject_lg_2_h23'], ['doi_lg_2_h12','doi_lg_2_h24'], ['doi_lg_2_h24']]
-large_graph_2_h24 = ['doi_lg_2_h24', 'title_lg_2_h24', ['contributor_lg_2_h24'], 'journal_lg_2_h24', 'date_lg_2_h24', ['subject_lg_2_h24'], ['doi_lg_2_h12','doi_lg_2_h23','doi_lg_2_d12'], ['doi_lg_2_h23']]
-large_graph_2_h11 = ['doi_lg_2_h11', 'title_lg_2_h11', ['contributor_lg_2_h11'], 'journal_lg_2_h11', 'date_lg_2_h11', ['subject_lg_2_h11'], ['doi_lg_2_i','doi_cg_i'], ['doi_lg_2_h21','doi_lg_2_h22']]
-large_graph_2_h12 = ['doi_lg_2_h12', 'title_lg_2_h12', ['contributor_lg_2_h12'], 'journal_lg_2_h12', 'date_lg_2_h12', ['subject_lg_2_h12'], ['doi_lg_2_i'], ['doi_lg_2_h23','doi_lg_2_h24']]
-large_graph_2_i =   ['doi_lg_2_i'  , 'title_lg_2_i'  , ['contributor_lg_2_i']  , 'journal_lg_2_i'  , 'date_lg_2_i'  , ['subject_lg_2_i']  , ['doi_lg_2_d11','doi_lg_2_d12'], ['doi_lg_2_h11','doi_lg_2_h12','doi_cg_i']]
-large_graph_2_d11 = ['doi_lg_2_d11', 'title_lg_2_d11', ['contributor_lg_2_d11'], 'journal_lg_2_d11', 'date_lg_2_d11', ['subject_lg_2_d11'], [], ['doi_lg_2_i']]
-large_graph_2_d12 = ['doi_lg_2_d12', 'title_lg_2_d12', ['contributor_lg_2_d12'], 'journal_lg_2_d12', 'date_lg_2_d12', ['subject_lg_2_d12'], ['doi_lg_2_d21','doi_lg_2_d22'], ['doi_lg_2_h24','doi_lg_2_i']]
-large_graph_2_d21 = ['doi_lg_2_d21', 'title_lg_2_d21', ['contributor_lg_2_d21'], 'journal_lg_2_d21', 'date_lg_2_d21', ['subject_lg_2_d21'], [], ['doi_lg_2_d12']]
-large_graph_2_d22 = ['doi_lg_2_d22', 'title_lg_2_d22', ['contributor_lg_2_d22'], 'journal_lg_2_d22', 'date_lg_2_d22', ['subject_lg_2_d22'], [], ['doi_lg_2_d12']]
-large_graph_2_d23 = ['doi_lg_2_d23', 'title_lg_2_d23', ['contributor_lg_2_d23'], 'journal_lg_2_d23', 'date_lg_2_d23', ['subject_lg_2_d23'], [], ['doi_lg_2_d12']]
-
-crossed_graph_h21 = ['doi_cg_h21', 'title_cg_h21', ['contributor_cg_h21'], 'journal_cg_h21', 'date_cg_h21', ['subject_cg_h21'], ['doi_cg_h11'], []]
-crossed_graph_h22 = ['doi_cg_h22', 'title_cg_h22', ['contributor_cg_h22'], 'journal_cg_h22', 'date_cg_h22', ['subject_cg_h22'], ['doi_cg_h11'], []]
-crossed_graph_h11 = ['doi_cg_h11', 'title_cg_h11', ['contributor_cg_h11'], 'journal_cg_h11', 'date_cg_h11', ['subject_cg_h11'], ['doi_cg_i'], ['doi_cg_h21','doi_cg_h22']]
-crossed_graph_i =   ['doi_cg_i', 'title_cg_i', ['contributor_cg_i'], 'journal_cg_i', 'date_cg_i', ['subject_cg_i'], ['doi_lg_2_i','doi_cg_d11','doi_cg_d12'], ['doi_lg_1_h23','doi_cg_h11','doi_lg_2_h11']]
-crossed_graph_d11 = ['doi_cg_d11', 'title_cg_d11', ['contributor_cg_d11'], 'journal_cg_d11', 'date_cg_d11', ['subject_cg_d11'], ['doi_lg_1_d23','doi_cg_d21'], ['doi_cg_i']]
-crossed_graph_d12 = ['doi_cg_d12', 'title_cg_d12', ['contributor_cg_d12'], 'journal_cg_d12', 'date_cg_d12', ['subject_cg_d12'], ['doi_cg_d22'], ['doi_cg_i']]
-crossed_graph_d21 = ['doi_cg_d21', 'title_cg_d21', ['contributor_cg_d21'], 'journal_cg_d21', 'date_cg_d21', ['subject_cg_d21'], [], ['doi_cg_d11']]
-crossed_graph_d22 = ['doi_cg_d22', 'title_cg_d22', ['contributor_cg_d22'], 'journal_cg_d22', 'date_cg_d22', ['subject_cg_d22'], [], ['doi_cg_d12']]
-
-
-list_of_arrays =    [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3, 
-                    right_height01, right_height02, right_height1, right_height2, right_height3, right_depth01, right_depth02, right_depth1, right_depth2, right_depth3,
-                    large_graph_1_h21, large_graph_1_h22, large_graph_1_h23, large_graph_1_h11, large_graph_1_h12, large_graph_1_i, large_graph_1_d11, large_graph_1_d12,
-                    large_graph_1_d21, large_graph_1_d22, large_graph_1_d23, large_graph_2_h21, large_graph_2_h22, large_graph_2_h23, large_graph_2_h24, large_graph_2_h11, large_graph_2_h12, 
-                    large_graph_2_i, large_graph_2_d11, large_graph_2_d12, large_graph_2_d21, large_graph_2_d22, large_graph_2_d23, crossed_graph_h21, crossed_graph_h22, crossed_graph_h11,
-                    crossed_graph_i, crossed_graph_d11, crossed_graph_d12, crossed_graph_d21, crossed_graph_d22]
+import sys
+sys.path.append("../")
+
+from input.publication import Publication, Citation
+
+
+def input_test_func(pub_doi):
+    '''
+        :param pub_doi: pub doi to find publication in list_of_arrays
+        :type pub_doi:  String
+
+        returns the publication class for given doi
+    '''
+
+    for array in list_of_arrays:
+        if pub_doi == array[0]:
+            pub = Publication(array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7])
+            return pub
+
+
+def cit(list_doi):
+    '''
+        :param list_doi list of citation dois to get their Citation Class 
+        :type list_doi: List[String]
+
+        returns a list of citations objects for given doi list
+    '''
+
+    cits = []
+    for doi_url in list_doi:
+        for array in list_of_arrays:
+            if doi_url == array[0]:
+                cits.append(Citation(array[0], array[1], array[2], array[3], array[4]))
+    return cits
+
+def ref(list_doi):
+    '''
+        :param list_doi list of reference dois to get their Reference Class 
+        :type list_doi: List[String]
+
+        returns a list of reference objects for given doi list
+    '''
+
+    refs = []
+    for doi_url in list_doi:
+        for array in list_of_arrays:
+            if doi_url == array[0]:
+                refs.append(Citation(array[0], array[1], array[2], array[3], array[4]))
+    return refs
+
+
+
+beispiel1 = ['doi1', 'title1', ['contributor1'], 'journal1', 'date1', ['subject1'], ['doi2'], ['doi3']]
+beispiel2 = ['doi2', 'title2', ['contributor2'], 'journal2', 'date2', ['subject2'], [], ['doi1']]
+beispiel3 = ['doi3', 'title3', ['contributor3'], 'journal3', 'date3', ['subject3'], ['doi1'], []]
+
+zyklus1 = ['doiz1', 'titlez1', ['contributorz1.1', 'contributorz1.2'], 'journalz1', 'datez1', ['subjectz1'], ['doiz2'], ['doiz2']]
+zyklus2 = ['doiz2', 'titlez2', ['contributorz2.1', 'contributorz2.2'], 'journalz2', 'datez2', ['subjectz1'], ['doiz1'], ['doiz1']]
+
+inner_edge1 = ['doi_ie1', 'title_ie1', ['contributor_ie1.1', 'contributor_ie1.2'], 'journal_ie1', 'date_ie1', ['subject_ie1'], ['doi_ie2'], ['doi_ie3']]
+inner_edge2 = ['doi_ie2', 'title_ie2', ['contributor_ie2.1', 'contributor_ie2.2'], 'journal_ie2', 'date_ie2', ['subject_ie2'], [], ['doi_ie1','doi_ie3']]
+inner_edge3 = ['doi_ie3', 'titlez_ie3', ['contributor_ie3.1', 'contributor_ie3.2'], 'journal_ie3', 'date_ie3', ['subject_ie3'], ['doi_ie1','doi_ie2'], []]
+
+right_height01 = ['doi_h01', 'title_h01', ['contributor_h01'], 'journal_h01', 'date_h01', ['subject_h01'], [], []]
+right_height02 = ['doi_h02', 'title_h02', ['contributor_h02'], 'journal_h02', 'date_h02', ['subject_h02'], [], ['doi_h1']]
+right_height1 = ['doi_h1', 'title_h1', ['contributor_h1'], 'journal_h1', 'date_h1', ['subject_h1'], [], ['doi_h2']]
+right_height2 = ['doi_h2', 'title_h2', ['contributor_h2'], 'journal_h2', 'date_h2', ['subject_h2'], [], ['doi_h3']]
+right_height3 = ['doi_h3', 'title_h3', ['contributor_h3'], 'journal_h3', 'date_h3', ['subject_h3'], [], []]
+
+right_depth01 = ['doi_d01', 'title_d01', ['contributor_d01'], 'journal_d01', 'date_d01', ['subject_d01'], [], []]
+right_depth02 = ['doi_d02', 'title_d02', ['contributor_d02'], 'journal_d02', 'date_d02', ['subject_d01'], ['doi_d1'], []]
+right_depth1 = ['doi_d1', 'title_d1', ['contributor_d1'], 'journal_d1', 'date_d1', ['subject_d1'], ['doi_d2'], []]
+right_depth2 = ['doi_d2', 'title_d2', ['contributor_d2'], 'journal_d2', 'date_d2', ['subject_d2'], ['doi_d3'], []]
+right_depth3 = ['doi_d3', 'title_d3', ['contributor_d3'], 'journal_d3', 'date_d3', ['subject_d3'], [], []]
+
+large_graph_1_h21 = ['doi_lg_1_h21', 'title_lg_1_h21', ['contributor_lg_1_h21'], 'journal_lg_1_h21', 'date_lg_1_h21', ['subject_lg_1_h21'], ['doi_lg_1_h11'], []]
+large_graph_1_h22 = ['doi_lg_1_h22', 'title_lg_1_h22', ['contributor_lg_1_h22'], 'journal_lg_1_h22', 'date_lg_1_h22', ['subject_lg_1_h22'], ['doi_lg_1_h11','doi_lg_1_h12'], []]
+large_graph_1_h23 = ['doi_lg_1_h23', 'title_lg_1_h23', ['contributor_lg_1_h23'], 'journal_lg_1_h23', 'date_lg_1_h23', ['subject_lg_1_h23'], ['doi_lg_1_h12','doi_cg_i'], []]
+large_graph_1_h11 = ['doi_lg_1_h11', 'title_lg_1_h11', ['contributor_lg_1_h11'], 'journal_lg_1_h11', 'date_lg_1_h11', ['subject_lg_1_h11'], ['doi_lg_1_h12','doi_lg_1_i'], ['doi_lg_1_h21','doi_lg_1_h22']]
+large_graph_1_h12 = ['doi_lg_1_h12', 'title_lg_1_h12', ['contributor_lg_1_h12'], 'journal_lg_1_h12', 'date_lg_1_h12', ['subject_lg_1_h12'], ['doi_lg_1_i','doi_lg_1_d12'], ['doi_lg_1_h22','doi_lg_1_h23']]
+large_graph_1_i =   ['doi_lg_1_i'  , 'title_lg_1_i'  , ['contributor_lg_1_i']  , 'journal_lg_1_i'  , 'date_lg_1_i'  , ['subject_lg_1_i']  , ['doi_lg_1_d11','doi_lg_1_d12'], ['doi_lg_1_h11','doi_lg_1_h12']]
+large_graph_1_d11 = ['doi_lg_1_d11', 'title_lg_1_d11', ['contributor_lg_1_d11'], 'journal_lg_1_d11', 'date_lg_1_d11', ['subject_lg_1_d11'], ['doi_lg_1_d21','doi_lg_1_d22'], ['doi_lg_1_i']]
+large_graph_1_d12 = ['doi_lg_1_d12', 'title_lg_1_d12', ['contributor_lg_1_d12'], 'journal_lg_1_d12', 'date_lg_1_d12', ['subject_lg_1_d12'], ['doi_lg_1_d23'], ['doi_lg_1_h12','doi_lg_1_i']]
+large_graph_1_d21 = ['doi_lg_1_d21', 'title_lg_1_d21', ['contributor_lg_1_d21'], 'journal_lg_1_d21', 'date_lg_1_d21', ['subject_lg_1_d21'], ['doi_lg_1_d22'], ['doi_lg_1_d11','doi_lg_1_d22']]
+large_graph_1_d22 = ['doi_lg_1_d22', 'title_lg_1_d22', ['contributor_lg_1_d22'], 'journal_lg_1_d22', 'date_lg_1_d22', ['subject_lg_1_d22'], ['doi_lg_1_d21'], ['doi_lg_1_d11','doi_lg_1_d21']]
+large_graph_1_d23 = ['doi_lg_1_d23', 'title_lg_1_d23', ['contributor_lg_1_d23'], 'journal_lg_1_d23', 'date_lg_1_d23', ['subject_lg_1_d23'], [], ['doi_lg_1_d12','doi_cg_d11']]
+
+large_graph_2_h21 = ['doi_lg_2_h21', 'title_lg_2_h21', ['contributor_lg_2_h21'], 'journal_lg_2_h21', 'date_lg_2_h21', ['subject_lg_2_h21'], ['doi_lg_2_h11'], []]
+large_graph_2_h22 = ['doi_lg_2_h22', 'title_lg_2_h22', ['contributor_lg_2_h22'], 'journal_lg_2_h22', 'date_lg_2_h22', ['subject_lg_2_h22'], ['doi_lg_2_h11'], []]
+large_graph_2_h23 = ['doi_lg_2_h23', 'title_lg_2_h23', ['contributor_lg_2_h23'], 'journal_lg_2_h23', 'date_lg_2_h23', ['subject_lg_2_h23'], ['doi_lg_2_h12','doi_lg_2_h24'], ['doi_lg_2_h24']]
+large_graph_2_h24 = ['doi_lg_2_h24', 'title_lg_2_h24', ['contributor_lg_2_h24'], 'journal_lg_2_h24', 'date_lg_2_h24', ['subject_lg_2_h24'], ['doi_lg_2_h12','doi_lg_2_h23','doi_lg_2_d12'], ['doi_lg_2_h23']]
+large_graph_2_h11 = ['doi_lg_2_h11', 'title_lg_2_h11', ['contributor_lg_2_h11'], 'journal_lg_2_h11', 'date_lg_2_h11', ['subject_lg_2_h11'], ['doi_lg_2_i','doi_cg_i'], ['doi_lg_2_h21','doi_lg_2_h22']]
+large_graph_2_h12 = ['doi_lg_2_h12', 'title_lg_2_h12', ['contributor_lg_2_h12'], 'journal_lg_2_h12', 'date_lg_2_h12', ['subject_lg_2_h12'], ['doi_lg_2_i'], ['doi_lg_2_h23','doi_lg_2_h24']]
+large_graph_2_i =   ['doi_lg_2_i'  , 'title_lg_2_i'  , ['contributor_lg_2_i']  , 'journal_lg_2_i'  , 'date_lg_2_i'  , ['subject_lg_2_i']  , ['doi_lg_2_d11','doi_lg_2_d12'], ['doi_lg_2_h11','doi_lg_2_h12','doi_cg_i']]
+large_graph_2_d11 = ['doi_lg_2_d11', 'title_lg_2_d11', ['contributor_lg_2_d11'], 'journal_lg_2_d11', 'date_lg_2_d11', ['subject_lg_2_d11'], [], ['doi_lg_2_i']]
+large_graph_2_d12 = ['doi_lg_2_d12', 'title_lg_2_d12', ['contributor_lg_2_d12'], 'journal_lg_2_d12', 'date_lg_2_d12', ['subject_lg_2_d12'], ['doi_lg_2_d21','doi_lg_2_d22'], ['doi_lg_2_h24','doi_lg_2_i']]
+large_graph_2_d21 = ['doi_lg_2_d21', 'title_lg_2_d21', ['contributor_lg_2_d21'], 'journal_lg_2_d21', 'date_lg_2_d21', ['subject_lg_2_d21'], [], ['doi_lg_2_d12']]
+large_graph_2_d22 = ['doi_lg_2_d22', 'title_lg_2_d22', ['contributor_lg_2_d22'], 'journal_lg_2_d22', 'date_lg_2_d22', ['subject_lg_2_d22'], [], ['doi_lg_2_d12']]
+large_graph_2_d23 = ['doi_lg_2_d23', 'title_lg_2_d23', ['contributor_lg_2_d23'], 'journal_lg_2_d23', 'date_lg_2_d23', ['subject_lg_2_d23'], [], ['doi_lg_2_d12']]
+
+crossed_graph_h21 = ['doi_cg_h21', 'title_cg_h21', ['contributor_cg_h21'], 'journal_cg_h21', 'date_cg_h21', ['subject_cg_h21'], ['doi_cg_h11'], []]
+crossed_graph_h22 = ['doi_cg_h22', 'title_cg_h22', ['contributor_cg_h22'], 'journal_cg_h22', 'date_cg_h22', ['subject_cg_h22'], ['doi_cg_h11'], []]
+crossed_graph_h11 = ['doi_cg_h11', 'title_cg_h11', ['contributor_cg_h11'], 'journal_cg_h11', 'date_cg_h11', ['subject_cg_h11'], ['doi_cg_i'], ['doi_cg_h21','doi_cg_h22']]
+crossed_graph_i =   ['doi_cg_i', 'title_cg_i', ['contributor_cg_i'], 'journal_cg_i', 'date_cg_i', ['subject_cg_i'], ['doi_lg_2_i','doi_cg_d11','doi_cg_d12'], ['doi_lg_1_h23','doi_cg_h11','doi_lg_2_h11']]
+crossed_graph_d11 = ['doi_cg_d11', 'title_cg_d11', ['contributor_cg_d11'], 'journal_cg_d11', 'date_cg_d11', ['subject_cg_d11'], ['doi_lg_1_d23','doi_cg_d21'], ['doi_cg_i']]
+crossed_graph_d12 = ['doi_cg_d12', 'title_cg_d12', ['contributor_cg_d12'], 'journal_cg_d12', 'date_cg_d12', ['subject_cg_d12'], ['doi_cg_d22'], ['doi_cg_i']]
+crossed_graph_d21 = ['doi_cg_d21', 'title_cg_d21', ['contributor_cg_d21'], 'journal_cg_d21', 'date_cg_d21', ['subject_cg_d21'], [], ['doi_cg_d11']]
+crossed_graph_d22 = ['doi_cg_d22', 'title_cg_d22', ['contributor_cg_d22'], 'journal_cg_d22', 'date_cg_d22', ['subject_cg_d22'], [], ['doi_cg_d12']]
+
+
+list_of_arrays =    [beispiel1, beispiel2, beispiel3, zyklus1, zyklus2, inner_edge1, inner_edge2, inner_edge3, 
+                    right_height01, right_height02, right_height1, right_height2, right_height3, right_depth01, right_depth02, right_depth1, right_depth2, right_depth3,
+                    large_graph_1_h21, large_graph_1_h22, large_graph_1_h23, large_graph_1_h11, large_graph_1_h12, large_graph_1_i, large_graph_1_d11, large_graph_1_d12,
+                    large_graph_1_d21, large_graph_1_d22, large_graph_1_d23, large_graph_2_h21, large_graph_2_h22, large_graph_2_h23, large_graph_2_h24, large_graph_2_h11, large_graph_2_h12, 
+                    large_graph_2_i, large_graph_2_d11, large_graph_2_d12, large_graph_2_d21, large_graph_2_d22, large_graph_2_d23, crossed_graph_h21, crossed_graph_h22, crossed_graph_h11,
+                    crossed_graph_i, crossed_graph_d11, crossed_graph_d12, crossed_graph_d21, crossed_graph_d22]
diff --git a/verarbeitung/test_output.json b/verarbeitung/test_output.json
index b013fbf..8a15eeb 100644
--- a/verarbeitung/test_output.json
+++ b/verarbeitung/test_output.json
@@ -1 +1 @@
-{"nodes": [{"doi": "doi_lg_1_i", "name": "title_lg_1_i", "author": ["contributor_lg_1_i"], "year": "date_lg_1_i", "journal": "journal_lg_1_i", "group": "input", "citations": 2}, {"doi": "doi_lg_1_d11", "name": "title_lg_1_d11", "author": ["contributor_lg_1_d11"], "year": "date_lg_1_d11", "journal": "journal_lg_1_d11", "group": "depth", "citations": 1}, {"doi": "doi_lg_1_d12", "name": "title_lg_1_d12", "author": ["contributor_lg_1_d12"], "year": "date_lg_1_d12", "journal": "journal_lg_1_d12", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_h11", "name": "title_lg_1_h11", "author": ["contributor_lg_1_h11"], "year": "date_lg_1_h11", "journal": "journal_lg_1_h11", "group": "height", "citations": 2}, {"doi": "doi_lg_1_h12", "name": "title_lg_1_h12", "author": ["contributor_lg_1_h12"], "year": "date_lg_1_h12", "journal": "journal_lg_1_h12", "group": "height", "citations": 2}, {"doi": "doi_lg_1_h21", "name": "title_lg_1_h21", "author": ["contributor_lg_1_h21"], "year": "date_lg_1_h21", "journal": "journal_lg_1_h21", "group": "height", "citations": 0}, {"doi": "doi_lg_1_h22", "name": "title_lg_1_h22", "author": ["contributor_lg_1_h22"], "year": "date_lg_1_h22", "journal": "journal_lg_1_h22", "group": "height", "citations": 0}, {"doi": "doi_lg_1_h23", "name": "title_lg_1_h23", "author": ["contributor_lg_1_h23"], "year": "date_lg_1_h23", "journal": "journal_lg_1_h23", "group": "height", "citations": 0}, {"doi": "doi_lg_1_d21", "name": "title_lg_1_d21", "author": ["contributor_lg_1_d21"], "year": "date_lg_1_d21", "journal": "journal_lg_1_d21", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_d22", "name": "title_lg_1_d22", "author": ["contributor_lg_1_d22"], "year": "date_lg_1_d22", "journal": "journal_lg_1_d22", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_d23", "name": "title_lg_1_d23", "author": ["contributor_lg_1_d23"], "year": "date_lg_1_d23", "journal": "journal_lg_1_d23", "group": "depth", "citations": 1}], "links": [{"source": "doi_lg_1_i", "target": "doi_lg_1_d11"}, {"source": "doi_lg_1_i", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h21", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_h23", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d21", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d22", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d12", "target": "doi_lg_1_d23"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_h12"}]}
\ No newline at end of file
+{"nodes": [{"doi": "doi_lg_1_i", "name": "title_lg_1_i", "author": ["contributor_lg_1_i"], "year": "date_lg_1_i", "journal": "journal_lg_1_i", "group": "input", "citations": 2}, {"doi": "doi_lg_1_d11", "name": "title_lg_1_d11", "author": ["contributor_lg_1_d11"], "year": "date_lg_1_d11", "journal": "journal_lg_1_d11", "group": "depth", "citations": 1}, {"doi": "doi_lg_1_d12", "name": "title_lg_1_d12", "author": ["contributor_lg_1_d12"], "year": "date_lg_1_d12", "journal": "journal_lg_1_d12", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_h11", "name": "title_lg_1_h11", "author": ["contributor_lg_1_h11"], "year": "date_lg_1_h11", "journal": "journal_lg_1_h11", "group": "height", "citations": 2}, {"doi": "doi_lg_1_h12", "name": "title_lg_1_h12", "author": ["contributor_lg_1_h12"], "year": "date_lg_1_h12", "journal": "journal_lg_1_h12", "group": "height", "citations": 2}, {"doi": "doi_lg_1_h21", "name": "title_lg_1_h21", "author": ["contributor_lg_1_h21"], "year": "date_lg_1_h21", "journal": "journal_lg_1_h21", "group": "height", "citations": 0}, {"doi": "doi_lg_1_h22", "name": "title_lg_1_h22", "author": ["contributor_lg_1_h22"], "year": "date_lg_1_h22", "journal": "journal_lg_1_h22", "group": "height", "citations": 0}, {"doi": "doi_lg_1_h23", "name": "title_lg_1_h23", "author": ["contributor_lg_1_h23"], "year": "date_lg_1_h23", "journal": "journal_lg_1_h23", "group": "height", "citations": 0}, {"doi": "doi_lg_1_d21", "name": "title_lg_1_d21", "author": ["contributor_lg_1_d21"], "year": "date_lg_1_d21", "journal": "journal_lg_1_d21", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_d22", "name": "title_lg_1_d22", "author": ["contributor_lg_1_d22"], "year": "date_lg_1_d22", "journal": "journal_lg_1_d22", "group": "depth", "citations": 2}, {"doi": "doi_lg_1_d23", "name": "title_lg_1_d23", "author": ["contributor_lg_1_d23"], "year": "date_lg_1_d23", "journal": "journal_lg_1_d23", "group": "depth", "citations": 2}], "links": [{"source": "doi_lg_1_i", "target": "doi_lg_1_d11"}, {"source": "doi_lg_1_i", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_i"}, {"source": "doi_lg_1_h21", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h11"}, {"source": "doi_lg_1_h22", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_h23", "target": "doi_lg_1_h12"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d11", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d21", "target": "doi_lg_1_d22"}, {"source": "doi_lg_1_d22", "target": "doi_lg_1_d21"}, {"source": "doi_lg_1_d12", "target": "doi_lg_1_d23"}, {"source": "doi_lg_1_h12", "target": "doi_lg_1_d12"}, {"source": "doi_lg_1_h11", "target": "doi_lg_1_h12"}]}
\ No newline at end of file
diff --git a/verarbeitung/Kanten_Vergleich.py b/verarbeitung/update_graph/Kanten_Vergleich.py
similarity index 100%
rename from verarbeitung/Kanten_Vergleich.py
rename to verarbeitung/update_graph/Kanten_Vergleich.py
diff --git a/verarbeitung/Knoten_Vergleich.py b/verarbeitung/update_graph/Knoten_Vergleich.py
similarity index 100%
rename from verarbeitung/Knoten_Vergleich.py
rename to verarbeitung/update_graph/Knoten_Vergleich.py
diff --git a/verarbeitung/update_graph/__init__.py b/verarbeitung/update_graph/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/verarbeitung/connect_new_input.py b/verarbeitung/update_graph/connect_new_input.py
similarity index 79%
rename from verarbeitung/connect_new_input.py
rename to verarbeitung/update_graph/connect_new_input.py
index b9167dc..c61b00a 100644
--- a/verarbeitung/connect_new_input.py
+++ b/verarbeitung/update_graph/connect_new_input.py
@@ -1,67 +1,69 @@
-# -*- coding: utf-8 -*-
-"""
-Functions to update a graph representing citations between multiple ACS/Nature journals
-
-"""
-
-__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
-__email__ = "cis-project2021@zbh.uni-hamburg.de"
-__status__ = "Production"
-#__copyright__ = ""
-#__credits__ = ["", "", "", ""]
-#__license__ = ""
-#__version__ = ""
-#__maintainer__ = ""
-
-import sys  
-from pathlib import Path
-from os import error
-sys.path.append("../")
-
-from import_form_json import input_from_json
-from Processing import initialize_nodes_list, process_citations_rec, process_references_rec, complete_inner_edges, create_graph_structure_references, create_graph_structure_citations
-from json_demo import output_to_json
-
-def connect_old_and_new_input(json_file, new_doi_list, search_height, search_depth, test_var = False):
-    global nodes, edges
-    nodes = []
-    edges = []
-
-    nodes, edges = input_from_json(json_file)
-
-    complete_changed_group_nodes(new_doi_list, search_height, search_depth, test_var)
-    
-    # initializes nodes/edges from input and gets a list with publication objects for citations and references returned
-    references_obj_list, citations_obj_list = initialize_nodes_list(new_doi_list,search_depth, search_height, test_var)
-
-    # function calls to begin recursive processing up to max depth/height
-    process_citations_rec(citations_obj_list, 1, search_height, test_var)
-    process_references_rec(references_obj_list, 1, search_depth, test_var)
-
-    # adds edges between reference group and citation group of known publications
-    complete_inner_edges(test_var)
-
-    # calls a skript to save nodes and edges of graph in .json file
-    output_to_json(nodes,edges, test_var)
-
-    return(nodes, edges)
-
-
-def complete_changed_group_nodes(new_doi_list, search_height_max, search_depth_max, test_var):
-    changed_group_node_citations = []
-    changed_group_node_references = []
-
-    for node in nodes:
-        if (node.group != "input") and (node.doi in new_doi_list):
-            node.group = "input"
-
-            # inserts references as publication objects into list and 
-            # inserts first depth references into nodes/edges if maximum search depth > 0
-            for reference in create_graph_structure_references(node, 0, search_depth_max, test_var):
-                changed_group_node_references.append(reference)
-
-            # inserts citations as publication objects into list and 
-            # inserts first height citations into nodes if maximum search height > 0
-            for citation in create_graph_structure_citations(node, 0, search_height_max, test_var):
-                changed_group_node_citations.append(citation)
-
+# -*- coding: utf-8 -*-
+"""
+Functions to update a graph representing citations between multiple ACS/Nature journals
+
+"""
+
+__authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
+__email__ = "cis-project2021@zbh.uni-hamburg.de"
+__status__ = "Production"
+#__copyright__ = ""
+#__credits__ = ["", "", "", ""]
+#__license__ = ""
+#__version__ = ""
+#__maintainer__ = ""
+
+import sys  
+from pathlib import Path
+from os import error
+sys.path.append("../")
+
+from import_from_json import input_from_json
+from verarbeitung.construct_new_graph.Processing import initialize_nodes_list, complete_inner_edges, create_graph_structure_references, create_graph_structure_citations
+from verarbeitung.construct_new_graph.add_citations_rec import add_citations
+from verarbeitung.construct_new_graph.add_references_rec import add_references
+from verarbeitung.construct_new_graph.export_to_json import output_to_json
+
+def connect_old_and_new_input(json_file, new_doi_list, search_height, search_depth, test_var = False):
+    global nodes, edges
+    nodes = []
+    edges = []
+
+    nodes, edges = input_from_json(json_file)
+
+    complete_changed_group_nodes(new_doi_list, search_height, search_depth, test_var)
+    
+    # initializes nodes/edges from input and gets a list with publication objects for citations and references returned
+    references_obj_list, citations_obj_list = initialize_nodes_list(new_doi_list,search_depth, search_height, test_var)
+
+    # function calls to begin recursive processing up to max depth/height
+    add_citations(nodes, edges, citations_obj_list, 1, search_height, test_var)
+    add_references(nodes, edges, references_obj_list, 1, search_depth, test_var)
+
+    # adds edges between reference group and citation group of known publications
+    complete_inner_edges(test_var)
+
+    # calls a skript to save nodes and edges of graph in .json file
+    output_to_json(nodes,edges, test_var)
+
+    return(nodes, edges)
+
+
+def complete_changed_group_nodes(new_doi_list, search_height_max, search_depth_max, test_var):
+    changed_group_node_citations = []
+    changed_group_node_references = []
+
+    for node in nodes:
+        if (node.group != "input") and (node.doi in new_doi_list):
+            node.group = "input"
+
+            # inserts references as publication objects into list and 
+            # inserts first depth references into nodes/edges if maximum search depth > 0
+            for reference in create_graph_structure_references(node, 0, search_depth_max, test_var):
+                changed_group_node_references.append(reference)
+
+            # inserts citations as publication objects into list and 
+            # inserts first height citations into nodes if maximum search height > 0
+            for citation in create_graph_structure_citations(node, 0, search_height_max, test_var):
+                changed_group_node_citations.append(citation)
+
diff --git a/verarbeitung/import_from_json.py b/verarbeitung/update_graph/import_from_json.py
similarity index 99%
rename from verarbeitung/import_from_json.py
rename to verarbeitung/update_graph/import_from_json.py
index 11e5d82..748e541 100644
--- a/verarbeitung/import_from_json.py
+++ b/verarbeitung/update_graph/import_from_json.py
@@ -16,7 +16,7 @@ __status__ = "Production"
   
 import json
 import sys
-sys.path.append("../")
+sys.path.append("../../")
 
 from input.publication import Publication, Citation
 
diff --git a/verarbeitung/update_graph.py b/verarbeitung/update_graph/update_graph.py
similarity index 95%
rename from verarbeitung/update_graph.py
rename to verarbeitung/update_graph/update_graph.py
index 9853456..0e4f52a 100644
--- a/verarbeitung/update_graph.py
+++ b/verarbeitung/update_graph/update_graph.py
@@ -17,12 +17,12 @@ __status__ = "Production"
 import sys  
 from pathlib import Path
 from os import error
-sys.path.append("../")
+sys.path.append("../../")
 
 from input.publication import Publication
-from get_pub_from_input import get_pub
-from Knoten_Vergleich import doi_listen_vergleichen
-from update_graph_del import delete_nodes_and_edges
+from verarbeitung.get_pub_from_input import get_pub
+from .Knoten_Vergleich import doi_listen_vergleichen
+from .update_graph_del import delete_nodes_and_edges
 
 
 def get_old_input_dois(old_obj_input_list):
diff --git a/verarbeitung/update_graph_del.py b/verarbeitung/update_graph/update_graph_del.py
similarity index 97%
rename from verarbeitung/update_graph_del.py
rename to verarbeitung/update_graph/update_graph_del.py
index 10ca42b..df958d1 100644
--- a/verarbeitung/update_graph_del.py
+++ b/verarbeitung/update_graph/update_graph_del.py
@@ -15,10 +15,9 @@ __status__ = "Production"
 
 import sys  
 from pathlib import Path
-sys.path.append("../")
+sys.path.append("../../")
 
-from input.interface import InputInterface as Input
-from Kanten_Vergleich import back_to_valid_edges
+from .Kanten_Vergleich import back_to_valid_edges
 
 
 def delete_ref_nodes_rec(pub):
-- 
GitLab